frank-cucumber 0.9.5.pre2 → 0.9.5.pre3
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.
- data/Gemfile.lock +1 -1
- data/frank-cucumber.gemspec +3 -0
- data/lib/frank-cucumber/cli.rb +8 -0
- data/lib/frank-cucumber/frankifier.rb +116 -0
- data/lib/frank-cucumber/version.rb +1 -1
- metadata +50 -1
data/Gemfile.lock
CHANGED
data/frank-cucumber.gemspec
CHANGED
@@ -28,7 +28,10 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_dependency( "json" ) # TODO: figure out how to be more permissive as to which JSON gems we allow
|
29
29
|
s.add_dependency( "dnssd" )
|
30
30
|
s.add_dependency( "thor" )
|
31
|
+
s.add_dependency( "xcodeproj" )
|
31
32
|
|
32
33
|
s.add_development_dependency( "rr" )
|
33
34
|
s.add_development_dependency( "yard" )
|
35
|
+
s.add_development_dependency( "pry" )
|
36
|
+
s.add_development_dependency( "pry-debugger" )
|
34
37
|
end
|
data/lib/frank-cucumber/cli.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
+
begin
|
2
|
+
require 'pry'
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
|
1
6
|
require 'thor'
|
2
7
|
require 'frank-cucumber/launcher'
|
3
8
|
require 'frank-cucumber/console'
|
9
|
+
require 'frank-cucumber/frankifier'
|
4
10
|
|
5
11
|
module Frank
|
6
12
|
class CLI < Thor
|
@@ -19,6 +25,8 @@ module Frank
|
|
19
25
|
desc "setup", "set up your iOS app by adding a Frank subdirectory containing everything Frank needs"
|
20
26
|
def setup
|
21
27
|
directory ".", "Frank"
|
28
|
+
|
29
|
+
Frankifier.frankify!( File.expand_path('.') )
|
22
30
|
end
|
23
31
|
|
24
32
|
desc "update", "updates the frank server components inside your Frank directory"
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'xcodeproj'
|
3
|
+
|
4
|
+
class Frankifier
|
5
|
+
include Thor::Shell
|
6
|
+
|
7
|
+
def self.frankify! root_dir
|
8
|
+
me = new(root_dir)
|
9
|
+
me.frankify!
|
10
|
+
me
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize( root_dir )
|
14
|
+
@root = Pathname.new( root_dir )
|
15
|
+
end
|
16
|
+
|
17
|
+
def frankify!
|
18
|
+
decide_on_project
|
19
|
+
decide_on_target
|
20
|
+
report_project_and_target
|
21
|
+
say ''
|
22
|
+
add_linker_flag
|
23
|
+
say ''
|
24
|
+
add_library_search_path
|
25
|
+
save_changes
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def decide_on_project
|
30
|
+
projects = Pathname.glob( @root+'*.xcodeproj' )
|
31
|
+
xcodeproj = case projects.size
|
32
|
+
when 0
|
33
|
+
raise "There are no .xcodeproj files in this directory. Please move to your root project directory and try again."
|
34
|
+
when 1
|
35
|
+
projects.first
|
36
|
+
else
|
37
|
+
choice = ask_menu(
|
38
|
+
"I found more than one .xcodeproj. Which is the main app project that you wish to Frankify?",
|
39
|
+
projects.map(&:basename)
|
40
|
+
)
|
41
|
+
projects[choice]
|
42
|
+
end
|
43
|
+
|
44
|
+
@xcodeproj_path = xcodeproj
|
45
|
+
@project = Xcodeproj::Project.new(xcodeproj)
|
46
|
+
end
|
47
|
+
|
48
|
+
def decide_on_target
|
49
|
+
targets = @project.targets
|
50
|
+
@target = case targets.size
|
51
|
+
when 0
|
52
|
+
raise "Sorry, this project appears to contain no targets. Nothing I can do here."
|
53
|
+
when 1
|
54
|
+
targets.first
|
55
|
+
else
|
56
|
+
choice = ask_menu(
|
57
|
+
"I found more than one target in this project. Which is the main app target that you wish to Frankify?",
|
58
|
+
targets.map(&:name)
|
59
|
+
)
|
60
|
+
targets.to_a[choice]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def report_project_and_target
|
65
|
+
puts "Frankifying target [#{@target.name}] in project #{@xcodeproj_path.basename}"
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_linker_flag
|
69
|
+
add_frank_entry_to_build_setting( 'OTHER_LDFLAGS', 'FRANK_LDFLAGS' )
|
70
|
+
end
|
71
|
+
|
72
|
+
def add_library_search_path
|
73
|
+
add_frank_entry_to_build_setting( 'LIBRARY_SEARCH_PATHS', 'FRANK_LIBRARY_SEARCH_PATHS' )
|
74
|
+
end
|
75
|
+
|
76
|
+
def add_frank_entry_to_build_setting( build_setting, entry_to_add )
|
77
|
+
setting_array = Array( debug_build_settings[build_setting] )
|
78
|
+
|
79
|
+
if setting_array.find{ |flag| flag.start_with? "$(FRANK_" }
|
80
|
+
say "It appears that your Debug configuration's #{build_setting} build setting already include some FRANK setup. Namely: #{setting_array.inspect}. I won't change anything here."
|
81
|
+
return
|
82
|
+
end
|
83
|
+
|
84
|
+
say "Adding $(inherited) and $(#{entry_to_add}) to your Debug configuration's #{build_setting} build setting ..."
|
85
|
+
setting_array.unshift "$(inherited)"
|
86
|
+
setting_array << "$(#{entry_to_add})"
|
87
|
+
setting_array.uniq! # mainly to avoid duplicate $(inherited) entries
|
88
|
+
say "... #{build_setting} is now: #{setting_array.inspect}"
|
89
|
+
|
90
|
+
debug_build_settings[build_setting] = setting_array
|
91
|
+
end
|
92
|
+
|
93
|
+
def debug_build_settings
|
94
|
+
@_debug_build_settings ||= @target.build_configuration_list.build_settings('Debug')
|
95
|
+
end
|
96
|
+
|
97
|
+
def save_changes
|
98
|
+
@project.save_as( @xcodeproj_path )
|
99
|
+
end
|
100
|
+
|
101
|
+
# TODO: send this as a pull request to thor
|
102
|
+
def ask_menu message, options
|
103
|
+
option_lines = options.each_with_index.map{ |o,i| "#{i+1}: #{o}" }
|
104
|
+
full_message = ([message,'']+option_lines+[">"]).join("\n")
|
105
|
+
|
106
|
+
allowed_range = (1..options.length)
|
107
|
+
valid_choice = nil
|
108
|
+
until valid_choice
|
109
|
+
choice = ask(full_message).to_i
|
110
|
+
valid_choice = choice if allowed_range.include?(choice)
|
111
|
+
say("You must choose an option between #{allowed_range.first} and #{allowed_range.last}") unless valid_choice
|
112
|
+
end
|
113
|
+
valid_choice-1
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frank-cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.5.
|
4
|
+
version: 0.9.5.pre3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -140,6 +140,22 @@ dependencies:
|
|
140
140
|
- - ! '>='
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: '0'
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: xcodeproj
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
147
|
+
requirements:
|
148
|
+
- - ! '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
type: :runtime
|
152
|
+
prerelease: false
|
153
|
+
version_requirements: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
143
159
|
- !ruby/object:Gem::Dependency
|
144
160
|
name: rr
|
145
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -172,6 +188,38 @@ dependencies:
|
|
172
188
|
- - ! '>='
|
173
189
|
- !ruby/object:Gem::Version
|
174
190
|
version: '0'
|
191
|
+
- !ruby/object:Gem::Dependency
|
192
|
+
name: pry
|
193
|
+
requirement: !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ! '>='
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
199
|
+
type: :development
|
200
|
+
prerelease: false
|
201
|
+
version_requirements: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
203
|
+
requirements:
|
204
|
+
- - ! '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
- !ruby/object:Gem::Dependency
|
208
|
+
name: pry-debugger
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
210
|
+
none: false
|
211
|
+
requirements:
|
212
|
+
- - ! '>='
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '0'
|
215
|
+
type: :development
|
216
|
+
prerelease: false
|
217
|
+
version_requirements: !ruby/object:Gem::Requirement
|
218
|
+
none: false
|
219
|
+
requirements:
|
220
|
+
- - ! '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
175
223
|
description: Use cucumber to test native iOS apps via Frank
|
176
224
|
email:
|
177
225
|
- gems@thepete.net
|
@@ -203,6 +251,7 @@ files:
|
|
203
251
|
- lib/frank-cucumber/core_frank_steps.rb
|
204
252
|
- lib/frank-cucumber/frank_helper.rb
|
205
253
|
- lib/frank-cucumber/frank_localize.rb
|
254
|
+
- lib/frank-cucumber/frankifier.rb
|
206
255
|
- lib/frank-cucumber/gateway.rb
|
207
256
|
- lib/frank-cucumber/host_scripting.rb
|
208
257
|
- lib/frank-cucumber/keyboard_helper.rb
|