lazier 2.8.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +3 -3
- data/doc/Lazier.html +69 -99
- data/doc/Lazier/Boolean.html +6 -6
- data/doc/Lazier/DateTime.html +35 -39
- data/doc/Lazier/DateTime/ClassMethods.html +59 -85
- data/doc/Lazier/Exceptions.html +6 -6
- data/doc/Lazier/Exceptions/Debug.html +133 -0
- data/doc/Lazier/Exceptions/MissingTranslation.html +8 -8
- data/doc/Lazier/Hash.html +5 -270
- data/doc/Lazier/I18n.html +68 -26
- data/doc/Lazier/Localizer.html +17 -21
- data/doc/Lazier/Math.html +5 -5
- data/doc/Lazier/Math/ClassMethods.html +5 -5
- data/doc/Lazier/Object.html +681 -218
- data/doc/Lazier/Pathname.html +7 -11
- data/doc/Lazier/Settings.html +166 -262
- data/doc/Lazier/String.html +21 -25
- data/doc/Lazier/TimeZone.html +119 -130
- data/doc/Lazier/TimeZone/ClassMethods.html +75 -83
- data/doc/Lazier/Version.html +8 -8
- data/doc/_index.html +7 -7
- data/doc/class_list.html +2 -2
- data/doc/file.README.html +5 -5
- data/doc/file_list.html +1 -1
- data/doc/frames.html +1 -1
- data/doc/index.html +5 -5
- data/doc/js/full_list.js +6 -1
- data/doc/method_list.html +134 -324
- data/doc/top-level-namespace.html +5 -5
- data/lazier.gemspec +4 -3
- data/lib/lazier.rb +9 -23
- data/lib/lazier/boolean.rb +1 -1
- data/lib/lazier/datetime.rb +47 -79
- data/lib/lazier/exceptions.rb +4 -4
- data/lib/lazier/hash.rb +0 -24
- data/lib/lazier/i18n.rb +13 -6
- data/lib/lazier/localizer.rb +3 -5
- data/lib/lazier/object.rb +107 -78
- data/lib/lazier/pathname.rb +1 -3
- data/lib/lazier/settings.rb +22 -30
- data/lib/lazier/string.rb +3 -5
- data/lib/lazier/version.rb +3 -3
- data/spec/lazier/datetime_spec.rb +8 -8
- data/spec/lazier/hash_spec.rb +9 -10
- data/spec/lazier/object_spec.rb +85 -11
- data/spec/lazier/settings_spec.rb +10 -17
- data/spec/lazier_spec.rb +1 -1
- metadata +26 -9
data/lib/lazier/exceptions.rb
CHANGED
@@ -7,18 +7,18 @@
|
|
7
7
|
module Lazier
|
8
8
|
# Exceptions for lazier.
|
9
9
|
module Exceptions
|
10
|
-
# This exception is raised
|
11
|
-
class
|
10
|
+
# This exception is raised to debug code.
|
11
|
+
class Debug < ::StandardError
|
12
12
|
end
|
13
13
|
|
14
14
|
# This exception is raised from {I18n I18n} if no valid translation are found in the specified path.
|
15
|
-
class MissingTranslation <
|
15
|
+
class MissingTranslation < StandardError
|
16
16
|
# Creates a new missing translation exception.
|
17
17
|
#
|
18
18
|
# @param locales [Array] The locales that was requested to load.
|
19
19
|
# @param path [String] The path where was request to search for translations.
|
20
20
|
def initialize(locales, path)
|
21
|
-
super("Unable to load any of the following translation in #{path}: #{locales.
|
21
|
+
super("Unable to load any of the following translation in #{path}: #{locales.join(", ")}.")
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/lib/lazier/hash.rb
CHANGED
@@ -8,29 +8,5 @@ module Lazier
|
|
8
8
|
# Extensions for Hash objects.
|
9
9
|
module Hash
|
10
10
|
extend ::ActiveSupport::Concern
|
11
|
-
|
12
|
-
# This is called when the user access a member using dotted notation.
|
13
|
-
#
|
14
|
-
# @param method [String|Symbol] Key to search.
|
15
|
-
# @param args [Array] *Unused.*
|
16
|
-
# @param block [Proc] *Unused.*
|
17
|
-
# @return [Object] The value for the key.
|
18
|
-
def method_missing(method, *args, &block)
|
19
|
-
if self.has_key?(method.to_sym) then
|
20
|
-
self[method.to_sym]
|
21
|
-
elsif self.has_key?(method.to_s) then
|
22
|
-
self[method.to_s]
|
23
|
-
else
|
24
|
-
::Hash.method_missing(method, *args, &block)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# This is called when the user access a member using dotted notation.
|
29
|
-
#
|
30
|
-
# @param method [String|Symbol] Key to search.
|
31
|
-
# @return [Boolean] `true` if the key exists, `false` otherwise.
|
32
|
-
def respond_to?(method)
|
33
|
-
(self.has_key?(method.to_sym) || self.has_key?(method.to_s)) ? true : ::Hash.respond_to?(method)
|
34
|
-
end
|
35
11
|
end
|
36
12
|
end
|
data/lib/lazier/i18n.rb
CHANGED
@@ -49,13 +49,11 @@ module Lazier
|
|
49
49
|
# @param locale [Symbol] The new locale. Default is the current system locale.
|
50
50
|
# @return [R18n::Translation] The new translation object.
|
51
51
|
def i18n_load_locale(locale)
|
52
|
-
path =
|
53
|
-
locales = [locale
|
54
|
-
locales << "en" # Add English as a fallback
|
55
|
-
locales = locales.uniq.compact
|
52
|
+
path = @i18n_locales_path.ensure_string
|
53
|
+
locales = validate_locales([locale], path)
|
56
54
|
|
57
55
|
begin
|
58
|
-
translation = R18n::I18n.new(locales, path).t.send(
|
56
|
+
translation = R18n::I18n.new(locales, path).t.send(@i18n_root)
|
59
57
|
raise ArgumentError if translation.is_a?(R18n::Untranslated)
|
60
58
|
translation
|
61
59
|
rescue
|
@@ -63,13 +61,22 @@ module Lazier
|
|
63
61
|
end
|
64
62
|
end
|
65
63
|
|
64
|
+
# Validates locales for messages.
|
65
|
+
#
|
66
|
+
# @param locales [Array] The list of locales to validate. English is added as fallback.
|
67
|
+
# @param path [String] The path where look into.
|
68
|
+
# @return [Array] The list of valid locales.
|
69
|
+
def validate_locales(locales, path)
|
70
|
+
(locales + [ENV["LANG"], R18n::I18n.system_locale, "en"]).select { |l| find_locale_in_path(l, path)}.uniq.collect(&:to_s)
|
71
|
+
end
|
72
|
+
|
66
73
|
# Find a locale file in a path.
|
67
74
|
#
|
68
75
|
# @param locale [String] The locale to find.
|
69
76
|
# @param path [String] The path where look into.
|
70
77
|
# @return [String|nil] The version of the locale found or `nil`, if nothing was found.
|
71
78
|
def find_locale_in_path(locale, path)
|
72
|
-
[locale, locale[0, 5], locale[0, 2]].select {|l| File.exists?("#{path}/#{l}.yml") }.first
|
79
|
+
locale ? [locale, locale[0, 5], locale[0, 2]].select {|l| File.exists?("#{path}/#{l}.yml") }.first : nil
|
73
80
|
end
|
74
81
|
end
|
75
82
|
end
|
data/lib/lazier/localizer.rb
CHANGED
@@ -15,9 +15,7 @@ module Lazier
|
|
15
15
|
# @param path [String] The path where the translations are stored.
|
16
16
|
# @param locale [String|Symbol] The locale to use for localization.
|
17
17
|
def initialize(root = nil, path = nil, locale = nil)
|
18
|
-
root
|
19
|
-
path ||= ::File.absolute_path(::Pathname.new(::File.dirname(__FILE__)).to_s + "/../../locales/")
|
20
|
-
self.i18n_setup(root, path)
|
18
|
+
i18n_setup(root || :lazier, path || ::File.absolute_path(::Pathname.new(::File.dirname(__FILE__)).to_s + "/../../locales/"))
|
21
19
|
self.i18n = locale
|
22
20
|
end
|
23
21
|
|
@@ -27,7 +25,7 @@ module Lazier
|
|
27
25
|
# @param args [Array] Optional arguments to localize the message.
|
28
26
|
# @return [String|R18n::Untranslated] The localized message.
|
29
27
|
def self.localize(message, *args)
|
30
|
-
|
28
|
+
Lazier::Localizer.new.i18n.send(message, *args)
|
31
29
|
end
|
32
30
|
|
33
31
|
# Localize a message in a specified locale.
|
@@ -37,7 +35,7 @@ module Lazier
|
|
37
35
|
# @param args [Array] Optional arguments to localize the message.
|
38
36
|
# @return [String|R18n::Untranslated] The localized message.
|
39
37
|
def self.localize_on_locale(locale, message, *args)
|
40
|
-
|
38
|
+
Lazier::Localizer.new(nil, nil, locale).i18n.send(message, *args)
|
41
39
|
end
|
42
40
|
end
|
43
41
|
end
|
data/lib/lazier/object.rb
CHANGED
@@ -10,128 +10,156 @@ module Lazier
|
|
10
10
|
include ::ActionView::Helpers::NumberHelper
|
11
11
|
extend ::ActiveSupport::Concern
|
12
12
|
|
13
|
+
# Expression to match a boolean value.
|
14
|
+
BOOLEAN_MATCHER = /^(\s*(1|0|true|false|yes|no|t|f|y|n)\s*)$/i
|
15
|
+
|
16
|
+
# Expression to match a true value.
|
17
|
+
BOOLEAN_TRUE_MATCHER = /^(\s*(1|true|yes|t|y)\s*)$/i
|
18
|
+
|
19
|
+
# Expression to match a integer value.
|
20
|
+
INTEGER_MATCHER = /^([+-]?)(\d+)$/
|
21
|
+
|
22
|
+
# Expression to match a float value.
|
23
|
+
FLOAT_MATCHER = /^([+-]?)(\d+)([.,]\d+)?$/
|
24
|
+
|
13
25
|
# Normalizes a number for conversion. Basically this methods removes all separator and ensures that `.` is used for decimal separator.
|
14
26
|
#
|
15
27
|
# @return [String] The normalized number.
|
16
28
|
def normalize_number
|
17
|
-
|
18
|
-
"1"
|
19
|
-
elsif !self then
|
20
|
-
"0"
|
21
|
-
else
|
22
|
-
rv = self.ensure_string.strip.split(/[\.,]/)
|
23
|
-
rv[-1] = "." + rv[-1] if rv.length > 1
|
24
|
-
rv.join("")
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Checks if the object is a valid number.
|
29
|
-
#
|
30
|
-
# @return [Boolean] `true` is a valid number, `false` otherwise.
|
31
|
-
def is_number?
|
32
|
-
self.is_float?
|
29
|
+
is_boolean? ? to_i.to_s : ensure_string.strip.gsub(/[\.,](?=(.*[\.,]))/, "").gsub(",", ".")
|
33
30
|
end
|
34
31
|
|
35
32
|
# Checks if the object is a valid integer.
|
36
33
|
#
|
37
34
|
# @return [Boolean] `true` is a valid integer, `false` otherwise.
|
38
35
|
def is_integer?
|
39
|
-
|
36
|
+
is_a?(::Integer) || is_a?(::TrueClass) || !self || normalize_number =~ ::Lazier::Object::INTEGER_MATCHER
|
40
37
|
end
|
41
38
|
|
42
39
|
# Checks if the object is a valid float.
|
43
40
|
#
|
44
41
|
# @return [Boolean] `true` is a valid float, `false` otherwise.
|
45
42
|
def is_float?
|
46
|
-
|
43
|
+
is_a?(::Numeric) || is_a?(::TrueClass) || !self || normalize_number =~ ::Lazier::Object::FLOAT_MATCHER
|
47
44
|
end
|
45
|
+
alias :is_number? :is_float?
|
48
46
|
|
49
47
|
# Checks if the object is a valid boolean value.
|
50
48
|
#
|
51
49
|
# @return [Boolean] `true` is a valid boolean value, `false` otherwise.
|
52
50
|
def is_boolean?
|
53
|
-
|
51
|
+
is_a?(::TrueClass) || !self || to_s =~ ::Lazier::Object::BOOLEAN_MATCHER
|
52
|
+
end
|
53
|
+
|
54
|
+
# Makes sure that the object is set to something meaningful.
|
55
|
+
#
|
56
|
+
# @param default_value [String] The default value to return if the `verifier` or the block returns true.
|
57
|
+
# @param verifier [Symbol] The method used to verify if the object is NOT meaningful. *Ignored if a block is passed.*
|
58
|
+
# @return [String] The current object or the `default_value`.
|
59
|
+
def ensure(default_value, verifier = :blank?)
|
60
|
+
valid = block_given? ? yield(self) : send(verifier)
|
61
|
+
!valid ? self : default_value
|
62
|
+
end
|
63
|
+
|
64
|
+
# Makes sure that the object is a string.
|
65
|
+
#
|
66
|
+
# @param default_value [String] The default value to return if the object is `nil`. It is also passed to the block stringifier.
|
67
|
+
# @param stringifier [Symbol] The method used to convert the object to a string. *Ignored if a block is passed.*
|
68
|
+
# @return [String] The string representation of the object.
|
69
|
+
def ensure_string(default_value = "", stringifier = :to_s)
|
70
|
+
!nil? ? (block_given? ? yield(self, default_value) : send(stringifier)) : default_value
|
54
71
|
end
|
55
72
|
|
56
73
|
# Makes sure that the object is an array. For non array objects, return a single element array containing the object.
|
57
74
|
#
|
75
|
+
# @param default_value [Array|NilClass] The default array to use. If not specified, an array containing the object is returned.
|
76
|
+
# @param uniq [Boolean] If to remove duplicates from the array before sanitizing.
|
77
|
+
# @param compact [Boolean] If to compact the array before sanitizing.
|
78
|
+
# @param sanitizer [Symbol|nil] If not `nil`, the method to use to sanitize entries of the array. *Ignored if a block is present.*
|
79
|
+
# @param block [Proc] A block to sanitize entries. It must accept the value as unique argument.
|
58
80
|
# @return [Array] If the object is an array, then the object itself, a single element array containing the object otherwise.
|
59
|
-
def ensure_array
|
60
|
-
|
81
|
+
def ensure_array(default_value = nil, uniq = false, compact = false, sanitizer = nil, &block)
|
82
|
+
rv = is_a?(::Array) ? self : (default_value || [self])
|
83
|
+
rv.collect!(&(block || sanitizer))
|
84
|
+
rv.uniq! if uniq
|
85
|
+
rv.compact! if compact
|
86
|
+
rv
|
61
87
|
end
|
62
88
|
|
63
|
-
# Makes sure that the object is
|
89
|
+
# Makes sure that the object is an hash. For non hash objects, return an hash basing on the `default_value` parameter.
|
64
90
|
#
|
65
|
-
# @
|
66
|
-
|
67
|
-
|
91
|
+
# @param default_value [Hash|Object|NilClass] The default value to use. If it is an `Hash`, it is returned as value otherwise it is used to build as a key to build an hash with the current object as only value (everything but strings and symbols are mapped to `key`).
|
92
|
+
# @param sanitizer [Symbol|nil] If not `nil`, the method to use to sanitize values of the hash. *Ignored if a block is present.*
|
93
|
+
# @return [Hash] If the object is an hash, then the object itself, a hash with the object as single value otherwise.
|
94
|
+
def ensure_hash(default_value = nil, sanitizer = nil)
|
95
|
+
rv = if is_a?(::Hash) then
|
68
96
|
self
|
97
|
+
elsif default_value.is_a?(::Hash) then
|
98
|
+
default_value
|
69
99
|
else
|
70
|
-
|
100
|
+
key = default_value.is_a?(::String) || default_value.is_a?(::Symbol) ? default_value : :key
|
101
|
+
{key => self}
|
71
102
|
end
|
72
|
-
end
|
73
103
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
if self.is_a?(::Float)
|
80
|
-
self
|
81
|
-
elsif self.is_a?(::Integer)
|
82
|
-
self.to_f
|
104
|
+
if block_given? || sanitizer then
|
105
|
+
rv.inject({}) {|h, (k, v)|
|
106
|
+
h[k] = block_given? ? yield(v) : v.send(sanitizer)
|
107
|
+
h
|
108
|
+
}
|
83
109
|
else
|
84
|
-
|
110
|
+
rv
|
85
111
|
end
|
86
112
|
end
|
87
113
|
|
114
|
+
# Converts the object to a boolean.
|
115
|
+
#
|
116
|
+
# @return [Boolean] The boolean representation of the object.
|
117
|
+
def to_boolean
|
118
|
+
is_a?(TrueClass) || self == 1.0 || self == 1 || ensure_string =~ ::Lazier::Object::BOOLEAN_TRUE_MATCHER
|
119
|
+
end
|
120
|
+
|
88
121
|
# Converts the object to a integer.
|
89
122
|
#
|
90
123
|
# @param default_value [Fixnum] The value to return if the conversion is not possible.
|
91
124
|
# @return [Fixnum] The integer representation of the object.
|
92
125
|
def to_integer(default_value = 0)
|
93
|
-
|
126
|
+
to_float(default_value).to_i
|
94
127
|
end
|
95
128
|
|
96
|
-
# Converts the object to a
|
129
|
+
# Converts the object to a float.
|
97
130
|
#
|
98
|
-
# @
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
(rv.is_a?(TrueClass) || /^(1|on|true|yes|t|y)$/i.match(rv.ensure_string.strip)) ? true : false
|
131
|
+
# @param default_value [Float] The value to return if the conversion is not possible.
|
132
|
+
# @return [Float] The float representation of the object.
|
133
|
+
def to_float(default_value = 0.0)
|
134
|
+
is_float? ? ::Kernel.Float(is_a?(::Numeric) ? self : normalize_number) : default_value
|
103
135
|
end
|
104
136
|
|
105
137
|
# Returns the rounded float representaton of the object.
|
106
138
|
#
|
107
|
-
# @param
|
139
|
+
# @param precision [Fixnum] The precision to keep.
|
108
140
|
# @return [Float] The rounded float representaton of the object.
|
109
|
-
def round_to_precision(
|
110
|
-
|
141
|
+
def round_to_precision(precision = 2)
|
142
|
+
is_number? ? number_with_precision(to_float, precision: [precision, 0].max) : nil
|
111
143
|
end
|
112
144
|
|
113
145
|
# Formats a number.
|
114
146
|
# @see Settings#setup_format_number
|
115
147
|
#
|
116
|
-
# @param
|
148
|
+
# @param precision [Fixnum] The precision to show.
|
117
149
|
# @param decimal_separator [String] The string to use as decimal separator.
|
118
150
|
# @param add_string [String] The string to append to the number.
|
119
151
|
# @param k_separator [String] The string to use as thousands separator.
|
120
152
|
# @return [String] The string representation of the object.
|
121
|
-
def format_number(
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
format = "%n"
|
127
|
-
unit = ""
|
128
|
-
|
129
|
-
if add_string.present? then
|
130
|
-
format = "%n %u"
|
131
|
-
unit = add_string
|
132
|
-
end
|
153
|
+
def format_number(precision = nil, decimal_separator = nil, add_string = nil, k_separator = nil)
|
154
|
+
if is_number? then
|
155
|
+
settings = ::Lazier.settings.format_number
|
156
|
+
add_string ||= settings[:add_string]
|
157
|
+
format, unit = (add_string ? ["%n %u", add_string] : ["%n", ""])
|
133
158
|
|
134
|
-
|
159
|
+
number_to_currency(self, {precision: [precision || settings[:precision], 0].max, separator: decimal_separator || settings[:decimal_separator], delimiter: k_separator || settings[:k_separator], format: format, unit: unit})
|
160
|
+
else
|
161
|
+
nil
|
162
|
+
end
|
135
163
|
end
|
136
164
|
|
137
165
|
# Formats a boolean.
|
@@ -141,33 +169,34 @@ module Lazier
|
|
141
169
|
# @param false_name [String] The string representation of `false`. Defaults to `No`.
|
142
170
|
# @return [String] The string representation of the object.
|
143
171
|
def format_boolean(true_name = nil, false_name = nil)
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
}
|
172
|
+
settings = ::Lazier.settings.boolean_names
|
173
|
+
to_boolean ? (true_name || settings[true]) : (false_name || settings[false])
|
174
|
+
end
|
148
175
|
|
149
|
-
|
176
|
+
# Prepares an object to be printed in list summaries, like `[01/04] Opening this...`.
|
177
|
+
#
|
178
|
+
# @param length [Fixnum] The minimum length of the label.
|
179
|
+
# @param filler [String] The minimum length of the label.
|
180
|
+
# @param formatter [Symbol] The method to use to format the label. Must accept the `length` and the `filler arguments.
|
181
|
+
# @return [String] The object inspected and formatted.
|
182
|
+
def indexize(length = 2, filler = "0", formatter = :rjust)
|
183
|
+
self.ensure_string.send(formatter, length, filler)
|
150
184
|
end
|
151
185
|
|
152
186
|
# Inspects an object.
|
153
187
|
#
|
154
188
|
# @param format The format to use.
|
155
|
-
# @param
|
189
|
+
# @param as_exception [Boolean] If raise an exception.
|
156
190
|
# @return [String] The object inspected and formatted.
|
157
|
-
def
|
158
|
-
rv =
|
159
|
-
|
160
|
-
|
161
|
-
if format == :pretty_json then
|
162
|
-
rv = ::JSON.pretty_generate(self)
|
191
|
+
def analyze(format = :yaml, as_exception = true)
|
192
|
+
rv = case format
|
193
|
+
when :pretty_json
|
194
|
+
::JSON.pretty_generate(self)
|
163
195
|
else
|
164
|
-
|
165
|
-
end
|
166
|
-
rescue
|
167
|
-
rv = self.inspect
|
196
|
+
send("to_#{format}")
|
168
197
|
end
|
169
198
|
|
170
|
-
|
199
|
+
as_exception ? raise(::Lazier::Exceptions::Debug.new(rv)) : rv
|
171
200
|
end
|
172
201
|
end
|
173
202
|
end
|
data/lib/lazier/pathname.rb
CHANGED
data/lib/lazier/settings.rb
CHANGED
@@ -31,21 +31,21 @@ module Lazier
|
|
31
31
|
# @return [Settings] The singleton instance of the settings.
|
32
32
|
def self.instance(force = false)
|
33
33
|
@instance = nil if force
|
34
|
-
@instance ||=
|
34
|
+
@instance ||= ::Lazier::Settings.new
|
35
35
|
end
|
36
36
|
|
37
37
|
# Initializes a new settings object.
|
38
38
|
def initialize
|
39
|
-
|
40
|
-
|
39
|
+
i18n_setup(:lazier, ::File.absolute_path(::Pathname.new(::File.dirname(__FILE__)).to_s + "/../../locales/"))
|
40
|
+
setup
|
41
41
|
end
|
42
42
|
|
43
43
|
# Setups the current instance.
|
44
44
|
def setup
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
setup_format_number
|
46
|
+
setup_boolean_names
|
47
|
+
setup_date_formats
|
48
|
+
setup_date_names
|
49
49
|
end
|
50
50
|
|
51
51
|
# Set the current locale for messages.
|
@@ -54,19 +54,19 @@ module Lazier
|
|
54
54
|
# @return [R18n::Translation] The new translation object.
|
55
55
|
def i18n=(locale)
|
56
56
|
super(locale)
|
57
|
-
|
57
|
+
setup
|
58
58
|
end
|
59
59
|
|
60
60
|
# Setups formatters for a number.
|
61
61
|
# @see Object#format_number
|
62
62
|
#
|
63
|
-
# @param
|
63
|
+
# @param precision [Fixnum] The precision to show.
|
64
64
|
# @param decimal_separator [String] The string to use as decimal separator.
|
65
65
|
# @param add_string [String] The string to append to the number.
|
66
66
|
# @param k_separator [String] The string to use as thousands separator.
|
67
67
|
# @return [Hash] The new formatters.
|
68
|
-
def setup_format_number(
|
69
|
-
@format_number = {
|
68
|
+
def setup_format_number(precision = 2, decimal_separator = ".", add_string = nil, k_separator = ",")
|
69
|
+
@format_number = ::HashWithIndifferentAccess.new({precision: precision, decimal_separator: decimal_separator, add_string: add_string, k_separator: k_separator})
|
70
70
|
end
|
71
71
|
|
72
72
|
# Setups strings representation of booleans.
|
@@ -76,9 +76,7 @@ module Lazier
|
|
76
76
|
# @param false_name [String] The string representation of `false`. Defaults to `No`.
|
77
77
|
# @return [Hash] The new representations.
|
78
78
|
def setup_boolean_names(true_name = nil, false_name = nil)
|
79
|
-
true_name
|
80
|
-
false_name ||= self.i18n.boolean[1]
|
81
|
-
@boolean_names = {true => true_name, false => false_name}
|
79
|
+
@boolean_names = {true => true_name || i18n.boolean[0], false => false_name || i18n.boolean[1]}
|
82
80
|
end
|
83
81
|
|
84
82
|
# Setups custom formats for dates and times.
|
@@ -88,18 +86,10 @@ module Lazier
|
|
88
86
|
# @param replace [Boolean] If to discard current formats.
|
89
87
|
# @return [Hash] The new formats.
|
90
88
|
def setup_date_formats(formats = nil, replace = false)
|
91
|
-
|
89
|
+
@date_formats = HashWithIndifferentAccess.new if replace || !@date_formats
|
92
90
|
|
93
|
-
|
94
|
-
|
95
|
-
@date_formats ||= {}
|
96
|
-
@date_formats.merge!(formats)
|
97
|
-
else
|
98
|
-
@date_formats = formats
|
99
|
-
end
|
100
|
-
|
101
|
-
@date_formats.each_pair do |k, v| ::Time::DATE_FORMATS[k] = v end
|
102
|
-
end
|
91
|
+
@date_formats.merge!(formats.ensure_hash({ct_date: "%Y-%m-%d", ct_time: "%H:%M:%S", ct_date_time: "%F %T", ct_iso_8601: "%FT%T%z" }))
|
92
|
+
::Time::DATE_FORMATS.merge!(@date_formats)
|
103
93
|
|
104
94
|
@date_formats
|
105
95
|
end
|
@@ -115,12 +105,14 @@ module Lazier
|
|
115
105
|
# @param short_days [Array] The abbreviated string representation of days.
|
116
106
|
# @return [Hash] The new representations.
|
117
107
|
def setup_date_names(long_months = nil, short_months = nil, long_days = nil, short_days = nil)
|
118
|
-
|
119
|
-
short_months = self.i18n.date.short_months if short_months.blank?
|
120
|
-
long_days = self.i18n.date.long_days if long_days.blank?
|
121
|
-
short_days = self.i18n.date.short_days if short_days.blank?
|
108
|
+
definitions = self.i18n.date
|
122
109
|
|
123
|
-
@date_names = {
|
110
|
+
@date_names = {
|
111
|
+
long_months: long_months.ensure(definitions.long_months),
|
112
|
+
short_months: short_months.ensure(definitions.short_months),
|
113
|
+
long_days: long_days.ensure(definitions.long_days),
|
114
|
+
short_days: short_days.ensure(definitions.short_days)
|
115
|
+
}.with_indifferent_access
|
124
116
|
end
|
125
117
|
end
|
126
118
|
end
|