Class: BranchIOCLI::Configuration::SetupConfiguration
Constant Summary
collapse
- APP_LINK_REGEXP =
/\.app\.link$|\.test-app\.link$/
- SDK_OPTIONS =
{
"Specify the location of a Podfile or Cartfile" => :specify,
"Set this project up to use CocoaPods and add the Branch SDK." => :cocoapods,
"Set this project up to use Carthage and add the Branch SDK." => :carthage,
"Add Branch.framework directly to the project's dependencies." => :direct,
"Skip adding the framework to the project." => :skip
}
Instance Attribute Summary collapse
#cartfile_path, #options, #pod_repo_update, #podfile, #podfile_path, #sdk_integration_mode, #target, #workspace, #workspace_path, #xcodeproj, #xcodeproj_path
Instance Method Summary
collapse
#app_delegate_objc_path, #app_delegate_swift_path, #branch_imports, #branch_imports_from_file, #bridging_header_path, #bridging_header_required?, #helper, #initialize, #modules_enabled?, #open_podfile, #print_identification, #relative_path, #swift_version, #uses_frameworks?, #validate_buildfile_at_path, #validate_buildfile_path, #validate_target, #validate_xcodeproj_path
Instance Attribute Details
#add_sdk ⇒ Object
Returns the value of attribute add_sdk.
19
20
21
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 19
def add_sdk
@add_sdk
end
|
#all_domains ⇒ Object
Returns the value of attribute all_domains.
15
16
17
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 15
def all_domains
@all_domains
end
|
#carthage_command ⇒ Object
Returns the value of attribute carthage_command.
16
17
18
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 16
def carthage_command
@carthage_command
end
|
#commit ⇒ Object
Returns the value of attribute commit.
22
23
24
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 22
def commit
@commit
end
|
#force ⇒ Object
Returns the value of attribute force.
20
21
22
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 20
def force
@force
end
|
#keys ⇒ Object
Returns the value of attribute keys.
14
15
16
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 14
def keys
@keys
end
|
#patch_source ⇒ Object
Returns the value of attribute patch_source.
21
22
23
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 21
def patch_source
@patch_source
end
|
#uri_scheme ⇒ Object
Returns the value of attribute uri_scheme.
17
18
19
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 17
def uri_scheme
@uri_scheme
end
|
#validate ⇒ Object
Returns the value of attribute validate.
18
19
20
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 18
def validate
@validate
end
|
Instance Method Details
#all_domains_from_domains(domains) ⇒ Object
189
190
191
192
193
194
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 189
def all_domains_from_domains(domains)
app_link_roots = app_link_roots_from_domains domains
app_link_subdomains = app_link_subdomains_from_roots app_link_roots
custom_domains = custom_domains_from_domains domains
custom_domains + app_link_subdomains
end
|
#app_link_roots_from_domains(domains) ⇒ Object
149
150
151
152
153
154
155
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 149
def app_link_roots_from_domains(domains)
return [] if domains.nil?
domains.select { |d| d =~ APP_LINK_REGEXP }
.map { |d| d.sub(APP_LINK_REGEXP, '').sub(/-alternate$/, '') }
.uniq
end
|
#app_link_subdomains(root) ⇒ Object
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 162
def app_link_subdomains(root)
app_link_subdomain = root
return [] if app_link_subdomain.nil?
live_key = keys[:live]
test_key = keys[:test]
domains = []
unless live_key.nil?
domains += [
"#{app_link_subdomain}.app.link",
"#{app_link_subdomain}-alternate.app.link"
]
end
unless test_key.nil?
domains += [
"#{app_link_subdomain}.test-app.link",
"#{app_link_subdomain}-alternate.test-app.link"
]
end
domains
end
|
#app_link_subdomains_from_roots(roots) ⇒ Object
185
186
187
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 185
def app_link_subdomains_from_roots(roots)
roots.inject([]) { |domains, root| domains + app_link_subdomains(root) }
end
|
#custom_domains_from_domains(domains) ⇒ Object
157
158
159
160
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 157
def custom_domains_from_domains(domains)
return [] if domains.nil?
domains.reject { |d| d =~ APP_LINK_REGEXP }.uniq
end
|
#key_valid?(key, type) ⇒ Boolean
107
108
109
110
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 107
def key_valid?(key, type)
return false if key.nil?
key.empty? || key =~ /^key_#{type}_/
end
|
#log ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 57
def log
super
message = "<%= color('Xcode project:', BOLD) %> \#{xcodeproj_path}\n<%= color('Target:', BOLD) %> \#{target.name}\n<%= color('Live key:', BOLD) %> \#{keys[:live] || '(none)'}\n<%= color('Test key:', BOLD) %> \#{keys[:test] || '(none)'}\n<%= color('Domains:', BOLD) %> \#{all_domains}\n<%= color('URI scheme:', BOLD) %> \#{uri_scheme || '(none)'}\n<%= color('Podfile:', BOLD) %> \#{relative_path(podfile_path) || '(none)'}\n<%= color('Cartfile:', BOLD) %> \#{relative_path(cartfile_path) || '(none)'}\n<%= color('Carthage command:', BOLD) %> \#{carthage_command || '(none)'}\n<%= color('Pod repo update:', BOLD) %> \#{pod_repo_update.inspect}\n<%= color('Validate:', BOLD) %> \#{validate.inspect}\n<%= color('Force:', BOLD) %> \#{force.inspect}\n<%= color('Add SDK:', BOLD) %> \#{add_sdk.inspect}\n<%= color('Patch source:', BOLD) %> \#{patch_source.inspect}\n<%= color('Commit:', BOLD) %> \#{commit.inspect}\n<%= color('SDK integration mode:', BOLD) %> \#{sdk_integration_mode || '(none)'}\n EOF\n\n if swift_version\n message += <<-EOF\n<%= color('Swift version:', BOLD) %> \#{swift_version}\n EOF\n end\n\n message += \"\\n\"\n\n say message\nend\n"
|
#prompt_for_podfile_or_cartfile ⇒ Object
202
203
204
205
206
207
208
209
210
211
212
213
214
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 202
def prompt_for_podfile_or_cartfile
loop do
path = ask("Please enter the location of your Podfile or Cartfile: ").trim
case path
when %r{/?Podfile$}
return if validate_buildfile_at_path path, "Podfile"
when %r{/?Cartfile$}
return if validate_buildfile_at_path path, "Cartfile"
else
say "Path must end in Podfile or Cartfile."
end
end
end
|
#uri_scheme_without_suffix(scheme) ⇒ Object
Removes any trailing :// from the argument and returns a copy
197
198
199
200
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 197
def uri_scheme_without_suffix(scheme)
return nil if scheme.nil?
scheme.sub %r{://$}, ""
end
|
#validate_all_domains(options, required = true) ⇒ Object
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 121
def validate_all_domains(options, required = true)
app_link_roots = app_link_roots_from_domains options.domains
unless options.app_link_subdomain.nil? || app_link_roots.include?(options.app_link_subdomain)
app_link_roots << options.app_link_subdomain
end
app_link_subdomains = app_link_subdomains_from_roots app_link_roots
custom_domains = custom_domains_from_domains options.domains
@all_domains = (app_link_subdomains + custom_domains).uniq
while required && @all_domains.empty?
domains = ask "Please enter domains as a comma-separated list: ", ->(str) { str.split "," }
@all_domains = all_domains_from_domains domains
end
end
|
#validate_key(key, type, options = {}) ⇒ Object
112
113
114
115
116
117
118
119
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 112
def validate_key(key, type, options = {})
return if options[:accept_nil] && key.nil?
until key_valid? key, type
say "#{key.inspect} is not a valid #{type} Branch key. It must begin with key_#{type}_." if key
key = ask "Please enter your #{type} Branch key or use --#{type}-key [enter for none]: "
end
@keys[type] = key unless key.empty?
end
|
#validate_keys_from_setup_options(options) ⇒ Object
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 89
def validate_keys_from_setup_options(options)
@keys = {}
validate_key options.live_key, :live, accept_nil: true
validate_key options.test_key, :test, accept_nil: true
while @keys.empty?
say "A live key, a test key or both is required."
validate_key nil, :live
validate_key nil, :test
end
end
|
#validate_options ⇒ Object
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 24
def validate_options
@validate = options.validate
@patch_source = options.patch_source
@add_sdk = options.add_sdk
@force = options.force
@commit = options.commit
say "--force is ignored when --no-validate is used." if !options.validate && options.force
if options.cartfile && options.podfile
say "--cartfile and --podfile are mutually exclusive. Please specify the file to patch."
exit 1
end
validate_xcodeproj_path
validate_target
validate_keys_from_setup_options options
validate_all_domains options, !target.extension_target_type?
validate_uri_scheme options
validate_buildfile_path options.podfile, "Podfile" if options.cartfile.nil? && options.add_sdk
validate_buildfile_path options.cartfile, "Cartfile" if sdk_integration_mode.nil? && options.add_sdk
@carthage_command = options.carthage_command if sdk_integration_mode == :carthage
validate_sdk_addition options
end
|
#validate_sdk_addition(options) ⇒ Object
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 216
def validate_sdk_addition(options)
return if !options.add_sdk || sdk_integration_mode
return if target.frameworks_build_phase.files.map(&:file_ref).map(&:path).any? { |p| p =~ /Branch.framework$/ }
selected = choose do ||
. = "No Podfile or Cartfile specified or found. Here are your options"
SDK_OPTIONS.each_key { |k| .choice k }
.prompt = "What would you like to do?"
end
@sdk_integration_mode = SDK_OPTIONS[selected]
case sdk_integration_mode
when :specify
prompt_for_podfile_or_cartfile
when :cocoapods
@podfile_path = File.expand_path "../Podfile", xcodeproj_path
when :carthage
@cartfile_path = File.expand_path "../Cartfile", xcodeproj_path
@carthage_command = options.carthage_command
end
end
|
#validate_uri_scheme(options) ⇒ Object
144
145
146
147
|
# File 'lib/branch_io_cli/configuration/setup_configuration.rb', line 144
def validate_uri_scheme(options)
@uri_scheme = uri_scheme_without_suffix options.uri_scheme
end
|