Class: Apiphobic::Resource::Model

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/apiphobic/resource/model.rb

Direct Known Subclasses

Collection

Constant Summary collapse

DEFAULT_PROCESSORS =
%w{including}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource:, id:, parameters:, **options) ⇒ Model

Returns a new instance of Model.



27
28
29
30
31
32
# File 'lib/apiphobic/resource/model.rb', line 27

def initialize(resource:, id:, parameters:, **options)
  self.id         = id
  self.resource   = resource
  self.parameters = parameters.dup
  self.processors = options.fetch(:processors, self.class::DEFAULT_PROCESSORS)
end

Instance Attribute Details

#idObject

Returns the value of attribute id.



18
19
20
# File 'lib/apiphobic/resource/model.rb', line 18

def id
  @id
end

#parametersObject

Returns the value of attribute parameters.



18
19
20
# File 'lib/apiphobic/resource/model.rb', line 18

def parameters
  @parameters
end

#processorsObject

Returns the value of attribute processors.



21
22
23
# File 'lib/apiphobic/resource/model.rb', line 21

def processors
  @processors
end

#resourceObject

Returns the value of attribute resource.



18
19
20
# File 'lib/apiphobic/resource/model.rb', line 18

def resource
  @resource
end

Instance Method Details

#assign_attributes(attrs) ⇒ Object



55
56
57
58
59
# File 'lib/apiphobic/resource/model.rb', line 55

def assign_attributes(attrs)
  processed.assign_attributes(attrs)

  processed
end

#metaObject



49
50
51
52
53
# File 'lib/apiphobic/resource/model.rb', line 49

def meta
  @meta ||= processors.inject({}) do |, processor|
    .merge processor.meta(processed, parameters)
  end
end

#processedObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/apiphobic/resource/model.rb', line 34

def processed
  @processed \
    ||= begin
          processed = processors.inject(resource) do |processed_resource, processor|
            processor.processed(processed_resource, parameters)
          end

          if instance_of?(::Apiphobic::Resource::Collection)
            processed
          else
            processed.find_by(id: id) || processed.new
          end
        end
end

#saveObject



67
68
69
70
71
# File 'lib/apiphobic/resource/model.rb', line 67

def save
  processed.save

  processed
end

#save!Object



61
62
63
64
65
# File 'lib/apiphobic/resource/model.rb', line 61

def save!
  processed.save!

  processed
end