class Wallaby::Her::ModelServiceProvider

Model service provider for HER ORM

Public Instance Methods

collection(_params, _authorizer) click to toggle source

No general practices of how ordering and searching can be done in Her. Therefore, it will just return all

NOTE: pagination free here. Since somewhere might need the collection without any pagination @see Wallaby::ModelServiceProvider#collection @param _params [ActionController::Parameters] @param _authorizer [Ability] for now @return [ActiveRecord::Relation]

# File lib/adapters/wallaby/her/model_service_provider.rb, line 26
def collection(_params, _authorizer)
  @model_class.all
end
create(resource, params, authorizer) click to toggle source

@see Wallaby::ModelServiceProvider#create @param resource [Object] @param params [ActionController::Parameters]

# File lib/adapters/wallaby/her/model_service_provider.rb, line 58
def create(resource, params, authorizer)
  save __callee__, resource, params, authorizer
end
destroy(resource, _params, _authorizer) click to toggle source

@see Wallaby::ModelServiceProvider#destroy @param resource [Object] @param _params [ActionController::Parameters]

# File lib/adapters/wallaby/her/model_service_provider.rb, line 72
def destroy(resource, _params, _authorizer)
  resource.destroy
end
find(id, _params, _authorizer) click to toggle source

@see Wallaby::ModelServiceProvider#find @param id [String]

# File lib/adapters/wallaby/her/model_service_provider.rb, line 48
def find(id, _params, _authorizer)
  resource = @model_class.find id
  raise ResourceNotFound, id unless resource

  resource
end
new(_params, _authorizer) click to toggle source

@see Wallaby::ModelServiceProvider#new

# File lib/adapters/wallaby/her/model_service_provider.rb, line 42
def new(_params, _authorizer)
  @model_class.new
end
paginate(query, _params) click to toggle source

No general practices of how pagination can be done in Her. Therefore, it will just return all

@see Wallaby::ModelServiceProvider#paginate @param query [ActiveRecord::Relation] @param _params [ActionController::Parameters] @return [ActiveRecord::Relation] paginated query

# File lib/adapters/wallaby/her/model_service_provider.rb, line 37
def paginate(query, _params)
  query.all
end
permit(params, action, authorizer) click to toggle source

Only the general fields will be permitted. It's less possible to guess what nested attributes should be permitted. @see Wallaby::ModelServiceProvider#permit @param params [ActionController::Parameters] @return [ActionController::Parameters] whitelisted parameters

# File lib/adapters/wallaby/her/model_service_provider.rb, line 12
def permit(params, action, authorizer)
  authorized_fields = authorizer.permit_params action, @model_class
  params.require(param_key).permit(authorized_fields || permitted_fields)
end
update(resource, params, authorizer) click to toggle source

@see Wallaby::ModelServiceProvider#update @param resource [Object] @param params [ActionController::Parameters]

# File lib/adapters/wallaby/her/model_service_provider.rb, line 65
def update(resource, params, authorizer)
  save __callee__, resource, params, authorizer
end

Protected Instance Methods

ensure_attributes_for(authorizer, action, resource) click to toggle source

To make sure that the record can be updated with the values that are allowed to. @param authorizer [Object] @param action [String] @param resource [Object]

# File lib/adapters/wallaby/her/model_service_provider.rb, line 99
def ensure_attributes_for(authorizer, action, resource)
  return if authorizer.blank?

  restricted_conditions = authorizer.attributes_for action, resource
  resource.assign_attributes restricted_conditions
end
param_key() click to toggle source

@return [String] the params key

# File lib/adapters/wallaby/her/model_service_provider.rb, line 107
def param_key
  @model_class.model_name.param_key
end
permitted_fields() click to toggle source

The list of attributes to whitelist. For now, only general fields can be whitelisted. @return [Array]

# File lib/adapters/wallaby/her/model_service_provider.rb, line 114
def permitted_fields
  @permitted_fields ||=
    @model_decorator.fields.reject do |_field_name, metadata|
      metadata[:is_association]
    end.keys
end
save(action, resource, params, authorizer) click to toggle source

Save the record @param action [String] `create`, `update` @param resource [Object] @param params [ActionController::Parameters] @param authorizer [Object] @return resource itself

# File lib/adapters/wallaby/her/model_service_provider.rb, line 84
def save(action, resource, params, authorizer)
  resource.assign_attributes params.to_h
  ensure_attributes_for authorizer, action, resource
  resource.save if resource.valid?
  resource
rescue ActionController::UnfilteredParameters => e
  resource.errors.add :base, e.message
  resource
end