Module: TwitterCldr::Utils
- Defined in:
- lib/twitter_cldr/utils.rb,
lib/twitter_cldr/utils/code_points.rb,
lib/twitter_cldr/utils/interpolation.rb
Defined Under Namespace
Modules: CodePoints
Constant Summary collapse
- HASH_INTERPOLATION_REGEXP =
Regexp.union( /%\{(\w+)\}/, /%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/ )
- HASH_INTERPOLATION_WITH_ESCAPE_REGEXP =
Regexp.union( /%%/, HASH_INTERPOLATION_REGEXP )
Class Method Summary collapse
-
.deep_symbolize_keys(arg) ⇒ Object
adapted from: snippets.dzone.com/posts/show/11121 (first comment).
-
.interpolate(string, args) ⇒ Object
Uses
string
as a format specification and returns the result of applying it toargs
.
Class Method Details
.deep_symbolize_keys(arg) ⇒ Object
adapted from: snippets.dzone.com/posts/show/11121 (first comment)
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/twitter_cldr/utils.rb', line 14 def deep_symbolize_keys(arg) case arg when Array arg.map { |elem| deep_symbolize_keys(elem) } when Hash Hash[arg.map { |k, v| [k.is_a?(String) ? k.to_sym : k, deep_symbolize_keys(v)] }] else arg end end |
.interpolate(string, args) ⇒ Object
Uses string
as a format specification and returns the result of applying it to args
.
There are three ways to use it:
-
Using a single argument or Array of arguments.
This is the default behaviour of the String#% method. See Kernel#sprintf for more details about the format specification.
Example:
TwitterCldr::Utils.interpolate('%d %s', [1, 'message']) # => "1 message"
-
Using a Hash as an argument and unformatted, named placeholders (Ruby 1.9 syntax).
When you pass a Hash as an argument and specify placeholders with %foo it will interpret the hash values as named arguments.
Example:
TwitterCldr::Utils.interpolate('%{firstname}, %{lastname}', :firstname => 'Masao', :lastname => 'Mutoh') # => "Masao Mutoh"
-
Using a Hash as an argument and formatted, named placeholders (Ruby 1.9 syntax).
When you pass a Hash as an argument and specify placeholders with %<foo>d it will interpret the hash values as named arguments and format the value according to the formatting instruction appended to the closing >.
Example:
TwitterCldr::Utils.interpolate('%<integer>d, %<float>.1f', :integer => 10, :float => 43.4) # => "10, 43.3"
An exception can be thrown in two cases when Ruby 1.9 interpolation syntax is used:
-
ArgumentError is thrown if Ruby 1.9. interpolation syntax is used in
string
, butargs
is not a Hash; -
KeyError is thrown if the value for one of the placeholders in
string
is missing inargs
hash.
78 79 80 |
# File 'lib/twitter_cldr/utils/interpolation.rb', line 78 def interpolate(string, args) string =~ HASH_INTERPOLATION_REGEXP ? interpolate_hash(string, args) : interpolate_value_or_array(string, args) end |