babelyoda 2.1.13 → 2.1.14

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/CHANGELOG CHANGED
@@ -2,3 +2,4 @@ v1.1.0. Initial release.
2
2
  v1.4.0. Better command line options handling + Bugfixes.
3
3
  v1.5.0. Fixed a major bug in localization of XIB files.
4
4
  v2.0.0. Full re-write. Yay!
5
+ v2.1.14. Fix merging of pluralized keys: translated values are now preserved correctly.
@@ -1,8 +1,10 @@
1
- = babelyoda
1
+ # babelyoda
2
+
3
+ [![Dependency Status](https://gemnasium.com/eploko/babelyoda.png)](https://gemnasium.com/eploko/babelyoda)
2
4
 
3
5
  A simple utility to push/pull l10n resources of an Xcode project to/from the translators.
4
6
 
5
- == Note on Patches/Pull Requests
7
+ ## Note on Patches/Pull Requests
6
8
 
7
9
  * Fork the project.
8
10
  * Make your feature addition or bug fix.
@@ -12,6 +14,6 @@ A simple utility to push/pull l10n resources of an Xcode project to/from the tra
12
14
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
15
  * Send me a pull request. Bonus points for topic branches.
14
16
 
15
- == Copyright
17
+ ## Copyright
16
18
 
17
19
  Copyright (c) 2010-2012 Andrey Subbotin. See LICENSE for details.
@@ -5,12 +5,12 @@ module Babelyoda
5
5
  attr_accessor :language
6
6
  attr_accessor :status
7
7
  attr_accessor :text
8
-
8
+
9
9
  def initialize(language, text, status = :requires_translation)
10
10
  @language, @text, @status = language.to_sym, text, status.to_sym
11
11
  pluralize! if plural_id?(@text)
12
12
  end
13
-
13
+
14
14
  def pluralize!(plural_key = :one)
15
15
  return if plural?
16
16
  new_text = { :one => nil, :some => nil, :many => nil, :none => nil }
@@ -21,12 +21,12 @@ module Babelyoda
21
21
  else
22
22
  new_text[plural_key] = text
23
23
  end
24
-
24
+
25
25
  @text = new_text
26
26
  end
27
-
27
+
28
28
  def plural? ; text.kind_of? Hash ; end
29
-
29
+
30
30
  def merge!(other_value, options = {})
31
31
  updated = false
32
32
  options = resolve_options options
@@ -34,7 +34,7 @@ module Babelyoda
34
34
  unless @language.to_sym == other_value.language.to_sym
35
35
  raise "Can't merge values in different languages: #{@language.to_sym} and #{other_value.language.to_sym}"
36
36
  end
37
-
37
+
38
38
  raise "Can't merge a plural and a non-plural value!" unless plural? == other_value.plural?
39
39
 
40
40
  if plural?
@@ -45,34 +45,34 @@ module Babelyoda
45
45
  else
46
46
  if mergeable?(options)
47
47
  if @text != other_value.text && !other_value.nil?
48
- @text = other_value.text
48
+ @text = other_value.text
49
49
  updated = true
50
50
  end
51
51
  end
52
52
  end
53
53
  return updated
54
54
  end
55
-
55
+
56
56
  private
57
57
  include Babelyoda::Regexp
58
-
58
+
59
59
  def resolve_options(options = {})
60
60
  default_options.merge!(options)
61
61
  end
62
-
62
+
63
63
  def default_options
64
64
  { preserve: false, plain_text_keys: true }
65
65
  end
66
-
66
+
67
67
  def mergeable?(options = {})
68
68
  options = resolve_options options
69
69
  !options[:preserve] || (@status.to_sym == :requires_translation && options[:plain_text_keys])
70
70
  end
71
-
71
+
72
72
  def merge_plural_type!(type, other_value, options)
73
- if mergeable?
73
+ if mergeable?(options)
74
74
  if @text[type] != other_value && !other_value.nil?
75
- @text[type] = other_value
75
+ @text[type] = other_value
76
76
  return true
77
77
  end
78
78
  end
@@ -1,3 +1,3 @@
1
1
  module Babelyoda
2
- VERSION = "2.1.13"
2
+ VERSION = "2.1.14"
3
3
  end
@@ -4,39 +4,83 @@ describe "localization value" do
4
4
  it "can be created" do
5
5
  value = Babelyoda::LocalizationValue.new(:en, "Value 1")
6
6
  value.language.should == :en
7
+ value.status.should == :requires_translation
7
8
  value.text.should == "Value 1"
8
9
  end
9
-
10
- it "should merge non-plural values" do
11
- value1 = Babelyoda::LocalizationValue.new(:en, "Value 1")
12
- value2 = Babelyoda::LocalizationValue.new(:en, "Value 2")
13
- value1.merge!(value2)
14
- value1.language.should == :en
15
- value1.text.should == "Value 2"
16
- end
17
10
 
18
- it "should merge values if allowed so in options and the status == :translation_required" do
19
- value1 = Babelyoda::LocalizationValue.new(:en, "Value 1")
20
- value2 = Babelyoda::LocalizationValue.new(:en, "Value 2")
21
- value1.merge!(value2, { preserve: false })
22
- value1.language.should == :en
23
- value1.text.should == "Value 2"
24
- end
25
-
26
- it "should preserve values if specified so in options and the status != :translation_required" do
27
- value1 = Babelyoda::LocalizationValue.new(:en, "Value 1")
28
- value1.status = :translated
29
- value2 = Babelyoda::LocalizationValue.new(:en, "Value 2")
30
- value1.merge!(value2, { preserve: true })
31
- value1.language.should == :en
32
- value1.text.should == "Value 1"
11
+ describe "(singular)" do
12
+ it "should merge non-plural values" do
13
+ value1 = Babelyoda::LocalizationValue.new(:en, "Value 1")
14
+ value2 = Babelyoda::LocalizationValue.new(:en, "Value 2")
15
+ value1.merge!(value2)
16
+ value1.language.should == :en
17
+ value1.text.should == "Value 2"
18
+ end
19
+
20
+ it "should merge values if allowed so in options and the status == :translation_required" do
21
+ value1 = Babelyoda::LocalizationValue.new(:en, "Value 1")
22
+ value2 = Babelyoda::LocalizationValue.new(:en, "Value 2")
23
+ value1.merge!(value2, { preserve: false })
24
+ value1.language.should == :en
25
+ value1.text.should == "Value 2"
26
+ end
27
+
28
+ it "should preserve values if specified so in options and the status != :translation_required" do
29
+ value1 = Babelyoda::LocalizationValue.new(:en, "Value 1")
30
+ value1.status = :translated
31
+ value2 = Babelyoda::LocalizationValue.new(:en, "Value 2")
32
+ value1.merge!(value2, { preserve: true })
33
+ value1.language.should == :en
34
+ value1.text.should == "Value 1"
35
+ end
36
+
37
+ it "should preserve values in status :requires_translation if the project uses non plain text keys" do
38
+ value1 = Babelyoda::LocalizationValue.new(:en, "Value 1")
39
+ value2 = Babelyoda::LocalizationValue.new(:en, "Value 2")
40
+ value1.merge!(value2, { preserve: true, plain_text_keys: false })
41
+ value1.language.should == :en
42
+ value1.text.should == "Value 1"
43
+ end
33
44
  end
34
45
 
35
- it "should preserve values in status :requires_translation if the project uses non plain text keys" do
36
- value1 = Babelyoda::LocalizationValue.new(:en, "Value 1")
37
- value2 = Babelyoda::LocalizationValue.new(:en, "Value 2")
38
- value1.merge!(value2, { preserve: true, plain_text_keys: false })
39
- value1.language.should == :en
40
- value1.text.should == "Value 1"
46
+ describe "(plural)" do
47
+ it "should store value as a hash" do
48
+ value1 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 1")
49
+ value1.language.should == :en
50
+ value1.text[:one].should == "Plural %d value 1"
51
+ end
52
+
53
+ it "should merge plural values" do
54
+ value1 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 1")
55
+ value2 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 2")
56
+ value1.merge!(value2)
57
+ value1.language.should == :en
58
+ value1.text[:one].should == "Plural %d value 2"
59
+ end
60
+
61
+ it "should merge values if allowed so in options and the status == :translation_required" do
62
+ value1 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 1")
63
+ value2 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 2")
64
+ value1.merge!(value2, { preserve: false })
65
+ value1.language.should == :en
66
+ value1.text[:one].should == "Plural %d value 2"
67
+ end
68
+
69
+ it "should preserve values if specified so in options and the status != :translation_required" do
70
+ value1 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 1")
71
+ value1.status = :translated
72
+ value2 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 2")
73
+ value1.merge!(value2, { preserve: true })
74
+ value1.language.should == :en
75
+ value1.text[:one].should == "Plural %d value 1"
76
+ end
77
+
78
+ it "should preserve values in status :requires_translation if the project uses non plain text keys" do
79
+ value1 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 1")
80
+ value2 = Babelyoda::LocalizationValue.new(:en, "Plural %[one]d value 2")
81
+ value1.merge!(value2, { preserve: true, plain_text_keys: false })
82
+ value1.language.should == :en
83
+ value1.text[:one].should == "Plural %d value 1"
84
+ end
41
85
  end
42
86
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: babelyoda
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.13
4
+ version: 2.1.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-16 00:00:00.000000000Z
12
+ date: 2012-10-02 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70276027104500 !ruby/object:Gem::Requirement
16
+ requirement: &70299661451080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70276027104500
24
+ version_requirements: *70299661451080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: guard
27
- requirement: &70276027104020 !ruby/object:Gem::Requirement
27
+ requirement: &70299661450300 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70276027104020
35
+ version_requirements: *70299661450300
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: guard-rspec
38
- requirement: &70276027103600 !ruby/object:Gem::Requirement
38
+ requirement: &70299661449520 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70276027103600
46
+ version_requirements: *70299661449520
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: ruby_gntp
49
- requirement: &70276027102960 !ruby/object:Gem::Requirement
49
+ requirement: &70299661448840 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70276027102960
57
+ version_requirements: *70299661448840
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: awesome_print
60
- requirement: &70276027102440 !ruby/object:Gem::Requirement
60
+ requirement: &70299661447980 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: 1.0.2
69
69
  type: :runtime
70
70
  prerelease: false
71
- version_requirements: *70276027102440
71
+ version_requirements: *70299661447980
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: rake
74
- requirement: &70276027101600 !ruby/object:Gem::Requirement
74
+ requirement: &70299661446760 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ~>
@@ -82,10 +82,10 @@ dependencies:
82
82
  version: 0.9.2.2
83
83
  type: :runtime
84
84
  prerelease: false
85
- version_requirements: *70276027101600
85
+ version_requirements: *70299661446760
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: active_support
88
- requirement: &70276027100860 !ruby/object:Gem::Requirement
88
+ requirement: &70299661445680 !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
91
  - - ~>
@@ -96,10 +96,10 @@ dependencies:
96
96
  version: 3.0.0
97
97
  type: :runtime
98
98
  prerelease: false
99
- version_requirements: *70276027100860
99
+ version_requirements: *70299661445680
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: rchardet19
102
- requirement: &70276027095740 !ruby/object:Gem::Requirement
102
+ requirement: &70299661437380 !ruby/object:Gem::Requirement
103
103
  none: false
104
104
  requirements:
105
105
  - - ~>
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: 1.3.5
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *70276027095740
113
+ version_requirements: *70299661437380
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: builder
116
- requirement: &70276027094780 !ruby/object:Gem::Requirement
116
+ requirement: &70299661436500 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ~>
@@ -124,10 +124,10 @@ dependencies:
124
124
  version: 3.0.0
125
125
  type: :runtime
126
126
  prerelease: false
127
- version_requirements: *70276027094780
127
+ version_requirements: *70299661436500
128
128
  - !ruby/object:Gem::Dependency
129
129
  name: nokogiri
130
- requirement: &70276027093940 !ruby/object:Gem::Requirement
130
+ requirement: &70299661435560 !ruby/object:Gem::Requirement
131
131
  none: false
132
132
  requirements:
133
133
  - - ~>
@@ -138,10 +138,10 @@ dependencies:
138
138
  version: 1.5.0
139
139
  type: :runtime
140
140
  prerelease: false
141
- version_requirements: *70276027093940
141
+ version_requirements: *70299661435560
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: term-ansicolor
144
- requirement: &70276027092980 !ruby/object:Gem::Requirement
144
+ requirement: &70299661434740 !ruby/object:Gem::Requirement
145
145
  none: false
146
146
  requirements:
147
147
  - - ~>
@@ -152,10 +152,10 @@ dependencies:
152
152
  version: 1.0.7
153
153
  type: :runtime
154
154
  prerelease: false
155
- version_requirements: *70276027092980
155
+ version_requirements: *70299661434740
156
156
  - !ruby/object:Gem::Dependency
157
157
  name: log4r-color
158
- requirement: &70276027092140 !ruby/object:Gem::Requirement
158
+ requirement: &70299661433860 !ruby/object:Gem::Requirement
159
159
  none: false
160
160
  requirements:
161
161
  - - ~>
@@ -163,7 +163,7 @@ dependencies:
163
163
  version: '1.2'
164
164
  type: :runtime
165
165
  prerelease: false
166
- version_requirements: *70276027092140
166
+ version_requirements: *70299661433860
167
167
  description: A simple utility to push/pull l10n resources of an Xcode project to/from
168
168
  the translators
169
169
  email:
@@ -177,7 +177,7 @@ files:
177
177
  - Gemfile
178
178
  - Guardfile
179
179
  - LICENSE
180
- - README.rdoc
180
+ - README.md
181
181
  - Rakefile
182
182
  - babelyoda.gemspec
183
183
  - lib/babelyoda.rb
@@ -225,7 +225,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
225
  version: '0'
226
226
  segments:
227
227
  - 0
228
- hash: 4179561597520483115
228
+ hash: -3563055809853889373
229
229
  required_rubygems_version: !ruby/object:Gem::Requirement
230
230
  none: false
231
231
  requirements:
@@ -234,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
234
  version: '0'
235
235
  segments:
236
236
  - 0
237
- hash: 4179561597520483115
237
+ hash: -3563055809853889373
238
238
  requirements: []
239
239
  rubyforge_project: babelyoda
240
240
  rubygems_version: 1.8.10