cocoapods-square-stable 0.19.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1296 -0
  3. data/LICENSE +20 -0
  4. data/README.md +94 -0
  5. data/bin/pod +16 -0
  6. data/bin/sandbox-pod +120 -0
  7. data/lib/cocoapods.rb +77 -0
  8. data/lib/cocoapods/command.rb +116 -0
  9. data/lib/cocoapods/command/help.rb +23 -0
  10. data/lib/cocoapods/command/inter_process_communication.rb +178 -0
  11. data/lib/cocoapods/command/list.rb +77 -0
  12. data/lib/cocoapods/command/outdated.rb +56 -0
  13. data/lib/cocoapods/command/podfile_info.rb +91 -0
  14. data/lib/cocoapods/command/project.rb +88 -0
  15. data/lib/cocoapods/command/push.rb +172 -0
  16. data/lib/cocoapods/command/repo.rb +145 -0
  17. data/lib/cocoapods/command/search.rb +61 -0
  18. data/lib/cocoapods/command/setup.rb +134 -0
  19. data/lib/cocoapods/command/spec.rb +590 -0
  20. data/lib/cocoapods/config.rb +231 -0
  21. data/lib/cocoapods/downloader.rb +59 -0
  22. data/lib/cocoapods/executable.rb +118 -0
  23. data/lib/cocoapods/external_sources.rb +363 -0
  24. data/lib/cocoapods/file_list.rb +36 -0
  25. data/lib/cocoapods/gem_version.rb +7 -0
  26. data/lib/cocoapods/generator/acknowledgements.rb +107 -0
  27. data/lib/cocoapods/generator/acknowledgements/markdown.rb +40 -0
  28. data/lib/cocoapods/generator/acknowledgements/plist.rb +64 -0
  29. data/lib/cocoapods/generator/bridge_support.rb +22 -0
  30. data/lib/cocoapods/generator/copy_resources_script.rb +54 -0
  31. data/lib/cocoapods/generator/dummy_source.rb +22 -0
  32. data/lib/cocoapods/generator/prefix_header.rb +82 -0
  33. data/lib/cocoapods/generator/target_environment_header.rb +86 -0
  34. data/lib/cocoapods/generator/xcconfig.rb +185 -0
  35. data/lib/cocoapods/hooks/installer_representation.rb +134 -0
  36. data/lib/cocoapods/hooks/library_representation.rb +94 -0
  37. data/lib/cocoapods/hooks/pod_representation.rb +74 -0
  38. data/lib/cocoapods/installer.rb +571 -0
  39. data/lib/cocoapods/installer/analyzer.rb +559 -0
  40. data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +253 -0
  41. data/lib/cocoapods/installer/file_references_installer.rb +179 -0
  42. data/lib/cocoapods/installer/pod_source_installer.rb +248 -0
  43. data/lib/cocoapods/installer/target_installer.rb +379 -0
  44. data/lib/cocoapods/installer/user_project_integrator.rb +180 -0
  45. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +224 -0
  46. data/lib/cocoapods/library.rb +202 -0
  47. data/lib/cocoapods/open_uri.rb +24 -0
  48. data/lib/cocoapods/project.rb +209 -0
  49. data/lib/cocoapods/resolver.rb +212 -0
  50. data/lib/cocoapods/sandbox.rb +343 -0
  51. data/lib/cocoapods/sandbox/file_accessor.rb +217 -0
  52. data/lib/cocoapods/sandbox/headers_store.rb +96 -0
  53. data/lib/cocoapods/sandbox/path_list.rb +208 -0
  54. data/lib/cocoapods/sources_manager.rb +276 -0
  55. data/lib/cocoapods/user_interface.rb +304 -0
  56. data/lib/cocoapods/user_interface/error_report.rb +101 -0
  57. data/lib/cocoapods/validator.rb +350 -0
  58. metadata +238 -0
@@ -0,0 +1,23 @@
1
+ module Pod
2
+ class Command
3
+ class Help < Command
4
+ self.summary = 'Show help for the given command.'
5
+ self.arguments = '[COMMAND]'
6
+
7
+ def initialize(argv)
8
+ @help_command = Pod::Command.parse(argv) unless argv.empty?
9
+ super
10
+ end
11
+
12
+ def run
13
+ help_command.help!
14
+ end
15
+
16
+ private
17
+
18
+ def help_command
19
+ @help_command || self
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,178 @@
1
+ module Pod
2
+ class Command
3
+ class IPC < Command
4
+
5
+ self.abstract_command = true
6
+ self.summary = 'Inter-process communication'
7
+
8
+ def output_pipe
9
+ STDOUT
10
+ end
11
+
12
+ #-----------------------------------------------------------------------#
13
+
14
+ class Spec < IPC
15
+
16
+ self.summary = 'Converts a podspec to YAML.'
17
+ self.description = 'Converts a podspec to YAML and prints it to STDOUT.'
18
+ self.arguments = 'PATH'
19
+
20
+ def initialize(argv)
21
+ @path = argv.shift_argument
22
+ super
23
+ end
24
+
25
+ def validate!
26
+ super
27
+ help! "A specification path is required." unless @path
28
+ end
29
+
30
+ def run
31
+ spec = Specification.from_file(@path)
32
+ output_pipe.puts spec.to_yaml
33
+ end
34
+
35
+ end
36
+
37
+ #-----------------------------------------------------------------------#
38
+
39
+ class Podfile < IPC
40
+
41
+ self.summary = 'Converts a Podfile to YAML.'
42
+ self.description = 'Converts a Podfile to YAML and prints it to STDOUT.'
43
+ self.arguments = 'PATH'
44
+
45
+ def initialize(argv)
46
+ @path = argv.shift_argument
47
+ super
48
+ end
49
+
50
+ def validate!
51
+ super
52
+ help! "A Podfile path is required." unless @path
53
+ end
54
+
55
+ def run
56
+ podfile = Pod::Podfile.from_file(@path)
57
+ output_pipe.puts podfile.to_yaml
58
+ end
59
+
60
+ end
61
+
62
+ #-----------------------------------------------------------------------#
63
+
64
+ class List < IPC
65
+
66
+ self.summary = 'Lists the specifications know to CocoaPods.'
67
+ self.description = <<-DESC
68
+ Prints to STDOUT a YAML dictionary where the keys are the name of the
69
+ specifications and the values are a dictionary with the following
70
+ keys.
71
+
72
+ - defined_in_file
73
+ - version
74
+ - authors
75
+ - summary
76
+ - description
77
+ - platforms
78
+ DESC
79
+
80
+ def run
81
+ sets = SourcesManager.all_sets
82
+ result = {}
83
+ sets.each do |set|
84
+ begin
85
+ spec = set.specification
86
+ result[spec.name] = {
87
+ 'authors' => spec.authors.keys,
88
+ 'summary' => spec.summary,
89
+ 'description' => spec.description,
90
+ 'platforms' => spec.available_platforms.map { |p| p.name.to_s },
91
+ }
92
+ rescue DSLError
93
+ next
94
+ end
95
+ end
96
+ output_pipe.puts result.to_yaml
97
+ end
98
+
99
+ end
100
+
101
+ #-----------------------------------------------------------------------#
102
+
103
+ class UpdateSearchIndex < IPC
104
+
105
+ self.summary = 'Updates the search index.'
106
+ self.description = <<-DESC
107
+ Updates the search index and prints its path to standard output.
108
+ The search index is a YAML encoded dictionary where the keys
109
+ are the names of the Pods and the values are a dictionary containing
110
+ the following information:
111
+
112
+ - version
113
+ - summary
114
+ - description
115
+ - authors
116
+ DESC
117
+
118
+ def run
119
+ SourcesManager.updated_search_index
120
+ output_pipe.puts(SourcesManager.search_index_path)
121
+ end
122
+
123
+ end
124
+
125
+ #-----------------------------------------------------------------------#
126
+
127
+ class Repl < IPC
128
+
129
+ END_OF_OUTPUT_SIGNAL = "\n\r"
130
+
131
+ self.summary = 'The repl listens to commands on standard input.'
132
+ self.description = <<-DESC
133
+ The repl listens to commands on standard input and prints their
134
+ result to standard output.
135
+
136
+ It accepts all the other ipc subcommands. The repl will signal the
137
+ end of output with the the ASCII CR+LF `\\n\\r`.
138
+ DESC
139
+
140
+ def run
141
+ print_version
142
+ signal_end_of_output
143
+ listen
144
+ end
145
+
146
+ def print_version
147
+ output_pipe.puts "version: '#{Pod::VERSION}'"
148
+ end
149
+
150
+ def signal_end_of_output
151
+ output_pipe.puts(END_OF_OUTPUT_SIGNAL)
152
+ STDOUT.flush
153
+ end
154
+
155
+ def listen
156
+ while repl_command = STDIN.gets
157
+ execute_repl_command(repl_command)
158
+ end
159
+ end
160
+
161
+ def execute_repl_command(repl_command)
162
+ if (repl_command != "\n")
163
+ repl_commands = repl_command.split
164
+ subcommand = repl_commands.shift.capitalize
165
+ arguments = repl_commands
166
+ subcommand_class = Pod::Command::IPC.const_get(subcommand)
167
+ subcommand_class.new(CLAide::ARGV.new(arguments)).run
168
+ signal_end_of_output
169
+ end
170
+ end
171
+
172
+ end
173
+
174
+ #-----------------------------------------------------------------------#
175
+
176
+ end
177
+ end
178
+ end
@@ -0,0 +1,77 @@
1
+ module Pod
2
+ class Command
3
+ class List < Command
4
+ self.summary = 'List pods'
5
+ self.description = 'Lists all available pods.'
6
+
7
+ def self.options
8
+ [[
9
+ "--update", "Run `pod repo update` before listing",
10
+ "--stats", "Show additional stats (like GitHub watchers and forks)"
11
+ ]].concat(super)
12
+ end
13
+
14
+ extend Executable
15
+ executable :git
16
+
17
+ def initialize(argv)
18
+ @update = argv.flag?('update')
19
+ @stats = argv.flag?('stats')
20
+ super
21
+ end
22
+
23
+ def run
24
+ update_if_necessary!
25
+
26
+ sets = SourcesManager.all_sets
27
+ sets.each { |set| UI.pod(set, :name) }
28
+ UI.puts "\n#{sets.count} pods were found"
29
+ end
30
+
31
+ def update_if_necessary!
32
+ if @update && config.verbose?
33
+ UI.section("\nUpdating Spec Repositories\n".yellow) do
34
+ Repo.new(ARGV.new(["update"])).run
35
+ end
36
+ end
37
+ end
38
+
39
+ #-----------------------------------------------------------------------#
40
+
41
+ class New < List
42
+ self.summary = 'Lists pods introduced in the master spec-repo since the last check'
43
+
44
+ def run
45
+ update_if_necessary!
46
+
47
+ days = [1,2,3,5,8]
48
+ dates, groups = {}, {}
49
+ days.each {|d| dates[d] = Time.now - 60 * 60 * 24 * d}
50
+ sets = SourcesManager.all_sets
51
+ statistics_provider = Specification::Set::Statistics.new(STATISTICS_CACHE_FILE)
52
+ creation_dates = statistics_provider.creation_dates(sets)
53
+
54
+ sets.each do |set|
55
+ set_date = creation_dates[set.name]
56
+ days.each do |d|
57
+ if set_date >= dates[d]
58
+ groups[d] = [] unless groups[d]
59
+ groups[d] << set
60
+ break
61
+ end
62
+ end
63
+ end
64
+ days.reverse.each do |d|
65
+ sets = groups[d]
66
+ next unless sets
67
+ UI.section("\nPods added in the last #{"day".pluralize(d)}".yellow) do
68
+ sorted = sets.sort_by {|s| creation_dates[s.name]}
69
+ mode = @stats ? :stats : :name
70
+ sorted.each { |set| UI.pod(set, mode, statistics_provider) }
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,56 @@
1
+ module Pod
2
+ class Command
3
+ class Outdated < Command
4
+ self.summary = 'Show outdated project dependencies'
5
+
6
+ self.description = <<-DESC
7
+ Shows the outdated pods in the current Podfile.lock, but only those from
8
+ spec repos, not those from local/external sources or `:head` versions.
9
+ DESC
10
+
11
+ def self.options
12
+ [["--no-repo-update", "Skip running `pod repo update` before install"]].concat(super)
13
+ end
14
+
15
+ def initialize(argv)
16
+ config.skip_repo_update = argv.flag?('repo-update', config.skip_repo_update)
17
+ super
18
+ end
19
+
20
+ # @todo the command report new dependencies added to the Podfile as
21
+ # updates.
22
+ #
23
+ # @todo fix.
24
+ #
25
+ def run
26
+ verify_podfile_exists!
27
+ verify_lockfile_exists!
28
+
29
+ lockfile = config.lockfile
30
+ pods = lockfile.pod_names
31
+ updates = []
32
+ pods.each do |pod_name|
33
+ set = SourcesManager.search(Dependency.new(pod_name))
34
+ next unless set
35
+ source_version = set.versions.first
36
+ lockfile_version = lockfile.version(pod_name)
37
+ if source_version > lockfile_version
38
+ updates << [pod_name, lockfile_version, source_version]
39
+ end
40
+ end
41
+
42
+ if updates.empty?
43
+ UI.puts "No updates are available.".yellow
44
+ else
45
+ UI.section "The following updates are available:" do
46
+ updates.each do |(name, from_version, to_version)|
47
+ UI.puts "- #{name} #{from_version} -> #{to_version}"
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+
@@ -0,0 +1,91 @@
1
+ module Pod
2
+ class Command
3
+
4
+ class PodfileInfo < Command
5
+
6
+ self.summary = 'Shows information on installed Pods.'
7
+ self.description = <<-DESC
8
+ Shows information on installed Pods in current Project.
9
+ If optional `PODFILE_PATH` provided, the info will be shown for
10
+ that specific Podfile
11
+ DESC
12
+ self.arguments = '[PODFILE_PATH]'
13
+
14
+ def self.options
15
+ [
16
+ ["--all", "Show information about all Pods with dependencies that are used in a project"],
17
+ ["--md", "Output information in Markdown format"]
18
+ ].concat(super)
19
+ end
20
+
21
+ def initialize(argv)
22
+ @info_all = argv.flag?('all')
23
+ @info_in_md = argv.flag?('md')
24
+ @podfile_path = argv.shift_argument
25
+ super
26
+ end
27
+
28
+ def run
29
+ use_podfile = (@podfile_path || !config.lockfile)
30
+
31
+ if !use_podfile
32
+ UI.puts "Using lockfile" if config.verbose?
33
+ verify_lockfile_exists!
34
+ lockfile = config.lockfile
35
+ pods = lockfile.pod_names
36
+ if @info_all
37
+ deps = lockfile.dependencies.map{|d| d.name}
38
+ pods = (deps + pods).uniq
39
+ end
40
+ elsif @podfile_path
41
+ podfile = Pod::Podfile.from_file(@podfile_path)
42
+ pods = pods_from_podfile(podfile)
43
+ else
44
+ verify_podfile_exists!
45
+ podfile = config.podfile
46
+ pods = pods_from_podfile(podfile)
47
+ end
48
+
49
+ UI.puts "\nPods used:\n".yellow unless @info_in_md
50
+ pods_info(pods, @info_in_md)
51
+ end
52
+
53
+ def pods_from_podfile(podfile)
54
+ pods = []
55
+ podfile.root_target_definitions.each {|e| h = e.to_hash; pods << h['dependencies'] if h['dependencies']}
56
+ pods.flatten!
57
+ pods.collect! {|pod| (pod.is_a?(Hash)) ? pod.keys.first : pod}
58
+ end
59
+
60
+ def pods_info_hash(pods, keys=[:name, :homepage, :summary])
61
+ pods_info = []
62
+ pods.each do |pod|
63
+ spec = (Pod::SourcesManager.search_by_name(pod).first rescue nil)
64
+ if spec
65
+ info = {}
66
+ keys.each { |k| info[k] = spec.specification.send(k) }
67
+ pods_info << info
68
+ else
69
+
70
+ end
71
+
72
+ end
73
+ pods_info
74
+ end
75
+
76
+ def pods_info(pods, in_md=false)
77
+ pods = pods_info_hash(pods, [:name, :homepage, :summary])
78
+
79
+ pods.each do |pod|
80
+ if in_md
81
+ UI.puts "* [#{pod[:name]}](#{pod[:homepage]}) - #{pod[:summary]}"
82
+ else
83
+ UI.puts "- #{pod[:name]} - #{pod[:summary]}"
84
+ end
85
+ end
86
+ end
87
+
88
+ end
89
+
90
+ end
91
+ end
@@ -0,0 +1,88 @@
1
+ module Pod
2
+ class Command
3
+
4
+ # Provides support the common behaviour of the `install` and `update`
5
+ # commands.
6
+ #
7
+ module Project
8
+ module Options
9
+ def options
10
+ [
11
+ ["--no-clean", "Leave SCM dirs like `.git' and `.svn' intact after downloading"],
12
+ ["--no-integrate", "Skip integration of the Pods libraries in the Xcode project(s)"],
13
+ ["--no-repo-update", "Skip running `pod repo update` before install"],
14
+ ].concat(super)
15
+ end
16
+ end
17
+
18
+ def self.included(base)
19
+ base.extend Options
20
+ end
21
+
22
+ def initialize(argv)
23
+ config.clean = argv.flag?('clean', config.clean)
24
+ config.integrate_targets = argv.flag?('integrate', config.integrate_targets)
25
+ config.skip_repo_update = !argv.flag?('repo-update', !config.skip_repo_update)
26
+ super
27
+ end
28
+
29
+ # Runs the installer.
30
+ #
31
+ # @param [update] whether the installer should be run in update mode.
32
+ #
33
+ # @return [void]
34
+ #
35
+ def run_install_with_update(update)
36
+ installer = Installer.new(config.sandbox, config.podfile, config.lockfile)
37
+ installer.update_mode = update
38
+ installer.install!
39
+ end
40
+ end
41
+
42
+ #-------------------------------------------------------------------------#
43
+
44
+ class Install < Command
45
+ include Project
46
+
47
+ self.summary = 'Install project dependencies'
48
+
49
+ self.description = <<-DESC
50
+ Downloads all dependencies defined in `Podfile' and creates an Xcode
51
+ Pods library project in `./Pods'.
52
+
53
+ The Xcode project file should be specified in your `Podfile` like this:
54
+
55
+ xcodeproj 'path/to/XcodeProject'
56
+
57
+ If no xcodeproj is specified, then a search for an Xcode project will
58
+ be made. If more than one Xcode project is found, the command will
59
+ raise an error.
60
+
61
+ This will configure the project to reference the Pods static library,
62
+ add a build configuration file, and add a post build script to copy
63
+ Pod resources.
64
+ DESC
65
+
66
+ def run
67
+ verify_podfile_exists!
68
+ run_install_with_update(false)
69
+ end
70
+ end
71
+
72
+ #-------------------------------------------------------------------------#
73
+
74
+ class Update < Command
75
+ include Project
76
+
77
+ self.summary = 'Update outdated project dependencies'
78
+
79
+ def run
80
+ verify_podfile_exists!
81
+ verify_lockfile_exists!
82
+ run_install_with_update(true)
83
+ end
84
+ end
85
+
86
+ end
87
+ end
88
+