class Wallaby::ModelServicer

This is the base servicer class to provider data source related operations for given/associated model. In general, it works together with {#authorizer} to ensure that all operations are legitmate.

For best practice, please create an application servicer class (see example) to better control the functions shared between different model servicers. @example Create an application class for Admin Interface usage

class Admin::ApplicationServicer < Wallaby::ModelServicer
  base_class!
end

Attributes

authorizer[R]

@!attribute [r] authorizer @return [Wallaby::ModelAuthorizer] @since wallaby-5.2.0

model_class[R]

@!attribute [r] model_class @return [Class]

model_decorator[R]

@!attribute [r] model_decorator @return [Wallaby::ModelDecorator] @since wallaby-5.2.0

provider[R]

@!attribute [r] provider @return [Wallaby::ModelServiceProvider] the instance that does the job @since wallaby-5.2.0

Public Class Methods

new(model_class, authorizer, model_decorator = nil) click to toggle source

@param model_class [Class] @param authorizer [Wallaby::ModelAuthorizer] @param model_decorator [Wallaby::ModelDecorator] @raise [ArgumentError] if model_class is blank

# File lib/servicers/wallaby/model_servicer.rb, line 46
def initialize(model_class, authorizer, model_decorator = nil)
  @model_class = model_class || self.class.model_class
  raise ArgumentError, 'Please provide a `model_class`.' unless @model_class

  @model_decorator = model_decorator || Map.model_decorator_map(model_class)
  @authorizer = authorizer
  @provider = Map.service_provider_map(@model_class).new(@model_class, @model_decorator)
end

Public Instance Methods

collection(params) click to toggle source

@note This is a template method that can be overridden by subclasses. Return a collection by querying the datasource (e.g. database, REST API). @param params [ActionController::Parameters, Hash] @return [Enumerable] list of resources

# File lib/servicers/wallaby/model_servicer.rb, line 68
def collection(params)
  provider.collection params, authorizer
end
create(resource, params) click to toggle source

@note This is a template method that can be overridden by subclasses. To create a resource. @param resource [Object] @param params [ActionController::Parameters] @return [Object] created resource

# File lib/servicers/wallaby/model_servicer.rb, line 102
def create(resource, params)
  provider.create resource, params, authorizer
end
destroy(resource, params) click to toggle source

@note This is a template method that can be overridden by subclasses. To delete a resource. @param resource [Object] @param params [ActionController::Parameters] @return [Object] resource

# File lib/servicers/wallaby/model_servicer.rb, line 120
def destroy(resource, params)
  provider.destroy resource, params, authorizer
end
find(id, params) click to toggle source

@note This is a template method that can be overridden by subclasses. To find a resource. @param id [Object] @param params [ActionController::Parameters] @return [Object] found resource

# File lib/servicers/wallaby/model_servicer.rb, line 93
def find(id, params)
  provider.find id, params, authorizer
end
new(params) click to toggle source

@note This is a template method that can be overridden by subclasses. Initialize an instance of the model class. @param params [ActionController::Parameters] @return [Object] initialized resource

# File lib/servicers/wallaby/model_servicer.rb, line 84
def new(params)
  provider.new params, authorizer
end
permit(params, action = nil) click to toggle source

@note This is a template method that can be overridden by subclasses. Whitelist parameters for mass assignment. @param params [ActionController::Parameters, Hash] @param action [String, Symbol, nil] @return [ActionController::Parameters] permitted params

# File lib/servicers/wallaby/model_servicer.rb, line 60
def permit(params, action = nil)
  provider.permit params, action, authorizer
end
update(resource, params) click to toggle source

@note This is a template method that can be overridden by subclasses. To update a resource. @param resource [Object] @param params [ActionController::Parameters] @return [Object] resource

# File lib/servicers/wallaby/model_servicer.rb, line 111
def update(resource, params)
  provider.update resource, params, authorizer
end