Sha256: 07897c18d1a08b0fb9c0da3c5be8315d93fdb2259e550c6449d4766e3baf419b

Contents?: true

Size: 1.53 KB

Versions: 8

Compression:

Stored size: 1.53 KB

Contents

module JsonApiClient
  module Helpers
    module Associable
      extend ActiveSupport::Concern

      included do
        class_attribute :associations
        self.associations = []

        include Associations::BelongsTo
        include Associations::HasMany
        include Associations::HasOne

        initializer :load_associations
      end

      module ClassMethods
        def belongs_to_associations
          associations.select{|association| association.is_a?(Associations::BelongsTo::Association) }
        end

        def prefix_params
          belongs_to_associations.map(&:param)
        end

        def prefix_path
          belongs_to_associations.map(&:to_prefix_path).join("/")
        end

        def path(params = nil)
          parts = [table_name]
          if params
            slurp = params.symbolize_keys.slice(*prefix_params)
            prefix_params.each do |param|
              params.delete(param)
            end
            parts.unshift(prefix_path % slurp)
          else
            parts.unshift(prefix_path)
          end
          parts.reject!{|part| part == "" }
          File.join(*parts)
        rescue KeyError
          raise ArgumentError, "Not all prefix parameters specified"
        end
      end

      protected

      def load_associations(params)
        associations.each do |association|
          if params.has_key?(association.attr_name.to_s)
            set_attribute(association.attr_name, association.parse(params[association.attr_name.to_s]))
          end
        end
      end

    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
json_api_client-0.9.6 lib/json_api_client/helpers/associable.rb
json_api_client-0.9.5 lib/json_api_client/helpers/associable.rb
json_api_client-0.9.4 lib/json_api_client/helpers/associable.rb
json_api_client-0.9.3 lib/json_api_client/helpers/associable.rb
json_api_client-0.9.2 lib/json_api_client/helpers/associable.rb
json_api_client-0.9.0 lib/json_api_client/helpers/associable.rb
json_api_client-0.8.1 lib/json_api_client/helpers/associable.rb
json_api_client-0.8.0 lib/json_api_client/helpers/associable.rb