fwtoolkit 0.3.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/fwtoolkit/tasks/build_tasks.rb +30 -7
- data/lib/fwtoolkit/test/frank_model.rb +65 -16
- data/lib/fwtoolkit/test/model_helper.rb +1 -71
- data/lib/fwtoolkit/version.rb +1 -1
- data/templates/cucumber/AppDelegate+Frank.h +15 -0
- data/templates/cucumber/AppDelegate+Frank.m +41 -0
- data/templates/cucumber/env.rb +19 -0
- data/templates/cucumber/example.feature +7 -0
- data/templates/cucumber/launch_steps.rb +29 -0
- data/templates/cucumber/mimic.rb +93 -0
- data/templates/cucumber/my_objects_json.erb +7 -0
- data/templates/cucumber/my_objects_xml.erb +7 -0
- metadata +12 -5
- data/lib/fwtoolkit/test/model_steps.rb +0 -19
@@ -3,6 +3,8 @@ require 'rubygems'
|
|
3
3
|
require 'xcodebuild'
|
4
4
|
require 'cucumber/rake/task'
|
5
5
|
|
6
|
+
TEMPLATES_DIR = File.expand_path('../../../templates/', File.dirname(__FILE__))
|
7
|
+
|
6
8
|
module XcodeBuild
|
7
9
|
def self.run(args = "", output_buffer = STDOUT)
|
8
10
|
command = "xcodebuild #{args} DSTROOT=/tmp/artifacts 2>&1"
|
@@ -28,8 +30,9 @@ end
|
|
28
30
|
module FWToolkit
|
29
31
|
module Tasks
|
30
32
|
class BuildTask < ::Rake::TaskLib
|
33
|
+
|
31
34
|
include Rake::DSL if defined?(Rake::DSL)
|
32
|
-
|
35
|
+
|
33
36
|
attr_accessor :workspace
|
34
37
|
attr_accessor :scheme
|
35
38
|
attr_accessor :bundle_identifier
|
@@ -69,24 +72,44 @@ module FWToolkit
|
|
69
72
|
sh command
|
70
73
|
end
|
71
74
|
|
72
|
-
|
75
|
+
task :validate_auth_token do
|
76
|
+
puts 'Please set FWBUILD_AUTH_TOKEN environment variable'
|
77
|
+
exit(-1) unless ENV['FWBUILD_AUTH_TOKEN']
|
78
|
+
end
|
79
|
+
|
73
80
|
task :upload do
|
74
|
-
auth_token=ENV['FWBUILD_AUTH_TOKEN']
|
81
|
+
auth_token = ENV['FWBUILD_AUTH_TOKEN']
|
75
82
|
file_name = "#{scheme}.ipa"
|
76
83
|
key = File.join('uploads', file_name)
|
77
84
|
sh("curl -X POST -F 'key=#{key}' -F 'acl=bucket-owner-full-control' -F 'file=@/tmp/artifacts/Applications/#{scheme}.ipa' https://fw.fwbuild.production.s3.amazonaws.com/ --progress-bar")
|
78
|
-
sh("curl 'http://fwbuild.futureworkshops.com/apps/builds.json?bundle_identifier=#{@bundle_identifier}&s3_upload_name=#{file_name}&auth_token=#{auth_token}'")
|
85
|
+
sh("curl 'http://fwbuild.futureworkshops.com/apps/builds.json?bundle_identifier=#{@bundle_identifier}&s3_upload_name=#{file_name}&auth_token=#{auth_token}&build[version]=#{DateTime.now.to_s}'")
|
79
86
|
end
|
80
87
|
|
81
88
|
desc 'Build and Upload IPA'
|
82
|
-
task :build_upload => ['release_iphoneos:archive', :ipa, :upload]
|
89
|
+
task :build_upload => [:validate_auth_token, 'release_iphoneos:archive', :ipa, :upload]
|
83
90
|
end
|
84
91
|
|
85
92
|
namespace :frank do
|
86
|
-
|
87
93
|
desc 'Setup Frank'
|
88
94
|
task :setup do
|
89
|
-
sh
|
95
|
+
sh 'frank setup'
|
96
|
+
|
97
|
+
test_dir = File.join(TEMPLATES_DIR, 'cucumber')
|
98
|
+
features_dir = File.join('Frank', 'features')
|
99
|
+
support_dir = File.join(features_dir, 'support')
|
100
|
+
steps_dir = File.join(features_dir, 'step_definitions')
|
101
|
+
views_dir = File.join(support_dir, 'views')
|
102
|
+
|
103
|
+
remove_file(File.join(features_dir, 'my_first.feature'))
|
104
|
+
cp(File.join(test_dir, 'env.rb'), support_dir)
|
105
|
+
cp(File.join(test_dir, 'mimic.rb'), support_dir)
|
106
|
+
mkdir(views_dir)
|
107
|
+
cp(File.join(test_dir, 'my_objects_json.erb'), views_dir)
|
108
|
+
cp(File.join(test_dir, 'my_objects_xml.erb'), views_dir)
|
109
|
+
cp(File.join(test_dir, 'launch_steps.rb'), steps_dir)
|
110
|
+
cp(File.join(test_dir, 'example.feature'), features_dir)
|
111
|
+
cp(File.join(test_dir, 'AppDelegate+Frank.h'), './')
|
112
|
+
cp(File.join(test_dir, 'AppDelegate+Frank.m'), './')
|
90
113
|
end
|
91
114
|
|
92
115
|
desc 'Build the frankified App'
|
@@ -2,6 +2,49 @@ require 'pickle'
|
|
2
2
|
|
3
3
|
module FWToolkit
|
4
4
|
module Test
|
5
|
+
class FrankCache
|
6
|
+
@@klass_to_objects = {}
|
7
|
+
@@id_to_object = {}
|
8
|
+
|
9
|
+
def self.add_object(object)
|
10
|
+
object.id = object.object_id
|
11
|
+
|
12
|
+
# add to id to object hash
|
13
|
+
@@id_to_object[object.object_id.to_s] = object
|
14
|
+
|
15
|
+
# add to klass to object hash
|
16
|
+
@@klass_to_objects[object.class.name] = [] unless @@klass_to_objects[object.class.name]
|
17
|
+
@@klass_to_objects[object.class.name] << object
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.all_objects(klass)
|
21
|
+
@@klass_to_objects[klass.name] ? @@klass_to_objects[klass.name] : []
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.find(id)
|
25
|
+
@@id_to_object[id.to_s]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.find_first(klass, conditions)
|
29
|
+
self.find_all(klass, conditions).first
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.find_all(klass, conditions)
|
33
|
+
objects = []
|
34
|
+
FWToolkit::Test::FrankCache.all_objects(klass).each do |o|
|
35
|
+
match = true
|
36
|
+
conditions.keys.each do |k|
|
37
|
+
if not eval("o.#{k}").eql? conditions[k]
|
38
|
+
match = false
|
39
|
+
break
|
40
|
+
end
|
41
|
+
end
|
42
|
+
objects << o if match
|
43
|
+
end
|
44
|
+
objects
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
5
48
|
class FrankModel
|
6
49
|
|
7
50
|
attr_accessor :id, :core_data_entity
|
@@ -12,33 +55,26 @@ module FWToolkit
|
|
12
55
|
# Gets a list of the available models for this adapter
|
13
56
|
def self.model_classes
|
14
57
|
klasses = ::FWToolkit::Test::FrankModel.__send__(:descendants)
|
15
|
-
|
16
|
-
#klasses.select do |klass|
|
17
|
-
# !klass.abstract_class? && klass.table_exists? && !except_classes.include?(klass.name)
|
18
|
-
#end
|
19
58
|
end
|
20
59
|
|
21
60
|
# get a list of column names for a given class
|
22
61
|
def self.column_names(klass)
|
23
|
-
|
24
|
-
[]
|
62
|
+
klass.new.methods
|
25
63
|
end
|
26
64
|
|
27
65
|
# Get an instance by id of the model
|
28
66
|
def self.get_model(klass, id)
|
29
|
-
FWToolkit::Test::
|
67
|
+
FWToolkit::Test::FrankCache.find(id)
|
30
68
|
end
|
31
69
|
|
32
70
|
# Find the first instance matching conditions
|
33
71
|
def self.find_first_model(klass, conditions)
|
34
|
-
|
35
|
-
puts "find_first_model"
|
72
|
+
FWToolkit::Test::FrankCache.find_first(klass, conditions)
|
36
73
|
end
|
37
74
|
|
38
75
|
# Find all models matching conditions
|
39
76
|
def self.find_all_models(klass, conditions)
|
40
|
-
|
41
|
-
puts "find_all_models"
|
77
|
+
FWToolkit::Test::FrankCache.find_all(klass, conditions)
|
42
78
|
end
|
43
79
|
|
44
80
|
# Create a model using attributes
|
@@ -47,15 +83,28 @@ module FWToolkit
|
|
47
83
|
end
|
48
84
|
end
|
49
85
|
|
50
|
-
@@object_cache = {}
|
51
|
-
|
52
86
|
def self.object_in_cache(id)
|
53
|
-
|
87
|
+
FWToolkit::Test::FrankCache.find(id)
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.all_objects
|
91
|
+
FWToolkit::Test::FrankCache.all_objects(self)
|
54
92
|
end
|
55
93
|
|
56
94
|
def save!
|
57
|
-
|
58
|
-
|
95
|
+
FWToolkit::Test::FrankCache.add_object(self)
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.find(id)
|
99
|
+
FWToolkit::Test::FrankCache.find(id)
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.find_first(conditions={})
|
103
|
+
FWToolkit::Test::FrankCache.find_first(self, conditions)
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.find_all(conditions={})
|
107
|
+
FWToolkit::Test::FrankCache.find_all(self, conditions)
|
59
108
|
end
|
60
109
|
end
|
61
110
|
end
|
@@ -1,26 +1,11 @@
|
|
1
|
-
require 'mimic'
|
2
|
-
require 'socket'
|
3
|
-
require 'net/http'
|
4
1
|
require 'json'
|
5
|
-
require 'erb'
|
6
2
|
require 'frank-cucumber/gateway'
|
7
|
-
require 'pickle/world'
|
8
3
|
require 'cfpropertylist'
|
9
4
|
|
10
5
|
module FWToolkit
|
11
6
|
module Test
|
12
7
|
module ModelHelpers
|
13
8
|
|
14
|
-
def mimic_server(port=11988)
|
15
|
-
@mimic = Mimic.mimic(:port => port) unless @mimic
|
16
|
-
@mimic
|
17
|
-
end
|
18
|
-
|
19
|
-
# todo: remove default response_content_type
|
20
|
-
def queue_mimic_get_response(path, content, response_content_type = 'application/xml')
|
21
|
-
mimic_server.get(path).returning(content, 200, {'Content-Type' => response_content_type})
|
22
|
-
end
|
23
|
-
|
24
9
|
def fwt_app_exec(method_name, *method_args)
|
25
10
|
operation_map = Frank::Cucumber::Gateway.build_operation_map(method_name,method_args)
|
26
11
|
|
@@ -31,53 +16,6 @@ module FWToolkit
|
|
31
16
|
|
32
17
|
return Frank::Cucumber::Gateway.evaluate_frankly_response( res, "app_exec #{method_name}" )
|
33
18
|
end
|
34
|
-
|
35
|
-
def fwt_template_response(template_file_name, capture_models = [], options = nil)
|
36
|
-
|
37
|
-
# probably should put some asserts in here
|
38
|
-
# template_file_name should be single if capture_models.count == 0
|
39
|
-
# template_file_name should be plural if capture_models.count > 0
|
40
|
-
unless capture_models.empty?
|
41
|
-
factory, name_or_index = *parse_model(capture_models[0])
|
42
|
-
unless template_file_name
|
43
|
-
template_file_name = factory.pluralize
|
44
|
-
end
|
45
|
-
|
46
|
-
objects = []
|
47
|
-
capture_models.each do |capture_model|
|
48
|
-
objects << model!(capture_model)
|
49
|
-
end
|
50
|
-
|
51
|
-
eval("@#{factory.pluralize} = objects")
|
52
|
-
eval("@#{factory} = objects.first")
|
53
|
-
end
|
54
|
-
|
55
|
-
if options
|
56
|
-
options.each do |option|
|
57
|
-
key, value = option.split(":")
|
58
|
-
eval("@#{key} = value")
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
template_file = File.join(Dir.pwd, 'Frank', 'features', 'support', 'templates', "#{template_file_name}.erb")
|
63
|
-
erb = ERB.new(File.open(template_file).read, 0,"")
|
64
|
-
result = erb.result(binding)
|
65
|
-
|
66
|
-
# cleanup
|
67
|
-
unless capture_models.empty?
|
68
|
-
eval("@#{factory.pluralize} = nil")
|
69
|
-
eval("@#{factory} = nil")
|
70
|
-
end
|
71
|
-
|
72
|
-
if options
|
73
|
-
options.each do |option|
|
74
|
-
key, value = option.split(":")
|
75
|
-
eval("@#{key} = nil")
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
result
|
80
|
-
end
|
81
19
|
|
82
20
|
def fwt_simulator_applications_dir
|
83
21
|
File.join(Dir.home, 'Library', 'Application Support', 'iPhone Simulator', fwt_ios_sdk, 'Applications')
|
@@ -130,12 +68,4 @@ module FWToolkit
|
|
130
68
|
end
|
131
69
|
end
|
132
70
|
end
|
133
|
-
World(FWToolkit::Test::ModelHelpers)
|
134
|
-
|
135
|
-
Before do |scenario|
|
136
|
-
fwt_simulator_reset_data(fwt_ios_sdk)
|
137
|
-
end
|
138
|
-
|
139
|
-
After do |scenario|
|
140
|
-
Mimic.cleanup!
|
141
|
-
end
|
71
|
+
World(FWToolkit::Test::ModelHelpers)
|
data/lib/fwtoolkit/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
//
|
2
|
+
// AppDelegate+Frank.h
|
3
|
+
// FWToolkit
|
4
|
+
//
|
5
|
+
// Created by Matt Brooke-Smith on 14/10/2012.
|
6
|
+
// Copyright (c) 2012 Future Workshops. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
#import "AppDelegate.h"
|
10
|
+
|
11
|
+
@interface AppDelegate (Frank)
|
12
|
+
|
13
|
+
- (void) seedCoreData:(NSString *)json;
|
14
|
+
|
15
|
+
@end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
//
|
2
|
+
// AppDelegate+Frank.m
|
3
|
+
// QlikView
|
4
|
+
//
|
5
|
+
// Created by Matt Brooke-Smith on 18/07/2012.
|
6
|
+
// Copyright (c) 2012 Future Workshops. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
#import "AppDelegate+Frank.h"
|
10
|
+
#import <CoreData/CoreData.h>
|
11
|
+
#import <JSONKit/JSONKit.h>
|
12
|
+
#import <RestKit/RestKit.h>
|
13
|
+
#import "RKObjectManager+QVWOfflineTests.h"
|
14
|
+
|
15
|
+
@implementation AppDelegate (Frank)
|
16
|
+
|
17
|
+
- (void) seedCoreData:(NSString *)json
|
18
|
+
{
|
19
|
+
NSArray *objectsArray = [json objectFromJSONString];
|
20
|
+
NSManagedObjectContext *managedObjectContext = [[RKObjectManager sharedManager].objectStore managedObjectContextForCurrentThread];
|
21
|
+
for (NSDictionary *objectDictionary in objectsArray) {
|
22
|
+
NSString *entityName = [objectDictionary allKeys][0];
|
23
|
+
NSDictionary *dictionary = [objectDictionary objectForKey:entityName];
|
24
|
+
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:managedObjectContext];
|
25
|
+
for (NSString *nextKey in [dictionary allKeys]) {
|
26
|
+
if ([object respondsToSelector:NSSelectorFromString(nextKey)]) {
|
27
|
+
NSObject *value = [dictionary objectForKey:nextKey];
|
28
|
+
if (value != [NSNull null]) {
|
29
|
+
[object setValue:value forKey:nextKey];
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
NSError *error = nil;
|
36
|
+
if (![managedObjectContext save:&error]) {
|
37
|
+
WLog(@"Error saving: %@", [error localizedDescription]);
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
@end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'fwtoolkit'
|
2
|
+
require 'frank-cucumber'
|
3
|
+
|
4
|
+
Frank::Cucumber::FrankHelper.use_shelley_from_now_on
|
5
|
+
|
6
|
+
APP_BUNDLE_PATH = File.expand_path( '../../../frankified_build/Frankified.app', __FILE__ )
|
7
|
+
|
8
|
+
IOS_SDK_VERSION = '6.0'
|
9
|
+
#XCODE_VERSION = '4.5.1' # not currently used - look out for this in FWToolkit 0.5
|
10
|
+
|
11
|
+
AfterConfiguration do
|
12
|
+
require 'pickle/world'
|
13
|
+
require 'fwtoolkit/test/pickle_steps'
|
14
|
+
require 'fwtoolkit/test/ui_steps'
|
15
|
+
end
|
16
|
+
|
17
|
+
After do |scenario|
|
18
|
+
Mimic.cleanup!
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'pickle/world'
|
2
|
+
|
3
|
+
def ios_sdk_version
|
4
|
+
IOS_SDK_VERSION
|
5
|
+
end
|
6
|
+
|
7
|
+
def xcode_version
|
8
|
+
XCODE_VERSION
|
9
|
+
end
|
10
|
+
|
11
|
+
def app_path
|
12
|
+
ENV['APP_BUNDLE_PATH'] || (defined?(APP_BUNDLE_PATH) && APP_BUNDLE_PATH)
|
13
|
+
end
|
14
|
+
|
15
|
+
Given /^I launch the app in the (iphone|ipad) simulator$/ do |device|
|
16
|
+
launch_app app_path, ios_sdk_version, device
|
17
|
+
end
|
18
|
+
|
19
|
+
Given /^I reset and launch the app in the (iphone|ipad) simulator$/ do |device|
|
20
|
+
fwt_simulator_reset_data ios_sdk_version
|
21
|
+
launch_app app_path, ios_sdk_version, device
|
22
|
+
end
|
23
|
+
|
24
|
+
Given /^I reset and launch the app in the (iphone|ipad) simulator, seeded with #{capture_model}$/ do |device, capture_model|
|
25
|
+
fwt_simulator_reset_data ios_sdk_version
|
26
|
+
launch_app app_path, ios_sdk_version, device
|
27
|
+
fwt_seed_app [capture_model]
|
28
|
+
launch_app app_path, ios_sdk_version, device
|
29
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'mimic'
|
2
|
+
|
3
|
+
# Listen on the following :port
|
4
|
+
# Add the following to your objective-c code, in the place where your
|
5
|
+
# server root is configured
|
6
|
+
# #ifdef FRANIFIFIED
|
7
|
+
# server = "http://localhost:11988"
|
8
|
+
# #else
|
9
|
+
# server = <your production server>
|
10
|
+
# #endif
|
11
|
+
Mimic.mimic(:port => 11988) do |m|
|
12
|
+
|
13
|
+
# use the 'views' directory adjacent to this file for API templates
|
14
|
+
set :views, File.expand_path('views', File.dirname(__FILE__))
|
15
|
+
|
16
|
+
# EXAMPLE ROUTE 1 - XML summary using erb template
|
17
|
+
# Uncomment to get xml defined by 'views/my_objects_xml.erb' containing all MyObject instances
|
18
|
+
# @see views/my_objects_xml.erb
|
19
|
+
#
|
20
|
+
# get '/my_objects.xml' do
|
21
|
+
# @my_objects = MyObject.find_all
|
22
|
+
# erb :my_objects_xml, :content_type => 'application/xml'
|
23
|
+
# end
|
24
|
+
|
25
|
+
# EXAMPLE ROUTE 2 - JSON summary using erb template
|
26
|
+
# Uncomment to get json defined by 'views/my_objects_json.erb' containing all MyObject instances
|
27
|
+
# @see views/my_objects_json.erb
|
28
|
+
#
|
29
|
+
# get '/my_objects.json' do
|
30
|
+
# @my_objects = MyObject.find_all
|
31
|
+
# erb :my_objects_json, :content_type => 'application/json'
|
32
|
+
# end
|
33
|
+
|
34
|
+
# EXAMPLE ROUTE 3 - JSON detail using erb template
|
35
|
+
# Uncomment to get json defined by 'views/my_object_json.erb' containing detail about a single MyObject instance
|
36
|
+
# found using the URL parameter "name", i.e. /myobject.json?name=Fred
|
37
|
+
#
|
38
|
+
# get '/my_object.json' do
|
39
|
+
# @my_objects = MyObject.find_first({:name => params[:name]})
|
40
|
+
# erb :my_object_json, :content_type => 'application/json'
|
41
|
+
# end
|
42
|
+
|
43
|
+
# EXAMPLE ROUTE 4 - JSON summary using JBuilder
|
44
|
+
# Uncomment to get json defined programatically.
|
45
|
+
# This is recommended if you are building from scratch or testing a system which has concise, well defined JSON,
|
46
|
+
# as this will be more maintainable than erb templates
|
47
|
+
# You will also need to add
|
48
|
+
# gem 'jbuilder'
|
49
|
+
# to your Gemfile
|
50
|
+
# See more on JBuilder here https://github.com/rails/jbuilder
|
51
|
+
#
|
52
|
+
# get '/my_objects.json' do
|
53
|
+
# my_objects = MyObject.find_all
|
54
|
+
# json = Jbuilder.encode do |json|
|
55
|
+
# json.array!(my_objects) do |o|
|
56
|
+
# json.name o.name
|
57
|
+
# end
|
58
|
+
# end
|
59
|
+
# [200, {'Content-Type' => 'application/json'}, json]
|
60
|
+
# end
|
61
|
+
|
62
|
+
# EXAMPLE ROUTE 5 - Authentication
|
63
|
+
# An example route requiring authentication, and setting a cookie once the user 'admin', 'password' authorized
|
64
|
+
# def protected!
|
65
|
+
# unless authorized?
|
66
|
+
# response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
|
67
|
+
# throw(:halt, [401, "Not authorized\n"])
|
68
|
+
# end
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# def authorized?
|
72
|
+
# if request.cookies.key?('my cookie')
|
73
|
+
# true
|
74
|
+
# else
|
75
|
+
# @auth ||= Rack::Auth::Basic::Request.new(request.env)
|
76
|
+
# if(@auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ['admin', 'password'])
|
77
|
+
# response.set_cookie('my cookie', :value => {:user => 'admin@admin.com'}, :expires => Time.now + 10.minutes, :path => "/")
|
78
|
+
# true
|
79
|
+
# else
|
80
|
+
# false
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
# end
|
84
|
+
#
|
85
|
+
# get '/my_secret_objects.xml' do
|
86
|
+
# protected!
|
87
|
+
# @my_objects = MyObject.find_all({:name => 'secret'})
|
88
|
+
# erb :my_objects_json, :content_type => 'application/json'
|
89
|
+
# end
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fwtoolkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|
@@ -162,7 +162,7 @@ dependencies:
|
|
162
162
|
requirements:
|
163
163
|
- - '='
|
164
164
|
- !ruby/object:Gem::Version
|
165
|
-
version:
|
165
|
+
version: 0.9.5
|
166
166
|
type: :runtime
|
167
167
|
prerelease: false
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -170,7 +170,7 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - '='
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
173
|
+
version: 0.9.5
|
174
174
|
- !ruby/object:Gem::Dependency
|
175
175
|
name: CFPropertyList
|
176
176
|
requirement: !ruby/object:Gem::Requirement
|
@@ -218,12 +218,19 @@ files:
|
|
218
218
|
- lib/fwtoolkit/test/frank_model.rb
|
219
219
|
- lib/fwtoolkit/test/misc_steps.rb
|
220
220
|
- lib/fwtoolkit/test/model_helper.rb
|
221
|
-
- lib/fwtoolkit/test/model_steps.rb
|
222
221
|
- lib/fwtoolkit/test/network_steps.rb
|
223
222
|
- lib/fwtoolkit/test/pickle_steps.rb
|
224
223
|
- lib/fwtoolkit/test/ui_helper.rb
|
225
224
|
- lib/fwtoolkit/test/ui_steps.rb
|
226
225
|
- lib/fwtoolkit/version.rb
|
226
|
+
- templates/cucumber/AppDelegate+Frank.h
|
227
|
+
- templates/cucumber/AppDelegate+Frank.m
|
228
|
+
- templates/cucumber/env.rb
|
229
|
+
- templates/cucumber/example.feature
|
230
|
+
- templates/cucumber/launch_steps.rb
|
231
|
+
- templates/cucumber/mimic.rb
|
232
|
+
- templates/cucumber/my_objects_json.erb
|
233
|
+
- templates/cucumber/my_objects_xml.erb
|
227
234
|
- templates/models/factories.rb.erb
|
228
235
|
- templates/models/model.rb.erb
|
229
236
|
homepage: ''
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# This file is generated by FWToolkit and is covered by the license at
|
2
|
-
#
|
3
|
-
require 'fwtoolkit/test/model_helper.rb'
|
4
|
-
|
5
|
-
Given /^the server responds with(?: "([^\"]*)" for)? path "([^\"]*)" 0 ([^"]*)$/ do |template_file_name, path, variable_name|
|
6
|
-
eval("@#{variable_name} = []")
|
7
|
-
content = fwt_template_response(template_file_name != nil ? template_file_name : variable_name)
|
8
|
-
queue_mimic_get_response(path, content)
|
9
|
-
end
|
10
|
-
|
11
|
-
Given /^the server responds with "([^\"]*)" for path "([^\"]*)" with #{capture_model}(?: with #{capture_fields})?$/ do |template_file_name, path, capture_model, options|
|
12
|
-
content = fwt_template_response(template_file_name, [capture_model], options)
|
13
|
-
queue_mimic_get_response(path, content)
|
14
|
-
end
|
15
|
-
|
16
|
-
Given /^the server responds with "([^\"]*)" for path "([^\"]*)" with #{capture_model} and #{capture_model}(?: with #{capture_fields})?$/ do |template_file_name, path, capture_model_1, capture_model_2, options|
|
17
|
-
content = fwt_template_response(template_file_name, [capture_model_1, capture_model_2], options)
|
18
|
-
queue_mimic_get_response(path, content)
|
19
|
-
end
|