cocoapods-core 0.17.0.rc2 → 0.17.0.rc3

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: 5a836c9588ccd3360f815711c6fa330f3ba985bf
4
- data.tar.gz: d73fd15ad606d93ed8341ca3ef011685cdfc4ca4
3
+ metadata.gz: 3fe88a6f9588e89807e637665aaa1e67f6c1b1dc
4
+ data.tar.gz: 87c2e36c0d9f900e0b812a5fa2d31f5d8c5e8aac
5
5
  SHA512:
6
- metadata.gz: 97eec73f16675a02d3aec24c4c8256b48d78be78ecf8fddbc837707ae913d2c2a632fcc2e301476cefce9806ecd70c4accf23d89775ca6228ad9022aea964bce
7
- data.tar.gz: 701710ba878f52dbfb270ec94430a2820085fa60abff0accc27a9b256920be72a5f664a72fd420487d7efabd0ef2cf491930e45e787931443d9161b2274c1d15
6
+ metadata.gz: 274290c605f8e34c8dd2aebaa8e5cf3b87ae49f53c0e8a922ee475d65e7e65091d4d064fc54d53e6a57b5aef6f9382722ffc586f01ea45201f5bd090e48894df
7
+ data.tar.gz: 908d53de3c53997e9e2d249a06104888468469f32144880cfb188387aab1a51cfdfcc1939e65ee67b181bb61376df3cc0a9e8f12082399516fdd5b0ebb4697c0
@@ -2,5 +2,5 @@ module Pod
2
2
 
3
3
  # The version of the cocoapods-core.
4
4
  #
5
- CORE_VERSION = '0.17.0.rc2' unless defined? Pod::CORE_VERSION
5
+ CORE_VERSION = '0.17.0.rc3' unless defined? Pod::CORE_VERSION
6
6
  end
@@ -53,6 +53,12 @@ module Pod
53
53
  #
54
54
  attr_accessor :defined_in_file
55
55
 
56
+ # @return [Bool] Whether the Podfiles are equal.
57
+ #
58
+ def ==(other)
59
+ other && self.to_hash == other.to_hash
60
+ end
61
+
56
62
  # @return [String] a string representation suitable for UI output.
57
63
  #
58
64
  def to_s
@@ -10,10 +10,6 @@ module Pod
10
10
  #
11
11
  class TargetDefinition
12
12
 
13
- # @return [String, Symbol] the name of the target definition.
14
- #
15
- attr_reader :name
16
-
17
13
  # @return [TargetDefinition, Podfile] the parent target definition or the
18
14
  # Podfile if the receiver is root.
19
15
  #
@@ -28,12 +24,14 @@ module Pod
28
24
  # @option options [Bool] :exclusive
29
25
  # @see exclusive?
30
26
  #
31
- def initialize(name, parent, internal_hash = {})
32
- @name = name
27
+ def initialize(name, parent, internal_hash = nil)
28
+ @internal_hash = internal_hash || {}
33
29
  @parent = parent
34
- @internal_hash = internal_hash
35
30
  @children = []
36
31
 
32
+ unless internal_hash
33
+ self.name = name
34
+ end
37
35
  if parent.is_a?(TargetDefinition)
38
36
  parent.children << self
39
37
  end
@@ -98,7 +96,7 @@ module Pod
98
96
  # name.
99
97
  #
100
98
  def label
101
- if root? && name == :default
99
+ if root? && name == "Pods"
102
100
  "Pods"
103
101
  elsif exclusive? || parent.nil?
104
102
  "Pods-#{name}"
@@ -125,6 +123,27 @@ module Pod
125
123
 
126
124
  # @!group Attributes
127
125
 
126
+ # @return [String] the path of the project this target definition should
127
+ # link with.
128
+ #
129
+ def name
130
+ get_hash_value('name')
131
+ end
132
+
133
+ # Sets the path of the user project this target definition should link
134
+ # with.
135
+ #
136
+ # @param [String] path
137
+ # The path of the project.
138
+ #
139
+ # @return [void]
140
+ #
141
+ def name=(name)
142
+ set_hash_value('name', name)
143
+ end
144
+
145
+ #--------------------------------------#
146
+
128
147
  # Returns whether the target definition should inherit the dependencies
129
148
  # of the parent.
130
149
  #
@@ -156,11 +175,12 @@ module Pod
156
175
 
157
176
  #--------------------------------------#
158
177
 
159
- # @return [Array<String>] the list of the names of the Xcode targets with
178
+ # @return [Array<String>] The list of the names of the Xcode targets with
160
179
  # which this target definition should be linked with.
161
180
  #
162
181
  def link_with
163
- get_hash_value('link_with')
182
+ value = get_hash_value('link_with')
183
+ value unless value.nil? || value.empty?
164
184
  end
165
185
 
166
186
  # Sets the client targets that should be integrated by this definition.
@@ -176,6 +196,33 @@ module Pod
176
196
 
177
197
  #--------------------------------------#
178
198
 
199
+ # Returns whether the target definition should link with the first target
200
+ # of the project.
201
+ #
202
+ # @note This option is ignored if {link_with} is set.
203
+ #
204
+ # @return [Bool] whether is exclusive.
205
+ #
206
+ def link_with_first_target?
207
+ get_hash_value('link_with_first_target') unless link_with
208
+ end
209
+
210
+ # Sets whether the target definition should link with the first target of
211
+ # the project.
212
+ #
213
+ # @note This option is ignored if {link_with} is set.
214
+ #
215
+ # @param [Bool] flag
216
+ # Whether the definition should link with the first target.
217
+ #
218
+ # @return [void]
219
+ #
220
+ def link_with_first_target=(flag)
221
+ set_hash_value('link_with_first_target', flag)
222
+ end
223
+
224
+ #--------------------------------------#
225
+
179
226
  # @return [String] the path of the project this target definition should
180
227
  # link with.
181
228
  #
@@ -357,10 +404,12 @@ module Pod
357
404
  # target definition.
358
405
  #
359
406
  HASH_KEYS = [
407
+ 'name',
360
408
  'platform',
361
409
  'podspecs',
362
410
  'exclusive',
363
411
  'link_with',
412
+ 'link_with_first_target',
364
413
  'inhibit_all_warnings',
365
414
  'user_project_path',
366
415
  'build_configurations',
@@ -373,7 +422,7 @@ module Pod
373
422
  def to_hash
374
423
  hash = internal_hash.dup
375
424
  unless children.empty?
376
- hash['children'] = Hash[children.map { |child| [child.name, child.to_hash] }]
425
+ hash['children'] = children.map(&:to_hash)
377
426
  end
378
427
  hash
379
428
  end
@@ -385,12 +434,12 @@ module Pod
385
434
  #
386
435
  # @return [TargetDefinition] the new target definition
387
436
  #
388
- def self.from_hash(name, hash, parent)
437
+ def self.from_hash(hash, parent)
389
438
  internal_hash = hash.dup
390
- children_hashes = internal_hash.delete('children') || {}
391
- definition = TargetDefinition.new(name, parent, internal_hash)
392
- children_hashes.each do |child_name, child_hash|
393
- TargetDefinition.from_hash(child_name, child_hash, definition)
439
+ children_hashes = internal_hash.delete('children') || []
440
+ definition = TargetDefinition.new(nil, parent, internal_hash)
441
+ children_hashes.each do |child_hash|
442
+ TargetDefinition.from_hash(child_hash, definition)
394
443
  end
395
444
  definition
396
445
  end
@@ -46,7 +46,8 @@ module Pod
46
46
  self.defined_in_file = defined_in_file
47
47
  @internal_hash = internal_hash
48
48
  if block
49
- default_target_def = TargetDefinition.new(:default, self)
49
+ default_target_def = TargetDefinition.new("Pods", self)
50
+ default_target_def.link_with_first_target = true
50
51
  @root_target_definitions = [default_target_def]
51
52
  @current_target_definition = default_target_def
52
53
  instance_eval(&block)
@@ -182,7 +183,7 @@ module Pod
182
183
  #
183
184
  def to_hash
184
185
  hash = {}
185
- hash['target_definitions'] = Hash[root_target_definitions.map { |child| [child.name, child.to_hash] }]
186
+ hash['target_definitions'] = root_target_definitions.map(&:to_hash)
186
187
  hash.merge!(internal_hash)
187
188
  hash
188
189
  end
@@ -262,8 +263,8 @@ module Pod
262
263
  internal_hash = hash.dup
263
264
  target_definitions = internal_hash.delete('target_definitions') || []
264
265
  podfile = Podfile.new(path,internal_hash)
265
- target_definitions.each do |name, definition_hash|
266
- definition = TargetDefinition.from_hash(name, definition_hash, podfile)
266
+ target_definitions.each do |definition_hash|
267
+ definition = TargetDefinition.from_hash(definition_hash, podfile)
267
268
  podfile.root_target_definitions << definition
268
269
  end
269
270
  podfile
@@ -44,7 +44,7 @@ module Pod
44
44
  name <=> other.name
45
45
  end
46
46
 
47
- #---------------------------------------------------------------------------#
47
+ #-------------------------------------------------------------------------#
48
48
 
49
49
  # @!group Queering the source
50
50
 
@@ -79,19 +79,33 @@ module Pod
79
79
 
80
80
  # @return [Specification] the specification for a given version of Pod.
81
81
  #
82
+ # @param @see specification_path
83
+ #
84
+ def specification(name, version)
85
+ Specification.from_file(specification_path(name, version))
86
+ end
87
+
88
+ # Returns the path of the specification with the given name and version.
89
+ #
82
90
  # @param [String] name
83
91
  # the name of the Pod.
84
92
  #
85
93
  # @param [Version,String] version
86
94
  # the version for the specification.
87
95
  #
88
- def specification(name, version)
96
+ # @return [Pathname] The path of the specification.
97
+ #
98
+ def specification_path(name, version)
89
99
  path = repo + name + version.to_s
90
100
  specification_path = path + "#{name}.podspec.yaml"
91
101
  unless specification_path.exist?
92
102
  specification_path = path + "#{name}.podspec"
93
103
  end
94
- Specification.from_file(specification_path)
104
+ unless specification_path.exist?
105
+ raise StandardError, "Unable to find the specification #{name} " \
106
+ "(#{version}) in the #{name} source."
107
+ end
108
+ specification_path
95
109
  end
96
110
 
97
111
  # @return [Array<Specification>] all the specifications contained by the
@@ -144,7 +144,13 @@ module Pod
144
144
  def dependencies
145
145
  value = value_for_attribute(:dependencies)
146
146
  value.map do |name, requirements|
147
- Dependency.new(name, requirements)
147
+ if Array(requirements).all?{ |req| req.is_a?(String) }
148
+ Dependency.new(name, requirements)
149
+ else
150
+ raise Informative, "Unsupported parameters for `#{name}` " \
151
+ "dependency `#{requirements.to_s}` in #{spec}.\n" \
152
+ "Specifications don't support external sources"
153
+ end
148
154
  end
149
155
  end
150
156
 
@@ -54,7 +54,8 @@ module Pod
54
54
  # @raise If the versions requirement of the dependency are not
55
55
  # compatible with the previously stored dependencies.
56
56
  #
57
- # @todo This should simply return a boolean. Is cocoaPods that should raise.
57
+ # @todo This should simply return a boolean. Is CocoaPods that should
58
+ # raise.
58
59
  #
59
60
  # @return [void]
60
61
  #
@@ -84,13 +85,16 @@ module Pod
84
85
  # used to disambiguate.
85
86
  #
86
87
  def specification
87
- unless @specification
88
- sources = []
89
- versions_by_source.each{ |source, versions| sources << source if versions.include?(required_version) }
90
- source = sources.sort_by(&:name).first
91
- @specification = source.specification(name, required_version)
88
+ @specification ||= Specification.from_file(specification_path_for_version(required_version))
89
+ end
90
+
91
+ def specification_path_for_version(version)
92
+ sources = []
93
+ versions_by_source.each do |source, source_versions|
94
+ sources << source if source_versions.include?(required_version)
92
95
  end
93
- @specification
96
+ source = sources.sort_by(&:name).first
97
+ source.specification_path(name, required_version)
94
98
  end
95
99
 
96
100
  # @return [Version] the highest version that satisfies the stored
@@ -99,8 +103,12 @@ module Pod
99
103
  # @todo This should simply return nil. CocoaPods should raise instead.
100
104
  #
101
105
  def required_version
102
- versions.find { |v| dependency.match?(name, v) } ||
103
- (raise StandardError, "Required version (#{dependency}) not found for `#{name}'.\nAvailable versions: #{versions.join(', ')}")
106
+ version = versions.find { |v| dependency.match?(name, v) }
107
+ unless version
108
+ raise StandardError, "Required version (#{dependency}) not found " \
109
+ "for `#{name}`.\nAvailable versions: #{versions.join(', ')}"
110
+ end
111
+ version
104
112
  end
105
113
 
106
114
  # @return [Array<Version>] all the available versions for the Pod, sorted
@@ -110,6 +118,18 @@ module Pod
110
118
  versions_by_source.values.flatten.uniq.sort.reverse
111
119
  end
112
120
 
121
+ # @return [Version] The highest version known of the specification.
122
+ #
123
+ def highest_version
124
+ versions.first
125
+ end
126
+
127
+ # @return [Pathname] The path of the highest version.
128
+ #
129
+ def highest_version_spec_path
130
+ specification_path_for_version(highest_version)
131
+ end
132
+
113
133
  # @return [Hash{Source => Version}] all the available versions for the
114
134
  # Pod grouped by source.
115
135
  #
@@ -130,7 +150,30 @@ module Pod
130
150
  end
131
151
  alias_method :inspect, :to_s
132
152
 
133
- #-------------------------------------------------------------------------#
153
+ # Returns a hash representation of the set composed by dumb data types.
154
+ #
155
+ # @example
156
+ #
157
+ # "name" => "CocoaLumberjack",
158
+ # "versions" => { "master" => [ "1.6", "1.3.3"] },
159
+ # "highest_version" => "1.6",
160
+ # "highest_version_spec" => 'REPO/CocoaLumberjack/1.6/CocoaLumberjack.podspec'
161
+ #
162
+ # @return [Hash] The hash representation.
163
+ #
164
+ def to_hash
165
+ versions = versions_by_source.inject({}) do |memo, (source, version)|
166
+ memo[source.name] = version.map(&:to_s); memo
167
+ end
168
+ {
169
+ 'name' => name,
170
+ 'versions' => versions,
171
+ 'highest_version' => highest_version.to_s,
172
+ 'highest_version_spec' => highest_version_spec_path.to_s
173
+ }
174
+ end
175
+
176
+ #-----------------------------------------------------------------------#
134
177
 
135
178
  # The Set::External class handles Pods from external sources. Pods from
136
179
  # external sources don't use the {Source} and are initialized by a given
@@ -66,7 +66,7 @@ module Pod
66
66
  # go. This is used by the installer to group specifications by root
67
67
  # spec.
68
68
  #
69
- # @return [Bool] whether the specifications are equal.
69
+ # @return [Bool] Whether the specifications are equal.
70
70
  #
71
71
  def ==(other)
72
72
  # TODO
@@ -3,6 +3,14 @@
3
3
  module Pod
4
4
  require 'cocoapods-core/gem_version'
5
5
 
6
+ # Indicates a runtime error **not** caused by a bug.
7
+ #
8
+ class PlainInformative < StandardError; end
9
+
10
+ # Indicates an user error.
11
+ #
12
+ class Informative < PlainInformative; end
13
+
6
14
  require 'pathname'
7
15
  require 'cocoapods-core/vendor'
8
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0.rc2
4
+ version: 0.17.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-27 00:00:00.000000000 Z
12
+ date: 2013-03-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport