tr8n_core 4.0.1 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
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