xcodeproject 0.3.8 → 0.3.9

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.
@@ -1,3 +1,3 @@
1
1
  module XcodeProject
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  require 'xcodeproject/node'
2
+ require 'rexml/document'
2
3
 
3
4
  module XcodeProject
4
5
  class XCBuildConfiguration < Node
@@ -11,5 +12,64 @@ module XcodeProject
11
12
  @name = data['name']
12
13
  @build_settings = data['buildSettings']
13
14
  end
15
+
16
+ def version (type = :major)
17
+ major = read_property('CFBundleShortVersionString')
18
+ minor = read_property('CFBundleVersion')
19
+
20
+ case type
21
+ when :major ; major
22
+ when :minor ; minor
23
+ when :both ; major + '.' + minor
24
+ else raise ArgumentError.new('Wrong argument type, expected :major, :minor or :both.')
25
+ end
26
+ end
27
+
28
+ def change_version (value, type = :major)
29
+ case type
30
+ when :major ; write_property('CFBundleShortVersionString', value)
31
+ when :minor ; write_property('CFBundleVersion', value)
32
+ else raise ArgumentError.new('Wrong argument type, expected :major or :minor.')
33
+ end
34
+ end
35
+
36
+ def increment_version (type = :major)
37
+ cv = version(type)
38
+ nv = cv.nil? ? '0' : cv.next
39
+
40
+ change_version(nv, type)
41
+ end
42
+
43
+ private
44
+
45
+ def plist_path
46
+ root.absolute_path(build_settings['INFOPLIST_FILE'])
47
+ end
48
+
49
+ def read_property (key)
50
+ file = File.new(plist_path)
51
+ doc = REXML::Document.new(file)
52
+
53
+ doc.elements.each("plist/dict/key") do |e|
54
+ return e.next_element.text if e.text == key
55
+ end
56
+ nil
57
+ end
58
+
59
+ def write_property (key, value)
60
+ file = File.new(plist_path)
61
+ doc = REXML::Document.new(file)
62
+
63
+ doc.elements.each("plist/dict/key") do |e|
64
+ e.next_element.text = value if e.text == key
65
+ end
66
+
67
+ formatter = REXML::Formatters::Default.new
68
+ File.open(plist_path, 'w') do |data|
69
+ formatter.write(doc, data)
70
+ end
71
+ nil
72
+ end
73
+
14
74
  end
15
75
  end
@@ -21,7 +21,7 @@
21
21
  <key>CFBundleSignature</key>
22
22
  <string>????</string>
23
23
  <key>CFBundleVersion</key>
24
- <string>1.0</string>
24
+ <string>345</string>
25
25
  <key>LSRequiresIPhoneOS</key>
26
26
  <true/>
27
27
  <key>UIRequiredDeviceCapabilities</key>
@@ -0,0 +1,108 @@
1
+ require "spec_helper"
2
+
3
+ describe XcodeProject::XCBuildConfiguration do
4
+ before(:each) { @data = prepare_example_project.read }
5
+ let(:obj) { obj = @data.target('example').config('Release') }
6
+
7
+ describe "#plist_path" do
8
+ it "returns plist file path" do
9
+ obj.send(:plist_path).should eql(example_project_dir.join('example/example-Info.plist'))
10
+ end
11
+ end
12
+
13
+ describe "#version" do
14
+ context "by default" do
15
+ it "returns major version" do
16
+ obj.version.should eql(obj.version(:major))
17
+ end
18
+ end
19
+ context "if passed :major" do
20
+ it "returns major version" do
21
+ obj.version(:major).should eql('1.0')
22
+ end
23
+ end
24
+ context "if passed :minor" do
25
+ it "returns minor version" do
26
+ obj.version(:minor).should eql('345')
27
+ end
28
+ end
29
+ context "if passed :both" do
30
+ it "returns both, major and minor versions" do
31
+ obj.version(:both).should eql('1.0.345')
32
+ end
33
+ end
34
+ end
35
+
36
+ describe "#change_version" do
37
+ let(:version) { '2.0' }
38
+
39
+ context "by default" do
40
+ it "changes major version" do
41
+ obj.change_version(version)
42
+ obj.version(:major).should eql(version)
43
+ end
44
+ end
45
+
46
+ context "if passed :major" do
47
+ it "changes major version" do
48
+ obj.change_version(version, :major)
49
+ obj.version(:major).should eql(version)
50
+ end
51
+ end
52
+
53
+ context "if passed :minor" do
54
+ it "changes minor version" do
55
+ obj.change_version(version, :minor)
56
+ obj.version(:minor).should eql(version)
57
+ end
58
+ end
59
+ end
60
+
61
+ describe "#increment_version" do
62
+ context "by default" do
63
+ let(:next_version) { '1.1' }
64
+
65
+ it "increments major version" do
66
+ obj.increment_version
67
+ obj.version(:major).should eql(next_version)
68
+ end
69
+ end
70
+
71
+ context "if passed :major" do
72
+ let(:next_version) { '1.1' }
73
+
74
+ it "increments major version" do
75
+ obj.increment_version(:major)
76
+ obj.version(:major).should eql(next_version)
77
+ end
78
+ end
79
+
80
+ context "if passed :minor" do
81
+ let(:next_version) { '346' }
82
+
83
+ it "increments minor version" do
84
+ obj.increment_version(:minor)
85
+ obj.version(:minor).should eql(next_version)
86
+ end
87
+ end
88
+ end
89
+
90
+ describe "#read_property" do
91
+ let(:key) { 'CFBundleShortVersionString' }
92
+ let(:value) { '1.0' }
93
+
94
+ it "read a property by key from plist file" do
95
+ obj.send(:read_property, key).should eql(value)
96
+ end
97
+ end
98
+
99
+ describe "#write_property" do
100
+ let(:key) { 'CFBundleShortVersionString' }
101
+ let(:value) { '1.1' }
102
+
103
+ it "write value by key to plist file" do
104
+ obj.send(:write_property, key, value)
105
+ obj.send(:read_property, key).should eql(value)
106
+ end
107
+ end
108
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 8
9
- version: 0.3.8
8
+ - 9
9
+ version: 0.3.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Andrey Nesterov
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-08-22 00:00:00 +04:00
17
+ date: 2012-08-27 00:00:00 +04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -157,6 +157,7 @@ files:
157
157
  - spec/pbx_project_spec.rb
158
158
  - spec/project_spec.rb
159
159
  - spec/spec_helper.rb
160
+ - spec/xc_build_configuration_spec.rb
160
161
  - spec/xc_configuration_list_spec.rb
161
162
  - xcodeproject.gemspec
162
163
  has_rdoc: true
@@ -201,4 +202,5 @@ test_files:
201
202
  - spec/pbx_project_spec.rb
202
203
  - spec/project_spec.rb
203
204
  - spec/spec_helper.rb
205
+ - spec/xc_build_configuration_spec.rb
204
206
  - spec/xc_configuration_list_spec.rb