Module: ActiveRecordRelationExtension

Defined in:
lib/baseapi/active_record/relation_extension.rb

Instance Method Summary collapse

Instance Method Details

#filtering!(params) ⇒ Object

column search



5
6
7
8
9
10
11
12
13
14
15
16
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
# File 'lib/baseapi/active_record/relation_extension.rb', line 5

def filtering!(params)
  models = self
  params.each do |key, value|
    if key.present? and value.present?
      # this model search
      if column_names.include?(key)
        # array change
        values = value.instance_of?(Array) ? value : [value]
        values.reject!(&:blank?)
        # call function
        function_name = self.model.methods.include?("_where_#{key}".to_sym) ? "_where_#{key}" : '_where'
        models = self.model.send(function_name, models, key, values)
      # belongs_to, has_many search
      else
        relationSearch = -> (models, currentModel, key, value, joins = []) {
          associations = currentModel.get_associations()
          associations.keys.each do |association|
            if currentModel.column_names.include?(key)
              # call function
              function_name = self.model.methods.include?("_#{association}_#{joins.join('_')}".to_sym) ? "_#{association}_#{joins.join('_')}" : "_#{association}"
              table_name = currentModel.name.underscore
              hash = {key => value}
              return self.model.send(function_name, models, table_name, hash)
            elsif associations[association].include?(key)
              joins.push key
              models.joins_array!(joins)
              currentModel = key.camelize.singularize.constantize
              value.each do |k, v|
                # this fnuction collback
                models = relationSearch.call(models, currentModel, k, v, joins)
              end
            end
          end
          return models
        }
        models = relationSearch.call(models, self.model, key, value)
      end
    end
  end
  return models
end

#joins_array!(joins) ⇒ Object

joins as array params



73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/baseapi/active_record/relation_extension.rb', line 73

def joins_array!(joins)
  param = nil
  joins.reverse.each_with_index do |join, index|
    join = join.to_sym
    if index == 0
      param = join
    else
      param = {join => param}
    end
  end
  joins!(param)
end

#paging!(params) ⇒ Object

pager



49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/baseapi/active_record/relation_extension.rb', line 49

def paging!(params)
  count = params[:count].present? ? params[:count].to_i : -1;
  page = params[:page].present? ? params[:page].to_i : 1;
  if count > 0
    if count.present? and count
      limit!(count)
      if page
        offset!((page - 1) * count)
      end
    end
  end
end

#sorting!(params) ⇒ Object

sort



64
65
66
67
68
# File 'lib/baseapi/active_record/relation_extension.rb', line 64

def sorting!(params)
  if params[:order].present? and params[:orderby].present?
    order!({params[:orderby] => params[:order]})
  end
end