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 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
- require "wally"
5
- Sinatra::Application.run!
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 "Scenario: Sample Aidy"
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
- create_feature_file("sample1.feature", contents)
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
@@ -1,6 +1,6 @@
1
1
  Given /^a feature file named "([^"]*)" with the contents:$/ do |filename, contents|
2
2
  @contents = contents
3
- create_feature_file(filename, @contents)
3
+ create_feature(filename, @contents)
4
4
  end
5
5
 
6
6
  When /^I visit the home page$/ do
@@ -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
- FileUtils.rm_rf("application-features")
12
+ Wally::Feature.delete_all
19
13
  end
20
14
 
21
- def create_feature_file(file_name, contents)
22
- File.open(File.join("application-features", file_name), "w") do |file|
23
- file.write(contents)
24
- end
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
@@ -1,41 +1,79 @@
1
1
  $:.unshift(File.join(File.dirname(__FILE__)))
2
- require 'sinatra'
3
- require 'haml'
4
- require 'rdiscount'
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
- before do
11
- features_path = ARGV.first || "features"
12
- @lists_features = Wally::ListsFeatures.new(features_path)
13
- @features = @lists_features.features
14
- @tag_count = Wally::CountsTags.new(@lists_features).count_tags
15
- @excessive_wip_tags = @tag_count["@wip"] >= 10
16
- @scenario_count = @features.to_s.scan(/scenario/).length
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
- @features.each do |feature_hash|
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(@lists_features).find(:query => params[:q])
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
- @features.each do |feature|
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|
@@ -0,0 +1,7 @@
1
+ module Wally
2
+ class Feature
3
+ include Mongoid::Document
4
+ field :path, :type => String
5
+ field :content, :type => String
6
+ end
7
+ end
@@ -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
- Dir.glob("#{@feature_path}/*.feature").each do |path|
21
- gherkinese = parse_gherkin(File.read(path))
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"]}
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Wally
2
- VERSION = "0.0.19"
2
+ VERSION = "0.0.20"
3
3
  end
@@ -1,4 +1,4 @@
1
- - @features.each do |feature|
1
+ - lists_features.features.each do |feature|
2
2
  %h2
3
3
  = feature["name"]
4
4
  :markdown
@@ -20,25 +20,28 @@
20
20
  %ul
21
21
  %li
22
22
  %a{:href => "/search?q="}
23
- = "Scenarios (#{@scenario_count})"
23
+ = "Scenarios (#{scenario_count})"
24
24
  %li
25
25
  %a{:href => "/"}
26
- = "Features (#{@features.length})"
26
+ = "Features (#{lists_features.features.length})"
27
+ %li
28
+ %a{:href => "/progress"}
29
+ Progress
27
30
  %h2
28
31
  Features
29
32
  %ul
30
- - @features.each do |feature|
33
+ - lists_features.features.each do |feature|
31
34
  = haml :feature_link, {:locals => {:feature => feature}, :layout => false}
32
- - if @tag_count.any?
33
- %h2 Tags (#{@tag_count.length})
35
+ - if tag_count.any?
36
+ %h2 Tags
34
37
  %ul
35
- - @tag_count.each do |tag, count|
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 @excessive_wip_tags
43
+ - if excessive_wip_tags
41
44
  %div.alert-message.error
42
45
  %p
43
- = "You have #{@tag_count["@wip"]} @wip tags :("
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
- FileUtils.rm_rf "application-features"
8
+ Feature.delete_all
13
9
  end
14
10
 
15
- def write_feature(name, contents)
16
- File.open("application-features/#{name}", "w") do |file|
17
- file.write(contents)
18
- end
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
- write_feature("feature-1.feature", "@tag1 @tag2\nFeature: Feature 1")
23
- write_feature("feature-2.feature", "@tag2 @tag2\nFeature: Feature 2")
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
- write_feature("feature-1.feature", "Feature: Feature 1\n@tag1@tag1\nScenario: Scenario 1")
34
- write_feature("feature-2.feature", "Feature: Feature 2\n@tag3@tag1\nScenario: Scenario 1")
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
- write_feature("feature-1.feature", "@tag1\nFeature: Feature 1")
44
- write_feature("feature-2.feature", "@TAG1\nFeature: Feature 2")
45
- write_feature("feature-3.feature", "Feature: Feature 2\n@TAG1\nScenario: Scenario 1")
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
- before do
7
- FileUtils.mkdir_p "application-features"
6
+ after do
7
+ Feature.delete_all
8
8
  end
9
9
 
10
- after do
11
- FileUtils.rm_rf "application-features"
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
- File.open("application-features/1-sample.feature", "w") do |file|
16
- file.write "Feature: Zorro"
17
- end
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
- FileUtils.rm_rf "application-features"
6
+ Feature.delete_all
11
7
  end
12
8
 
13
- def write_feature(name, contents)
14
- File.open("application-features/#{name}", "w") do |file|
15
- file.write(contents)
16
- end
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
- write_feature("sample1.feature", "Feature: Bla")
25
- write_feature("sample2.feature", "Feature: Meh")
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
- write_feature("sample1.feature", "Feature: bla\nIn order to bananas")
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
- write_feature("sample1.feature", "Feature: Monkeys")
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
- write_feature("sample1.feature", "Feature: monkeys\nScenario: feature")
47
- write_feature("sample2.feature", "Feature: dogs\nScenario: Sample scenario")
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
- write_feature("sample1.feature", contents)
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
- write_feature("example-feature.feature", "@tag_name\nFeature: Example Feature")
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
- write_feature("example-feature.feature", "Feature: Example Feature\n@scenario_tag\nScenario: Example Scenario")
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.19
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-27 00:00:00.000000000Z
12
+ date: 2011-11-29 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70094365711620 !ruby/object:Gem::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: *70094365711620
24
+ version_requirements: *70321204843980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: haml
27
- requirement: &70094365710840 !ruby/object:Gem::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: *70094365710840
35
+ version_requirements: *70321204843300
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdiscount
38
- requirement: &70094365709760 !ruby/object:Gem::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: *70094365709760
46
+ version_requirements: *70321204842520
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: gherkin
49
- requirement: &70094365709200 !ruby/object:Gem::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: *70094365709200
57
+ version_requirements: *70321204841960
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: komainu
60
- requirement: &70094365708440 !ruby/object:Gem::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: *70094365708440
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: &70094365706640 !ruby/object:Gem::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: *70094365706640
101
+ version_requirements: *70321204825300
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: capybara
82
- requirement: &70094365699040 !ruby/object:Gem::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: *70094365699040
112
+ version_requirements: *70321204824540
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: rspec
93
- requirement: &70094365698380 !ruby/object:Gem::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: *70094365698380
123
+ version_requirements: *70321204823760
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: fakefs
104
- requirement: &70094365697780 !ruby/object:Gem::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: *70094365697780
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