Sha256: 8d24935afa93215f19f82ea46e78b9f1eda85cc33ee1a49934d67a442fe854c6

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

require_relative 'request/fields'
require_relative 'request/filters'
require_relative 'request/includes'
require_relative 'request/sorting'

module Dayman
  class Request
    include Fields
    include Filters
    include Includes
    include Sorting

    attr_reader :resource,
      :fieldsets,
      :filters,
      :included_resources,
      :sort_fields

    def initialize(resource)
      @resource = resource

      @fieldsets = {}
      @filters = {}
      @included_resources = []
      @sort_fields = []
    end

    # http://jsonapi.org/format/#fetching-resources
    def all
      response = connection.get(resource.path, query_parameters)
      Parsers::CollectionParser.new(resource: resource, response: response.body).parse
    end

    # http://jsonapi.org/format/#fetching-resources
    def find(id)
      response = connection.get([resource.path, id].join('/'))
      Parsers::MemberParser.new(resource: resource, response: response.body).parse
    end

    private

    def connection
      Faraday.new(url: resource.site)
    end

    def query_parameters
      params = {}

      params.merge!(filters_to_query_parameters)
      params.merge!(included_resources_to_query_parameters)
      params.merge!(fieldsets_to_query_parameters)
      params.merge!(sort_fields_to_query_parameters)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dayman-0.1.1 lib/dayman/request.rb