tddium-preview 0.5.6 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/Gemfile.lock +1 -1
- data/lib/tddium/constant.rb +43 -3
- data/lib/tddium/version.rb +1 -1
- data/lib/tddium.rb +70 -38
- data/spec/tddium_spec.rb +39 -16
- metadata +2 -42
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/lib/tddium/constant.rb
CHANGED
@@ -13,6 +13,7 @@ module TddiumConstant
|
|
13
13
|
ENVIRONMENT = "production"
|
14
14
|
SSH_FILE = "~/.ssh/id_rsa.pub"
|
15
15
|
TEST_PATTERN = "spec/**/*_spec.rb"
|
16
|
+
SUITE_TEST_PATTERN = "features/*.feature, spec/**/*_spec.rb, test/**/test_*.rb"
|
16
17
|
end
|
17
18
|
|
18
19
|
module Git
|
@@ -57,6 +58,15 @@ module TddiumConstant
|
|
57
58
|
PASSWORD_CONFIRMATION = "Confirm your password: "
|
58
59
|
INVITATION_TOKEN = "Enter your invitation token:"
|
59
60
|
USE_EXISTING_SUITE = "A suite exists '%%s' (branch %s). Enter '#{Response::YES}' to use it, or enter a new repo name:"
|
61
|
+
TEST_PATTERN = "Default test pattern: "
|
62
|
+
ENABLE_CI = "Do you want to configure Hosted Continuous Integration?"
|
63
|
+
UPDATE_SUITE = "Do you want to edit settings for this suite?"
|
64
|
+
CI_PULL_URL = "git URL to pull from:"
|
65
|
+
CI_PUSH_URL = "git URL to push on passing tests (blank to disable):"
|
66
|
+
ENABLE_CAMPFIRE = "Setup Campfire CI notifications?"
|
67
|
+
CAMPFIRE_SUBDOMAIN = "Campfire Subdomain:"
|
68
|
+
CAMPFIRE_ROOM = "Campfire Room:"
|
69
|
+
CAMPFIRE_TOKEN = "Campfire API Token:"
|
60
70
|
end
|
61
71
|
|
62
72
|
module Process
|
@@ -67,8 +77,9 @@ module TddiumConstant
|
|
67
77
|
CHECK_TEST_STATUS = "Use 'tddium status' to check on pending jobs"
|
68
78
|
FINISHED_TEST = "Finished in %s seconds"
|
69
79
|
CHECK_TEST_REPORT = "Test report: %s"
|
70
|
-
EXISTING_SUITE = "Current suite
|
71
|
-
CREATING_SUITE = "Creating suite '%s'. This will take a few seconds."
|
80
|
+
EXISTING_SUITE = "Current suite...\n\n%s"
|
81
|
+
CREATING_SUITE = "Creating suite '%s/%s'. This will take a few seconds."
|
82
|
+
CREATED_SUITE = "Created suite...\n\n%s"
|
72
83
|
PASSWORD_CONFIRMATION_INCORRECT = "Password confirmation incorrect"
|
73
84
|
PASSWORD_CHANGED = "Your password has been changed."
|
74
85
|
ACCOUNT_CREATED = "
|
@@ -116,7 +127,15 @@ with Tddium.
|
|
116
127
|
SESSION_TITLE = " Session %s:"
|
117
128
|
ATTRIBUTE_DETAIL = " %s: %s"
|
118
129
|
SEPARATOR = "====="
|
119
|
-
USING_SUITE = "Using suite
|
130
|
+
USING_SUITE = "Using suite...\n\n%s"
|
131
|
+
USER_DETAILS =<<EOF;
|
132
|
+
Username: <%=user["email"]%>
|
133
|
+
Account Created: <%=user["created_at"]%>
|
134
|
+
Recurly Management URL: <%=user["recurly_url"]%>
|
135
|
+
<% if user["heroku"] %>
|
136
|
+
Heroku Account Linked: <%=user["heroku_activation_done"]%>
|
137
|
+
<% end %>
|
138
|
+
EOF
|
120
139
|
HEROKU_CONFIG = "
|
121
140
|
Tddium is configured to work with your Heroku app.
|
122
141
|
|
@@ -131,6 +150,27 @@ $ tddium suite
|
|
131
150
|
$ tddium spec
|
132
151
|
|
133
152
|
"
|
153
|
+
SUITE_DETAILS =<<EOF;
|
154
|
+
Repo: <%=suite["repo_name"]%>/<%=suite["branch"]%>
|
155
|
+
Default Test Pattern: <%=suite["test_pattern"]%>
|
156
|
+
<% if suite["ci_pull_url"] %>
|
157
|
+
Tddium Hosted CI is enabled with the following parameters:
|
158
|
+
|
159
|
+
Pull URL: <%=suite["ci_pull_url"]%>
|
160
|
+
Push URL: <%=suite["ci_push_url"]%>
|
161
|
+
|
162
|
+
Notifications:
|
163
|
+
<%=suite["ci_notifications"]%>
|
164
|
+
|
165
|
+
Authorize the following SSH key to let Tddium's pulls and pushes through:
|
166
|
+
|
167
|
+
<%=suite["ci_ssh_pubkey"]%>
|
168
|
+
|
169
|
+
To trigger CI builds, POST to the following URL from a post-commit hook:
|
170
|
+
|
171
|
+
<%=suite["hook_uri"]%>
|
172
|
+
<% end %>
|
173
|
+
EOF
|
134
174
|
end
|
135
175
|
|
136
176
|
module Error
|
data/lib/tddium/version.rb
CHANGED
data/lib/tddium.rb
CHANGED
@@ -8,6 +8,7 @@ require "highline/import"
|
|
8
8
|
require "json"
|
9
9
|
require "tddium_client"
|
10
10
|
require "base64"
|
11
|
+
require 'erb'
|
11
12
|
require File.expand_path("../tddium/constant", __FILE__)
|
12
13
|
require File.expand_path("../tddium/heroku", __FILE__)
|
13
14
|
|
@@ -297,6 +298,9 @@ class Tddium < Thor
|
|
297
298
|
|
298
299
|
desc "suite", "Register the suite for this project, or manage its settings"
|
299
300
|
method_option :name, :type => :string, :default => nil
|
301
|
+
method_option :pull_url, :type => :string, :default => nil
|
302
|
+
method_option :push_url, :type => :string, :default => nil
|
303
|
+
method_option :test_pattern, :type => :string, :default => nil
|
300
304
|
method_option :environment, :type => :string, :default => nil
|
301
305
|
def suite
|
302
306
|
set_default_environment(options[:environment])
|
@@ -307,45 +311,20 @@ class Tddium < Thor
|
|
307
311
|
if current_suite_id
|
308
312
|
current_suite = call_api(:get, current_suite_path)["suite"]
|
309
313
|
|
310
|
-
say Text::Process::EXISTING_SUITE %
|
314
|
+
say Text::Process::EXISTING_SUITE % format_suite_details(current_suite)
|
315
|
+
#prompt_update_suite(current_suite, options)
|
311
316
|
else
|
312
317
|
params[:branch] = current_git_branch
|
313
318
|
default_suite_name = File.basename(Dir.pwd)
|
314
319
|
params[:repo_name] = options[:name] || default_suite_name
|
315
320
|
|
316
|
-
existing_suite =
|
317
|
-
use_existing_suite = false
|
318
|
-
suite_name_resolved = false
|
319
|
-
while !suite_name_resolved
|
320
|
-
# Check to see if there is an existing suite
|
321
|
-
current_suites = call_api(:get, Api::Path::SUITES, params)
|
322
|
-
existing_suite = current_suites["suites"].first
|
323
|
-
|
324
|
-
# Get the suite name
|
325
|
-
current_suite_name = params[:repo_name]
|
326
|
-
if existing_suite
|
327
|
-
# Prompt for using existing suite (unless suite name is passed from command line) or entering new one
|
328
|
-
params[:repo_name] = prompt(Text::Prompt::USE_EXISTING_SUITE % params[:branch], options[:name], current_suite_name)
|
329
|
-
if options[:name] || params[:repo_name] == Text::Prompt::Response::YES
|
330
|
-
# Use the existing suite, so assign the value back and exit the loop
|
331
|
-
params[:repo_name] = current_suite_name
|
332
|
-
use_existing_suite = true
|
333
|
-
suite_name_resolved = true
|
334
|
-
end
|
335
|
-
elsif current_suite_name == default_suite_name
|
336
|
-
# Prompt for using default suite name or entering new one
|
337
|
-
params[:repo_name] = prompt(Text::Prompt::SUITE_NAME, options[:name], current_suite_name)
|
338
|
-
suite_name_resolved = true if params[:repo_name] == default_suite_name
|
339
|
-
else
|
340
|
-
# Suite name does not exist yet and already prompted
|
341
|
-
suite_name_resolved = true
|
342
|
-
end
|
343
|
-
end
|
321
|
+
use_existing_suite, existing_suite = resolve_suite_name(options, params, default_suite_name)
|
344
322
|
|
345
323
|
if use_existing_suite
|
346
324
|
# Write to file and exit when using the existing suite
|
347
325
|
write_suite(existing_suite["id"])
|
348
|
-
say Text::Status::USING_SUITE %
|
326
|
+
say Text::Status::USING_SUITE % format_suite_details(existing_suite)
|
327
|
+
#prompt_update_suite(existing_suite, options)
|
349
328
|
return
|
350
329
|
end
|
351
330
|
|
@@ -353,17 +332,21 @@ class Tddium < Thor
|
|
353
332
|
params[:bundler_version] = dependency_version(:bundle)
|
354
333
|
params[:rubygems_version] = dependency_version(:gem)
|
355
334
|
|
335
|
+
prompt_suite_params(options, params)
|
356
336
|
|
357
337
|
# Create new suite if it does not exist yet
|
358
|
-
say Text::Process::CREATING_SUITE % params[:repo_name]
|
338
|
+
say Text::Process::CREATING_SUITE % [params[:repo_name], params[:branch]]
|
359
339
|
new_suite = call_api(:post, Api::Path::SUITES, {:suite => params})
|
360
340
|
# Save the created suite
|
361
341
|
write_suite(new_suite["suite"]["id"])
|
362
342
|
|
363
343
|
# Manage git
|
364
344
|
update_git_remote_and_push(new_suite)
|
345
|
+
|
346
|
+
say Text::Process::CREATED_SUITE % format_suite_details(new_suite["suite"])
|
365
347
|
end
|
366
348
|
rescue TddiumClient::Error::Base
|
349
|
+
exit_failure
|
367
350
|
end
|
368
351
|
end
|
369
352
|
|
@@ -517,6 +500,55 @@ class Tddium < Thor
|
|
517
500
|
data
|
518
501
|
end
|
519
502
|
|
503
|
+
def prompt_suite_params(options, params)
|
504
|
+
params[:test_pattern] = prompt(Text::Prompt::TEST_PATTERN, options[:test_pattern], Default::SUITE_TEST_PATTERN)
|
505
|
+
if prompt(Text::Prompt::ENABLE_CI, options[:pull_url] ? 'y' : nil, 'n') == Text::Prompt::Response::YES
|
506
|
+
params[:ci_pull_url] = prompt(Text::Prompt::CI_PULL_URL, options[:pull_url], nil)
|
507
|
+
params[:ci_push_url] = prompt(Text::Prompt::CI_PUSH_URL, options[:push_url], nil)
|
508
|
+
if prompt(Text::Prompt::ENABLE_CAMPFIRE, nil, 'n') == Text::Prompt::Response::YES
|
509
|
+
params[:campfire_subdomain] = prompt(Text::Prompt::CAMPFIRE_SUBDOMAIN, options[:campfire_subdomain], nil)
|
510
|
+
params[:campfire_token] = prompt(Text::Prompt::CAMPFIRE_TOKEN, options[:campfire_token], nil)
|
511
|
+
params[:campfire_room] = prompt(Text::Prompt::CAMPFIRE_ROOM, options[:campfire_room], nil)
|
512
|
+
end
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
516
|
+
def prompt_update_suite(api_response, options)
|
517
|
+
say Text::Prompt::UPDATE_SUITE
|
518
|
+
end
|
519
|
+
|
520
|
+
def resolve_suite_name(options, params, default_suite_name)
|
521
|
+
# XXX updates params
|
522
|
+
existing_suite = nil
|
523
|
+
use_existing_suite = false
|
524
|
+
suite_name_resolved = false
|
525
|
+
while !suite_name_resolved
|
526
|
+
# Check to see if there is an existing suite
|
527
|
+
current_suites = call_api(:get, Api::Path::SUITES, params)
|
528
|
+
existing_suite = current_suites["suites"].first
|
529
|
+
|
530
|
+
# Get the suite name
|
531
|
+
current_suite_name = params[:repo_name]
|
532
|
+
if existing_suite
|
533
|
+
# Prompt for using existing suite (unless suite name is passed from command line) or entering new one
|
534
|
+
params[:repo_name] = prompt(Text::Prompt::USE_EXISTING_SUITE % params[:branch], options[:name], current_suite_name)
|
535
|
+
if options[:name] || params[:repo_name] == Text::Prompt::Response::YES
|
536
|
+
# Use the existing suite, so assign the value back and exit the loop
|
537
|
+
params[:repo_name] = current_suite_name
|
538
|
+
use_existing_suite = true
|
539
|
+
suite_name_resolved = true
|
540
|
+
end
|
541
|
+
elsif current_suite_name == default_suite_name
|
542
|
+
# Prompt for using default suite name or entering new one
|
543
|
+
params[:repo_name] = prompt(Text::Prompt::SUITE_NAME, options[:name], current_suite_name)
|
544
|
+
suite_name_resolved = true if params[:repo_name] == default_suite_name
|
545
|
+
else
|
546
|
+
# Suite name does not exist yet and already prompted
|
547
|
+
suite_name_resolved = true
|
548
|
+
end
|
549
|
+
end
|
550
|
+
[use_existing_suite, existing_suite]
|
551
|
+
end
|
520
552
|
|
521
553
|
def set_default_environment(env)
|
522
554
|
if env.nil?
|
@@ -549,15 +581,15 @@ class Tddium < Thor
|
|
549
581
|
# Given the user is logged in, she should be able to use "tddium account" to display information about her account:
|
550
582
|
# Email address
|
551
583
|
# Account creation date
|
552
|
-
|
553
|
-
say
|
554
|
-
say "Recurly Management URL: " + api_response["user"]["recurly_url"]
|
555
|
-
say "CI Public Key: " + api_response["user"]["ci_ssh_pubkey"] if api_response["user"]["ci_ssh_pubkey"]
|
556
|
-
say "Suites: " + api_response["user"]["suites"] if api_response["user"]["suites"]
|
557
|
-
say "Heroku Account Linked: #{api_response["user"]["heroku_activation_done"]}" if api_response["user"]["heroku"]
|
584
|
+
user = api_response["user"]
|
585
|
+
say ERB.new(Text::Status::USER_DETAILS).result(binding)
|
558
586
|
end
|
559
587
|
|
560
|
-
def
|
588
|
+
def format_suite_details(suite)
|
589
|
+
# Given an API response containing a "suite" key, compose a string with
|
590
|
+
# important information about the suite
|
591
|
+
details = ERB.new(Text::Status::SUITE_DETAILS).result(binding)
|
592
|
+
details
|
561
593
|
end
|
562
594
|
|
563
595
|
def suite_for_current_branch?
|
data/spec/tddium_spec.rb
CHANGED
@@ -33,9 +33,16 @@ describe Tddium do
|
|
33
33
|
SAMPLE_SUITE_ID = 1
|
34
34
|
SAMPLE_USER_ID = 1
|
35
35
|
DEFAULT_TEST_PATTERN = Tddium::Default::TEST_PATTERN
|
36
|
+
SAMPLE_SUITE_PATTERN = "features/*.feature, spec/**/*_spec.rb"
|
36
37
|
CUSTOM_TEST_PATTERN = "**/cat_spec.rb"
|
37
|
-
SAMPLE_SUITE_RESPONSE = {"repo_name" => SAMPLE_APP_NAME,
|
38
|
+
SAMPLE_SUITE_RESPONSE = {"repo_name" => SAMPLE_APP_NAME,
|
39
|
+
"branch" => SAMPLE_BRANCH_NAME,
|
40
|
+
"id" => SAMPLE_SUITE_ID,
|
41
|
+
"ruby_version"=>SAMPLE_RUBY_VERSION,
|
42
|
+
"git_repo_uri" => SAMPLE_GIT_REPO_URI,
|
43
|
+
"test_pattern" => SAMPLE_SUITE_PATTERN}
|
38
44
|
SAMPLE_SUITES_RESPONSE = {"suites" => [SAMPLE_SUITE_RESPONSE]}
|
45
|
+
SAMPLE_SUITE_OUTPUT = "Repo: #{SAMPLE_APP_NAME}/#{SAMPLE_BRANCH_NAME}\nDefault Test Pattern: #{SAMPLE_SUITE_PATTERN}\n\n"
|
39
46
|
SAMPLE_TDDIUM_CONFIG_FILE = ".tddium.test"
|
40
47
|
SAMPLE_TEST_EXECUTION_STATS = "total 1, notstarted 0, started 1, passed 0, failed 0, pending 0, error 0", "start_time"
|
41
48
|
SAMPLE_USER_RESPONSE = {"status"=>0, "user"=>
|
@@ -1439,8 +1446,8 @@ describe Tddium do
|
|
1439
1446
|
|
1440
1447
|
it_should_behave_like "writing the suite to file"
|
1441
1448
|
|
1442
|
-
it "should show the user: '#{Tddium::Text::Status::USING_SUITE %
|
1443
|
-
tddium.should_receive(:say).with(Tddium::Text::Status::USING_SUITE %
|
1449
|
+
it "should show the user: '#{Tddium::Text::Status::USING_SUITE % SAMPLE_SUITE_OUTPUT}'" do
|
1450
|
+
tddium.should_receive(:say).with(Tddium::Text::Status::USING_SUITE % SAMPLE_SUITE_OUTPUT)
|
1444
1451
|
run_suite(tddium)
|
1445
1452
|
end
|
1446
1453
|
end
|
@@ -1481,13 +1488,36 @@ describe Tddium do
|
|
1481
1488
|
context "interactive mode" do
|
1482
1489
|
before do
|
1483
1490
|
tddium.stub(:ask).with(Tddium::Text::Prompt::USE_EXISTING_SUITE % SAMPLE_BRANCH_NAME % SAMPLE_APP_NAME).and_return("foobar")
|
1491
|
+
tddium.stub(:ask).with(Tddium::Text::Prompt::TEST_PATTERN).and_return(SAMPLE_SUITE_PATTERN)
|
1484
1492
|
stub_default_suite_name
|
1485
1493
|
end
|
1486
1494
|
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1495
|
+
context "no ci url" do
|
1496
|
+
it "should POST the user's entered values to the API" do
|
1497
|
+
tddium.should_receive(:say).with(Tddium::Text::Process::CREATING_SUITE % ["foobar", SAMPLE_BRANCH_NAME])
|
1498
|
+
call_api_should_receive(:method => :post, :params => {:suite => hash_including(:repo_name => "foobar", :test_pattern=>SAMPLE_SUITE_PATTERN)})
|
1499
|
+
run_suite(tddium)
|
1500
|
+
end
|
1501
|
+
end
|
1502
|
+
|
1503
|
+
context "enable ci and campfire" do
|
1504
|
+
before do
|
1505
|
+
tddium.stub(:ask).with(Tddium::Text::Prompt::ENABLE_CI).and_return(Tddium::Text::Prompt::Response::YES)
|
1506
|
+
tddium.stub(:ask).with(Tddium::Text::Prompt::ENABLE_CAMPFIRE).and_return(Tddium::Text::Prompt::Response::YES)
|
1507
|
+
end
|
1508
|
+
|
1509
|
+
it "should prompt for URLs" do
|
1510
|
+
tddium.should_receive(:ask).with(Tddium::Text::Prompt::CI_PULL_URL)
|
1511
|
+
tddium.should_receive(:ask).with(Tddium::Text::Prompt::CI_PUSH_URL)
|
1512
|
+
run_suite(tddium)
|
1513
|
+
end
|
1514
|
+
|
1515
|
+
it "should prompt for campfire" do
|
1516
|
+
tddium.should_receive(:ask).with(Tddium::Text::Prompt::CAMPFIRE_SUBDOMAIN)
|
1517
|
+
tddium.should_receive(:ask).with(Tddium::Text::Prompt::CAMPFIRE_TOKEN)
|
1518
|
+
tddium.should_receive(:ask).with(Tddium::Text::Prompt::CAMPFIRE_ROOM)
|
1519
|
+
run_suite(tddium)
|
1520
|
+
end
|
1491
1521
|
end
|
1492
1522
|
end
|
1493
1523
|
|
@@ -1513,14 +1543,7 @@ describe Tddium do
|
|
1513
1543
|
|
1514
1544
|
context "'GET #{Tddium::Api::Path::SUITES}/#{SAMPLE_SUITE_ID}' is successful" do
|
1515
1545
|
before(:each) do
|
1516
|
-
|
1517
|
-
"suite" => {
|
1518
|
-
"id" => SAMPLE_SUITE_ID,
|
1519
|
-
"repo_name" => SAMPLE_APP_NAME,
|
1520
|
-
"branch" => SAMPLE_BRANCH_NAME
|
1521
|
-
}
|
1522
|
-
}
|
1523
|
-
stub_call_api_response(:get, "#{Tddium::Api::Path::SUITES}/#{SAMPLE_SUITE_ID}", response)
|
1546
|
+
stub_call_api_response(:get, "#{Tddium::Api::Path::SUITES}/#{SAMPLE_SUITE_ID}", {"suite"=>SAMPLE_SUITE_RESPONSE})
|
1524
1547
|
end
|
1525
1548
|
|
1526
1549
|
it "should not ask for a suite name" do
|
@@ -1535,7 +1558,7 @@ describe Tddium do
|
|
1535
1558
|
end
|
1536
1559
|
|
1537
1560
|
it "should display '#{Tddium::Text::Process::EXISTING_SUITE}'" do
|
1538
|
-
tddium.should_receive(:say).with(Tddium::Text::Process::EXISTING_SUITE %
|
1561
|
+
tddium.should_receive(:say).with(Tddium::Text::Process::EXISTING_SUITE % SAMPLE_SUITE_OUTPUT)
|
1539
1562
|
run_suite(tddium)
|
1540
1563
|
end
|
1541
1564
|
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tddium-preview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 7
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
- 6
|
10
|
-
version: 0.5.6
|
5
|
+
version: 0.6.0
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Solano Labs
|
@@ -15,7 +10,7 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-15 00:00:00 -07:00
|
19
14
|
default_executable:
|
20
15
|
dependencies:
|
21
16
|
- !ruby/object:Gem::Dependency
|
@@ -26,9 +21,6 @@ dependencies:
|
|
26
21
|
requirements:
|
27
22
|
- - ">="
|
28
23
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
24
|
version: "0"
|
33
25
|
type: :runtime
|
34
26
|
version_requirements: *id001
|
@@ -40,9 +32,6 @@ dependencies:
|
|
40
32
|
requirements:
|
41
33
|
- - ">="
|
42
34
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
|
-
segments:
|
45
|
-
- 0
|
46
35
|
version: "0"
|
47
36
|
type: :runtime
|
48
37
|
version_requirements: *id002
|
@@ -54,9 +43,6 @@ dependencies:
|
|
54
43
|
requirements:
|
55
44
|
- - ">="
|
56
45
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
|
-
segments:
|
59
|
-
- 0
|
60
46
|
version: "0"
|
61
47
|
type: :runtime
|
62
48
|
version_requirements: *id003
|
@@ -68,11 +54,6 @@ dependencies:
|
|
68
54
|
requirements:
|
69
55
|
- - ">="
|
70
56
|
- !ruby/object:Gem::Version
|
71
|
-
hash: 19
|
72
|
-
segments:
|
73
|
-
- 0
|
74
|
-
- 0
|
75
|
-
- 6
|
76
57
|
version: 0.0.6
|
77
58
|
type: :runtime
|
78
59
|
version_requirements: *id004
|
@@ -84,9 +65,6 @@ dependencies:
|
|
84
65
|
requirements:
|
85
66
|
- - ">="
|
86
67
|
- !ruby/object:Gem::Version
|
87
|
-
hash: 3
|
88
|
-
segments:
|
89
|
-
- 0
|
90
68
|
version: "0"
|
91
69
|
type: :runtime
|
92
70
|
version_requirements: *id005
|
@@ -98,9 +76,6 @@ dependencies:
|
|
98
76
|
requirements:
|
99
77
|
- - ">="
|
100
78
|
- !ruby/object:Gem::Version
|
101
|
-
hash: 3
|
102
|
-
segments:
|
103
|
-
- 0
|
104
79
|
version: "0"
|
105
80
|
type: :development
|
106
81
|
version_requirements: *id006
|
@@ -112,9 +87,6 @@ dependencies:
|
|
112
87
|
requirements:
|
113
88
|
- - ">="
|
114
89
|
- !ruby/object:Gem::Version
|
115
|
-
hash: 3
|
116
|
-
segments:
|
117
|
-
- 0
|
118
90
|
version: "0"
|
119
91
|
type: :development
|
120
92
|
version_requirements: *id007
|
@@ -126,9 +98,6 @@ dependencies:
|
|
126
98
|
requirements:
|
127
99
|
- - ">="
|
128
100
|
- !ruby/object:Gem::Version
|
129
|
-
hash: 3
|
130
|
-
segments:
|
131
|
-
- 0
|
132
101
|
version: "0"
|
133
102
|
type: :development
|
134
103
|
version_requirements: *id008
|
@@ -140,9 +109,6 @@ dependencies:
|
|
140
109
|
requirements:
|
141
110
|
- - ">="
|
142
111
|
- !ruby/object:Gem::Version
|
143
|
-
hash: 3
|
144
|
-
segments:
|
145
|
-
- 0
|
146
112
|
version: "0"
|
147
113
|
type: :development
|
148
114
|
version_requirements: *id009
|
@@ -192,18 +158,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
192
158
|
requirements:
|
193
159
|
- - ">="
|
194
160
|
- !ruby/object:Gem::Version
|
195
|
-
hash: 3
|
196
|
-
segments:
|
197
|
-
- 0
|
198
161
|
version: "0"
|
199
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
163
|
none: false
|
201
164
|
requirements:
|
202
165
|
- - ">="
|
203
166
|
- !ruby/object:Gem::Version
|
204
|
-
hash: 3
|
205
|
-
segments:
|
206
|
-
- 0
|
207
167
|
version: "0"
|
208
168
|
requirements: []
|
209
169
|
|