Class: JSONAPI::ShowRelatedResourcesOperation

Inherits:
Operation
  • Object
show all
Defined in:
lib/jsonapi/operation.rb

Instance Attribute Summary collapse

Attributes inherited from Operation

#options, #resource_klass, #transactional

Instance Method Summary collapse

Constructor Details

#initialize(resource_klass, options = {}) ⇒ ShowRelatedResourcesOperation

Returns a new instance of ShowRelatedResourcesOperation.



141
142
143
144
145
146
147
148
149
150
# File 'lib/jsonapi/operation.rb', line 141

def initialize(resource_klass, options = {})
  @source_klass = options.fetch(:source_klass)
  @source_id = options.fetch(:source_id)
  @association_type = options.fetch(:association_type)
  @filters = options[:filters]
  @sort_criteria = options[:sort_criteria]
  @paginator = options[:paginator]
  @transactional = false
  super(resource_klass, options)
end

Instance Attribute Details

#association_typeObject (readonly)

Returns the value of attribute association_type.



139
140
141
# File 'lib/jsonapi/operation.rb', line 139

def association_type
  @association_type
end

#filtersObject (readonly)

Returns the value of attribute filters.



139
140
141
# File 'lib/jsonapi/operation.rb', line 139

def filters
  @filters
end

#paginatorObject (readonly)

Returns the value of attribute paginator.



139
140
141
# File 'lib/jsonapi/operation.rb', line 139

def paginator
  @paginator
end

#sort_criteriaObject (readonly)

Returns the value of attribute sort_criteria.



139
140
141
# File 'lib/jsonapi/operation.rb', line 139

def sort_criteria
  @sort_criteria
end

#source_idObject (readonly)

Returns the value of attribute source_id.



139
140
141
# File 'lib/jsonapi/operation.rb', line 139

def source_id
  @source_id
end

#source_klassObject (readonly)

Returns the value of attribute source_klass.



139
140
141
# File 'lib/jsonapi/operation.rb', line 139

def source_klass
  @source_klass
end

Instance Method Details

#applyObject



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/jsonapi/operation.rb', line 152

def apply
  source_resource = @source_klass.find_by_key(@source_id, context: @context)

  related_resource = source_resource.send(@association_type,
                                          {
                                            filters:  @filters,
                                            sort_criteria: @sort_criteria,
                                            paginator: @paginator
                                          })

  return JSONAPI::ResourceOperationResult.new(:ok, related_resource)

rescue JSONAPI::Exceptions::Error => e
  return JSONAPI::ErrorsOperationResult.new(e.errors[0].code, e.errors)
end