xcodeproj 0.4.0.rc6 → 0.4.0.rc7

Sign up to get free protection for your applications and to get access to all the features.
data/lib/xcodeproj.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Xcodeproj
2
- VERSION = '0.4.0.rc6'
2
+ VERSION = '0.4.0.rc7'
3
3
 
4
4
  class PlainInformative < StandardError
5
5
  end
@@ -66,11 +66,14 @@ module Xcodeproj
66
66
 
67
67
  rescue Interrupt
68
68
  puts "[!] Cancelled".red
69
- Config.instance.verbose? ? raise : exit(1)
69
+ #Config.instance.verbose? ? raise : exit(1)
70
+ exit(1)
70
71
 
71
72
  rescue Exception => e
72
73
  puts e.message
73
- puts *e.backtrace
74
+ unless e.is_a?(Informative)
75
+ puts *e.backtrace
76
+ end
74
77
  exit 1
75
78
  end
76
79
 
@@ -2,15 +2,14 @@ module Xcodeproj
2
2
  class Command
3
3
  class ProjectDiff < Command
4
4
  def self.banner
5
- %{Installing dependencies of a project:
5
+ %{Shows the difference between two projects:
6
6
 
7
7
  $ project-diff PROJECT_1 PROJECT_2
8
8
 
9
- Shows the difference between two projects in an UUID agnostic fashion.
9
+ It shows the difference in a UUID agnostic fashion.
10
10
 
11
11
  To reduce the noise (and to simplify implementation) differences in the
12
- other of arrays are ignored.
13
- }
12
+ order of arrays are ignored.}
14
13
  end
15
14
 
16
15
  def self.options
@@ -20,6 +19,9 @@ module Xcodeproj
20
19
  def initialize(argv)
21
20
  @path_project1 = argv.shift_argument
22
21
  @path_project2 = argv.shift_argument
22
+ unless @path_project1 && @path_project2
23
+ raise Informative, "Two project paths are required."
24
+ end
23
25
  @keys_to_ignore = []
24
26
  while (idx = argv.index('--ignore'))
25
27
  @keys_to_ignore << argv.delete_at(idx + 1)
@@ -2,24 +2,16 @@ module Xcodeproj
2
2
  class Command
3
3
  class Show < Command
4
4
  def self.banner
5
- %{Installing dependencies of a project:
5
+ %{Shows an overview of a project in a YAML representation.'
6
6
 
7
- $ project-diff PROJECT_1 PROJECT_2
7
+ $ show [PROJECT]
8
8
 
9
- Shows a YAML reppresentation of a project.
10
- }
11
- end
12
-
13
- def self.options
14
- [
15
- ["--project PATH", "The Xcode project document to use."],
16
- ].concat(super)
9
+ If no `PROJECT' is specified then the current work directory is searched
10
+ for one.}
17
11
  end
18
12
 
19
13
  def initialize(argv)
20
- if argv.option('--project')
21
- @xcodeproj_path = File.expand_path(argv.shift_argument)
22
- end
14
+ @xcodeproj_path = File.expand_path(argv.shift_argument)
23
15
  super unless argv.empty?
24
16
  end
25
17
 
@@ -2,12 +2,11 @@ module Xcodeproj
2
2
  class Command
3
3
  class TargetDiff < Command
4
4
  def self.banner
5
- %{Installing dependencies of a project:
5
+ %{Shows the difference between two targets:
6
6
 
7
7
  $ targets-diff [target 1] [target 2]
8
8
 
9
- Shows the difference between two targets. (Only build source files atm.)
10
- }
9
+ Only supports build source files atm.}
11
10
  end
12
11
 
13
12
  def self.options
@@ -176,13 +176,13 @@ module Xcodeproj
176
176
  #
177
177
  def new_from_plist(uuid, objects_by_uuid_plist, root_object = false)
178
178
  attributes = objects_by_uuid_plist[uuid]
179
- raise "[Xcodeproj] Unable to find attributes for UUID #{uuid}" unless attributes
180
- klass = Object.const_get(attributes['isa'])
181
- object = klass.new(self, uuid)
182
- object.add_referrer(self) if root_object
183
-
184
- object.configure_with_plist(objects_by_uuid_plist)
185
- object
179
+ if attributes
180
+ klass = Object.const_get(attributes['isa'])
181
+ object = klass.new(self, uuid)
182
+ object.add_referrer(self) if root_object
183
+ object.configure_with_plist(objects_by_uuid_plist)
184
+ object
185
+ end
186
186
  end
187
187
 
188
188
  # @return [Hash] The plist representation of the project.
@@ -187,7 +187,7 @@ module Xcodeproj
187
187
  to_one_attributes.each do |attrb|
188
188
  ref_uuid = object_plist[attrb.plist_name]
189
189
  if ref_uuid
190
- ref = project.objects_by_uuid[ref_uuid] || project.new_from_plist(ref_uuid, objects_by_uuid_plist)
190
+ ref = object_with_uuid(ref_uuid, objects_by_uuid_plist, attrb)
191
191
  attrb.set_value(self, ref)
192
192
  end
193
193
  object_plist.delete(attrb.plist_name)
@@ -197,7 +197,7 @@ module Xcodeproj
197
197
  ref_uuids = object_plist[attrb.plist_name] || []
198
198
  list = attrb.get_value(self)
199
199
  ref_uuids.each do |uuid|
200
- list << object_with_uuid(uuid, objects_by_uuid_plist)
200
+ list << object_with_uuid(uuid, objects_by_uuid_plist, attrb)
201
201
  end
202
202
  object_plist.delete(attrb.plist_name)
203
203
  end
@@ -208,7 +208,7 @@ module Xcodeproj
208
208
  hashes.each do |hash|
209
209
  dictionary = ObjectDictionary.new(attrb, self)
210
210
  hash.each do |key, uuid|
211
- dictionary[key] = object_with_uuid(uuid, objects_by_uuid_plist)
211
+ dictionary[key] = object_with_uuid(uuid, objects_by_uuid_plist, attrb)
212
212
  end
213
213
  list << dictionary
214
214
  end
@@ -218,21 +218,45 @@ module Xcodeproj
218
218
  unless object_plist.empty?
219
219
  raise "[!] Xcodeproj doesn't know about the following attributes " \
220
220
  "#{object_plist} for the '#{isa}' isa.\n" \
221
- "Please file and issue: https://github.com/CocoaPods/Xcodeproj/issues/new"
221
+ "Please file an issue: https://github.com/CocoaPods/Xcodeproj/issues/new"
222
222
  end
223
223
  end
224
224
 
225
- def object_with_uuid(uuid, objects_by_uuid_plist)
226
- project.objects_by_uuid[uuid] || project.new_from_plist(uuid, objects_by_uuid_plist)
225
+ # Initializes and returns the object with the given uuid.
226
+ #
227
+ # @param [String] uuid
228
+ # The UUID of the object that should be initialized.
229
+ #
230
+ # @param [Hash{String=>String}] objects_by_uuid_plist
231
+ # The hash contained by `objects` key of the plist containing
232
+ # the information about the object that should be initialized.
233
+ #
234
+ # @param [AbstractObjectAttribute] attribute
235
+ # The attribute that requested the object. It is used only for
236
+ # exceptions.
237
+ #
238
+ # @raise If the hash for the given UUID contains an unknown ISA.
239
+ #
240
+ # @raise If the UUID can't be found in the objects hash.
241
+ #
242
+ # @return [AbstractObject] the initialized object.
243
+ #
244
+ def object_with_uuid(uuid, objects_by_uuid_plist, attribute)
245
+ unless object = project.objects_by_uuid[uuid] || project.new_from_plist(uuid, objects_by_uuid_plist)
246
+ raise "`#{inspect}` attempted to initialize an object with an unknown UUID: "\
247
+ "`#{uuid}` for attribute: `#{attribute.name}`\n" \
248
+ "Please file and issue: https://github.com/CocoaPods/Xcodeproj/issues/new"
249
+ end
250
+ object
227
251
  rescue NameError => exception
228
252
  attributes = objects_by_uuid_plist[uuid]
229
253
  raise "`#{isa}` attempted to initialize an object with unknown ISA "\
230
254
  "`#{attributes['isa']}` from attributes: `#{attributes}`\n" \
231
- "Please file and issue: https://github.com/CocoaPods/Xcodeproj/issues/new"
255
+ "Please file an issue: https://github.com/CocoaPods/Xcodeproj/issues/new"
232
256
  end
233
257
 
234
258
  # @note the key for simple and to_one attributes usually appears only
235
- # if there is a value. To many keys always appear with an empty
259
+ # if there is a value. To-many keys always appear with an empty
236
260
  # array.
237
261
  #
238
262
  def to_plist
@@ -250,7 +274,7 @@ module Xcodeproj
250
274
  end
251
275
 
252
276
  to_many_attributes.each do |attrb|
253
- list = attrb.get_value(self)
277
+ list = attrb.get_value(self)
254
278
  plist[attrb.plist_name] = list.uuids
255
279
  end
256
280
 
@@ -263,7 +287,7 @@ module Xcodeproj
263
287
  end
264
288
  alias :to_hash :to_plist
265
289
 
266
- # Returns a cascade reppresentation of the object without UUIDs.
290
+ # Returns a cascade representation of the object without UUIDs.
267
291
  #
268
292
  # This method is designed to work in conjuction with {Hash#recursive_diff}
269
293
  # to provie a complete, yet redable, diff of two projects *not* affected by
@@ -23,6 +23,13 @@ module Xcodeproj
23
23
  #
24
24
  attribute :file_type, String
25
25
 
26
+ # @return [String] the pattern of the files that should be processed by
27
+ # this rule. This attribute is an alternative to to `file_type`.
28
+ #
29
+ # E.g. `*.css`.
30
+ #
31
+ attribute :file_patterns, String
32
+
26
33
  # @return [String] whether the rule is editable.
27
34
  #
28
35
  # E.g. `1`.
@@ -32,7 +39,7 @@ module Xcodeproj
32
39
  # @return [ObjectList<PBXFileReference>] the file references for the
33
40
  # output files.
34
41
  #
35
- has_many :output_files, PBXFileReference
42
+ attribute :output_files, Array
36
43
 
37
44
  # @return [String] the content of the script to use for the build rule.
38
45
  #
@@ -52,7 +52,7 @@ module Xcodeproj
52
52
  # @return[String] The name of the attribute in camel case.
53
53
  #
54
54
  # @example
55
- # attribute.new(:simple, project_root)
55
+ # attribute.new(:simple, :project_root)
56
56
  # attribute.plist_name #=> projectRoot
57
57
  #
58
58
  def plist_name
@@ -85,7 +85,7 @@ module Xcodeproj
85
85
  # the value.
86
86
  #
87
87
  def get_value(object)
88
- object.send("#{name}")
88
+ object.send(name)
89
89
  end
90
90
 
91
91
  # Convenience method that sets the value of this attribute for a
@@ -103,7 +103,7 @@ module Xcodeproj
103
103
  # @return [void]
104
104
  #
105
105
  def set_value(object, new_value)
106
- raise "[Xcodeproj] Set value called for to many attribute" if type == :to_many
106
+ raise "[Xcodeproj] Set value called for a to-many attribute" if type == :to_many
107
107
  object.send("#{name}=", new_value)
108
108
  end
109
109
 
@@ -117,7 +117,7 @@ module Xcodeproj
117
117
  # @return [void]
118
118
  #
119
119
  def set_default(object)
120
- raise "[Xcodeproj] Set value called for to many attribute" unless type == :simple
120
+ raise "[Xcodeproj] Set value called for a #{type} attribute" unless type == :simple
121
121
  set_value(object, default_value) if default_value
122
122
  end
123
123
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcodeproj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.rc6
4
+ version: 0.4.0.rc7
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-02 00:00:00.000000000 Z
12
+ date: 2012-11-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport