xcres 0.4.2 → 0.4.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 582ff4713e27360dad8eac366f7fb972e631696f
4
- data.tar.gz: 95e46087ebe01b670c0cc4b03493e87963146b17
3
+ metadata.gz: c693c63079477f934beba5d70aeeeb474ba89d3c
4
+ data.tar.gz: 37daa9576e22f68af31f1fcea2d8931287fadce2
5
5
  SHA512:
6
- metadata.gz: 65b834e686b1f356abced830e74608fac622bc6c0d744ab7da13e8ce3592c18c42968c980b32d155f4bdd890a17ed10f301f4ad393e4a2c336e4d5cbab02d22e
7
- data.tar.gz: dfa1cc9951f35286e886179f80f5560bcf8ce3c6cda38e287103209353418b30822ddeba41cfb7339237b92a8a866948e84f95c0182bf859e37e5514beca0162
6
+ metadata.gz: 59d34106718f0effdf97806992013b312b0e064f6577fc8ee8ae99e995d78aba7bd1567b899024e9731d7fcac60dcdf8ba25e5a54d38d341046e610fd5942915
7
+ data.tar.gz: 207373fdbeea3645e865910b744aeda5539b69ab4553773e3da4443e7440fa7d21158cb69afd10b27ecd623adbd8f494cbe772104bce718ef71677c754b619c0
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xcres (0.4.2)
4
+ xcres (0.4.3)
5
5
  activesupport (>= 3.2.15, < 4)
6
6
  clamp (~> 0.6.3)
7
7
  colored (~> 1.2)
@@ -170,7 +170,7 @@ module XCRes
170
170
  def read_plist_key(path, key)
171
171
  raise ArgumentError, 'Path is required, but nil' if path.nil?
172
172
  raise ArgumentError, 'Key is required, but nil' if key.nil?
173
- out = `/usr/libexec/PlistBuddy -c "Print :#{key}" #{path}`.chomp
173
+ out = `/usr/libexec/PlistBuddy -c "Print :#{key}" "#{path}"`.chomp
174
174
  raise ArgumentError, out unless $?.success?
175
175
  out
176
176
  end
@@ -185,10 +185,10 @@ module XCRes
185
185
  def read_strings_file(path)
186
186
  raise ArgumentError, "File '#{path}' doesn't exist" unless path.exist?
187
187
  raise ArgumentError, "File '#{path}' is not a file" unless path.file?
188
- error = `plutil -lint -s "#{path}"`
189
- return warn "File %s is malformed:\n#{error}", path.to_s unless $?.success?
188
+ error = `plutil -lint -s "#{path}" 2>&1`
189
+ raise ArgumentError, "File %s is malformed:\n#{error}" % path.to_s unless $?.success?
190
190
  json_or_error = `plutil -convert json "#{path}" -o -`.chomp
191
- return warn "File %s couldn't be converted to JSON.\n#{json_or_error}", path.to_s unless $?.success?
191
+ raise ArgumentError, "File %s couldn't be converted to JSON.\n#{json_or_error}" % path.to_s unless $?.success?
192
192
  JSON.parse(json_or_error.force_encoding('UTF-8'))
193
193
  rescue EncodingError => e
194
194
  raise StandardError, "Encoding error in #{path}: #{e}"
@@ -239,6 +239,9 @@ module XCRes
239
239
  # Load strings file contents
240
240
  strings = read_strings_file(path)
241
241
 
242
+ # Reject generated identifiers used by Interface Builder
243
+ strings.reject! { |key, _| /^[a-zA-Z0-9]{3}(-[a-zA-Z0-9]{3}){2}/.match(key) }
244
+
242
245
  keys = Hash[strings.map do |key, value|
243
246
  [key, { value: key, comment: value.gsub(/[\r\n]/, ' ') }]
244
247
  end]
@@ -167,8 +167,9 @@ class XCRes::InstallCommand < XCRes::ProjectCommand
167
167
  #
168
168
  def prefix_headers
169
169
  @prefix_headers ||= target.build_configurations.map do |config|
170
- Pathname(config.build_settings['GCC_PREFIX_HEADER'])
171
- end.flatten.to_set
170
+ setting = config.build_settings['GCC_PREFIX_HEADER']
171
+ setting ? Pathname(setting) : nil
172
+ end.flatten.compact.to_set
172
173
  end
173
174
 
174
175
  end
@@ -4,6 +4,6 @@ module XCRes
4
4
  #
5
5
  # XCRes’s version, following [semver](http://semver.org).
6
6
  #
7
- VERSION = "0.4.2"
7
+ VERSION = "0.4.3"
8
8
 
9
9
  end
@@ -13,3 +13,6 @@
13
13
  // An Example Comment
14
14
  "example" = "Lorem Ipsum";
15
15
  "en_exclusive" = "Only in english";
16
+
17
+ // Strings from Storyboards
18
+ "123-abc-3e7.text" = "Hello Storyboards";
@@ -0,0 +1 @@
1
+ "test" = "with missing semicolon"
@@ -1,3 +1,3 @@
1
1
  xcres version --verbose --no-ansi 2>&1
2
2
  Ⓥ Verbose mode is enabled.
3
- 0.4.2
3
+ 0.4.3
@@ -13,6 +13,8 @@ describe 'XCRes::StringsAnalyzer' do
13
13
 
14
14
  @analyzer = subject.new(@target)
15
15
  @analyzer.logger = stub('Logger', :log)
16
+ @analyzer.expects(:warn).never
17
+ @analyzer.expects(:error).never
16
18
  end
17
19
 
18
20
  describe "#initialize" do
@@ -96,4 +98,34 @@ describe 'XCRes::StringsAnalyzer' do
96
98
  end
97
99
  end
98
100
 
101
+ describe "#read_strings_file" do
102
+ it 'should read a valid file' do
103
+ @analyzer.read_strings_file(fixture_path + 'Example/Example/en.lproj/Localizable.strings').should == {
104
+ "foo" => "Foo String",
105
+ "bar" => "Bar String",
106
+ "en_exclusive" => "Only in english",
107
+ "example" => "Lorem Ipsum",
108
+ "123-abc-3e7.text" => "Hello Storyboards",
109
+ }
110
+ end
111
+
112
+ it 'should raise an error for an invalid file' do
113
+ proc do
114
+ @analyzer.read_strings_file(fixture_path + 'StringsFiles/syntax_error_missing_semicolon.strings')
115
+ end.should.raise(StandardError).message.should.include "Old-style plist parser: missing semicolon in dictionary on line 2."
116
+ end
117
+ end
118
+
119
+ describe "#keys_by_file" do
120
+ it 'should return the string keys hash' do
121
+ path = fixture_path + 'Example/Example/en.lproj/Localizable.strings'
122
+ @analyzer.keys_by_file(path).should == {
123
+ "foo" => { value: "foo", comment: "Foo String" },
124
+ "bar" => { value: "bar", comment: "Bar String" },
125
+ "en_exclusive" => { value: "en_exclusive", comment: "Only in english" },
126
+ "example" => { value: "example", comment: "Lorem Ipsum" },
127
+ }
128
+ end
129
+ end
130
+
99
131
  end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe 'XCRes::InstallCommand' do
4
+
5
+ def subject
6
+ XCRes::InstallCommand
7
+ end
8
+
9
+ before do
10
+ @cmd = subject.new('xcres', [], {})
11
+ @cmd.stubs(:project).returns(xcodeproj)
12
+ end
13
+
14
+ describe '#prefix_headers' do
15
+ it 'should return the expected prefix headers' do
16
+ @cmd.prefix_headers.to_a.should == [Pathname('Example/Example-Prefix.pch')]
17
+ end
18
+
19
+ it 'should return empty array if a target has no value for GCC_PREFIX_HEADER' do
20
+ @cmd.target.build_configurations.each do |config|
21
+ config.build_settings.stubs(:[]).with('GCC_PREFIX_HEADER').returns(nil)
22
+ end
23
+ @cmd.prefix_headers.to_a.should == []
24
+ end
25
+ end
26
+
27
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcres
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marius Rackwitz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-16 00:00:00.000000000 Z
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -289,6 +289,7 @@ files:
289
289
  - spec/fixtures/ExampleOSX/ExampleOSXTests/ExampleOSXTests-Info.plist
290
290
  - spec/fixtures/ExampleOSX/ExampleOSXTests/ExampleOSXTests.m
291
291
  - spec/fixtures/ExampleOSX/ExampleOSXTests/en.lproj/InfoPlist.strings
292
+ - spec/fixtures/StringsFiles/syntax_error_missing_semicolon.strings
292
293
  - spec/integration.rb
293
294
  - spec/integration/build-keyword-clash/after/Example/Example.xcodeproj.yaml
294
295
  - spec/integration/build-keyword-clash/after/Example/Example/AppDelegate.h
@@ -519,6 +520,7 @@ files:
519
520
  - spec/unit/builder/file_builder_spec.rb
520
521
  - spec/unit/builder/resources_builder_spec.rb
521
522
  - spec/unit/builder/string_builder_spec.rb
523
+ - spec/unit/command/install_command_spec.rb
522
524
  - spec/unit/command/main_command_spec.rb
523
525
  - spec/unit/command/project_command_spec.rb
524
526
  - spec/unit/helper/file_helper_spec.rb
@@ -592,6 +594,7 @@ test_files:
592
594
  - spec/fixtures/ExampleOSX/ExampleOSXTests/ExampleOSXTests-Info.plist
593
595
  - spec/fixtures/ExampleOSX/ExampleOSXTests/ExampleOSXTests.m
594
596
  - spec/fixtures/ExampleOSX/ExampleOSXTests/en.lproj/InfoPlist.strings
597
+ - spec/fixtures/StringsFiles/syntax_error_missing_semicolon.strings
595
598
  - spec/integration.rb
596
599
  - spec/integration/build-keyword-clash/after/Example/Example.xcodeproj.yaml
597
600
  - spec/integration/build-keyword-clash/after/Example/Example/AppDelegate.h
@@ -822,6 +825,7 @@ test_files:
822
825
  - spec/unit/builder/file_builder_spec.rb
823
826
  - spec/unit/builder/resources_builder_spec.rb
824
827
  - spec/unit/builder/string_builder_spec.rb
828
+ - spec/unit/command/install_command_spec.rb
825
829
  - spec/unit/command/main_command_spec.rb
826
830
  - spec/unit/command/project_command_spec.rb
827
831
  - spec/unit/helper/file_helper_spec.rb