Class: AdminData::Util

Inherits:
Object
  • Object
show all
Defined in:
lib/admin_data/util.rb

Class Method Summary collapse

Class Method Details

.associations_for(klass, association_type) ⇒ Object



92
93
94
95
96
# File 'lib/admin_data/util.rb', line 92

def self.associations_for(klass, association_type)
  klass.name.camelize.constantize.reflections.values.select do |value|
    value.macro == association_type
  end
end

.build_sort_options(klass, sortby) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
# File 'lib/admin_data/util.rb', line 80

def self.build_sort_options(klass, sortby)
  klass.columns.inject('') do |result, column|
    name = column.name

    selected_text = (sortby == "#{name} desc") ? "selected='selected'" : ''
    result << "<option value='#{name} desc' #{selected_text}>#{name} desc</option>"

    selected_text = (sortby == "#{name} asc") ? "selected='selected'" : ''
    result << "<option value='#{name} asc' #{selected_text}>#{name} asc</option>"
  end.html_safe
end

.camelize_constantize(klassu) ⇒ Object



48
49
50
51
# File 'lib/admin_data/util.rb', line 48

def self.camelize_constantize(klassu)
  klasss = klassu.camelize
  self.constantize_klass(klasss)
end

.constantize_klass(klass_name) ⇒ Object

klass_name = model_name.sub(/.rb$/,”).camelize constantize_klass(klass_name)



55
56
57
58
59
# File 'lib/admin_data/util.rb', line 55

def self.constantize_klass(klass_name)
  klass_name.split('::').inject(Object) do |klass, part|
    klass.const_get(part)
  end
end

.custom_value_for_column(column, model) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/admin_data/util.rb', line 13

def self.custom_value_for_column(column, model)
  # some would say that if I use try method then I will not be raising exception and
  # I agree. However in this case for clarity I would prefer to not to have try after each call
  begin
    column_name = column.respond_to?(:name) ? column.name : column
    tmp = AdminData.config.column_settings[model.class.name.to_s]
    _proc = tmp.fetch(column_name.intern)
    _proc.call(model)
  rescue
    model.send(column_name)
  end
end

.exception_info(e) ⇒ Object



98
99
100
# File 'lib/admin_data/util.rb', line 98

def self.exception_info(e)
  "#{e.class}: #{e.message}#$/#{e.backtrace.join($/)}"
end

.get_serialized_value(html, column_value) ⇒ Object



26
27
28
29
30
31
32
33
# File 'lib/admin_data/util.rb', line 26

def self.get_serialized_value(html, column_value)
  html << %{ <i>Cannot edit serialized field.</i> }
  unless column_value.blank?
    html << %{ <i>Raw contents:</i><br/> }
    html << column_value.inspect
  end
  html.join
end

.label_values_pair_for(model, view) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/admin_data/util.rb', line 4

def self.label_values_pair_for(model, view)
  data = model.class.columns.inject([]) do |sum, column|
    tmp = view.get_value_for_column(column, model, :limit => nil)
    sum << [ column.name, (tmp.html_safe? ? tmp : view.send(:h,tmp)) ]
  end
  extension = Extension.show_info(model)
  data + extension
end

.or_merge_conditions(klass, *conditions) ⇒ Object

Rails method merge_conditions ANDs all the conditions. I need to ORs all the conditions



40
41
42
43
44
45
46
# File 'lib/admin_data/util.rb', line 40

def self.or_merge_conditions(klass, *conditions)
  s = ') OR ('
  cond = conditions.inject([]) do |sum, condition|
    condition.blank? ? sum : sum << klass.send(:sanitize_sql, condition)
  end.compact.join(s)
  "(#{cond})" unless cond.blank?
end

.pluralize(count, text) ⇒ Object



35
36
37
# File 'lib/admin_data/util.rb', line 35

def self.pluralize(count, text)
  count > 1 ? text+'s' : text
end

.string_representation_of_data(value) ⇒ Object



69
70
71
72
73
74
75
76
77
78
# File 'lib/admin_data/util.rb', line 69

def self.string_representation_of_data(value)
  case value
  when BigDecimal
    value.to_s
  when Date, DateTime, Time
    "'#{value.to_s(:db)}'"
  else
    value.inspect
  end
end

.write_to_file(data, mode, *path) ⇒ Object

Usage: write ‘hello world’ to tmp/hello.txt file Util.write_to_file(‘hello world’, ‘a+’, ‘tmp’, ‘hello.txt’)



63
64
65
66
67
# File 'lib/admin_data/util.rb', line 63

def self.write_to_file(data, mode, *path)
  path = File.expand_path(Rails.root.join(*path.flatten.compact))
  FileUtils.mkdir_p(File.dirname(path))
  File.open(path, mode) {|fh| fh.puts(data) }
end