Class: Pod::Command::Init
- Inherits:
-
Pod::Command
- Object
- CLAide::Command
- Pod::Command
- Pod::Command::Init
- Defined in:
- lib/cocoapods/command/init.rb
Instance Method Summary collapse
-
#initialize(argv) ⇒ Init
constructor
A new instance of Init.
-
#podfile_template(project) ⇒ String
private
The text of the Podfile for the provided project.
- #run ⇒ Object
-
#target_module(host, tests) ⇒ String
private
The text for the target module.
-
#template_contents(path, prefix, fallback) ⇒ String
private
The template contents for the given path.
- #validate! ⇒ Object
Methods inherited from Pod::Command
#ensure_master_spec_repo_exists!, ensure_not_root_or_allowed!, git_version, #installer_for_config, options, report_error, run, #verify_lockfile_exists!, verify_minimum_git_version!, #verify_podfile_exists!, verify_xcode_license_approved!
Methods included from Pod::Config::Mixin
Constructor Details
#initialize(argv) ⇒ Init
Returns a new instance of Init.
23 24 25 26 27 28 |
# File 'lib/cocoapods/command/init.rb', line 23 def initialize(argv) @podfile_path = Pathname.pwd + 'Podfile' @project_path = argv.shift_argument @project_paths = Pathname.pwd.children.select { |pn| pn.extname == '.xcodeproj' } super end |
Instance Method Details
#podfile_template(project) ⇒ String (private)
Returns the text of the Podfile for the provided project.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/cocoapods/command/init.rb', line 55 def podfile_template(project) podfile = '' podfile << "project '#{@project_path}'\n\n" if @project_path podfile << <<-PLATFORM.strip_heredoc # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' PLATFORM # Split out the targets into app and test targets test_targets, app_targets = project.native_targets.sort_by { |t| t.name.downcase }.partition(&:test_target_type?) app_targets.each do |app_target| test_targets_for_app = test_targets.select do |target| target.name.downcase.start_with?(app_target.name.downcase) end podfile << target_module(app_target, test_targets_for_app) end podfile end |
#run ⇒ Object
44 45 46 |
# File 'lib/cocoapods/command/init.rb', line 44 def run @podfile_path.open('w') { |f| f << podfile_template(@xcode_project) } end |
#target_module(host, tests) ⇒ String (private)
Returns the text for the target module.
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/cocoapods/command/init.rb', line 82 def target_module(host, tests) target_module = "\ntarget '#{host.name.gsub(/'/, "\\\\\'")}' do\n" target_module << <<-RUBY # Comment the next line if you don't want to use dynamic frameworks use_frameworks! RUBY target_module << template_contents(config.default_podfile_path, ' ', "Pods for #{host.name}\n") tests.each do |test| target_module << "\n target '#{test.name.gsub(/'/, "\\\\\'")}' do\n" unless Pod::AggregateTarget::EMBED_FRAMEWORKS_IN_HOST_TARGET_TYPES.include?(host.symbol_type) || test.symbol_type == :ui_test_bundle target_module << " inherit! :search_paths\n" end target_module << template_contents(config.default_test_podfile_path, ' ', 'Pods for testing') target_module << "\n end\n" end target_module << "\nend\n" end |
#template_contents(path, prefix, fallback) ⇒ String (private)
Returns the template contents for the given path.
113 114 115 116 117 118 119 |
# File 'lib/cocoapods/command/init.rb', line 113 def template_contents(path, prefix, fallback) if path.exist? path.read.chomp.lines.map { |line| "#{prefix}#{line}" }.join("\n") else "#{prefix}# #{fallback}" end end |
#validate! ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/cocoapods/command/init.rb', line 30 def validate! super raise Informative, 'Existing Podfile found in directory' unless config.podfile_path_in_dir(Pathname.pwd).nil? if @project_path help! "Xcode project at #{@project_path} does not exist" unless File.exist? @project_path project_path = @project_path else raise Informative, 'No Xcode project found, please specify one' unless @project_paths.length > 0 raise Informative, 'Multiple Xcode projects found, please specify one' unless @project_paths.length == 1 project_path = @project_paths.first end @xcode_project = Xcodeproj::Project.open(project_path) end |