tddium-preview 0.0.8 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -2,4 +2,5 @@
2
2
  Copyright (c) 2011 Solano Labs All Rights Reserved
3
3
  =end
4
4
 
5
- v0.0.1 - Initial Version
5
+ v0.0.1 - Initial version
6
+ v0.0.8 - First preview version
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tddium-preview (0.0.7)
4
+ tddium-preview (0.0.8)
5
+ bundler
5
6
  highline
6
7
  json
7
8
  tddium_client (>= 0.0.6)
data/README.rdoc CHANGED
@@ -3,58 +3,23 @@
3
3
  tddium takes the pain out of running Selenium testing in cloud.
4
4
 
5
5
  It automatically starts private Amazon EC2 Instances, runs your test,
6
- collect results, and cleans up the EC2 resources it used so you only pay for
7
- what you use.
6
+ collect results, and cleans up the EC2 resources it used so you only
7
+ pay for what you use.
8
8
 
9
9
  == Getting Started
10
10
 
11
- 1. Sign up for an EC2 account, by going here:
12
-
13
- https://aws-portal.amazon.com/gp/aws/developer/registration/index.html
11
+ 1. Install rvm (https://rvm.beginrescueend.com). As of this writing,
12
+ version 1.2.x is supported but version 1.5.x is not.
14
13
 
15
- Note that if you have a personal Amazon account, you'll want to make a new one
16
- for Amazon Web Services.
14
+ 2. Install ruby into your rvm and create a gemset
17
15
 
18
- The registration process generates a variety of certificates and keys. Please
19
- keep track of them.
16
+ 3. Install the tddium-preview gem into your new gemset
20
17
 
21
- 2. Note your AWS Access Key and AWS Secret. You can find them by the following
22
- steps:
18
+ 4. In your GIT repo run tddium suite to create a new suite
23
19
 
24
- - go to the AWS Management Console
25
- - click on the "Account" link in the upper navigation menu
26
- - click on "Security Credentials"
27
- - scroll down to the first section "Access Credentials"
28
- - the Access Key is a 20-character alphabetic string. The Secret is hidden. Click the 'show' link to reveal it.
29
-
30
- 3. In the AWS Management Console, create a selenium-grid security group, and
31
- create rules for:
32
-
33
- * allow dest port 4444 (Selenium-Grid)
34
- * allow dest port 5900 (Windows Remote Desktop)
35
- * allow http
36
- * allow https
37
- * allow vnc
38
- * allow ssh
39
-
40
- 4. In the AWS Management Console, create a keypair called sg-keypair.
41
-
42
- 3. Subscribe to tddium:
43
-
44
- Subscribe your Amazon EC2 account to tddium here:
45
-
46
- https://aws-portal.amazon.com/gp/aws/user/subscription/index.html?ie=UTF8&offeringCode=FA429DE5
47
-
48
- 4. Start using tddium:
49
-
50
- <tt>$ tddium config:init</tt>
51
-
52
- # Asks you for the AWS Access Key and AWS Secret
53
-
54
- <tt>$ tddium test:sequential</tt>
55
-
56
- # Starts an EC2 Instance, sets SELENIUM_RC_HOST to it, and runs **/*_spec.rb in sequence
20
+ 4. Run tddium spec to run your hosted tests
57
21
 
58
22
  == Copyright
59
23
 
60
- Copyright (c) 2011 Solano Labs All Rights Reserved. See LICENSE.txt for further details.
24
+ Copyright (c) 2011 Solano Labs All Rights Reserved. See LICENSE.txt for
25
+ further details.
data/lib/tddium.rb CHANGED
@@ -107,7 +107,11 @@ class Tddium < Thor
107
107
  return unless git_repo? && tddium_settings && suite_for_current_branch?
108
108
 
109
109
  test_execution_params = {}
110
- if user_data_file_path = options[:user_data_file]
110
+
111
+ # Set the user data for spec
112
+ if user_data_file_path = options[:user_data_file] || current_suite_options["user_data_file"]
113
+ say Text::Process::USING_PREVIOUS_USER_DATA_FILE % user_data_file_path if user_data_file_path == current_suite_options["user_data_file"]
114
+
111
115
  if File.exists?(user_data_file_path)
112
116
  user_data = File.open(user_data_file_path) { |file| file.read }
113
117
  test_execution_params[:user_data_text] = Base64.encode64(user_data)
@@ -119,7 +123,10 @@ class Tddium < Thor
119
123
  end
120
124
 
121
125
  # Set max parallelism param
122
- test_execution_params[:max_parallelism] = options[:max_parallelism] if options[:max_parallelism]
126
+ if max_parallelism = options[:max_parallelism] || current_suite_options["max_parallelism"]
127
+ say Text::Process::USING_PREVIOUS_MAX_PARALLELISM % max_parallelism if max_parallelism == current_suite_options["max_parallelism"]
128
+ test_execution_params[:max_parallelism] = max_parallelism
129
+ end
123
130
 
124
131
  start_time = Time.now
125
132
 
@@ -164,7 +171,7 @@ class Tddium < Thor
164
171
  # Print out the progress of running tests
165
172
  current_test_executions["tests"].each do |test_name, result_params|
166
173
  test_status = result_params["status"]
167
- if result_params["end_time"] && !finished_tests[test_name]
174
+ if result_params["finished"] && !finished_tests[test_name]
168
175
  message = case test_status
169
176
  when "passed" then [".", :green, false]
170
177
  when "failed" then ["F", :red, false]
@@ -185,6 +192,9 @@ class Tddium < Thor
185
192
  say ""
186
193
  say Text::Process::FINISHED_TEST % (Time.now - start_time)
187
194
  say "#{finished_tests.size} examples, #{test_statuses["failed"]} failures, #{test_statuses["error"]} errors, #{test_statuses["pending"]} pending"
195
+
196
+ # Save the spec options
197
+ write_suite(current_suite_id, {"user_data_file" => user_data_file_path, "max_parallelism" => max_parallelism})
188
198
  rescue TddiumClient::Error::Base
189
199
  end
190
200
  end
@@ -214,6 +224,9 @@ class Tddium < Thor
214
224
  say Text::Status::CURRENT_SUITE_UNAVAILABLE
215
225
  end
216
226
  end
227
+
228
+ account_usage = call_api(:get, Api::Path::ACCOUNT_USAGE)
229
+ say account_usage["usage"]
217
230
  rescue TddiumClient::Error::Base
218
231
  end
219
232
  end
@@ -313,7 +326,13 @@ class Tddium < Thor
313
326
  end
314
327
 
315
328
  def current_suite_id
316
- tddium_settings["branches"][current_git_branch] if tddium_settings["branches"]
329
+ tddium_settings["branches"][current_git_branch]["id"] if tddium_settings["branches"] && tddium_settings["branches"][current_git_branch]
330
+ end
331
+
332
+ def current_suite_options
333
+ if tddium_settings["branches"] && tddium_settings["branches"][current_git_branch]
334
+ tddium_settings["branches"][current_git_branch]["options"]
335
+ end || {}
317
336
  end
318
337
 
319
338
  def current_suite_path
@@ -351,7 +370,7 @@ class Tddium < Thor
351
370
  end
352
371
 
353
372
  def git_push
354
- system("git push #{Git::REMOTE_NAME} #{current_git_branch}")
373
+ system("git push -f #{Git::REMOTE_NAME} #{current_git_branch}")
355
374
  end
356
375
 
357
376
  def git_repo?
@@ -450,7 +469,7 @@ class Tddium < Thor
450
469
  def update_git_remote_and_push(suite_details)
451
470
  git_repo_uri = suite_details["suite"]["git_repo_uri"]
452
471
  unless `git remote show -n #{Git::REMOTE_NAME}` =~ /#{git_repo_uri}/
453
- `git remote rm #{Git::REMOTE_NAME}`
472
+ `git remote rm #{Git::REMOTE_NAME} > /dev/null 2>&1`
454
473
  `git remote add #{Git::REMOTE_NAME} #{git_repo_uri}`
455
474
  end
456
475
  git_push
@@ -466,13 +485,24 @@ class Tddium < Thor
466
485
  File.open(tddium_file_name, "w") do |file|
467
486
  file.write(settings.merge({"api_key" => api_key}).to_json)
468
487
  end
488
+ write_tddium_to_gitignore
469
489
  end
470
490
 
471
- def write_suite(suite_id)
491
+ def write_suite(suite_id, options = {})
472
492
  branches = tddium_settings["branches"] || {}
473
- branches.merge!({current_git_branch => suite_id})
493
+ branches.merge!({current_git_branch => {"id" => suite_id, "options" => options}})
474
494
  File.open(tddium_file_name, "w") do |file|
475
495
  file.write(tddium_settings.merge({"branches" => branches}).to_json)
476
496
  end
497
+ write_tddium_to_gitignore
498
+ end
499
+
500
+ def write_tddium_to_gitignore
501
+ content = File.read(Git::GITIGNORE)
502
+ unless content.include?("#{tddium_file_name}\n")
503
+ File.open(Git::GITIGNORE, "a") do |file|
504
+ file.write("#{tddium_file_name}\n")
505
+ end
506
+ end
477
507
  end
478
508
  end
@@ -8,7 +8,6 @@ module TddiumConstant
8
8
  VERSION_REGEXP = /([\d\.]+)/
9
9
  end
10
10
 
11
-
12
11
  module Default
13
12
  SLEEP_TIME_BETWEEN_POLLS = 2
14
13
  ENVIRONMENT = "production"
@@ -18,6 +17,7 @@ module TddiumConstant
18
17
 
19
18
  module Git
20
19
  REMOTE_NAME = "tddium"
20
+ GITIGNORE = ".gitignore"
21
21
  end
22
22
 
23
23
  module Api
@@ -30,6 +30,7 @@ module TddiumConstant
30
30
  REGISTER_TEST_EXECUTIONS = "#{TEST_EXECUTIONS}/register"
31
31
  START_TEST_EXECUTIONS = "#{TEST_EXECUTIONS}/start"
32
32
  REPORT_TEST_EXECUTIONS = "#{TEST_EXECUTIONS}/report"
33
+ ACCOUNT_USAGE = "accounts/usage"
33
34
  end
34
35
  module ErrorCode
35
36
  INVALID_INVITATION = 2
@@ -84,6 +85,8 @@ tddium spec
84
85
  ALREADY_LOGGED_IN = "You're already logged in"
85
86
  LOGGED_IN_SUCCESSFULLY = "Logged in successfully"
86
87
  LOGGED_OUT_SUCCESSFULLY = "Logged out successfully"
88
+ USING_PREVIOUS_USER_DATA_FILE = "Using the previous user data file '%s'"
89
+ USING_PREVIOUS_MAX_PARALLELISM = "Using the previous value of max_parallelism = %s"
87
90
  end
88
91
 
89
92
  module Status
@@ -3,5 +3,5 @@ Copyright (c) 2011 Solano Labs All Rights Reserved
3
3
  =end
4
4
 
5
5
  module TddiumVersion
6
- VERSION = "0.0.8"
6
+ VERSION = "0.1.0"
7
7
  end
data/spec/tddium_spec.rb CHANGED
@@ -16,6 +16,7 @@ describe Tddium do
16
16
  SAMPLE_DATE_TIME = "2011-03-11T08:43:02Z"
17
17
  SAMPLE_EMAIL = "someone@example.com"
18
18
  SAMPLE_FILE_PATH = "./my_user_file.png"
19
+ SAMPLE_FILE_PATH2 = "./my_user_file2.png"
19
20
  SAMPLE_INVITATION_TOKEN = "TZce3NueiXp2lMTmaeRr"
20
21
  SAMPLE_GIT_REPO_URI = "ssh://git@api.tddium.com/home/git/repo/#{SAMPLE_APP_NAME}"
21
22
  SAMPLE_LICENSE_TEXT = "LICENSE"
@@ -91,7 +92,7 @@ describe Tddium do
91
92
 
92
93
  def stub_config_file(options = {})
93
94
  params = {}
94
- params.merge!(:branches => (options[:branches].is_a?(Hash)) ? options[:branches] : {SAMPLE_BRANCH_NAME => SAMPLE_SUITE_ID}) if options[:branches]
95
+ params.merge!(:branches => (options[:branches].is_a?(Hash)) ? options[:branches] : {SAMPLE_BRANCH_NAME => {"id" => SAMPLE_SUITE_ID}}) if options[:branches]
95
96
  params.merge!(:api_key => (options[:api_key].is_a?(String)) ? options[:api_key] : SAMPLE_API_KEY) if options[:api_key]
96
97
  json = params.to_json unless params.empty?
97
98
  create_file(SAMPLE_TDDIUM_CONFIG_FILE, json)
@@ -106,6 +107,7 @@ describe Tddium do
106
107
  stub_git_branch(tddium)
107
108
  stub_tddium_client
108
109
  create_file(File.join(".git", "something"), "something")
110
+ create_file(Tddium::Git::GITIGNORE, "something")
109
111
  end
110
112
 
111
113
  def stub_git_branch(tddium, default_branch_name = SAMPLE_BRANCH_NAME)
@@ -269,7 +271,7 @@ describe Tddium do
269
271
  end
270
272
 
271
273
  it "should remove all existing remotes called '#{Tddium::Git::REMOTE_NAME}'" do
272
- tddium.should_receive(:`).with("git remote rm #{Tddium::Git::REMOTE_NAME}")
274
+ tddium.should_receive(:`).with("git remote rm #{Tddium::Git::REMOTE_NAME} > /dev/null 2>&1")
273
275
  run(tddium)
274
276
  end
275
277
 
@@ -297,7 +299,7 @@ describe Tddium do
297
299
  end
298
300
 
299
301
  it "should push the latest code to '#{Tddium::Git::REMOTE_NAME}'" do
300
- tddium.should_receive(:system).with("git push #{Tddium::Git::REMOTE_NAME} #{SAMPLE_BRANCH_NAME}")
302
+ tddium.should_receive(:system).with("git push -f #{Tddium::Git::REMOTE_NAME} #{SAMPLE_BRANCH_NAME}")
301
303
  run(tddium)
302
304
  end
303
305
  end
@@ -561,11 +563,22 @@ describe Tddium do
561
563
  it_should_behave_like ".tddium file is missing or corrupt"
562
564
  it_should_behave_like "suite has not been initialized"
563
565
 
564
- context "--user-data-file=#{SAMPLE_FILE_PATH}" do
566
+ context "user-data-file" do
565
567
  context "does not exist" do
566
- it "should show the user: #{Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH}" do
567
- tddium.should_receive(:say).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH)
568
- run_spec(tddium, :user_data_file => SAMPLE_FILE_PATH)
568
+ context "from command line option" do
569
+ it "should be picked first" do
570
+ tddium.should_receive(:say).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH)
571
+ run_spec(tddium, :user_data_file => SAMPLE_FILE_PATH)
572
+ end
573
+ end
574
+
575
+ context "from the previous option" do
576
+ before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => {"id" => SAMPLE_SUITE_ID, "options" => {"user_data_file" => SAMPLE_FILE_PATH2}}}) }
577
+
578
+ it "should be picked if no command line option" do
579
+ tddium.should_receive(:say).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH2)
580
+ run_spec(tddium)
581
+ end
569
582
  end
570
583
 
571
584
  it "should not try to git push" do
@@ -656,17 +669,28 @@ describe Tddium do
656
669
  end
657
670
  end
658
671
 
659
- context "--max_parallelism=5" do
660
- it "should send max_parallelism=5 to '#{Tddium::Api::Path::START_TEST_EXECUTIONS}'" do
661
- call_api_should_receive(:method => :post, :path => /#{Tddium::Api::Path::START_TEST_EXECUTIONS}$/, :params => hash_including(:max_parallelism => 5))
662
- run_spec(tddium, :max_parallelism => 5)
672
+ context "max_parallelism" do
673
+ context "from command line option" do
674
+ it "should be picked first" do
675
+ call_api_should_receive(:method => :post, :path => /#{Tddium::Api::Path::START_TEST_EXECUTIONS}$/, :params => hash_including(:max_parallelism => 5))
676
+ run_spec(tddium, :max_parallelism => 5)
677
+ end
678
+ end
679
+
680
+ context "from the previous option" do
681
+ before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => {"id" => SAMPLE_SUITE_ID, "options" => {"max_parallelism" => 10}}}) }
682
+
683
+ it "should be picked if no command line option" do
684
+ call_api_should_receive(:method => :post, :path => /#{Tddium::Api::Path::START_TEST_EXECUTIONS}$/, :params => hash_including(:max_parallelism => 10))
685
+ run_spec(tddium)
686
+ end
663
687
  end
664
688
  end
665
689
 
666
690
  it_should_behave_like "sending the api key"
667
691
 
668
692
  context "'POST #{Tddium::Api::Path::START_TEST_EXECUTIONS}' is successful" do
669
- let(:get_test_executions_response) { {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"end_time"=>SAMPLE_DATE_TIME, "status"=>"pending"}, "spec/pig_spec.rb"=>{"end_time"=>nil, "status"=>"started"}, "spec/dog_spec.rb"=>{"end_time"=>SAMPLE_DATE_TIME, "status"=>"failed"}, "spec/cat_spec.rb"=>{"end_time"=>SAMPLE_DATE_TIME, "status"=>"passed"}}} }
693
+ let(:get_test_executions_response) { {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"finished" => true, "status"=>"pending"}, "spec/pig_spec.rb"=>{"finished" => false, "status"=>"started"}, "spec/dog_spec.rb"=>{"finished" => true, "status"=>"failed"}, "spec/cat_spec.rb"=>{"finished" => true, "status"=>"passed"}}} }
670
694
  before {stub_call_api_response(:post, "#{Tddium::Api::Path::SESSIONS}/#{SAMPLE_SESSION_ID}/#{Tddium::Api::Path::START_TEST_EXECUTIONS}", {"started"=>1, "status"=>0, "report" => SAMPLE_REPORT_URL})}
671
695
 
672
696
  it "should show the user: '#{Tddium::Text::Process::CHECK_TEST_REPORT % SAMPLE_REPORT_URL}'" do
@@ -730,7 +754,7 @@ describe Tddium do
730
754
 
731
755
  context "'GET #{Tddium::Api::Path::TEST_EXECUTIONS}' is successful" do
732
756
  before do
733
- get_test_executions_response_all_finished = {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"end_time"=>SAMPLE_DATE_TIME, "status"=>"pending"}, "spec/pig_spec.rb"=>{"end_time"=>SAMPLE_DATE_TIME, "status"=>"error"}, "spec/dog_spec.rb"=>{"end_time"=>SAMPLE_DATE_TIME, "status"=>"failed"}, "spec/cat_spec.rb"=>{"end_time"=>SAMPLE_DATE_TIME, "status"=>"passed"}}}
757
+ get_test_executions_response_all_finished = {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"finished" => true, "status"=>"pending"}, "spec/pig_spec.rb"=>{"finished" => true, "status"=>"error"}, "spec/dog_spec.rb"=>{"finished" => true, "status"=>"failed"}, "spec/cat_spec.rb"=>{"finished" => true, "status"=>"passed"}}}
734
758
  stub_call_api_response(:get, "#{Tddium::Api::Path::SESSIONS}/#{SAMPLE_SESSION_ID}/#{Tddium::Api::Path::TEST_EXECUTIONS}", get_test_executions_response, get_test_executions_response_all_finished)
735
759
  stub_sleep(tddium)
736
760
  end
@@ -765,6 +789,11 @@ describe Tddium do
765
789
  run_spec(tddium)
766
790
  end
767
791
 
792
+ it "should save the spec options" do
793
+ tddium.should_receive(:write_suite).with(SAMPLE_SUITE_ID, {"user_data_file" => nil, "max_parallelism" => 3})
794
+ run_spec(tddium, {:max_parallelism => 3})
795
+ end
796
+
768
797
  it_should_behave_like("test output summary")
769
798
  end
770
799
 
@@ -821,7 +850,7 @@ describe Tddium do
821
850
  end
822
851
 
823
852
  context "without current suite" do
824
- before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => 0}) }
853
+ before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => {"id" => 0}}) }
825
854
  it "should show the user '#{Tddium::Text::Status::CURRENT_SUITE_UNAVAILABLE}'" do
826
855
  tddium.should_receive(:say).with(Tddium::Text::Status::CURRENT_SUITE_UNAVAILABLE)
827
856
  run_status(tddium)
@@ -901,8 +930,23 @@ describe Tddium do
901
930
  end
902
931
  end
903
932
  end
933
+
934
+ it "should send a 'GET' request to '#{Tddium::Api::Path::ACCOUNT_USAGE}'" do
935
+ call_api_should_receive(:method => :get, :path => Tddium::Api::Path::ACCOUNT_USAGE)
936
+ run_status(tddium)
937
+ end
938
+
939
+ context "'GET #{Tddium::Api::Path::SUITES}' is successful" do
940
+ before { stub_call_api_response(:get, Tddium::Api::Path::ACCOUNT_USAGE, {"usage" => "something"}) }
941
+
942
+ it "should display the account usage" do
943
+ tddium.should_receive(:say).with("something")
944
+ run_status(tddium)
945
+ end
946
+ end
904
947
  end
905
948
  end
949
+
906
950
  it_should_behave_like "an unsuccessful api call"
907
951
  end
908
952
 
@@ -979,7 +1023,14 @@ describe Tddium do
979
1023
  it "should write the suite id and branch name to the .tddium file" do
980
1024
  run_suite(tddium)
981
1025
  tddium_file = File.open(SAMPLE_TDDIUM_CONFIG_FILE) { |file| file.read }
982
- JSON.parse(tddium_file)["branches"][SAMPLE_BRANCH_NAME].should == SAMPLE_SUITE_ID
1026
+ JSON.parse(tddium_file)["branches"][SAMPLE_BRANCH_NAME]["id"].should == SAMPLE_SUITE_ID
1027
+ end
1028
+
1029
+ it "should update the gitignore file with tddium" do
1030
+ run_suite(tddium)
1031
+ gitignore_file = File.open(Tddium::Git::GITIGNORE) { |file| file.read }
1032
+ gitignore_file.should include(".tddium.test")
1033
+ gitignore_file.should include("something")
983
1034
  end
984
1035
  end
985
1036
 
data/tddium.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.name = "tddium-preview"
11
11
  s.version = TddiumVersion::VERSION
12
12
  s.platform = Gem::Platform::RUBY
13
- s.authors = ["Jay Moorthi"]
13
+ s.authors = ["Solano Labs"]
14
14
  s.email = ["info@tddium.com"]
15
15
  s.homepage = "http://www.tddium.com/"
16
16
  s.summary = %q{tddium Hosted Testing}
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.add_runtime_dependency("highline")
28
28
  s.add_runtime_dependency("json")
29
29
  s.add_runtime_dependency("tddium_client", ">=0.0.6")
30
+ s.add_runtime_dependency("bundler")
30
31
 
31
32
  s.add_development_dependency("rspec")
32
33
  s.add_development_dependency("fakefs")
metadata CHANGED
@@ -2,15 +2,15 @@
2
2
  name: tddium-preview
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.8
5
+ version: 0.1.0
6
6
  platform: ruby
7
7
  authors:
8
- - Jay Moorthi
8
+ - Solano Labs
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-13 00:00:00 -07:00
13
+ date: 2011-04-15 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -58,7 +58,7 @@ dependencies:
58
58
  type: :runtime
59
59
  version_requirements: *id004
60
60
  - !ruby/object:Gem::Dependency
61
- name: rspec
61
+ name: bundler
62
62
  prerelease: false
63
63
  requirement: &id005 !ruby/object:Gem::Requirement
64
64
  none: false
@@ -66,10 +66,10 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: "0"
69
- type: :development
69
+ type: :runtime
70
70
  version_requirements: *id005
71
71
  - !ruby/object:Gem::Dependency
72
- name: fakefs
72
+ name: rspec
73
73
  prerelease: false
74
74
  requirement: &id006 !ruby/object:Gem::Requirement
75
75
  none: false
@@ -80,7 +80,7 @@ dependencies:
80
80
  type: :development
81
81
  version_requirements: *id006
82
82
  - !ruby/object:Gem::Dependency
83
- name: simplecov
83
+ name: fakefs
84
84
  prerelease: false
85
85
  requirement: &id007 !ruby/object:Gem::Requirement
86
86
  none: false
@@ -91,7 +91,7 @@ dependencies:
91
91
  type: :development
92
92
  version_requirements: *id007
93
93
  - !ruby/object:Gem::Dependency
94
- name: rake
94
+ name: simplecov
95
95
  prerelease: false
96
96
  requirement: &id008 !ruby/object:Gem::Requirement
97
97
  none: false
@@ -101,6 +101,17 @@ dependencies:
101
101
  version: "0"
102
102
  type: :development
103
103
  version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
105
+ name: rake
106
+ prerelease: false
107
+ requirement: &id009 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: "0"
113
+ type: :development
114
+ version_requirements: *id009
104
115
  description: tddium runs your rspec (and Selenium) tests in the cloud, in parallel!
105
116
  email:
106
117
  - info@tddium.com