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