xcodeproj 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -24,15 +24,17 @@ module Xcodeproj
24
24
  #
25
25
  has_one :remote_ref, PBXContainerItemProxy
26
26
 
27
- # @return [String] the source tree for the path of the reference.
27
+ # @return [String] the source tree for the path of the reference.
28
28
  #
29
- # @example Possible value
30
- # "BUILT_PRODUCTS_DIR"
29
+ # @example
30
+ # "BUILT_PRODUCTS_DIR"
31
31
  #
32
32
  attribute :source_tree, String
33
33
 
34
34
  #---------------------------------------------------------------------#
35
35
 
36
+ public
37
+
36
38
  # @!group Helpers
37
39
 
38
40
  # Checks whether the reference is a proxy.
@@ -43,6 +45,8 @@ module Xcodeproj
43
45
  true
44
46
  end
45
47
 
48
+ #---------------------------------------------------------------------#
49
+
46
50
  end
47
51
  end
48
52
  end
@@ -16,11 +16,11 @@ module Xcodeproj
16
16
  # @return [Hash{String => String}] attributes the attributes of the
17
17
  # target.
18
18
  #
19
- # The hash might contain the following keys:
19
+ # @note The hash might contain the following keys:
20
20
  #
21
- # - `CLASSPREFIX`
22
- # - `LastUpgradeCheck`
23
- # - `ORGANIZATIONNAME`
21
+ # - `CLASSPREFIX`
22
+ # - `LastUpgradeCheck`
23
+ # - `ORGANIZATIONNAME`
24
24
  #
25
25
  attribute :attributes, Hash, {'LastUpgradeCheck' => '0450'}
26
26
 
@@ -107,18 +107,21 @@ module Xcodeproj
107
107
  object.send("#{name}=", new_value)
108
108
  end
109
109
 
110
- # Convenience method that sets the value of this attribute for a
111
- # given object to the default (if any). It makes sense only for
112
- # `:simple` attributes.
110
+ # Convenience method that sets the value of this attribute for a given
111
+ # object to the default (if any). It makes sense only for `:simple`
112
+ # attributes.
113
113
  #
114
- # @param [AbstractObject] object
115
- # the object for which to set the default value.
114
+ # @param [AbstractObject] object
115
+ # the object for which to set the default value.
116
+ #
117
+ # @note It is extremely important to duplicate the default values
118
+ # otherwise kittens cry!
116
119
  #
117
120
  # @return [void]
118
121
  #
119
122
  def set_default(object)
120
123
  raise "[Xcodeproj] Set value called for a #{type} attribute" unless type == :simple
121
- set_value(object, default_value) if default_value
124
+ set_value(object, default_value.dup) if default_value
122
125
  end
123
126
 
124
127
  # Checks that a given value is compatible with the attribute.
@@ -0,0 +1,26 @@
1
+ module Xcodeproj
2
+
3
+ # Manages the UI output so clients can customize it.
4
+ #
5
+ module UserInterface
6
+
7
+ # Prints a message to standard output.
8
+ #
9
+ # @return [void]
10
+ #
11
+ def self.puts(message)
12
+ STDOUT.puts message
13
+ end
14
+
15
+ # Prints a message to standard error.
16
+ #
17
+ # @return [void]
18
+ #
19
+ def self.warn(message)
20
+ STDERR.puts message
21
+ end
22
+
23
+ end
24
+ UI = UserInterface
25
+ end
26
+
@@ -3,29 +3,28 @@ require 'rexml/document'
3
3
 
4
4
  module Xcodeproj
5
5
 
6
- # The {Workspace} allows to generate, read and serialize Xcode Workspace
6
+ # Provides support for generating, reading and serializing Xcode Workspace
7
7
  # documents.
8
8
  #
9
9
  class Workspace
10
10
 
11
11
  # @return [Array<String>] the paths of the projects contained in the
12
- # workspace.
12
+ # workspace.
13
13
  #
14
14
  attr_reader :projpaths
15
15
 
16
- # Returns a new workspace initialized with the given `xcodeproj` paths.
17
- #
18
- # @param [String] projpaths
19
- # one or more `xcodeproj` paths.
16
+ # @param [Array] projpaths @see projpaths
20
17
  #
21
18
  def initialize(*projpaths)
22
- @projpaths = projpaths
19
+ @projpaths = projpaths.flatten
23
20
  end
24
21
 
22
+ #-------------------------------------------------------------------------#
23
+
25
24
  # Returns a workspace generated by reading the contents of the given path.
26
25
  #
27
- # @param [String] path
28
- # the path of the `xcworkspace` file.
26
+ # @param [String] path
27
+ # the path of the `xcworkspace` file.
29
28
  #
30
29
  # @return [Workspace] the generated workspace.
31
30
  #
@@ -40,8 +39,8 @@ module Xcodeproj
40
39
  # Returns a workspace generated by reading the contents of the given
41
40
  # XML representation.
42
41
  #
43
- # @param [String] xml
44
- # the XML representation of the workspace.
42
+ # @param [String] xml
43
+ # the XML representation of the workspace.
45
44
  #
46
45
  # @return [Workspace] the generated workspace.
47
46
  #
@@ -50,14 +49,16 @@ module Xcodeproj
50
49
  projpaths = document.get_elements("/Workspace/FileRef").map do |node|
51
50
  node.attribute("location").to_s.sub(/^group:/, '')
52
51
  end
53
- new(*projpaths)
52
+ new(projpaths)
54
53
  end
55
54
 
55
+ #-------------------------------------------------------------------------#
56
+
56
57
  # Adds a new path to the list of the of projects contained in the
57
- # workspace.
58
+ # workspace.
58
59
  #
59
- # @param [String] projpath
60
- # The path of the project to add.
60
+ # @param [String] projpath
61
+ # The path of the project to add.
61
62
  #
62
63
  # @return [void]
63
64
  #
@@ -67,8 +68,8 @@ module Xcodeproj
67
68
 
68
69
  # Checks if the workspace contains the project with the given path.
69
70
  #
70
- # @param [String] projpath
71
- # The path of the project to add.
71
+ # @param [String] projpath
72
+ # The path of the project to add.
72
73
  #
73
74
  # @return [Boolean] whether the project is contained in the workspace.
74
75
  #
@@ -94,8 +95,8 @@ module Xcodeproj
94
95
 
95
96
  # Saves the workspace at the given `xcworkspace` path.
96
97
  #
97
- # @param [String] path
98
- # the path where to save the project.
98
+ # @param [String] path
99
+ # the path where to save the project.
99
100
  #
100
101
  # @return [void]
101
102
  #
@@ -105,5 +106,8 @@ module Xcodeproj
105
106
  out << to_s
106
107
  end
107
108
  end
109
+
110
+ #-------------------------------------------------------------------------#
111
+
108
112
  end
109
113
  end
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.3
4
+ version: 0.5.0
5
5
  prerelease:
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: 2013-02-02 00:00:00.000000000 Z
12
+ date: 2013-02-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -59,6 +59,7 @@ files:
59
59
  - lib/xcodeproj/command.rb
60
60
  - lib/xcodeproj/config.rb
61
61
  - lib/xcodeproj/constants.rb
62
+ - lib/xcodeproj/differ.rb
62
63
  - lib/xcodeproj/helper.rb
63
64
  - lib/xcodeproj/project/object/build_configuration.rb
64
65
  - lib/xcodeproj/project/object/build_file.rb
@@ -76,8 +77,8 @@ files:
76
77
  - lib/xcodeproj/project/object_attributes.rb
77
78
  - lib/xcodeproj/project/object_dictionary.rb
78
79
  - lib/xcodeproj/project/object_list.rb
79
- - lib/xcodeproj/project/recursive_diff.rb
80
80
  - lib/xcodeproj/project.rb
81
+ - lib/xcodeproj/user_interface.rb
81
82
  - lib/xcodeproj/workspace.rb
82
83
  - lib/xcodeproj.rb
83
84
  - ext/xcodeproj/extconf.rb
@@ -1,116 +0,0 @@
1
- class Hash
2
-
3
- # Computes the recursive difference of two hashes.
4
- #
5
- # Useful to compare two projects.
6
- #
7
- # Inspired from 'active_support/core_ext/hash/diff'.
8
- #
9
- # @example
10
- # h1 = { :common => 'value', :changed => 'v1' }
11
- # h2 = { :common => 'value', :changed => 'v2', :addition => 'new_value' }
12
-
13
- # h1.recursive_diff(h2) == {
14
- # :changed => {
15
- # :self => 'v1',
16
- # :other => 'v2'
17
- # },
18
- # :addition => {
19
- # :self => nil,
20
- # :other => 'new_value'
21
- # }
22
- # } #=> true
23
- #
24
- # @return [Hash] Returns the recursive difference of a hash.
25
- #
26
- def recursive_diff(other, self_key = 'self', other_key = 'other')
27
- if other.is_a?(Hash)
28
- r = {}
29
- all_keys = self.keys + other.keys
30
- all_keys.each do |key|
31
- v1 = self[key]
32
- v2 = other[key]
33
- diff = v1.recursive_diff(v2, self_key, other_key)
34
- r[key] = diff if diff
35
- end
36
- r unless r == {}
37
- else
38
- super
39
- end
40
- end
41
-
42
- # @return [void]
43
- #
44
- def recursive_delete(key_to_delete)
45
- delete(key_to_delete)
46
- self.each do |key, value|
47
- case value
48
- when Hash
49
- value.recursive_delete(key_to_delete)
50
- when Array
51
- value.each { |v| v.recursive_delete(key_to_delete) if v.is_a?(Hash)}
52
- end
53
- end
54
- end
55
- end
56
-
57
-
58
- class Array
59
-
60
- # @return [Array]
61
- #
62
- def recursive_diff(other, self_key = 'self', other_key = 'other')
63
- if other.is_a?(Array)
64
- new_objects_self = (self - other)
65
- new_objects_other = (other - self)
66
- unmatched_objects_self = []
67
- array_result = []
68
-
69
- # Try to match objects to reduce noise
70
- new_objects_self.each do |value|
71
- if value.is_a?(Hash)
72
- other_value = new_objects_other.find do |other|
73
- other.is_a?(Hash) && (value['displayName'] == other['displayName'])
74
- end
75
-
76
- if other_value
77
- new_objects_other.delete(other_value)
78
- match_diff = value.recursive_diff(other_value, self_key, other_key)
79
- array_result << { value['displayName'] => match_diff} unless match_diff == {}
80
- else
81
- unmatched_objects_self << value
82
- end
83
- end
84
- end
85
-
86
- unless unmatched_objects_self.empty?
87
- array_result << {
88
- self_key => unmatched_objects_self.map do |v|
89
- { v['displayName'] => v }
90
- end
91
- }
92
- end
93
-
94
- unless new_objects_other.empty?
95
- array_result << {
96
- other_key => new_objects_other.map do |v|
97
- { v['displayName'] => v }
98
- end
99
- }
100
- end
101
-
102
- array_result unless array_result == []
103
- else
104
- super
105
- end
106
- end
107
- end
108
-
109
- class Object
110
-
111
- # @return [Hash]
112
- #
113
- def recursive_diff(other, self_key = 'self', other_key = 'other')
114
- { self_key => self, other_key => other } unless self == other
115
- end
116
- end