phrase 0.2.0.beta.8 → 0.2.0
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.
- data/lib/phrase/backend/phrase_service.rb +77 -44
- data/phrase.gemspec +1 -1
- metadata +18 -8
@@ -11,20 +11,34 @@ class Phrase::Backend::PhraseService
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def translate(*args)
|
14
|
-
|
15
|
-
if Phrase.disabled? or key_is_blacklisted?(key[:key]) or (args.last.is_a?(Hash) and args.last[:resolve] == false)
|
14
|
+
if to_be_translated_without_phrase?(args)
|
16
15
|
I18n.translate_without_phrase(*args)
|
17
16
|
else
|
18
|
-
phrase_delegate_for(
|
17
|
+
phrase_delegate_for(args)
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
22
21
|
protected
|
23
|
-
def
|
22
|
+
def to_be_translated_without_phrase?(args)
|
23
|
+
Phrase.disabled? or has_been_given_blacklisted_key?(args) or has_been_forced_to_resolve_with_phrase?(args)
|
24
|
+
end
|
25
|
+
|
26
|
+
def has_been_given_blacklisted_key?(args)
|
27
|
+
key = given_key_from_args(args)
|
28
|
+
has_blacklist_entry_for_key?(key)
|
29
|
+
end
|
30
|
+
|
31
|
+
def has_been_forced_to_resolve_with_phrase?(args)
|
32
|
+
(args.last.is_a?(Hash) and args.last[:resolve] == false)
|
33
|
+
end
|
34
|
+
|
35
|
+
def given_key_from_args(args)
|
36
|
+
extract_normalized_key_from_args(args)
|
37
|
+
end
|
38
|
+
|
39
|
+
def has_blacklist_entry_for_key?(key)
|
24
40
|
blacklisted_keys.each do |blacklisted_key|
|
25
|
-
if key.to_s[/\A#{blacklisted_key.gsub("*", ".*")}\Z/]
|
26
|
-
return true
|
27
|
-
end
|
41
|
+
return true if present?(key.to_s[/\A#{blacklisted_key.gsub("*", ".*")}\Z/])
|
28
42
|
end
|
29
43
|
false
|
30
44
|
end
|
@@ -37,66 +51,85 @@ protected
|
|
37
51
|
@api_client ||= Phrase::Api::Client.new(Phrase.auth_token)
|
38
52
|
end
|
39
53
|
|
40
|
-
def phrase_delegate_for(
|
41
|
-
|
54
|
+
def phrase_delegate_for(args)
|
55
|
+
key = given_key_from_args(args)
|
56
|
+
return nil unless present?(key)
|
42
57
|
options = args[1].nil? ? {} : args[1]
|
43
58
|
Phrase::Delegate.new(key, options)
|
44
59
|
end
|
45
60
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
61
|
+
def extract_normalized_key_from_args(args)
|
62
|
+
transformed_args = transform_args(args)
|
63
|
+
normalized_key(transformed_args)
|
64
|
+
end
|
65
|
+
|
66
|
+
def transform_args(args)
|
67
|
+
duped_args = args.map { |item| (item.is_a?(Symbol) or item.nil?) ? item : item.dup }
|
68
|
+
transform_args_based_on_caller(duped_args)
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def normalized_key(duped_args)
|
73
|
+
splitted_args = split_args(duped_args)
|
74
|
+
key = I18n::Backend::Flatten.normalize_flat_keys(*splitted_args)
|
75
|
+
key.gsub!("..", ".")
|
76
|
+
key
|
77
|
+
end
|
78
|
+
|
79
|
+
def split_args(args)
|
80
|
+
options = options_from_args(args)
|
81
|
+
key ||= args.shift
|
82
|
+
locale = options.delete(:locale) || I18n.locale
|
83
|
+
return [locale, key, options[:scope], nil]
|
84
|
+
end
|
85
|
+
|
86
|
+
def options_from_args(args)
|
87
|
+
args.last.is_a?(Hash) ? args.pop : {}
|
88
|
+
end
|
89
|
+
|
90
|
+
def transform_args_based_on_caller(args)
|
91
|
+
translation_caller = identify_caller
|
49
92
|
|
50
|
-
if
|
51
|
-
|
52
|
-
end
|
93
|
+
if translation_caller and args.first =~ /^\./
|
94
|
+
options = options_from_args(args)
|
53
95
|
|
54
|
-
|
96
|
+
if not present?(options[:scope]) and present?(translation_caller)
|
97
|
+
options[:scope] = translation_caller
|
98
|
+
end
|
55
99
|
|
56
|
-
|
57
|
-
|
100
|
+
args.push(options)
|
101
|
+
parts = args.first.to_s.split(".").select { |e| not blank?(e) }
|
102
|
+
args[0] = parts[0] if parts.size == 1
|
103
|
+
end
|
58
104
|
|
59
|
-
|
105
|
+
args
|
60
106
|
end
|
61
107
|
|
62
108
|
def identify_caller
|
63
|
-
|
64
|
-
send(:caller)[0..6].each do |
|
65
|
-
|
109
|
+
translation_caller = nil
|
110
|
+
send(:caller)[0..6].each do |intermediate_caller|
|
111
|
+
translation_caller = calling_template(intermediate_caller) unless translation_caller
|
66
112
|
end
|
67
113
|
|
68
|
-
if
|
69
|
-
find_lookup_scope(
|
114
|
+
if present?(translation_caller)
|
115
|
+
find_lookup_scope(translation_caller)
|
70
116
|
else
|
71
117
|
nil
|
72
118
|
end
|
73
119
|
end
|
74
120
|
|
75
|
-
def
|
121
|
+
def calling_template(string)
|
76
122
|
string.match(/(views)(\/.+)(?>:[0-9]+:in)/)
|
77
123
|
end
|
78
124
|
|
79
|
-
def
|
80
|
-
|
81
|
-
|
82
|
-
locale = options.delete(:locale) || I18n.locale
|
83
|
-
return [locale, key, options[:scope], nil]
|
125
|
+
def blank?(str)
|
126
|
+
raise "blank?(str) can only be given a String or nil" unless str.is_a?(String) or str.nil?
|
127
|
+
str.nil? or str == ''
|
84
128
|
end
|
85
129
|
|
86
|
-
def
|
87
|
-
|
88
|
-
|
89
|
-
options = args.last.is_a?(Hash) ? args.pop : {}
|
90
|
-
|
91
|
-
if !options[:scope].presence && _scope.presence
|
92
|
-
options[:scope] = _scope
|
93
|
-
end
|
94
|
-
|
95
|
-
args.push(options)
|
96
|
-
parts = args.first.to_s.split(".").select { |e| !e.blank? }
|
97
|
-
args[0] = parts[0] if parts.size == 1
|
98
|
-
|
99
|
-
return args
|
130
|
+
def present?(str)
|
131
|
+
raise "present?(str) can only be given a String or nil" unless str.is_a?(String) or str.nil?
|
132
|
+
not blank?(str)
|
100
133
|
end
|
101
134
|
|
102
135
|
def find_lookup_scope(caller)
|
data/phrase.gemspec
CHANGED
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phrase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Dynport GmbH
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: addressable
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,7 +37,12 @@ dependencies:
|
|
32
37
|
version: 2.2.8
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.2.8
|
36
46
|
description: phrase allows you to edit translations inline, on the page itself. More
|
37
47
|
information at phraseapp.com
|
38
48
|
email:
|
@@ -83,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
93
|
version: 1.3.6
|
84
94
|
requirements: []
|
85
95
|
rubyforge_project: phrase
|
86
|
-
rubygems_version: 1.8.
|
96
|
+
rubygems_version: 1.8.24
|
87
97
|
signing_key:
|
88
98
|
specification_version: 3
|
89
99
|
summary: The best way to manage i18n.
|