Module: Datagrid::Utils
- Defined in:
- lib/datagrid/utils.rb
Overview
:nodoc:
Constant Summary collapse
- TRUTH =
[true, 1, "1", "true", "yes", "on"]
Class Method Summary collapse
- .add_html_classes(options, *classes) ⇒ Object
- .apply_args(*args, &block) ⇒ Object
- .booleanize(value) ⇒ Object
- .callable(value) ⇒ Object
- .extract_position_from_options(array, options) ⇒ Object
- .format_date_as_timestamp(value) ⇒ Object
- .parse_date(value) ⇒ Object
- .parse_datetime(value) ⇒ Object
- .process_availability(grid, if_option, unless_option) ⇒ Object
- .string_like?(value) ⇒ Boolean
- .translate_from_namespace(namespace, grid_class, key) ⇒ Object
- .warn_once(message, delay = 5) ⇒ Object
Class Method Details
.add_html_classes(options, *classes) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/datagrid/utils.rb', line 39 def add_html_classes(, *classes) = .clone [:class] ||= "" if [:class].is_a?(Array) [:class] += classes else # suppose that it is a String [:class] += " " unless [:class].blank? [:class] += classes.join(" ") end end |
.apply_args(*args, &block) ⇒ Object
74 75 76 77 |
# File 'lib/datagrid/utils.rb', line 74 def apply_args(*args, &block) size = block.arity < 0 ? args.size : block.arity block.call(*args.slice(0, size)) end |
.booleanize(value) ⇒ Object
8 9 10 11 12 13 |
# File 'lib/datagrid/utils.rb', line 8 def booleanize(value) if value.respond_to?(:downcase) value = value.downcase end TRUTH.include?(value) end |
.callable(value) ⇒ Object
132 133 134 |
# File 'lib/datagrid/utils.rb', line 132 def callable(value) value.respond_to?(:call) ? value.call : value end |
.extract_position_from_options(array, options) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/datagrid/utils.rb', line 56 def (array, ) before, after = [:before], [:after] if before && after raise Datagrid::ConfigurationError, "Options :before and :after can not be used together" end # Consider as before all return 0 if before == true if before before = before.to_sym array.index {|c| c.name.to_sym == before } elsif after after = after.to_sym array.index {|c| c.name.to_sym == after } + 1 else -1 end end |
.format_date_as_timestamp(value) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/datagrid/utils.rb', line 115 def (value) if !value value elsif value.is_a?(Array) [value.first.try(:beginning_of_day), value.last.try(:end_of_day)] elsif value.is_a?(Range) (value.first.beginning_of_day..value.last.end_of_day) else value.beginning_of_day..value.end_of_day end end |
.parse_date(value) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/datagrid/utils.rb', line 79 def parse_date(value) return nil if value.blank? return value if value.is_a?(Range) if value.is_a?(String) Array(Datagrid.configuration.date_formats).each do |format| begin return Date.strptime(value, format) rescue ::ArgumentError end end end return Date.parse(value) if value.is_a?(String) return value.to_date if value.respond_to?(:to_date) value rescue ::ArgumentError nil end |
.parse_datetime(value) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/datagrid/utils.rb', line 97 def parse_datetime(value) return nil if value.blank? return value if value.is_a?(Range) if value.is_a?(String) Array(Datagrid.configuration.datetime_formats).each do |format| begin return Time.strptime(value, format) rescue ::ArgumentError end end end return Time.parse(value) if value.is_a?(String) return value.to_time if value.respond_to?(:to_time) value rescue ::ArgumentError nil end |
.process_availability(grid, if_option, unless_option) ⇒ Object
127 128 129 130 |
# File 'lib/datagrid/utils.rb', line 127 def process_availability(grid, if_option, unless_option) property_availability(grid, if_option, true) && !property_availability(grid, unless_option, false) end |
.string_like?(value) ⇒ Boolean
52 53 54 |
# File 'lib/datagrid/utils.rb', line 52 def string_like?(value) value.is_a?(Symbol) || value.is_a?(String) end |
.translate_from_namespace(namespace, grid_class, key) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/datagrid/utils.rb', line 15 def translate_from_namespace(namespace, grid_class, key) lookups = [] namespaced_key = "#{namespace}.#{key}" grid_class.ancestors.each do |ancestor| if ancestor.respond_to?(:model_name) lookups << :"datagrid.#{ancestor.model_name.i18n_key}.#{namespaced_key}" end end lookups << :"datagrid.defaults.#{namespaced_key}" lookups << key.to_s.humanize I18n.t(lookups.shift, default: lookups).presence end |
.warn_once(message, delay = 5) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/datagrid/utils.rb', line 30 def warn_once(, delay = 5) @warnings ||= {} = @warnings[] return false if && >= Time.now - delay warn @warnings[] = Time.now true end |