lib/alba/association.rb in alba-0.13.1 vs lib/alba/association.rb in alba-1.0.0

- old
+ new

@@ -1,26 +1,46 @@ module Alba # Base class for `One` and `Many` # Child class should implement `to_hash` method class Association + attr_reader :object + # @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 - def initialize(name:, condition: nil, resource: nil, &block) + def initialize(name:, condition: nil, resource: nil, nesting: nil, &block) @name = name @condition = condition @block = block - @resource = resource || resource_class - raise ArgumentError, 'resource or block is required' if @resource.nil? && @block.nil? + @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 end # @abstract def to_hash :not_implemented end private + + def constantize(resource) + case resource # rubocop:disable Style/MissingElse + when Class + resource + when Symbol, String + Object.const_get(resource) + end + end def resource_class klass = Class.new klass.include(Alba::Resource) klass.class_eval(&@block)