Sha256: 9ace6beaa9d18715bb98d85f473f7470da1d1f38451326514f4deaa7bac472ec
Contents?: true
Size: 1.73 KB
Versions: 3
Compression:
Stored size: 1.73 KB
Contents
# frozen_string_literal: true module AbsorbApi module Relations extend ActiveSupport::Concern module ClassMethods def with_many(rel_name, klass = nil) klass ||= rel_name klass = klass.to_s define_has_many_method(rel_name, klass) define_has_many_finder_method(rel_name, klass) define_has_many_ids_method(rel_name) end def with_one(rel_name, klass = nil) klass ||= rel_name klass = klass.to_s define_method rel_name.to_s do path = "#{klass.pluralize}/" + send(rel_name.to_s + "_id") response = get(path, ignore_resource_not_found: true) return if response.blank? "AbsorbApi::#{klass.classify}".constantize.new(response) end end private def define_has_many_method(rel_name, klass) define_method rel_name.to_s do |**conditions| get( "#{self.class.to_s.demodulize.pluralize}/#{id}/#{rel_name}", conditions.merge(ignore_resource_not_found: true) ).map do |attrs| "AbsorbApi::#{klass.classify}".constantize.new(attrs) end.compact end end def define_has_many_finder_method(rel_name, klass) define_method "find_#{rel_name.to_s.singularize}" do |child_id| response = get( "#{self.class.to_s.demodulize.pluralize}/#{id}/"\ "#{rel_name}/#{child_id}" ) return if response.blank? "AbsorbApi::#{klass.classify}".constantize.new(response) end end def define_has_many_ids_method(rel_name) define_method "#{rel_name.to_s.singularize}_ids" do send(rel_name.to_s).map(&:id) end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
absorb_api-0.9.3 | lib/absorb_api/relations.rb |
absorb_api-0.9.2 | lib/absorb_api/relations.rb |
absorb_api-0.9.1 | lib/absorb_api/relations.rb |