wally 0.0.19 → 0.0.20
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/wally +12 -2
- data/features/push_features.feature +20 -0
- data/features/step_definitions/browse_features_steps.rb +2 -1
- data/features/step_definitions/notifications_steps.rb +1 -1
- data/features/step_definitions/push_features_steps.rb +26 -0
- data/features/step_definitions/steps.rb +1 -1
- data/features/support/env.rb +6 -11
- data/lib/wally/application.rb +52 -14
- data/lib/wally/feature.rb +7 -0
- data/lib/wally/lists_features.rb +3 -7
- data/lib/wally/public/skin.css +45 -0
- data/lib/wally/version.rb +1 -1
- data/lib/wally/views/index.haml +1 -1
- data/lib/wally/views/layout.haml +11 -8
- data/lib/wally/views/progress.haml +16 -0
- data/spec/wally/counts_tags_spec.rb +13 -16
- data/spec/wally/feature_spec.rb +24 -0
- data/spec/wally/lists_features_spec.rb +10 -13
- data/spec/wally/search_features_spec.rb +15 -18
- data/wally.gemspec +3 -0
- metadata +61 -20
data/bin/wally
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
$:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
if ARGV.first == "server"
|
5
|
+
require "wally"
|
6
|
+
Sinatra::Application.run!
|
7
|
+
elsif ARGV[0] == "push"
|
8
|
+
require "restclient"
|
9
|
+
require "json"
|
10
|
+
features = []
|
11
|
+
Dir.glob(File.join("#{ARGV[2]}", "**/*.feature")).each do |feature_path|
|
12
|
+
features << {:path => feature_path, :content => File.read(feature_path)}
|
13
|
+
end
|
14
|
+
RestClient.put "#{ARGV[1]}/features/?authentication_code=#{File.read(".wally")}", features.to_json
|
15
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: Push Features To Server
|
2
|
+
In order to easily get features on the server
|
3
|
+
As a developer
|
4
|
+
I want to be able to push features to an endpoint
|
5
|
+
|
6
|
+
Scenario: Push features without authentication
|
7
|
+
Given I don't have a .wally authorisation file
|
8
|
+
When I put data to /features with the authentication code
|
9
|
+
Then I should get a 403 http status
|
10
|
+
|
11
|
+
Scenario: Push features with authentication
|
12
|
+
Given I have a .wally authentication file
|
13
|
+
When I put data to /features with the authentication code
|
14
|
+
Then I should get a 201 http status
|
15
|
+
|
16
|
+
Scenario: Pushed features show up on home page
|
17
|
+
Given I have a .wally authentication file
|
18
|
+
When I put data to /features with the authentication code
|
19
|
+
And I visit the home page
|
20
|
+
Then I should see the uploaded feature
|
@@ -25,8 +25,9 @@ When /^click on a scenario header link$/ do
|
|
25
25
|
page.click_link "Sample Aidy"
|
26
26
|
end
|
27
27
|
|
28
|
+
|
28
29
|
Then /^a page appears with the scenario content$/ do
|
29
|
-
page.body.should have_content "
|
30
|
+
page.body.should have_content "Sample Aidy"
|
30
31
|
page.body.should have_content "Given my name is \"Aidy\""
|
31
32
|
page.body.should have_content "When I drink alcohol"
|
32
33
|
page.body.should have_content "Then I go nuts"
|
@@ -3,7 +3,7 @@ Given /^a feature file with (\d+) @wip tags$/ do |wip_tag_count|
|
|
3
3
|
1.upto(wip_tag_count.to_i) do |number|
|
4
4
|
contents += "@wip\nScenario: Scenario #{number}\n"
|
5
5
|
end
|
6
|
-
|
6
|
+
create_feature("sample1.feature", contents)
|
7
7
|
end
|
8
8
|
|
9
9
|
Then /^I should see a notification that says "([^"]*)"$/ do |text|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
After do
|
2
|
+
File.delete ".wally" if File.exist? ".wally"
|
3
|
+
end
|
4
|
+
|
5
|
+
Given /^I don't have a \.wally authorisation file$/ do
|
6
|
+
end
|
7
|
+
|
8
|
+
Given /^I have a \.wally authentication file$/ do
|
9
|
+
@authentication_code = "authCodE!!2322"
|
10
|
+
File.open(".wally", "w") do |file|
|
11
|
+
file.write @authentication_code
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
When /^I put data to \/features with the authentication code$/ do
|
16
|
+
data = [{:path => "feature-name.feature", :content => "Feature: Feature Name"}].to_json
|
17
|
+
page.driver.put "/features?authentication_code=#{@authentication_code}", data
|
18
|
+
end
|
19
|
+
|
20
|
+
Then /^I should get a (\d+) http status$/ do |status|
|
21
|
+
page.driver.status_code.should eql status.to_i
|
22
|
+
end
|
23
|
+
|
24
|
+
Then /^I should see the uploaded feature$/ do
|
25
|
+
page.body.should have_content "Feature Name"
|
26
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -8,18 +8,13 @@ require "fakefs/spec_helpers"
|
|
8
8
|
|
9
9
|
Capybara.app = Sinatra::Application
|
10
10
|
|
11
|
-
Before do
|
12
|
-
ARGV.clear
|
13
|
-
ARGV << "application-features"
|
14
|
-
FileUtils.mkdir_p("application-features")
|
15
|
-
end
|
16
|
-
|
17
11
|
After do
|
18
|
-
|
12
|
+
Wally::Feature.delete_all
|
19
13
|
end
|
20
14
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
def create_feature path, content
|
16
|
+
feature = Wally::Feature.new
|
17
|
+
feature.path = path
|
18
|
+
feature.content = content
|
19
|
+
feature.save
|
25
20
|
end
|
data/lib/wally/application.rb
CHANGED
@@ -1,41 +1,79 @@
|
|
1
1
|
$:.unshift(File.join(File.dirname(__FILE__)))
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
2
|
+
require "sinatra"
|
3
|
+
require "haml"
|
4
|
+
require "rdiscount"
|
5
|
+
require "mongoid"
|
6
|
+
require "wally/feature"
|
5
7
|
|
6
8
|
configure do
|
7
9
|
set :haml, { :ugly=>true }
|
10
|
+
Mongoid.configure do |config|
|
11
|
+
config.master = Mongo::Connection.new.db("wally")
|
12
|
+
end
|
8
13
|
end
|
9
14
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
configure :test do
|
16
|
+
Mongoid.configure do |config|
|
17
|
+
config.master = Mongo::Connection.new.db("wally_test")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def lists_features
|
22
|
+
Wally::ListsFeatures.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def tag_count
|
26
|
+
Wally::CountsTags.new(lists_features).count_tags
|
27
|
+
end
|
28
|
+
|
29
|
+
def excessive_wip_tags
|
30
|
+
tag_count["@wip"] >= 10
|
31
|
+
end
|
32
|
+
|
33
|
+
def scenario_count
|
34
|
+
lists_features.features.to_s.scan(/scenario/).length
|
35
|
+
end
|
36
|
+
|
37
|
+
put '/features/?' do
|
38
|
+
if File.exist?(".wally") && params[:authentication_code] == File.read(".wally").strip
|
39
|
+
Wally::Feature.delete_all
|
40
|
+
|
41
|
+
JSON.parse(request.body.read).each do |json|
|
42
|
+
feature = Wally::Feature.new
|
43
|
+
feature.path = json["path"]
|
44
|
+
feature.content = json["content"]
|
45
|
+
feature.save
|
46
|
+
end
|
47
|
+
halt 201
|
48
|
+
else
|
49
|
+
error 403
|
50
|
+
end
|
17
51
|
end
|
18
52
|
|
19
53
|
get '/?' do
|
20
54
|
haml :index
|
21
55
|
end
|
22
56
|
|
23
|
-
get '/features/:feature/?' do |feature|
|
24
|
-
|
57
|
+
get '/features/:feature/?' do |feature|
|
58
|
+
lists_features.features.each do |feature_hash|
|
25
59
|
@feature = feature_hash if feature_hash["id"] == feature
|
26
60
|
end
|
27
61
|
haml :feature
|
28
62
|
end
|
29
63
|
|
64
|
+
get '/progress/?' do
|
65
|
+
haml :progress
|
66
|
+
end
|
67
|
+
|
30
68
|
get '/search/?' do
|
31
69
|
if params[:q]
|
32
|
-
@search_results = Wally::SearchFeatures.new(
|
70
|
+
@search_results = Wally::SearchFeatures.new(lists_features).find(:query => params[:q])
|
33
71
|
end
|
34
72
|
haml :search
|
35
73
|
end
|
36
74
|
|
37
75
|
get '/features/:feature/scenario/:scenario/?' do |feature_id, scenario_id|
|
38
|
-
|
76
|
+
lists_features.features.each do |feature|
|
39
77
|
if feature["id"] == feature_id
|
40
78
|
@feature = feature
|
41
79
|
feature["elements"].each do |element|
|
data/lib/wally/lists_features.rb
CHANGED
@@ -11,15 +11,11 @@ end
|
|
11
11
|
|
12
12
|
module Wally
|
13
13
|
class ListsFeatures
|
14
|
-
def initialize feature_path
|
15
|
-
@feature_path = feature_path
|
16
|
-
end
|
17
|
-
|
18
14
|
def features
|
19
15
|
features = []
|
20
|
-
|
21
|
-
gherkinese = parse_gherkin(
|
22
|
-
gherkinese["path"] = path
|
16
|
+
Feature.all.each do |feature|
|
17
|
+
gherkinese = parse_gherkin(feature.content)
|
18
|
+
gherkinese["path"] = feature.path
|
23
19
|
features << gherkinese
|
24
20
|
end
|
25
21
|
features.sort {|a,b| a["name"] <=> b["name"]}
|
data/lib/wally/public/skin.css
CHANGED
@@ -121,3 +121,48 @@ section.feature p:first-child {
|
|
121
121
|
padding-left: 10px;
|
122
122
|
margin-left: -10px;
|
123
123
|
}
|
124
|
+
|
125
|
+
/* CHART LISTS - http://www.alistapart.com/d/accessibledata/example-barchart.html */
|
126
|
+
.chartlist {
|
127
|
+
float: left;
|
128
|
+
border-top: 1px solid #EEE;
|
129
|
+
width: 80%;
|
130
|
+
}
|
131
|
+
.chartlist li {
|
132
|
+
position: relative;
|
133
|
+
display: block;
|
134
|
+
border-bottom: 1px solid #EEE;
|
135
|
+
_zoom: 1;
|
136
|
+
}
|
137
|
+
.chartlist li a {
|
138
|
+
display: block;
|
139
|
+
padding: 0.4em 4.5em 0.4em 0.5em;
|
140
|
+
position: relative;
|
141
|
+
z-index: 2;
|
142
|
+
}
|
143
|
+
.chartlist .count {
|
144
|
+
display: block;
|
145
|
+
position: absolute;
|
146
|
+
top: 0;
|
147
|
+
right: 0;
|
148
|
+
margin: 0 0.3em;
|
149
|
+
text-align: right;
|
150
|
+
color: #999;
|
151
|
+
font-weight: bold;
|
152
|
+
font-size: 0.875em;
|
153
|
+
line-height: 2em;
|
154
|
+
}
|
155
|
+
.chartlist .index {
|
156
|
+
display: block;
|
157
|
+
position: absolute;
|
158
|
+
top: 0;
|
159
|
+
left: 0;
|
160
|
+
height: 100%;
|
161
|
+
background: #B8E4F5;
|
162
|
+
text-indent: -9999px;
|
163
|
+
overflow: hidden;
|
164
|
+
line-height: 2em;
|
165
|
+
}
|
166
|
+
.chartlist li:hover {
|
167
|
+
background: #EFEFEF;
|
168
|
+
}
|
data/lib/wally/version.rb
CHANGED
data/lib/wally/views/index.haml
CHANGED
data/lib/wally/views/layout.haml
CHANGED
@@ -20,25 +20,28 @@
|
|
20
20
|
%ul
|
21
21
|
%li
|
22
22
|
%a{:href => "/search?q="}
|
23
|
-
= "Scenarios (#{
|
23
|
+
= "Scenarios (#{scenario_count})"
|
24
24
|
%li
|
25
25
|
%a{:href => "/"}
|
26
|
-
= "Features (#{
|
26
|
+
= "Features (#{lists_features.features.length})"
|
27
|
+
%li
|
28
|
+
%a{:href => "/progress"}
|
29
|
+
Progress
|
27
30
|
%h2
|
28
31
|
Features
|
29
32
|
%ul
|
30
|
-
-
|
33
|
+
- lists_features.features.each do |feature|
|
31
34
|
= haml :feature_link, {:locals => {:feature => feature}, :layout => false}
|
32
|
-
- if
|
33
|
-
%h2 Tags
|
35
|
+
- if tag_count.any?
|
36
|
+
%h2 Tags
|
34
37
|
%ul
|
35
|
-
-
|
38
|
+
- tag_count.each do |tag, count|
|
36
39
|
%li
|
37
40
|
%a{:href => "/search?q=#{tag}"}
|
38
41
|
= "#{tag} (#{count})"
|
39
42
|
%div.content
|
40
|
-
- if
|
43
|
+
- if excessive_wip_tags
|
41
44
|
%div.alert-message.error
|
42
45
|
%p
|
43
|
-
= "You have #{
|
46
|
+
= "You have #{tag_count["@wip"]} @wip tags :("
|
44
47
|
= yield
|
@@ -0,0 +1,16 @@
|
|
1
|
+
%h2
|
2
|
+
Progress
|
3
|
+
- #{@scenario_count}
|
4
|
+
- if @tag_count.any?
|
5
|
+
%p
|
6
|
+
This project has #{@scenario_count} scenarios, of which :-
|
7
|
+
%ul{:class => 'chartlist'}
|
8
|
+
- @tag_count.each do |tag, count|
|
9
|
+
- ratio = (count.to_f / @scenario_count) * 100
|
10
|
+
%li
|
11
|
+
%a{:href => "/search?q=#{tag}"}
|
12
|
+
= "#{tag} (#{ratio.ceil}%)"
|
13
|
+
%span{:class => "count #{tag}"}
|
14
|
+
= ratio.ceil
|
15
|
+
%span{:class => 'index', :style => "width: #{ratio.ceil}%"}
|
16
|
+
= ratio
|
@@ -4,23 +4,20 @@ require "wally/counts_tags"
|
|
4
4
|
|
5
5
|
module Wally
|
6
6
|
describe CountsTags do
|
7
|
-
before do
|
8
|
-
FileUtils.mkdir_p "application-features"
|
9
|
-
end
|
10
|
-
|
11
7
|
after do
|
12
|
-
|
8
|
+
Feature.delete_all
|
13
9
|
end
|
14
10
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
def create_feature path, content
|
12
|
+
feature = Feature.new
|
13
|
+
feature.path = path
|
14
|
+
feature.content = content
|
15
|
+
feature.save
|
19
16
|
end
|
20
17
|
|
21
18
|
it "counts feature tags" do
|
22
|
-
|
23
|
-
|
19
|
+
create_feature("feature-1.feature", "@tag1 @tag2\nFeature: Feature 1")
|
20
|
+
create_feature("feature-2.feature", "@tag2 @tag2\nFeature: Feature 2")
|
24
21
|
lists_features = ListsFeatures.new("application-features")
|
25
22
|
|
26
23
|
CountsTags.new(lists_features).count_tags.should == {
|
@@ -30,8 +27,8 @@ module Wally
|
|
30
27
|
end
|
31
28
|
|
32
29
|
it "counts scenario tags" do
|
33
|
-
|
34
|
-
|
30
|
+
create_feature("feature-1.feature", "Feature: Feature 1\n@tag1@tag1\nScenario: Scenario 1")
|
31
|
+
create_feature("feature-2.feature", "Feature: Feature 2\n@tag3@tag1\nScenario: Scenario 1")
|
35
32
|
lists_features = ListsFeatures.new("application-features")
|
36
33
|
CountsTags.new(lists_features).count_tags.should == {
|
37
34
|
"@tag1" => 3,
|
@@ -40,9 +37,9 @@ module Wally
|
|
40
37
|
end
|
41
38
|
|
42
39
|
it "counts feature tags irrespective of their case" do
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
create_feature("feature-1.feature", "@tag1\nFeature: Feature 1")
|
41
|
+
create_feature("feature-2.feature", "@TAG1\nFeature: Feature 2")
|
42
|
+
create_feature("feature-3.feature", "Feature: Feature 2\n@TAG1\nScenario: Scenario 1")
|
46
43
|
lists_features = ListsFeatures.new("application-features")
|
47
44
|
|
48
45
|
CountsTags.new(lists_features).count_tags.should == {
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
2
|
+
|
3
|
+
module Wally
|
4
|
+
describe Feature do
|
5
|
+
after do
|
6
|
+
Feature.delete_all
|
7
|
+
end
|
8
|
+
|
9
|
+
it "stores a feature" do
|
10
|
+
feature = Feature.new
|
11
|
+
feature.content = "Feature: Bla"
|
12
|
+
feature.save
|
13
|
+
|
14
|
+
Feature.all.first.content.should == "Feature: Bla"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "stores a feature path" do
|
18
|
+
feature = Feature.new
|
19
|
+
feature.path = "hello.feature"
|
20
|
+
feature.save
|
21
|
+
Feature.all.first.path.should == "hello.feature"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -3,24 +3,21 @@ require 'fileutils'
|
|
3
3
|
|
4
4
|
module Wally
|
5
5
|
describe ListsFeatures do
|
6
|
-
|
7
|
-
|
6
|
+
after do
|
7
|
+
Feature.delete_all
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
def create_feature path, content
|
11
|
+
feature = Feature.new
|
12
|
+
feature.path = path
|
13
|
+
feature.content = content
|
14
|
+
feature.save
|
12
15
|
end
|
13
16
|
|
14
17
|
it "returns a list of alphabeticaly ordered features" do
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
File.open("application-features/2-sample.feature", "w") do |file|
|
19
|
-
file.write "Feature: Malgor"
|
20
|
-
end
|
21
|
-
File.open("application-features/3-sample.feature", "w") do |file|
|
22
|
-
file.write "Feature: Adrian"
|
23
|
-
end
|
18
|
+
create_feature("1-sample.feature", "Feature: Zorro")
|
19
|
+
create_feature("2-sample.feature", "Feature: Malgor")
|
20
|
+
create_feature("3-sample.feature", "Feature: Adrian")
|
24
21
|
lists_features = ListsFeatures.new("application-features")
|
25
22
|
lists_features.features.size.should == 3
|
26
23
|
lists_features.features[0]["name"].should == "Adrian"
|
@@ -2,18 +2,15 @@ require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
|
2
2
|
|
3
3
|
module Wally
|
4
4
|
describe SearchFeatures do
|
5
|
-
before do
|
6
|
-
FileUtils.mkdir "application-features"
|
7
|
-
end
|
8
|
-
|
9
5
|
after do
|
10
|
-
|
6
|
+
Feature.delete_all
|
11
7
|
end
|
12
8
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
def create_feature path, content
|
10
|
+
feature = Feature.new
|
11
|
+
feature.path = path
|
12
|
+
feature.content = content
|
13
|
+
feature.save
|
17
14
|
end
|
18
15
|
|
19
16
|
let :lists_features do
|
@@ -21,8 +18,8 @@ module Wally
|
|
21
18
|
end
|
22
19
|
|
23
20
|
it "finds features containing text" do
|
24
|
-
|
25
|
-
|
21
|
+
create_feature("sample1.feature", "Feature: Bla")
|
22
|
+
create_feature("sample2.feature", "Feature: Meh")
|
26
23
|
|
27
24
|
results = SearchFeatures.new(lists_features).find(:query => "Meh")
|
28
25
|
results.items.size.should == 1
|
@@ -30,21 +27,21 @@ module Wally
|
|
30
27
|
end
|
31
28
|
|
32
29
|
it "finds features by narrative" do
|
33
|
-
|
30
|
+
create_feature("sample1.feature", "Feature: bla\nIn order to bananas")
|
34
31
|
results = SearchFeatures.new(lists_features).find(:query => "bananas")
|
35
32
|
results.items.size.should == 1
|
36
33
|
results.items.first.feature["name"].should == "bla"
|
37
34
|
end
|
38
35
|
|
39
36
|
it "has a suggestion" do
|
40
|
-
|
37
|
+
create_feature("sample1.feature", "Feature: Monkeys")
|
41
38
|
results = SearchFeatures.new(lists_features).find(:query => "mnkeys")
|
42
39
|
results.suggestion.should == "Monkeys"
|
43
40
|
end
|
44
41
|
|
45
42
|
it "has a suggestion only when it's different from the search query" do
|
46
|
-
|
47
|
-
|
43
|
+
create_feature("sample1.feature", "Feature: monkeys\nScenario: feature")
|
44
|
+
create_feature("sample2.feature", "Feature: dogs\nScenario: Sample scenario")
|
48
45
|
results = SearchFeatures.new(lists_features).find(:query => "feature")
|
49
46
|
results.suggestion.should be_nil
|
50
47
|
end
|
@@ -58,7 +55,7 @@ module Wally
|
|
58
55
|
Given I eat some doughnuts
|
59
56
|
Scenario: Another Scenario
|
60
57
|
CONTENTS
|
61
|
-
|
58
|
+
create_feature("sample1.feature", contents)
|
62
59
|
end
|
63
60
|
|
64
61
|
it "finds scenarios containing text" do
|
@@ -76,13 +73,13 @@ module Wally
|
|
76
73
|
|
77
74
|
context "feature with tags" do
|
78
75
|
it "finds features by tag" do
|
79
|
-
|
76
|
+
create_feature("example-feature.feature", "@tag_name\nFeature: Example Feature")
|
80
77
|
results = SearchFeatures.new(lists_features).find(:query => "@tag_NAME")
|
81
78
|
results.items.first.feature["name"].should == "Example Feature"
|
82
79
|
end
|
83
80
|
|
84
81
|
it "finds scenarios by tag" do
|
85
|
-
|
82
|
+
create_feature("example-feature.feature", "Feature: Example Feature\n@scenario_tag\nScenario: Example Scenario")
|
86
83
|
results = SearchFeatures.new(lists_features).find(:query => "@scenario_TAG")
|
87
84
|
results.items.first.scenario["name"].should == "Example Scenario"
|
88
85
|
end
|
data/wally.gemspec
CHANGED
@@ -23,9 +23,12 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency "rdiscount"
|
24
24
|
s.add_runtime_dependency "gherkin"
|
25
25
|
s.add_runtime_dependency "komainu"
|
26
|
+
s.add_runtime_dependency "mongoid"
|
27
|
+
s.add_runtime_dependency "bson_ext"
|
26
28
|
|
27
29
|
s.add_development_dependency "cucumber"
|
28
30
|
s.add_development_dependency "capybara"
|
29
31
|
s.add_development_dependency "rspec"
|
30
32
|
s.add_development_dependency "fakefs"
|
33
|
+
s.add_development_dependency "launchy"
|
31
34
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wally
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-29 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &70321204843980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70321204843980
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: haml
|
27
|
-
requirement: &
|
27
|
+
requirement: &70321204843300 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70321204843300
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rdiscount
|
38
|
-
requirement: &
|
38
|
+
requirement: &70321204842520 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70321204842520
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: gherkin
|
49
|
-
requirement: &
|
49
|
+
requirement: &70321204841960 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70321204841960
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: komainu
|
60
|
-
requirement: &
|
60
|
+
requirement: &70321204828400 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,32 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70321204828400
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mongoid
|
71
|
+
requirement: &70321204826880 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70321204826880
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: bson_ext
|
82
|
+
requirement: &70321204826180 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70321204826180
|
69
91
|
- !ruby/object:Gem::Dependency
|
70
92
|
name: cucumber
|
71
|
-
requirement: &
|
93
|
+
requirement: &70321204825300 !ruby/object:Gem::Requirement
|
72
94
|
none: false
|
73
95
|
requirements:
|
74
96
|
- - ! '>='
|
@@ -76,10 +98,10 @@ dependencies:
|
|
76
98
|
version: '0'
|
77
99
|
type: :development
|
78
100
|
prerelease: false
|
79
|
-
version_requirements: *
|
101
|
+
version_requirements: *70321204825300
|
80
102
|
- !ruby/object:Gem::Dependency
|
81
103
|
name: capybara
|
82
|
-
requirement: &
|
104
|
+
requirement: &70321204824540 !ruby/object:Gem::Requirement
|
83
105
|
none: false
|
84
106
|
requirements:
|
85
107
|
- - ! '>='
|
@@ -87,10 +109,10 @@ dependencies:
|
|
87
109
|
version: '0'
|
88
110
|
type: :development
|
89
111
|
prerelease: false
|
90
|
-
version_requirements: *
|
112
|
+
version_requirements: *70321204824540
|
91
113
|
- !ruby/object:Gem::Dependency
|
92
114
|
name: rspec
|
93
|
-
requirement: &
|
115
|
+
requirement: &70321204823760 !ruby/object:Gem::Requirement
|
94
116
|
none: false
|
95
117
|
requirements:
|
96
118
|
- - ! '>='
|
@@ -98,10 +120,21 @@ dependencies:
|
|
98
120
|
version: '0'
|
99
121
|
type: :development
|
100
122
|
prerelease: false
|
101
|
-
version_requirements: *
|
123
|
+
version_requirements: *70321204823760
|
102
124
|
- !ruby/object:Gem::Dependency
|
103
125
|
name: fakefs
|
104
|
-
requirement: &
|
126
|
+
requirement: &70321204823200 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *70321204823200
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: launchy
|
137
|
+
requirement: &70321204822620 !ruby/object:Gem::Requirement
|
105
138
|
none: false
|
106
139
|
requirements:
|
107
140
|
- - ! '>='
|
@@ -109,7 +142,7 @@ dependencies:
|
|
109
142
|
version: '0'
|
110
143
|
type: :development
|
111
144
|
prerelease: false
|
112
|
-
version_requirements: *
|
145
|
+
version_requirements: *70321204822620
|
113
146
|
description: ''
|
114
147
|
email:
|
115
148
|
- andrew.vos@gmail.com
|
@@ -134,15 +167,18 @@ files:
|
|
134
167
|
- features/counts.feature
|
135
168
|
- features/list_tags.feature
|
136
169
|
- features/notifications.feature
|
170
|
+
- features/push_features.feature
|
137
171
|
- features/search_features.feature
|
138
172
|
- features/step_definitions/browse_features_steps.rb
|
139
173
|
- features/step_definitions/notifications_steps.rb
|
174
|
+
- features/step_definitions/push_features_steps.rb
|
140
175
|
- features/step_definitions/search_features_steps.rb
|
141
176
|
- features/step_definitions/steps.rb
|
142
177
|
- features/support/env.rb
|
143
178
|
- lib/wally.rb
|
144
179
|
- lib/wally/application.rb
|
145
180
|
- lib/wally/counts_tags.rb
|
181
|
+
- lib/wally/feature.rb
|
146
182
|
- lib/wally/lists_features.rb
|
147
183
|
- lib/wally/public/bootstrap.min.css
|
148
184
|
- lib/wally/public/skin.css
|
@@ -153,11 +189,13 @@ files:
|
|
153
189
|
- lib/wally/views/feature_link.haml
|
154
190
|
- lib/wally/views/index.haml
|
155
191
|
- lib/wally/views/layout.haml
|
192
|
+
- lib/wally/views/progress.haml
|
156
193
|
- lib/wally/views/scenario.haml
|
157
194
|
- lib/wally/views/search.haml
|
158
195
|
- lib/wally/views/tag_links.haml
|
159
196
|
- spec/spec_helper.rb
|
160
197
|
- spec/wally/counts_tags_spec.rb
|
198
|
+
- spec/wally/feature_spec.rb
|
161
199
|
- spec/wally/lists_features_spec.rb
|
162
200
|
- spec/wally/search_features_spec.rb
|
163
201
|
- wally.gemspec
|
@@ -190,13 +228,16 @@ test_files:
|
|
190
228
|
- features/counts.feature
|
191
229
|
- features/list_tags.feature
|
192
230
|
- features/notifications.feature
|
231
|
+
- features/push_features.feature
|
193
232
|
- features/search_features.feature
|
194
233
|
- features/step_definitions/browse_features_steps.rb
|
195
234
|
- features/step_definitions/notifications_steps.rb
|
235
|
+
- features/step_definitions/push_features_steps.rb
|
196
236
|
- features/step_definitions/search_features_steps.rb
|
197
237
|
- features/step_definitions/steps.rb
|
198
238
|
- features/support/env.rb
|
199
239
|
- spec/spec_helper.rb
|
200
240
|
- spec/wally/counts_tags_spec.rb
|
241
|
+
- spec/wally/feature_spec.rb
|
201
242
|
- spec/wally/lists_features_spec.rb
|
202
243
|
- spec/wally/search_features_spec.rb
|