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