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 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