fwtoolkit 0.5.4 → 0.6.0

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/bin/fwt CHANGED
@@ -12,7 +12,10 @@ class FWT < Thor
12
12
  end
13
13
 
14
14
  desc "new APP_PATH PREFIX", "Creates a new Future Workshops iOS project"
15
- def new(app_path, prefix)
15
+ def new(app_path, prefix)
16
+
17
+ setup_cocoapods
18
+
16
19
  @app_name = File.basename(app_path)
17
20
  @prefix = prefix.upcase
18
21
  @path = app_path
@@ -21,7 +24,7 @@ class FWT < Thor
21
24
  @project = Xcodeproj::Project.new
22
25
  @project.root_object.build_configuration_list
23
26
  @project.add_system_framework('UIKit')
24
- #@project.add_system_framework('CoreGraphics') # bug in latest RestKit pod
27
+ @project.add_system_framework('CoreGraphics') # bug in latest RestKit pod?
25
28
 
26
29
  info_plist = "#{@app_name}-Info.plist"
27
30
  process_template("Info.plist.erb", info_plist, supporting_files)
@@ -54,15 +57,20 @@ class FWT < Thor
54
57
  sleep 5
55
58
 
56
59
  inside(@path) do
57
- run_captured 'bundle'
58
- run_captured 'rake pod:clean_install'
59
- run_captured "rake frank:setup['#{@app_name}','#{@prefix}']"
60
+ run "rvm gemset create #{@app_name}", {:capture => true}
61
+ run "rvm gemset use #{@app_name}", {:capture => true}
62
+ run 'bundle', {:capture => true}
63
+ run 'rake pod:clean_install', {:capture => true}
64
+ run "rake frank:setup['#{@app_name}','#{@prefix}']", {:capture => true}
60
65
  end
61
66
  end
62
67
 
63
68
  private
64
- def run_captured(cmd)
65
- run cmd, {:capture => true}
69
+ def setup_cocoapods
70
+ unless Dir.exists?(File.join(Dir.home, '.cocoapods', 'fw'))
71
+ run 'gem install cocoapods', {:capture => true}
72
+ run 'pod repo add fw git@github.com:FutureWorkshops/FWTPodspecs.git', {:capture => true}
73
+ end
66
74
  end
67
75
 
68
76
  def process_template(template_filename, destination_filename, destination_group = "", template_project = 'default_project')
@@ -0,0 +1,24 @@
1
+ require 'thor'
2
+
3
+ require 'fwtoolkit/tasks/build'
4
+ require 'fwtoolkit/tasks/cocoapods'
5
+ require 'fwtoolkit/tasks/frank'
6
+ require 'fwtoolkit/tasks/services'
7
+ require 'fwtoolkit/tasks/ci'
8
+
9
+ FWToolkit::Tasks::Cocoapods.new.install_tasks
10
+ FWToolkit::Tasks::Frank.new.install_tasks
11
+ FWToolkit::Tasks::Services.new.install_tasks
12
+ FWToolkit::Tasks::CI.new.install_tasks
13
+
14
+ # monkey patching string to add the ruby_format method
15
+ # used in frank:model tasks
16
+ class String
17
+ def ruby_format
18
+ self.gsub(/(.)([A-Z])/,'\1_\2').downcase
19
+ end
20
+
21
+ def ruby_format!
22
+ replace ruby_format
23
+ end
24
+ end
@@ -0,0 +1,111 @@
1
+ require 'rake/tasklib'
2
+ require 'rubygems'
3
+ require 'xcodebuild'
4
+ require 'cucumber/rake/task'
5
+ require 'core_data'
6
+ require 'erb'
7
+ require 'xcodeproj'
8
+
9
+ module XcodeBuild
10
+ def self.run(args = "", output_buffer = STDOUT)
11
+ command = "xcodebuild #{args} DSTROOT=/tmp/artifacts 2>&1"
12
+ #puts command
13
+ IO.popen(command) do |io|
14
+ begin
15
+ while line = io.readline
16
+ begin
17
+ output_buffer << line
18
+ rescue StandardError => e
19
+ puts "Error from output buffer: #{e.inspect}"
20
+ puts e.backtrace
21
+ end
22
+ end
23
+ rescue EOFError
24
+ end
25
+ end
26
+
27
+ $?.exitstatus
28
+ end
29
+ end
30
+
31
+ module FWToolkit
32
+ module Tasks
33
+ class BuildTask < ::Rake::TaskLib
34
+
35
+ TEMPLATES_DIR = File.expand_path('../../../templates/', File.dirname(__FILE__))
36
+
37
+ include Rake::DSL if defined?(Rake::DSL)
38
+
39
+ attr_accessor :workspace
40
+ attr_accessor :scheme
41
+ attr_accessor :bundle_identifier
42
+ attr_accessor :certificate
43
+ attr_accessor :provisioning_profile
44
+
45
+ def initialize(&block)
46
+ yield self if block_given?
47
+ define
48
+ end
49
+
50
+ private
51
+
52
+ def define
53
+ namespace :xcode do
54
+ XcodeBuild::Tasks::BuildTask.new :debug_simulator do |t|
55
+ t.invoke_from_within = '.'
56
+ t.configuration = "Debug"
57
+ t.sdk = "iphonesimulator"
58
+ t.workspace = @workspace
59
+ t.scheme = @scheme
60
+ t.formatter = XcodeBuild::Formatters::ProgressFormatter.new
61
+ end
62
+
63
+ XcodeBuild::Tasks::BuildTask.new :release_iphoneos do |t|
64
+ t.invoke_from_within = '.'
65
+ t.configuration = "Release"
66
+ t.sdk = "iphoneos"
67
+ t.workspace = @workspace
68
+ t.scheme = @scheme
69
+ t.formatter = XcodeBuild::Formatters::ProgressFormatter.new
70
+ end
71
+
72
+ desc 'Build IPA file'
73
+ task :ipa do
74
+ command = "xcrun -sdk 'iphoneos' PackageApplication -v '/tmp/artifacts/Applications/#{scheme}.app' -o '/tmp/artifacts/Applications/#{scheme}.ipa' --sign '#{certificate}' --embed '#{provisioning_profile}'"
75
+ sh command
76
+ end
77
+
78
+ task :validate_auth_token do
79
+ unless ENV['FWBUILD_AUTH_TOKEN']
80
+ abort 'Please set FWBUILD_AUTH_TOKEN environment variable'
81
+ end
82
+ end
83
+
84
+ task :upload do
85
+ auth_token = ENV['FWBUILD_AUTH_TOKEN']
86
+ file_name = "#{scheme}.ipa"
87
+ key = File.join('uploads', file_name)
88
+ 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")
89
+ sh("curl -X POST -d 'bundle_identifier=#{@bundle_identifier}&s3_upload_name=#{file_name}&auth_token=#{auth_token}&build[version]=#{DateTime.now.to_s}' http://fwbuild.futureworkshops.com/apps/builds.json")
90
+ end
91
+
92
+ desc 'Build and Upload IPA'
93
+ task :build_upload => [:validate_auth_token, 'release_iphoneos:archive', :ipa, :upload]
94
+ end
95
+
96
+ namespace :fwbuild do
97
+ task :upload do
98
+ S3Cmd.put("path/to/a/file.ext", "s3://fw.fwbuild.production/uploads/") do |progress|
99
+ puts progress
100
+ end
101
+ end
102
+
103
+ task :build_upload => ["xcode:release_device:clean", "xcode:release_device:archive", "upload"]
104
+ end
105
+
106
+
107
+ end
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,26 @@
1
+ module FWToolkit
2
+ module Tasks
3
+ class CI < Thor
4
+
5
+ include Rake::DSL if defined?(Rake::DSL)
6
+ include Thor::Actions
7
+
8
+ no_tasks do
9
+ def install_tasks
10
+ namespace :ci do
11
+
12
+ task :bundle do
13
+ run 'bundle'
14
+ end
15
+
16
+ desc 'Clean, build and test'
17
+ task :build => ["ci:bundle", "xcode:debug_simulator:cleanbuild", "frank:build", "frank:ci_test"]
18
+
19
+ desc 'Clean, build and test for Cocoapods projects'
20
+ task :pod_build => ["ci:bundle", "pod:clean_install", "ci:build"]
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ module FWToolkit
2
+ module Tasks
3
+ class Cocoapods < Thor
4
+
5
+ include Rake::DSL if defined?(Rake::DSL)
6
+ include Thor::Actions
7
+
8
+ no_tasks do
9
+ def install_tasks
10
+ namespace :pod do
11
+ task :clean do
12
+ remove_dir 'Pods'
13
+ end
14
+
15
+ task :install do
16
+ run 'pod install'
17
+ end
18
+
19
+ desc 'Clean and install Pods'
20
+ task :clean_install => [:clean, :install]
21
+ end
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1,110 @@
1
+ module FWToolkit
2
+ module Tasks
3
+ class Frank < Thor
4
+
5
+ include Rake::DSL if defined?(Rake::DSL)
6
+ include Thor::Actions
7
+
8
+ def self.source_root
9
+ File.join(File.dirname(__FILE__), '..', '..', '..')
10
+ end
11
+
12
+ no_tasks do
13
+ def install_tasks
14
+ namespace :frank do
15
+ desc 'Setup Frank'
16
+ task :setup, [:target, :prefix] do |t, args|
17
+ args.with_defaults(:prefix => '')
18
+ setup(args[:target], args[:prefix])
19
+ end
20
+
21
+ desc 'Create Frank model files from CoreData'
22
+ task :model, [:model_file, :prefix] do |t, args|
23
+ args.with_defaults(:model_file => nil)
24
+ args.with_defaults(:prefix => 'true')
25
+ prefix = args[:prefix].eql? 'true'
26
+ @no_prefix = !prefix
27
+
28
+ # validation step - core_data_model should be of type .xcdatamodel
29
+ output_dir = File.join('Frank', 'features', 'support', 'models')
30
+ makedirs output_dir unless Dir.exists? output_dir
31
+
32
+ model = CoreData::DataModel.new(File.join(args[:model_file], 'contents'))
33
+ @models = model.entities
34
+
35
+ @models.each do |entity|
36
+ @model = entity
37
+ @class_name = class_name(@model)
38
+ factory_template = File.join 'models', 'model.rb.erb'
39
+ template(factory_template, File.join(output_dir, "#{class_name(@model).ruby_format}.rb"))
40
+ end
41
+
42
+ factory_template = File.join 'models', 'factories.rb.erb'
43
+ template(factory_template, File.join(output_dir, 'factories.rb'))
44
+ end
45
+
46
+ desc 'Build the frankified App'
47
+ task :build do
48
+ run "frank build --workspace #{@workspace} --scheme #{@scheme}"
49
+ end
50
+
51
+ Cucumber::Rake::Task.new(:ci_test, 'Run Frank acceptance tests with CI options') do |t|
52
+ ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
53
+ ENV['USE_SIM_LAUNCHER_SERVER'] = 'YES'
54
+ artifacts_dir = ENV['CC_BUILD_ARTIFACTS'] ? ENV['CC_BUILD_ARTIFACTS'] : '/tmp'
55
+ t.cucumber_opts = "Frank/features --tags ~@wip --format pretty --format html --out '#{artifacts_dir}/frank_results.html' --format rerun --out '#{artifacts_dir}/frank_rerun.txt'"
56
+ end
57
+
58
+ desc 'Run Frank acceptance tests'
59
+ task :test, :cucumber_options do |t, args|
60
+ args.with_defaults(:cucumber_options => 'Frank/features --tag ~@wip')
61
+
62
+ ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
63
+ ENV['USE_SIM_LAUNCHER_SERVER'] = nil
64
+ run "cucumber #{args.cucumber_options}"
65
+ end
66
+
67
+ desc 'Run Frank acceptance tests for a tag'
68
+ task :tag, :tag_name do |t, args|
69
+ args.with_defaults(:tag_name => '')
70
+ cucumber_options = "Frank/features --tag #{args.tag_name}"
71
+
72
+ ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
73
+ ENV['USE_SIM_LAUNCHER_SERVER'] = nil
74
+ run "cucumber #{cucumber_options}"
75
+ end
76
+ end
77
+ end
78
+
79
+ def class_name(entity)
80
+ @no_prefix ? entity.name : entity.name[3..-1]
81
+ end
82
+
83
+ def setup(target = nil, prefix = nil, project_directory = target, project_file = "#{target}.xcodeproj")
84
+ run 'frank setup'
85
+ features_dir = File.join('Frank', 'features')
86
+ remove_file(File.join(features_dir, 'my_first.feature'))
87
+
88
+ if target
89
+ test_dir = File.join(FWToolkit::Tasks::BuildTask::TEMPLATES_DIR, 'cucumber')
90
+ directory(File.join(FWToolkit::Tasks::BuildTask::TEMPLATES_DIR, 'cucumber', 'features'), features_dir, {:force => true})
91
+
92
+ @prefix = prefix
93
+ template 'templates/cucumber/AppDelegate+Frank.h.erb', File.join(project_directory, "#{prefix}AppDelegate+Frank.h")
94
+ template 'templates/cucumber/AppDelegate+Frank.m.erb', File.join(project_directory, "#{prefix}AppDelegate+Frank.m")
95
+
96
+ project = Xcodeproj::Project.new(project_file)
97
+ project.new_file(File.join(project_directory, "#{prefix}AppDelegate+Frank.h"), project_directory)
98
+ frank_app_d_m = project.new_file(File.join(project_directory, "#{prefix}AppDelegate+Frank.m"), project_directory)
99
+
100
+ target = project.targets.select{|t| t.name.eql? target}[0]
101
+ target.add_file_references([frank_app_d_m])
102
+
103
+ project.save_as(project_file)
104
+ end
105
+ end
106
+ end
107
+
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,41 @@
1
+ module FWToolkit
2
+ module Tasks
3
+ class Services < Thor
4
+
5
+ include Rake::DSL if defined?(Rake::DSL)
6
+ include Thor::Actions
7
+
8
+ no_tasks do
9
+ def install_tasks
10
+ namespace :services do
11
+
12
+ task :environment do
13
+ require 'fwtoolkit'
14
+ Dir[File.join( Dir.pwd, 'Frank/features/support/models/*.rb')].each {|file| require file }
15
+ Dir[File.join( Dir.pwd, 'Frank/features/support/views/*.rb')].each {|file| require file }
16
+ end
17
+
18
+ desc 'Seed objects into the service'
19
+ task :seed => [:environment] do
20
+
21
+ end
22
+
23
+ require 'daemons'
24
+ desc 'Run a service'
25
+ task :run, [:service_name] => [:environment, :seed] do |t, args|
26
+ args.with_defaults(:service_name => 'mimic', :seeds_name => nil)
27
+
28
+ require File.join( Dir.pwd, "Frank/features/support/#{args.service_name}.rb")
29
+ say "Service #{args.service_name} running"
30
+ loop do
31
+ sleep(5)
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -1,3 +1,3 @@
1
1
  module FWToolkit
2
- VERSION = "0.5.4"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -1,3 +1,3 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'fwtoolkit', '~> 0.5.1'
3
+ gem 'fwtoolkit'
@@ -1,4 +1,4 @@
1
- require 'fwtoolkit/tasks/build_tasks'
1
+ require 'fwtoolkit/tasks'
2
2
 
3
3
  FWToolkit::Tasks::BuildTask.new do |t|
4
4
  # Used for Frank testing
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.5.4
4
+ version: 0.6.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-11 00:00:00.000000000 Z
12
+ date: 2012-12-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber
@@ -251,6 +251,22 @@ dependencies:
251
251
  - - '='
252
252
  - !ruby/object:Gem::Version
253
253
  version: 0.4.0
254
+ - !ruby/object:Gem::Dependency
255
+ name: pry
256
+ requirement: !ruby/object:Gem::Requirement
257
+ none: false
258
+ requirements:
259
+ - - '='
260
+ - !ruby/object:Gem::Version
261
+ version: 0.9.10
262
+ type: :runtime
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - '='
268
+ - !ruby/object:Gem::Version
269
+ version: 0.9.10
254
270
  description: A collection of iOS development tools used by Future Workshops
255
271
  email:
256
272
  - matt@futureworkshops.com
@@ -262,8 +278,12 @@ files:
262
278
  - bin/fwt
263
279
  - lib/fwtoolkit.rb
264
280
  - lib/fwtoolkit/cli.rb
265
- - lib/fwtoolkit/tasks/build_tasks.rb
266
- - lib/fwtoolkit/tasks/frank_tasks.rb
281
+ - lib/fwtoolkit/tasks.rb
282
+ - lib/fwtoolkit/tasks/build.rb
283
+ - lib/fwtoolkit/tasks/ci.rb
284
+ - lib/fwtoolkit/tasks/cocoapods.rb
285
+ - lib/fwtoolkit/tasks/frank.rb
286
+ - lib/fwtoolkit/tasks/services.rb
267
287
  - lib/fwtoolkit/test/frank_model.rb
268
288
  - lib/fwtoolkit/test/misc_steps.rb
269
289
  - lib/fwtoolkit/test/model_helper.rb
@@ -306,7 +326,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
306
326
  version: '0'
307
327
  segments:
308
328
  - 0
309
- hash: -2239463860533852195
329
+ hash: 4014457021948550821
310
330
  required_rubygems_version: !ruby/object:Gem::Requirement
311
331
  none: false
312
332
  requirements:
@@ -315,7 +335,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
315
335
  version: '0'
316
336
  segments:
317
337
  - 0
318
- hash: -2239463860533852195
338
+ hash: 4014457021948550821
319
339
  requirements: []
320
340
  rubyforge_project:
321
341
  rubygems_version: 1.8.24
@@ -1,252 +0,0 @@
1
- require 'rake/tasklib'
2
- require 'rubygems'
3
- require 'xcodebuild'
4
- require 'cucumber/rake/task'
5
- require 'core_data'
6
- require 'erb'
7
- require 'xcodeproj'
8
- require 'fwtoolkit/tasks/frank_tasks'
9
-
10
- class String
11
- def ruby_format
12
- self.gsub(/(.)([A-Z])/,'\1_\2').downcase
13
- end
14
-
15
- def ruby_format!
16
- replace ruby_format
17
- end
18
- end
19
-
20
- module XcodeBuild
21
- def self.run(args = "", output_buffer = STDOUT)
22
- command = "xcodebuild #{args} DSTROOT=/tmp/artifacts 2>&1"
23
- #puts command
24
- IO.popen(command) do |io|
25
- begin
26
- while line = io.readline
27
- begin
28
- output_buffer << line
29
- rescue StandardError => e
30
- puts "Error from output buffer: #{e.inspect}"
31
- puts e.backtrace
32
- end
33
- end
34
- rescue EOFError
35
- end
36
- end
37
-
38
- $?.exitstatus
39
- end
40
- end
41
-
42
- module FWToolkit
43
- module Tasks
44
- class BuildTask < ::Rake::TaskLib
45
-
46
- TEMPLATES_DIR = File.expand_path('../../../templates/', File.dirname(__FILE__))
47
-
48
- include Rake::DSL if defined?(Rake::DSL)
49
-
50
- attr_accessor :workspace
51
- attr_accessor :scheme
52
- attr_accessor :bundle_identifier
53
- attr_accessor :certificate
54
- attr_accessor :provisioning_profile
55
-
56
- def initialize(&block)
57
- yield self if block_given?
58
- define
59
- end
60
-
61
- private
62
-
63
- def define
64
- namespace :xcode do
65
- XcodeBuild::Tasks::BuildTask.new :debug_simulator do |t|
66
- t.invoke_from_within = '.'
67
- t.configuration = "Debug"
68
- t.sdk = "iphonesimulator"
69
- t.workspace = @workspace
70
- t.scheme = @scheme
71
- t.formatter = XcodeBuild::Formatters::ProgressFormatter.new
72
- end
73
-
74
- XcodeBuild::Tasks::BuildTask.new :release_iphoneos do |t|
75
- t.invoke_from_within = '.'
76
- t.configuration = "Release"
77
- t.sdk = "iphoneos"
78
- t.workspace = @workspace
79
- t.scheme = @scheme
80
- t.formatter = XcodeBuild::Formatters::ProgressFormatter.new
81
- end
82
-
83
- desc 'Build IPA file'
84
- task :ipa do
85
- command = "xcrun -sdk 'iphoneos' PackageApplication -v '/tmp/artifacts/Applications/#{scheme}.app' -o '/tmp/artifacts/Applications/#{scheme}.ipa' --sign '#{certificate}' --embed '#{provisioning_profile}'"
86
- sh command
87
- end
88
-
89
- task :validate_auth_token do
90
- unless ENV['FWBUILD_AUTH_TOKEN']
91
- abort 'Please set FWBUILD_AUTH_TOKEN environment variable'
92
- end
93
- end
94
-
95
- task :upload do
96
- auth_token = ENV['FWBUILD_AUTH_TOKEN']
97
- file_name = "#{scheme}.ipa"
98
- key = File.join('uploads', file_name)
99
- 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")
100
- sh("curl -X POST -d 'bundle_identifier=#{@bundle_identifier}&s3_upload_name=#{file_name}&auth_token=#{auth_token}&build[version]=#{DateTime.now.to_s}' http://fwbuild.futureworkshops.com/apps/builds.json")
101
- end
102
-
103
- desc 'Build and Upload IPA'
104
- task :build_upload => [:validate_auth_token, 'release_iphoneos:archive', :ipa, :upload]
105
- end
106
-
107
- namespace :frank do
108
- desc 'Setup Frank'
109
- task :setup, [:target, :prefix] do |t, args|
110
- args.with_defaults(:prefix => '')
111
-
112
- FWToolkit::Tasks::FrankTasks.new.setup(args[:target], args[:prefix])
113
-
114
- end
115
-
116
- def template(template_file, output_file)
117
- puts "c #{output_file}"
118
- output = ERB.new(File.read(File.join(TEMPLATES_DIR, template_file))).result(binding)
119
- File.open(output_file, "w+") do |f|
120
- f.write(output)
121
- end
122
- end
123
-
124
- def class_name(entity)
125
- @no_prefix ? entity.name : entity.name[3..-1]
126
- end
127
-
128
- desc 'Create Frank model files from CoreData'
129
- task :model, [:model_file, :prefix] do |t, args|
130
- args.with_defaults(:model_file => nil)
131
- args.with_defaults(:prefix => 'true')
132
- prefix = args[:prefix].eql? 'true'
133
- @no_prefix = !prefix
134
-
135
- # validation step - core_data_model should be of type .xcdatamodel
136
- output_dir = File.join('Frank', 'features', 'support', 'models')
137
- makedirs output_dir unless Dir.exists? output_dir
138
-
139
- model = CoreData::DataModel.new(File.join(args[:model_file], 'contents'))
140
- @models = model.entities
141
-
142
- @models.each do |entity|
143
- @model = entity
144
- @class_name = class_name(@model)
145
- factory_template = File.join 'models', 'model.rb.erb'
146
- template(factory_template, File.join(output_dir, "#{class_name(@model).ruby_format}.rb"))
147
- end
148
-
149
- factory_template = File.join 'models', 'factories.rb.erb'
150
- template(factory_template, File.join(output_dir, 'factories.rb'))
151
- end
152
-
153
- desc 'Build the frankified App'
154
- task :build do
155
- sh "frank build --workspace #{@workspace} --scheme #{@scheme}"
156
- end
157
-
158
- Cucumber::Rake::Task.new(:ci_test, 'Run Frank acceptance tests with CI options') do |t|
159
- ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
160
- ENV['USE_SIM_LAUNCHER_SERVER'] = 'YES'
161
- artifacts_dir = ENV['CC_BUILD_ARTIFACTS'] ? ENV['CC_BUILD_ARTIFACTS'] : '/tmp'
162
- t.cucumber_opts = "Frank/features --tags ~@wip --format pretty --format html --out '#{artifacts_dir}/frank_results.html' --format rerun --out '#{artifacts_dir}/frank_rerun.txt'"
163
- end
164
-
165
- desc 'Run Frank acceptance tests'
166
- task :test, :cucumber_options do |t, args|
167
- args.with_defaults(:cucumber_options => 'Frank/features --tag ~@wip')
168
-
169
- ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
170
- ENV['USE_SIM_LAUNCHER_SERVER'] = nil
171
- sh "cucumber #{args.cucumber_options}"
172
- end
173
-
174
- desc 'Run Frank acceptance tests for a tag'
175
- task :tag, :tag_name do |t, args|
176
- args.with_defaults(:tag_name => '')
177
- cucumber_options = "Frank/features --tag #{args.tag_name}"
178
-
179
- ENV['APP_BUNDLE_PATH'] = File.join( Dir.pwd, 'Frank/frankified_build/Frankified.app' )
180
- ENV['USE_SIM_LAUNCHER_SERVER'] = nil
181
- sh "cucumber #{cucumber_options}"
182
- end
183
- end
184
-
185
- namespace :services do
186
-
187
- task :environment do
188
- require 'fwtoolkit'
189
- Dir[File.join( Dir.pwd, 'Frank/features/support/models/*.rb')].each {|file| require file }
190
- Dir[File.join( Dir.pwd, 'Frank/features/support/views/*.rb')].each {|file| require file }
191
- end
192
-
193
- desc 'Seed objects into the service'
194
- task :seed => [:environment] do
195
-
196
- end
197
-
198
- require 'daemons'
199
- desc 'Run a service'
200
- task :run, [:service_name] => [:environment, :seed] do |t, args|
201
- args.with_defaults(:service_name => 'mimic', :seeds_name => nil)
202
-
203
- require File.join( Dir.pwd, "Frank/features/support/#{args.service_name}.rb")
204
- puts "Service #{args.service_name} running"
205
- loop do
206
- sleep(5)
207
- end
208
- end
209
-
210
- end
211
-
212
- namespace :bundle do
213
- task :install do
214
- sh 'bundle'
215
- end
216
- end
217
-
218
- namespace :pod do
219
- task :clean do
220
- FileUtils.rm_rf('Pods')
221
- end
222
-
223
- task :install do
224
- sh 'pod install'
225
- end
226
-
227
- desc 'Clean and install Pods'
228
- task :clean_install => [:clean, :install]
229
- end
230
-
231
- namespace :fwbuild do
232
- task :upload do
233
- S3Cmd.put("path/to/a/file.ext", "s3://fw.fwbuild.production/uploads/") do |progress|
234
- puts progress
235
- end
236
- end
237
-
238
- task :build_upload => ["xcode:release_device:clean", "xcode:release_device:archive", "upload"]
239
- end
240
-
241
- namespace :ci do
242
- desc 'Clean, build and test'
243
- task :build => ["bundle:install", "xcode:debug_simulator:cleanbuild", "frank:build", "frank:ci_test"]
244
-
245
- desc 'Clean, build and test for Cocoapods projects'
246
- task :pod_build => ["bundle:install", "pod:clean_install", "ci:build"]
247
- end
248
- end
249
-
250
- end
251
- end
252
- end
@@ -1,41 +0,0 @@
1
- require 'thor'
2
-
3
- module FWToolkit
4
- module Tasks
5
- class FrankTasks < Thor
6
-
7
- include Thor::Actions
8
-
9
- def self.source_root
10
- File.join(File.dirname(__FILE__), '..', '..', '..')
11
- end
12
-
13
- no_tasks do
14
- def setup(target = nil, prefix = nil, project_directory = target, project_file = "#{target}.xcodeproj")
15
- run 'frank setup'
16
- features_dir = File.join('Frank', 'features')
17
- remove_file(File.join(features_dir, 'my_first.feature'))
18
-
19
- if target
20
- test_dir = File.join(FWToolkit::Tasks::BuildTask::TEMPLATES_DIR, 'cucumber')
21
- directory(File.join(FWToolkit::Tasks::BuildTask::TEMPLATES_DIR, 'cucumber', 'features'), features_dir, {:force => true})
22
-
23
- @prefix = prefix
24
- template 'templates/cucumber/AppDelegate+Frank.h.erb', File.join(project_directory, "#{prefix}AppDelegate+Frank.h")
25
- template 'templates/cucumber/AppDelegate+Frank.m.erb', File.join(project_directory, "#{prefix}AppDelegate+Frank.m")
26
-
27
- project = Xcodeproj::Project.new(project_file)
28
- project.new_file(File.join(project_directory, "#{prefix}AppDelegate+Frank.h"), project_directory)
29
- frank_app_d_m = project.new_file(File.join(project_directory, "#{prefix}AppDelegate+Frank.m"), project_directory)
30
-
31
- target = project.targets.select{|t| t.name.eql? target}[0]
32
- target.add_file_references([frank_app_d_m])
33
-
34
- project.save_as(project_file)
35
- end
36
- end
37
- end
38
-
39
- end
40
- end
41
- end