Module: Effective::CrudController

Extended by:
ActiveSupport::Concern
Includes:
Actions, Paths, PermittedParams, Respond, Save, Submits
Included in:
WizardController
Defined in:
app/controllers/concerns/effective/crud_controller.rb,
app/controllers/concerns/effective/crud_controller/dsl.rb,
app/controllers/concerns/effective/crud_controller/save.rb,
app/controllers/concerns/effective/crud_controller/paths.rb,
app/controllers/concerns/effective/crud_controller/actions.rb,
app/controllers/concerns/effective/crud_controller/respond.rb,
app/controllers/concerns/effective/crud_controller/submits.rb,
app/controllers/concerns/effective/crud_controller/permitted_params.rb

Defined Under Namespace

Modules: Actions, ClassMethods, Dsl, Paths, PermittedParams, Respond, Save, Submits

Constant Summary

Constants included from PermittedParams

PermittedParams::BLACKLIST

Instance Method Summary collapse

Methods included from Submits

#_insert_button, #_insert_on, #_insert_submit, #buttons, #ons, #submits

Methods included from Save

#commit_action, #duplicate_resource, #notify_exception, #reload_resource, #resource_flash, #save_resource

Methods included from Respond

#respond_with_error, #respond_with_success

Methods included from PermittedParams

#resource_active_model_permitted_params, #resource_admin_permitted_params, #resource_permitted_params

Methods included from Paths

#referer_redirect_path, #resource_action_path, #resource_destroy_path, #resource_duplicate_path, #resource_edit_path, #resource_index_path, #resource_new_path, #resource_redirect_path, #resource_show_path, #specific_redirect_path?

Methods included from Actions

#collection_action, #create, #destroy, #edit, #index, #member_action, #new, #show, #update

Instance Method Details

#action_missing(action, *args, &block) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/controllers/concerns/effective/crud_controller.rb', line 61

def action_missing(action, *args, &block)
  effective_resource = self.effective_resource(safe: true)
  return super if effective_resource.blank?

  action = action.to_sym

  if effective_resource.member_actions.include?(action)
    return member_action(action)
  end

  if effective_resource.collection_actions.include?(action)
    return collection_action(action)
  end

  params[:id].present? ? member_action(action) : collection_action(action)
end

#effective_resource(safe: false) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'app/controllers/concerns/effective/crud_controller.rb', line 41

def effective_resource(safe: false)
  @_effective_resource ||= begin
    relation = instance_exec(&resource_scope_relation) if respond_to?(:resource_scope_relation)

    if respond_to?(:resource_scope_relation)
      unless relation.kind_of?(ActiveRecord::Relation) || (relation.kind_of?(Class) && relation.ancestors.include?(ActiveModel::Model))
        raise('resource_scope must return an ActiveRecord::Relation or class including ActiveModel::Model')
      end
    end

    resource = Effective::Resource.new(controller_path, relation: relation)

    unless resource.relation.kind_of?(ActiveRecord::Relation) || resource.active_model?
      raise("unable to build resource_scope for #{resource.klass || 'unknown klass'}. Please name your controller to match an existing model, or manually define a resource_scope.") unless safe
    else
      resource
    end
  end
end

#resourceObject



25
26
27
# File 'app/controllers/concerns/effective/crud_controller.rb', line 25

def resource # @thing
  instance_variable_get("@#{resource_name}")
end

#resource=(instance) ⇒ Object



29
30
31
# File 'app/controllers/concerns/effective/crud_controller.rb', line 29

def resource=(instance)
  instance_variable_set("@#{resource_name}", instance)
end

#resource_klassObject

Thing



78
79
80
# File 'app/controllers/concerns/effective/crud_controller.rb', line 78

def resource_klass # Thing
  effective_resource.klass
end

#resourcesObject



33
34
35
# File 'app/controllers/concerns/effective/crud_controller.rb', line 33

def resources # @things
  send(:instance_variable_get, "@#{resource_plural_name}")
end

#resources=(instance) ⇒ Object



37
38
39
# File 'app/controllers/concerns/effective/crud_controller.rb', line 37

def resources=(instance)
  send(:instance_variable_set, "@#{resource_plural_name}", instance)
end