class PodBuilder::Command::Init
Public Class Methods
call()
click to toggle source
# File lib/pod_builder/command/init.rb, line 6 def self.call raise "\n\nAlready initialized\n".red if Configuration.exists xcworkspace = Dir.glob("*.xcworkspace") raise "\n\nNo xcworkspace found in current folder\n".red if xcworkspace.count == 0 raise "\n\nToo many xcworkspaces found in current folder\n#{xcworkspace}\n".red if xcworkspace.count > 1 Configuration.project_name = File.basename(xcworkspace.first, ".*") OPTIONS[:prebuild_path] ||= Configuration.base_path if File.expand_path(OPTIONS[:prebuild_path]) != OPTIONS[:prebuild_path] # if not absolute OPTIONS[:prebuild_path] = File.expand_path(PodBuilder::project_path(OPTIONS[:prebuild_path])) end FileUtils.mkdir_p(OPTIONS[:prebuild_path]) FileUtils.mkdir_p("#{OPTIONS[:prebuild_path]}/.pod_builder") FileUtils.touch("#{OPTIONS[:prebuild_path]}/.pod_builder/pod_builder") write_gitignore write_gitattributes project_podfile_path = PodBuilder::project_path("Podfile") prebuilt_podfile_path = File.join(OPTIONS[:prebuild_path], "Podfile") FileUtils.cp(project_podfile_path, prebuilt_podfile_path) podfile_content = File.read(prebuilt_podfile_path) podfile_content = Podfile.add_install_block(podfile_content) podfile_content = Podfile.update_path_entries(podfile_content, Init.method(:podfile_path_transform)) podfile_content = Podfile.update_project_entries(podfile_content, Init.method(:podfile_path_transform)) podfile_content = Podfile.update_require_entries(podfile_content, Init.method(:podfile_path_transform)) if podfile_content.include?("/node_modules/react-native/") podfile_content = Podfile.prepare_for_react_native(podfile_content) update_react_native_podspecs() end File.write(prebuilt_podfile_path, podfile_content) Configuration.write update_gemfile puts "\n\nš done!\n".green return 0 end
Private Class Methods
podfile_path_transform(path)
click to toggle source
# File lib/pod_builder/command/init.rb, line 77 def self.podfile_path_transform(path) use_absolute_paths = false podfile_path = File.join(OPTIONS[:prebuild_path], "Podfile") original_basepath = PodBuilder::project_path podfile_base_path = Pathname.new(File.dirname(podfile_path)) original_path = Pathname.new(File.join(original_basepath, path)) replace_path = original_path.relative_path_from(podfile_base_path) if use_absolute_paths replace_path = replace_path.expand_path(podfile_base_path) end return replace_path end
trim_gemfile_line(line)
click to toggle source
# File lib/pod_builder/command/init.rb, line 117 def self.trim_gemfile_line(line) return line.gsub("\"", "'").gsub(" ", "") end
update_gemfile()
click to toggle source
# File lib/pod_builder/command/init.rb, line 93 def self.update_gemfile gemfile_path = File.join(PodBuilder::home, "Gemfile") unless File.exist?(gemfile_path) FileUtils.touch(gemfile_path) end source_line = "source 'https://rubygems.org'" podbuilder_line = "gem 'pod-builder'" gemfile = File.read(gemfile_path) gemfile_lines = gemfile.split("\n") gemfile_lines.select! { |x| !trim_gemfile_line(x).include?(trim_gemfile_line(source_line)) } gemfile_lines.select! { |x| !trim_gemfile_line(x).include?(trim_gemfile_line(podbuilder_line)) } gemfile_lines.insert(0, source_line) gemfile_lines.push(podbuilder_line) File.write(gemfile_path, gemfile_lines.join("\n")) Dir.chdir(PodBuilder::home) system("bundle") end
update_react_native_podspecs()
click to toggle source
# File lib/pod_builder/command/init.rb, line 121 def self.update_react_native_podspecs # React-Core.podspec file = "React-Core.podspec" paths = Dir.glob("#{PodBuilder::git_rootpath}/node_modules/**/#{file}") raise "Unexpected number of #{file} found" if paths.count != 1 content = File.read(paths[0]) expected_header_search_path_prefix = "s.pod_target_xcconfig = { \"HEADER_SEARCH_PATHS\" => \"" raise "Expected header search path entry not found" unless content.include?(expected_header_search_path_prefix) content.sub!(expected_header_search_path_prefix, "#{expected_header_search_path_prefix}\\\"$(PODS_ROOT)/Headers/Public/Flipper-Folly\\\" ") File.write(paths[0], content) # React-CoreModules.podspec file = "React-CoreModules.podspec" paths = Dir.glob("#{PodBuilder::git_rootpath}/node_modules/**/#{file}") raise "Unexpected number of #{file} found" if paths.count != 1 content = File.read(paths[0]) expected_header_search_path_prefix = "\"HEADER_SEARCH_PATHS\" => \"" raise "Expected header search path entry not found" unless content.include?(expected_header_search_path_prefix) content.sub!(expected_header_search_path_prefix, "#{expected_header_search_path_prefix}\\\"$(PODS_ROOT)/Headers/Public/Flipper-Folly\\\" ") File.write(paths[0], content) end
write_gitattributes()
click to toggle source
# File lib/pod_builder/command/init.rb, line 71 def self.write_gitattributes git_attributes = ["#{Configuration.prebuilt_info_filename} binary"] File.write("#{OPTIONS[:prebuild_path]}/.gitattributes", git_attributes.join("\n")) end
write_gitignore()
click to toggle source
# File lib/pod_builder/command/init.rb, line 56 def self.write_gitignore source_path_rel_path = "Sources" development_pods_config_rel_path = Configuration.dev_pods_configuration_filename git_ignores = ["Pods/", "*.xcworkspace", "*.xcodeproj", "Podfile.lock", Configuration.lldbinit_name, source_path_rel_path, development_pods_config_rel_path] File.write("#{OPTIONS[:prebuild_path]}/.gitignore", git_ignores.join("\n")) end