fwtoolkit 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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