tr8n_core 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +163 -33
  3. data/lib/tr8n/application.rb +29 -27
  4. data/lib/tr8n/base.rb +2 -22
  5. data/lib/tr8n/cache.rb +9 -9
  6. data/lib/tr8n/cache_adapters/cdb.rb +2 -2
  7. data/lib/tr8n/cache_adapters/file.rb +2 -2
  8. data/lib/tr8n/cache_adapters/memcache.rb +3 -3
  9. data/lib/tr8n/cache_adapters/redis.rb +3 -3
  10. data/lib/tr8n/component.rb +1 -1
  11. data/lib/tr8n/config.rb +256 -202
  12. data/lib/tr8n/decorators/base.rb +1 -1
  13. data/lib/tr8n/decorators/default.rb +1 -1
  14. data/lib/tr8n/decorators/html.rb +4 -4
  15. data/lib/tr8n/exception.rb +1 -1
  16. data/lib/tr8n/language.rb +17 -27
  17. data/lib/tr8n/language_case.rb +4 -3
  18. data/lib/tr8n/language_case_rule.rb +1 -1
  19. data/lib/tr8n/language_context.rb +4 -2
  20. data/lib/tr8n/language_context_rule.rb +1 -1
  21. data/lib/tr8n/logger.rb +8 -3
  22. data/lib/tr8n/rules_engine/evaluator.rb +4 -7
  23. data/lib/tr8n/rules_engine/parser.rb +1 -28
  24. data/lib/tr8n/session.rb +87 -0
  25. data/lib/tr8n/source.rb +1 -1
  26. data/lib/tr8n/tokens/data.rb +2 -2
  27. data/lib/tr8n/tokens/data_tokenizer.rb +1 -1
  28. data/lib/tr8n/tokens/decoration_tokenizer.rb +1 -1
  29. data/lib/tr8n/tokens/hidden.rb +1 -1
  30. data/lib/tr8n/tokens/method.rb +1 -1
  31. data/lib/tr8n/tokens/transform.rb +2 -2
  32. data/lib/tr8n/translation.rb +2 -2
  33. data/lib/tr8n/translation_key.rb +4 -4
  34. data/lib/tr8n/translator.rb +1 -1
  35. data/lib/tr8n/utils.rb +1 -1
  36. data/lib/tr8n_core/ext/array.rb +4 -4
  37. data/lib/tr8n_core/ext/date.rb +38 -13
  38. data/lib/tr8n_core/ext/fixnum.rb +3 -3
  39. data/lib/tr8n_core/ext/hash.rb +1 -1
  40. data/lib/tr8n_core/ext/string.rb +3 -3
  41. data/lib/tr8n_core/ext/time.rb +30 -24
  42. data/lib/tr8n_core/generators/cache/base.rb +4 -4
  43. data/lib/tr8n_core/generators/cache/cdb.rb +1 -1
  44. data/lib/tr8n_core/generators/cache/file.rb +4 -3
  45. data/lib/tr8n_core/version.rb +2 -2
  46. data/lib/tr8n_core.rb +1 -1
  47. data/spec/application_spec.rb +5 -192
  48. data/spec/base_spec.rb +1 -1
  49. data/spec/config_spec.rb +21 -5
  50. data/spec/decorator_spec.rb +1 -1
  51. data/spec/decorators/base_spec.rb +1 -1
  52. data/spec/decorators/default_spec.rb +1 -1
  53. data/spec/decorators/html_spec.rb +8 -8
  54. data/spec/fixtures/languages/ru.json +36 -4
  55. data/spec/language_case_rule_spec.rb +1 -1
  56. data/spec/language_case_spec.rb +1 -1
  57. data/spec/language_context_rule_spec.rb +1 -1
  58. data/spec/language_context_spec.rb +1 -1
  59. data/spec/language_spec.rb +603 -4
  60. data/spec/rules_engine/evaluator_spec.rb +1 -1
  61. data/spec/rules_engine/parser_spec.rb +1 -1
  62. data/spec/{helper.rb → spec_helper.rb} +15 -7
  63. data/spec/tokens/data_spec.rb +2 -2
  64. data/spec/tokens/data_tokenizer_spec.rb +1 -1
  65. data/spec/tokens/decoration_tokenizer_spec.rb +1 -1
  66. data/spec/tokens/hidden_spec.rb +1 -1
  67. data/spec/tokens/method_spec.rb +1 -1
  68. data/spec/tokens/transform_spec.rb +1 -1
  69. data/spec/translation_key_spec.rb +1 -1
  70. data/spec/translation_spec.rb +1 -1
  71. data/spec/utils_spec.rb +1 -3
  72. metadata +5 -8
  73. data/config/config.yml +0 -34
  74. data/config/tokens/data.yml +0 -45
  75. data/config/tokens/decorations.yml +0 -37
  76. data/lib/tr8n_core/modules/logger.rb +0 -43
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -95,7 +95,8 @@ class Tr8n::LanguageCase < Tr8n::Base
95
95
  def decorate(word, case_value, case_rule, options = {})
96
96
  return case_value if options[:skip_decorations]
97
97
  return case_value if language.default?
98
- return case_value unless Tr8n.config.current_translator and Tr8n.config.current_translator.inline?
98
+ return case_value unless Tr8n.session.current_translator
99
+ return case_value unless Tr8n.session.current_translator.inline?
99
100
 
100
101
  "<span class='tr8n_language_case' data-case_id='#{id}' data-rule_id='#{case_rule ? case_rule.id : ''}' data-case_key='#{word.gsub("'", "\'")}'>#{case_value}</span>"
101
102
  end
@@ -105,7 +106,7 @@ class Tr8n::LanguageCase < Tr8n::Base
105
106
  #######################################################################################################
106
107
 
107
108
  def to_cache_hash
108
- hash = to_hash(:id, :keyword, :description, :latin_name, :native_name)
109
+ hash = to_hash(:id, :keyword, :description, :latin_name, :native_name, :application)
109
110
  hash["rules"] = []
110
111
  rules.each do |rule|
111
112
  hash["rules"] << rule.to_cache_hash
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -40,7 +40,7 @@ class Tr8n::LanguageContext < Tr8n::Base
40
40
 
41
41
  def config
42
42
  context_rules = Tr8n.config.context_rules
43
- hash_value(context_rules, keyword) || {}
43
+ hash_value(context_rules, keyword.to_sym) || {}
44
44
  end
45
45
 
46
46
  def token_expression
@@ -86,6 +86,8 @@ class Tr8n::LanguageContext < Tr8n::Base
86
86
  else
87
87
  vars[key] = obj
88
88
  end
89
+
90
+ vars[key] = vars[key].to_s if vars[key].is_a?(Symbol)
89
91
  end
90
92
  vars
91
93
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
data/lib/tr8n/logger.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -27,7 +27,7 @@ module Tr8n
27
27
 
28
28
  def self.logger
29
29
  @logger ||= begin
30
- logfile_path = File.expand_path(Tr8n.config.log_path)
30
+ logfile_path = File.expand_path(Tr8n.config.logger[:path])
31
31
  logfile_dir = logfile_path.split("/")[0..-2].join("/")
32
32
  FileUtils.mkdir_p(logfile_dir) unless File.exist?(logfile_dir)
33
33
  logfile = File.open(logfile_path, 'a')
@@ -39,11 +39,13 @@ module Tr8n
39
39
  class Logger < ::Logger
40
40
 
41
41
  def format_message(severity, timestamp, progname, msg)
42
+ return "" unless Tr8n.config.logger[:enabled]
43
+ # TODO: check for severity/level
42
44
  "[#{timestamp.strftime("%D %T")}]: #{" " * stack.size}#{msg}\n"
43
45
  end
44
46
 
45
47
  def add(severity, message = nil, progname = nil, &block)
46
- return unless Tr8n.config.logger_enabled?
48
+ return unless Tr8n.config.logger[:enabled]
47
49
  super
48
50
  end
49
51
 
@@ -52,6 +54,9 @@ module Tr8n
52
54
  end
53
55
 
54
56
  def trace_api_call(path, params)
57
+ [:client_secret, :access_token].each do |param|
58
+ params = params.merge(param => "##filtered##")
59
+ end
55
60
  debug("api: [/#{path}] #{params.inspect}")
56
61
  stack.push(caller)
57
62
  t0 = Time.now
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -31,7 +31,7 @@ module Tr8n
31
31
  @vars = {}
32
32
  @env = {
33
33
  # McCarthy's Elementary S-functions and Predicates
34
- 'label' => lambda { |l, r| @env[l] = @vars[l] = r },
34
+ 'label' => lambda { |l, r| @vars[l] = r },
35
35
  'quote' => lambda { |expr| expr },
36
36
  'car' => lambda { |list| list[1] },
37
37
  'cdr' => lambda { |list| list.drop(1) },
@@ -58,7 +58,7 @@ module Tr8n
58
58
  '||' => lambda { |*expr| expr.any?{|e| evaluate(e)} }, # ['||', [], [], ...]
59
59
  'or' => lambda { |*expr| expr.any?{|e| evaluate(e)} }, # ['or', [], [], ...]
60
60
  'if' => lambda { |c, t, f| evaluate(c) ? evaluate(t) : evaluate(f) }, # ['if', 'cond', 'true', 'false']
61
- 'let' => lambda { |l, r| @env[l] = @vars[l] = r }, # ['let', 'n', 5]
61
+ 'let' => lambda { |l, r| @vars[l] = r }, # ['let', 'n', 5]
62
62
  'true' => lambda { true }, # ['true']
63
63
  'false' => lambda { false }, # ['false']
64
64
 
@@ -125,9 +125,6 @@ module Tr8n
125
125
  end
126
126
 
127
127
  def reset!
128
- @vars.each do |var|
129
- @env.delete(var)
130
- end
131
128
  @vars = {}
132
129
  end
133
130
 
@@ -138,7 +135,7 @@ module Tr8n
138
135
 
139
136
  def evaluate(expr)
140
137
  if @env['atom'].call(expr)
141
- return @env[expr] if @env[expr]
138
+ return @vars[expr] if expr.is_a?(String) and @vars[expr]
142
139
  return expr
143
140
  end
144
141
 
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -50,33 +50,6 @@ module Tr8n
50
50
  tokens.shift
51
51
  list
52
52
  end
53
-
54
- def class_for(token)
55
- {
56
- /^[\(]$/ => 'open_paren',
57
- /^[\)]$/ => 'close_paren',
58
- /^['|"]/ => 'string',
59
- /^@/ => 'variable',
60
- /^[\d|.]+$/ => 'number',
61
- }.each do |regexp, cls|
62
- return cls if regexp.match(token)
63
- end
64
- 'symbol'
65
- end
66
-
67
- def decorate
68
- html = ["<span class='tr8n_sexp'>"]
69
- if tokens
70
- html << tokens.collect do |token|
71
- "<span class='#{class_for(token)}'>#{token}</span>"
72
- end.join('')
73
- else
74
- html << "<span class='#{class_for(expression)}'>#{expression}</span>"
75
- end
76
- html << '</span>'
77
- html.join('').html_safe
78
- end
79
-
80
53
  end
81
54
 
82
55
  end
@@ -0,0 +1,87 @@
1
+ #--
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ module Tr8n
25
+
26
+ def self.session
27
+ Thread.current[:session] ||= Tr8n::Session.new
28
+ end
29
+
30
+ # Acts as a global singleton that holds all Tr8n configuration
31
+ # The class can be extended with a different implementation, as long as the interface is supported
32
+ class Session
33
+ # Session Attributes - Move to Session
34
+ attr_accessor :application, :current_user, :current_language, :current_translator,
35
+ :current_source, :current_component, :block_options
36
+
37
+ def init
38
+ Tr8n::Application.init(Tr8n.config.application[:key], Tr8n.config.application[:secret], Tr8n.config.application[:host])
39
+ self.current_source = "/tr8n/core"
40
+ end
41
+
42
+ def reset
43
+ self.application= nil
44
+ self.current_user= nil
45
+ self.current_language= nil
46
+ self.current_translator= nil
47
+ self.current_source= nil
48
+ self.current_component= nil
49
+ self.block_options= nil
50
+ end
51
+
52
+ #########################################################
53
+ ## Block Options
54
+ #########################################################
55
+
56
+ def block_options
57
+ (@block_options ||= []).last || {}
58
+ end
59
+
60
+ def with_block_options(opts)
61
+ @block_options ||= []
62
+ @block_options.push(opts)
63
+ if block_given?
64
+ ret = yield
65
+ end
66
+ @block_options.pop
67
+ ret
68
+ end
69
+
70
+ def current_source_from_block_options
71
+ arr = @block_options || []
72
+ arr.reverse.each do |opts|
73
+ return application.source_by_key(opts[:source]) unless opts[:source].blank?
74
+ end
75
+ nil
76
+ end
77
+
78
+ def current_component_from_block_options
79
+ arr = @block_options || []
80
+ arr.reverse.each do |opts|
81
+ return application.component_by_key(opts[:component]) unless opts[:component].blank?
82
+ end
83
+ Tr8n.config.current_component
84
+ end
85
+
86
+ end
87
+ end
data/lib/tr8n/source.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -92,13 +92,13 @@ class Tr8n::Tokens::Data < Tr8n::Base
92
92
  def sanitize(object, value, options, language)
93
93
  value = "#{value.to_s}" unless value.is_a?(String)
94
94
 
95
- unless Tr8n.config.block_options[:skip_html_escaping]
95
+ unless Tr8n.session.block_options[:skip_html_escaping]
96
96
  if options[:sanitize_values]
97
97
  value = ERB::Util.html_escape(value)
98
98
  end
99
99
  end
100
100
 
101
- if Tr8n.config.application and not Tr8n.config.application.feature_enabled?(:language_cases)
101
+ if Tr8n.session.application and not Tr8n.session.application.feature_enabled?(:language_cases)
102
102
  return value
103
103
  end
104
104
 
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -137,7 +137,7 @@ class Tr8n::Tokens::Transform < Tr8n::Tokens::Data
137
137
 
138
138
  # apply settings cases
139
139
  value = params[index]
140
- if Tr8n.config.application.feature_enabled?(:language_cases)
140
+ if Tr8n.session.application.feature_enabled?(:language_cases)
141
141
  parts[1..-1].each do |case_key|
142
142
  lcase = context.language.language_case_by_keyword(case_key)
143
143
  unless lcase
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -98,7 +98,7 @@ class Tr8n::Translation < Tr8n::Base
98
98
  #######################################################################################################
99
99
 
100
100
  def to_cache_hash
101
- to_hash(:label, :context)
101
+ to_hash(:locale, :label, :context, :precedence)
102
102
  end
103
103
 
104
104
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -32,7 +32,7 @@ class Tr8n::TranslationKey < Tr8n::Base
32
32
  super
33
33
 
34
34
  self.attributes[:key] ||= self.class.generate_key(label, description)
35
- self.attributes[:locale] ||= Tr8n.config.block_options[:locale] || application.default_locale
35
+ self.attributes[:locale] ||= Tr8n.session.block_options[:locale] || application.default_locale
36
36
  self.attributes[:language] ||= application.language(locale)
37
37
  self.attributes[:translations] = {}
38
38
 
@@ -61,7 +61,7 @@ class Tr8n::TranslationKey < Tr8n::Base
61
61
  def fetch_translations(language, options = {})
62
62
  return self if self.id and has_translations_for_language?(language)
63
63
 
64
- if options[:dry] or Tr8n.config.block_options[:dry]
64
+ if options[:dry] or Tr8n.session.block_options[:dry]
65
65
  return application.cache_translation_key(self)
66
66
  end
67
67
 
@@ -192,7 +192,7 @@ class Tr8n::TranslationKey < Tr8n::Base
192
192
  end
193
193
 
194
194
  def to_cache_hash
195
- hash = to_hash(:id, :key, :label, :description, :locale, :level)
195
+ hash = to_hash(:id, :key, :label, :description, :locale, :level, :locked)
196
196
  if translations and translations.any?
197
197
  hash["translations"] = {}
198
198
  translations.each do |locale, locale_translations|
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
data/lib/tr8n/utils.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -24,7 +24,7 @@
24
24
  class Array
25
25
 
26
26
  # translates an array of options for a select tag
27
- def tro(description = "", options = {}, language = Tr8n.config.current_language)
27
+ def tro(description = "", options = {}, language = Tr8n.session.current_language)
28
28
  return [] if empty?
29
29
 
30
30
  collect do |opt|
@@ -39,7 +39,7 @@ class Array
39
39
  end
40
40
 
41
41
  # translate array values
42
- def trl(description = "", options = {}, language = Tr8n.config.current_language)
42
+ def trl(description = "", options = {}, language = Tr8n.session.current_language)
43
43
  return [] if empty?
44
44
 
45
45
  collect do |opt|
@@ -52,7 +52,7 @@ class Array
52
52
  end
53
53
 
54
54
  # creates a sentence with tr "and" joiner
55
- def tr_sentence(options = {}, language = Tr8n.config.current_language)
55
+ def tr_sentence(options = {}, language = Tr8n.session.current_language)
56
56
  return "" if empty?
57
57
  return first if size == 1
58
58
 
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -23,18 +23,43 @@
23
23
 
24
24
  class Date
25
25
 
26
- def translate(format = :default, language = Tr8n.config.current_language, options = {})
26
+ # The translation of the date can use one of the formats:
27
+ #
28
+ # Using the Symbol to pull the default format defined in the config:
29
+ #
30
+ # date.translate(:verbose)
31
+ #
32
+ # Using a string with format with native Date elements
33
+ #
34
+ # date.translate("%m/%d/%Y")
35
+ #
36
+ # Or using a string with tokens:
37
+ #
38
+ # date.translate("{month_name} {days::ord}")
39
+ #
40
+ # The last allows you to use language cases to get something like "on March 1st".
41
+
42
+ def translate(format = :default, language = Tr8n.session.current_language, options = {})
27
43
  label = (format.is_a?(String) ? format.clone : Tr8n.config.default_date_formats[format].clone)
28
- symbols = label.scan(/(%\w)/).flatten.uniq
29
44
 
30
45
  selected_tokens = []
31
- symbols.each do |symbol|
32
- token = Tr8n.config.strftime_symbol_to_token(symbol)
33
- next unless token
34
- selected_tokens << token
35
- label.gsub!(symbol, token)
46
+ using_tokens = label.index('{')
47
+
48
+ if using_tokens
49
+ selected_tokens = Tr8n::Tokens::Data.parse(label).collect{ |token| token.name(:parens => true) }
50
+
51
+ else
52
+ symbols = label.scan(/(%\w)/).flatten.uniq
53
+
54
+ symbols.each do |symbol|
55
+ token = Tr8n.config.strftime_symbol_to_token(symbol)
56
+ next unless token
57
+ selected_tokens << token
58
+ label.gsub!(symbol, token)
59
+ end
36
60
  end
37
61
 
62
+
38
63
  tokens = {}
39
64
  selected_tokens.each do |token|
40
65
  case token
@@ -45,10 +70,10 @@ class Date
45
70
  when "{week_days}" then tokens[:week_days] = strftime("%w")
46
71
  when "{short_years}" then tokens[:short_years] = strftime("%y")
47
72
  when "{years}" then tokens[:years] = year
48
- when "{short_week_day_name}" then tokens[:short_week_day_name] = language.tr(Tr8n.config.default_abbr_day_names[wday], "Short name for a day of a week", {}, options)
49
- when "{week_day_name}" then tokens[:week_day_name] = language.tr(Tr8n.config.default_day_names[wday], "Day of a week", {}, options)
50
- when "{short_month_name}" then tokens[:short_month_name] = language.tr(Tr8n.config.default_abbr_month_names[month - 1], "Short month name", {}, options)
51
- when "{month_name}" then tokens[:month_name] = language.tr(Tr8n.config.default_month_names[month - 1], "Month name", {}, options)
73
+ when "{short_week_day_name}" then tokens[:short_week_day_name] = language.tr(Tr8n.config.default_abbr_day_name(wday), "Short name for a day of a week", {}, options)
74
+ when "{week_day_name}" then tokens[:week_day_name] = language.tr(Tr8n.config.default_day_name(wday), "Day of a week", {}, options)
75
+ when "{short_month_name}" then tokens[:short_month_name] = language.tr(Tr8n.config.default_abbr_month_name(month - 1), "Short month name", {}, options)
76
+ when "{month_name}" then tokens[:month_name] = language.tr(Tr8n.config.default_month_name(month - 1), "Month name", {}, options)
52
77
  when "{day_of_month}" then tokens[:day_of_month] = strftime("%e")
53
78
  end
54
79
  end
@@ -57,7 +82,7 @@ class Date
57
82
  end
58
83
  alias :tr :translate
59
84
 
60
- def trl(format = :default, language = Tr8n.config.current_language, options = {})
85
+ def trl(format = :default, language = Tr8n.session.current_language, options = {})
61
86
  tr(format, language, options.merge!(:skip_decorations => true))
62
87
  end
63
88
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -27,12 +27,12 @@ class Fixnum
27
27
  (to_i < 10 ? "0#{to_s}" : to_s)
28
28
  end
29
29
 
30
- def translate(desc = "", tokens = {}, options = {}, language = Tr8n.config.current_language)
30
+ def translate(desc = "", tokens = {}, options = {}, language = Tr8n.session.current_language)
31
31
  to_s.translate(desc, tokens, options, language)
32
32
  end
33
33
  alias tr translate
34
34
 
35
- def trl(desc = "", tokens = {}, options = {}, language = Tr8n.config.current_language)
35
+ def trl(desc = "", tokens = {}, options = {}, language = Tr8n.session.current_language)
36
36
  to_s.trl(desc, tokens, options, language)
37
37
  end
38
38
 
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
2
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -23,11 +23,11 @@
23
23
 
24
24
  class String
25
25
 
26
- def translate(desc = "", tokens = {}, options = {}, language = Tr8n.config.current_language)
26
+ def translate(desc = "", tokens = {}, options = {}, language = Tr8n.session.current_language)
27
27
  language.translate(self, desc, tokens, options)
28
28
  end
29
29
 
30
- def trl(desc = "", tokens = {}, options = {}, language = Tr8n.config.current_language)
30
+ def trl(desc = "", tokens = {}, options = {}, language = Tr8n.session.current_language)
31
31
  translate(desc, tokens, options.merge(:skip_decorations => true), language)
32
32
  end
33
33