Module: Pureapi::Model

Included in:
MongoidModel
Defined in:
lib/pureapi/model.rb

Overview

Implement methods use for handle with table records like

  1. Methods in as_json

Defined Under Namespace

Modules: Pagination

Constant Summary collapse

COMPARISON_OPERATORS =
{
  eq: '=',
  ne: '<>',
  gt: '>',
  lt: '<',
  gte: '>=',
  lte: '<=',
  like: 'LIKE',
  nlike: 'NOT LIKE',
  regex: 'REGEXP',
}
NULL_OPERATORS =
{
  'null' => nil,
  'blank' => [nil, ''],
}
LOGICAL_OPERATORS =
{
  in: 'IN'
}
COMPARISON_OPERATORS_INVERT =
COMPARISON_OPERATORS.invert
LOGICAL_OPERATORS_INVERT =
LOGICAL_OPERATORS.invert
NULL_OPERATOR_KEYS =
NULL_OPERATORS.keys

Instance Method Summary collapse

Instance Method Details

#advanced_search(advanced_params) ⇒ Object

return criterias.where({}) end



66
67
68
# File 'lib/pureapi/model.rb', line 66

def advanced_search(advanced_params)
  return self.where({})
end

#asjson_fields ⇒ Object

Define default fields use for asjson on includes E.g { channel: [:id, :code, :name], include: Channel.asjson_fields, course: [:id, :code, :name] }



148
149
150
# File 'lib/pureapi/model.rb', line 148

def asjson_fields
  {}
end

#compcond_columns ⇒ Object

Define array of columns use for comparison conditions E.g [:id, :name, :channel_course_id, :status]



126
127
128
# File 'lib/pureapi/model.rb', line 126

def compcond_columns
  [:id]
end

#compconds(params = []) ⇒ Object

Comparsion operator conditions method Array params contains hash = o, v :f is column name :o is comparsion operator :v is value



93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/pureapi/model.rb', line 93

def compconds(params = [])
  criterias = self

  params.each do |param|
    if param[:o] == COMPARISON_OPERATORS[:eq]
      criterias = criterias.where(param[:f] => param[:v])
    else
      criterias = criterias.where("`#{self.table_name}`.`#{param[:f]}` #{param[:o]} ?", param[:v])
    end
  end

  return criterias.where({})
end

#default_includes ⇒ Object

Define default includes of active records E.g [:channel, :course]



138
139
140
# File 'lib/pureapi/model.rb', line 138

def default_includes
  []
end

#default_onlyasjsons ⇒ Object

Define default fields use for as_jsons



157
158
159
# File 'lib/pureapi/model.rb', line 157

def default_onlyasjsons
  self.column_names.map(&:to_sym)
end

#full_search(params, advanced_params) ⇒ Object

Provide search function 2 type: normal and advanced Required setup advanced_search methods

ActionController::Parameters _params, contain fields use .where() ActionController::Parameters _advanced_params, detail in advanced_search method Or Hash _params, contain fields use .where() Hash _advanced_params, detail in advanced_search method



78
79
80
81
82
83
84
85
86
# File 'lib/pureapi/model.rb', line 78

def full_search(params, advanced_params)
  _params = params.delete_if { |k, v| v.blank? }

  criterias = self
  criterias = _params.blank? ? criterias : criterias.where(_params.to_h)
  criterias = advanced_params.blank? ? criterias : criterias.advanced_search(advanced_params.to_h)

  return criterias.where({})
end

#incond_columns ⇒ Object

Define array of columns use for in conditions (logical) E.g [:id, :name, :channel_course_id, :status]



132
133
134
# File 'lib/pureapi/model.rb', line 132

def incond_columns
  [:id]
end

#json_method_includes ⇒ Object



152
153
154
# File 'lib/pureapi/model.rb', line 152

def json_method_includes
  {}
end

#json_methods ⇒ Object

return default array contains methods for as_json Eg. [:status_name, :path_detail, :restrictions, :channel_course_code]



39
40
41
# File 'lib/pureapi/model.rb', line 39

def json_methods
  []
end

#logicconds(params = []) ⇒ Object

Comparsion operator conditions method Array params contains hash = o, v :f is column name :o is comparsion operator :v is value



112
113
114
115
116
117
118
119
120
121
122
# File 'lib/pureapi/model.rb', line 112

def logicconds(params = [])
  criterias = self

  params.each do |param|
    if param[:o] == LOGICAL_OPERATORS[:in]
      criterias = criterias.where(param[:f] => param[:v])
    end
  end

  return criterias.where({})
end

#paginate(params) ⇒ Object

Require params is hash contain Integer :page, :per_page



162
163
164
# File 'lib/pureapi/model.rb', line 162

def paginate(params)
  self.limit(params[:per_page]).offset((params[:page] - 1) * params[:per_page])
end