module Pureapi::Model

Implement methods use for handle with table records like

  1. Methods in as_json

2.

Constants

COMPARISON_OPERATORS
COMPARISON_OPERATORS_INVERT
LOGICAL_OPERATORS
LOGICAL_OPERATORS_INVERT
NULL_OPERATORS
NULL_OPERATOR_KEYS
PERMIT_OPERATORS
REFLECT_OPERATORS

Public Instance Methods

_json_fields(nested_entities = []) click to toggle source

Return all available values around model

# File lib/pureapi/model.rb, line 215
def _json_fields nested_entities = []
  nested_entities << self

  {
    only: default_onlyasjsons,
    methods: json_methods,
    include: get_includes(nested_entities),
  }
end
_search_fields() click to toggle source

Return all fields can use for search of model

# File lib/pureapi/model.rb, line 267
def _search_fields
  _results = {only: compcond_columns, include: {}}

  of_entities.each do |entity, _c|
    _results[:include][entity] = _c._search_fields
  end

  _results
end
as_json_fields() click to toggle source

Static of _json_fields

# File lib/pureapi/model.rb, line 226
def as_json_fields
  @as_json_fields ||= self._json_fields
end
asjson_fields() click to toggle source

Define default fields use for asjson on includes E.g {

channel: {only: [:id, :code, :name], include: Channel.asjson_fields},
course: {only: [:id, :code, :name]}

}

# File lib/pureapi/model.rb, line 175
def asjson_fields
  {}
end
compcond_columns() click to toggle source

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

# File lib/pureapi/model.rb, line 153
def compcond_columns
  [:id]
end
compcond_fields() click to toggle source

Static of _search_fields

# File lib/pureapi/model.rb, line 278
def compcond_fields
  @compcond_fields ||= self._search_fields
end
compcond_match(str) click to toggle source

Return matchs of key with compcond_regexp || compcond_regexp2nd

# File lib/pureapi/model.rb, line 253
def compcond_match(str)
  _matchs = compcond_regexp.match(str) || compcond_regexp2nd.match(str)

  if _matchs
    {
      f: _matchs[1],
      o: _matchs[2] ? _matchs[2].to_sym : :eq,
    }
  else
    nil
  end
end
compcond_regexp() click to toggle source

Full compcond regexp for key Example:

>> id.gte
# File lib/pureapi/model.rb, line 241
def compcond_regexp
  @compcond_regexp ||= /^(#{compcond_columns.join("|")})\.(#{REFLECT_OPERATORS.keys.join("|")})$/
end
compcond_regexp2nd() click to toggle source

Compcond regexp for key Example:

>> id
# File lib/pureapi/model.rb, line 248
def compcond_regexp2nd
  @compcond_regexp2nd ||= /^(#{compcond_columns.join("|")})$/
end
compconds(params = []) click to toggle source

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

# File lib/pureapi/model.rb, line 120
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() click to toggle source

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

# File lib/pureapi/model.rb, line 165
def default_includes
  []
end
default_onlyasjsons() click to toggle source

Define default fields use for as_jsons

# File lib/pureapi/model.rb, line 184
def default_onlyasjsons
  self.column_names.map(&:to_sym)
end
get_includes(nested_entities) click to toggle source

Get all includes of relations in model

# File lib/pureapi/model.rb, line 201
def get_includes nested_entities
  _results = {}
  _entities = include_entities

  (_entities.keys - nested_entities).each do |_c|
    _entities[_c].each do |_r|
      _results[_r] = _c._json_fields(nested_entities)
    end
  end

  _results
end
include_entities() click to toggle source

Define relation entities can be included Example:

>> {User => [:manager], Department => [:department]}
# File lib/pureapi/model.rb, line 191
def include_entities
  {}
end
incond_columns() click to toggle source

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

# File lib/pureapi/model.rb, line 159
def incond_columns
  [:id]
end
json_method_includes() click to toggle source
# File lib/pureapi/model.rb, line 179
def json_method_includes
  {}
end
json_methods() click to toggle source

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

# File lib/pureapi/model.rb, line 66
def json_methods
  []
end
logicconds(params = []) click to toggle source

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

# File lib/pureapi/model.rb, line 139
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
of_entities() click to toggle source
Begin methods for feature compconds filter

Return list of all belongs_to => class_name Example:

>> {ad: Ad, lead_level: LeadLevel, course: Course}
# File lib/pureapi/model.rb, line 234
def of_entities
  {}
end
paginate(params) click to toggle source

Require params is hash contain Integer :page, :per_page

# File lib/pureapi/model.rb, line 196
def paginate(params)
  self.limit(params[:per_page]).offset((params[:page] - 1) * params[:per_page])
end