Module: AbAdmin::Concerns::AdminAddition

Extended by:
ActiveSupport::Concern
Included in:
Structure, User
Defined in:
lib/ab_admin/concerns/admin_addition.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#for_input_tokenObject



22
23
24
# File 'lib/ab_admin/concerns/admin_addition.rb', line 22

def for_input_token
  {:id => self.id, :text => self.name}
end

#next_prev_by_url(scope, url, prev = false) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/ab_admin/concerns/admin_addition.rb', line 43

def next_prev_by_url(scope, url, prev=false)
  predicates = {'>' => '<', '<' => '>', 'desc' => 'asc', 'asc' => 'desc'}
  query = Rack::Utils.parse_nested_query(URI.parse(url).query).symbolize_keys
  query[:q] ||= {}
  order_str = query[:q]['s'] || 'id desc'
  order_col, order_mode = order_str.split
  quoted_order_col = self.class.quote_column(order_col)
  if prev
    query[:q]['s'] = ["#{order_col} #{predicates[order_mode]}", 'id desc']
    predicate = order_mode == 'desc' ? '>' : '<'
    id_predicate = '<'
  else
    query[:q]['s'] = ["#{order_col} #{order_mode}", 'id']
    predicate = order_mode == 'desc' ? '<' : '>'
    id_predicate = '>'
  end
  sql = "(#{quoted_order_col} #{predicate} :val OR (#{quoted_order_col} = :val AND #{self.class.quote_column('id')} #{id_predicate} #{self.id}))"
  scope.where(sql, :val => self.send(order_col)).ransack(query[:q]).result(:distinct => true).first
end

#token_data(method, options = {}) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ab_admin/concerns/admin_addition.rb', line 26

def token_data(method, options={})
  assoc = self.class.reflect_on_association(method)
  records = self.send(method)
  data = Array(records).map(&:for_input_token)
  data = {
      :pre => data.to_json,
      :class => assoc.klass.name,
      :multi => assoc.collection?,
      :c => options.delete(:c)
  }
  if options[:geo_order]
    singular = self.class.model_name.singular
    data[:c] ||= {:with => {:lat => "#{singular}_lat", :lon => "#{singular}_lon"}}.to_json
  end
  options.reverse_deep_merge!(:class => 'fancy_select', :data => data)
end