Class: Character::ApiController

Inherits:
ActionController::Base
  • Object
show all
Includes:
AuthConcern, InstanceConcern, JsonObjectConcern, ModelClassConcern, ParamsConcern, TemplatesConcern
Defined in:
app/controllers/character/api_controller.rb

Overview

Author: Alexander Kravets Slate, 2014

Instance Method Summary collapse

Methods included from JsonObjectConcern

#build_json_object, #object_fields

Methods included from TemplatesConcern

#form_action_url, #form_template

Methods included from ModelClassConcern

#form_attributes_namespace, #model_class, #model_slug

Instance Method Details

#createObject



106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'app/controllers/character/api_controller.rb', line 106

def create
  @object = model_class.new( permit_params(form_attributes_namespace) )
  @form_action_url = form_action_url(@object)

  if character_instance.before_save
    instance_exec &character_instance.before_save
  end

  if @object.save
    render json: build_json_object(@object)
  else
    render form_template
  end
end

#destroyObject



157
158
159
160
161
# File 'app/controllers/character/api_controller.rb', line 157

def destroy
  @object = model_class.find(params[:id])
  @object.destroy
  render json: nil, status: 204
end

#editObject



99
100
101
102
103
# File 'app/controllers/character/api_controller.rb', line 99

def edit
  @object = model_class.find(params[:id])
  @form_action_url = form_action_url(@object)
  render form_template
end

#indexObject

Actions -----------------------------------------------



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'app/controllers/character/api_controller.rb', line 17

def index
  order_by     = params[:o]
  search_query = params[:q]  || ''
  page         = params[:p]  || 1
  per_page     = params[:pp] || 25

  @objects = model_class.unscoped.all

  # filter
  scopes = params.keys.select { |s| s.starts_with? 'where__' }
  scopes.each do |s|
    field_name = s.gsub('where__', '')

    filters = {}
    filters_list = params[s].split(',')

    if params[s].include? ':'
      params[s].split(',').each do |f|
        filters[ f.split(':').first ] = f.split(':').last
      end

      @objects = @objects.where( field_name => filters )
    else
      @objects = @objects.where( field_name => params[s] )
    end
  end



  # search
  if not search_query.empty?
    @objects = @objects.full_text_search(search_query, match: :all)
  end



  # order
  # format: &order_by=field_name:direction,field_name2:direction,...&
  if order_by
    filters = {}
    order_by.split(',').each do |filter|
      filter_options = filter.split(':')
      filters[filter_options.first] = filter_options.last
      object_fields.append(filter_options.first)
    end

    @objects = @objects.order_by(filters)
  end


  # callback
  if character_instance.before_index
    instance_exec &character_instance.before_index
  end



  # pagination
  @objects = @objects.page(page).per(per_page)



  # result
  item_objects = @objects.map { |o| build_json_object(o) }

  render json: item_objects
end

#newObject



92
93
94
95
96
# File 'app/controllers/character/api_controller.rb', line 92

def new
  @object = model_class.new
  @form_action_url = form_action_url(@object)
  render form_template
end

#patchObject

process backbone model patch save



123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'app/controllers/character/api_controller.rb', line 123

def patch
  @object = model_class.find(params[:id])
  @object.assign_attributes(permit_params)

  if character_instance.before_save
    instance_exec &character_instance.before_save
  end

  if @object.save
    render json: :ok
  else
    render json: @object.errors
  end
end

#showObject



86
87
88
89
# File 'app/controllers/character/api_controller.rb', line 86

def show
  @object = model_class.find(params[:id])
  render json: @object
end

#updateObject

process serialized form, object attributes are in the namespace



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'app/controllers/character/api_controller.rb', line 140

def update
  @object = model_class.find(params[:id])
  @object.assign_attributes( permit_params(form_attributes_namespace) )
  @form_action_url = form_action_url(@object)

  if character_instance.before_save
    instance_exec &character_instance.before_save
  end

  if @object.save
    render json: build_json_object(@object)
  else
    render form_template
  end
end