lib/alba/association.rb in alba-1.2.0 vs lib/alba/association.rb in alba-1.3.0

- old
+ new

@@ -1,10 +1,10 @@ module Alba # Base class for `One` and `Many` # Child class should implement `to_hash` method class Association - attr_reader :object + attr_reader :object, :name # @param name [Symbol] name of the method to fetch association # @param condition [Proc] a proc filtering data # @param resource [Class<Alba::Resource>] a resource class for the association # @param block [Block] used to define resource when resource arg is absent @@ -13,18 +13,11 @@ @condition = condition @block = block @resource = resource return if @resource - if @block - @resource = resource_class - elsif Alba.inferring - const_parent = nesting.nil? ? Object : Object.const_get(nesting) - @resource = const_parent.const_get("#{ActiveSupport::Inflector.classify(@name)}Resource") - else - raise ArgumentError, 'When Alba.inferring is false, either resource or block is required' - end + assign_resource(nesting) end private def constantize(resource) @@ -34,13 +27,28 @@ when Symbol, String Object.const_get(resource) end end + def assign_resource(nesting) + @resource = if @block + resource_class + elsif Alba.inferring + resource_class_with_nesting(nesting) + else + raise ArgumentError, 'When Alba.inferring is false, either resource or block is required' + end + end + def resource_class klass = Class.new klass.include(Alba::Resource) klass.class_eval(&@block) klass + end + + def resource_class_with_nesting(nesting) + const_parent = nesting.nil? ? Object : Object.const_get(nesting) + const_parent.const_get("#{ActiveSupport::Inflector.classify(@name)}Resource") end end end