wally 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
data/config.ru CHANGED
@@ -1,2 +1,2 @@
1
- require './lib/application'
1
+ require './lib/wally'
2
2
  run Sinatra::Application
@@ -1,5 +1,5 @@
1
- @tag1 @tag2
1
+ @batman @robin
2
2
  Feature: Has lots of tags
3
3
 
4
- @tag @another_tag
4
+ @green_lantern @spider_man
5
5
  Scenario: Also has some tags
@@ -0,0 +1,7 @@
1
+ Feature: Multiple Scenarios
2
+ Scenario: Scenario 1
3
+ Scenario: Scenario 2
4
+ Scenario: Scenario 3
5
+ Scenario: Scenario 4
6
+ Scenario: Scenario 5
7
+ Scenario: Scenario 6
@@ -0,0 +1,20 @@
1
+ Feature: List Tags
2
+ In order to be informed of all tags
3
+ As a stakeholder
4
+ I want a list of tags to be displayed
5
+
6
+ Scenario: Multiple tags
7
+ Given a feature file named "sample.feature" with the contents:
8
+ """
9
+ @tag1
10
+ Feature: Tag Feature
11
+ @tag2 @multiple
12
+ Scenario: Tag Scenario 1
13
+ @tag3 @multiple
14
+ Scenario: Tag Scenario 2
15
+ """
16
+ When I visit the home page
17
+ Then I should see a link to "@tag1 (1)" with the url "/search?q=@tag1"
18
+ And I should see a link to "@tag2 (1)" with the url "/search?q=@tag2"
19
+ And I should see a link to "@tag3 (1)" with the url "/search?q=@tag3"
20
+ And I should see a link to "@multiple (2)" with the url "/search?q=@multiple"
data/lib/wally.rb CHANGED
@@ -7,3 +7,4 @@ require "wally/version"
7
7
  require "wally/application"
8
8
  require "wally/lists_features"
9
9
  require "wally/search_features"
10
+ require "wally/counts_tags"
@@ -7,16 +7,11 @@ configure do
7
7
  set :haml, { :ugly=>true }
8
8
  end
9
9
 
10
- def features_path
11
- ARGV.first || "features"
12
- end
13
-
14
- def lists_features
15
- Wally::ListsFeatures.new(features_path)
16
- end
17
-
18
10
  before do
19
- @features = lists_features.features
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
20
15
  end
21
16
 
22
17
  get '/?' do
@@ -32,7 +27,7 @@ end
32
27
 
33
28
  get '/search/?' do
34
29
  if params[:q]
35
- @search_results = Wally::SearchFeatures.new(lists_features).find(:query => params[:q])
30
+ @search_results = Wally::SearchFeatures.new(@lists_features).find(:query => params[:q])
36
31
  end
37
32
  haml :search
38
33
  end
@@ -0,0 +1,27 @@
1
+ module Wally
2
+ class CountsTags
3
+ def initialize lists_features
4
+ @lists_features = lists_features
5
+ end
6
+
7
+ def count_tags
8
+ @lists_features.features.inject(Hash.new(0)) do |tag_count, feature|
9
+ if feature["tags"]
10
+ feature["tags"].each do |tag|
11
+ tag_count[tag["name"]] += 1
12
+ end
13
+ end
14
+ if feature["elements"]
15
+ feature["elements"].each do |element|
16
+ if element["tags"]
17
+ element["tags"].each do |tag|
18
+ tag_count[tag["name"]] += 1
19
+ end
20
+ end
21
+ end
22
+ end
23
+ tag_count
24
+ end
25
+ end
26
+ end
27
+ end
@@ -101,3 +101,7 @@ p {
101
101
  font-size: 15px;
102
102
  content: "\2691";
103
103
  }
104
+
105
+ section.feature p:first-child {
106
+ white-space: pre-wrap
107
+ }
data/lib/wally/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Wally
2
- VERSION = "0.0.15"
2
+ VERSION = "0.0.16"
3
3
  end
@@ -0,0 +1 @@
1
+
@@ -17,6 +17,12 @@
17
17
  %input.btn{:type => "submit", :id => "search", :value => "Search"}
18
18
  %div.container-fluid
19
19
  %div.sidebar
20
+ - if @tag_count.any?
21
+ %h2 Tags
22
+ - @tag_count.each do |tag, count|
23
+ %span.label.notice
24
+ %a{:href => "/search?q=#{tag}"}
25
+ = "#{tag} (#{count})"
20
26
  %h2
21
27
  Features
22
28
  %ul
@@ -7,18 +7,21 @@
7
7
  %a{:href => "/search?q=#{@search_results.suggestion}"}
8
8
  = @search_results.suggestion
9
9
  %ul
10
- - @search_results.items.each do |search_result|
10
+ - @search_results.items.map {|i| i.feature["id"] }.uniq.each do |current_feature_id|
11
+ - root_search_result = @search_results.items.find { |r| r.feature["id"] == current_feature_id }
11
12
  %li
12
- %a{:href => "/features/#{search_result.feature["id"]}"}
13
- = search_result.feature["name"]
14
- - if search_result.feature["tags"]
15
- = haml :tag_links, {:locals => {:tags => search_result.feature["tags"]}, :layout => false}
13
+ %a{:href => "/features/#{root_search_result.feature["id"]}"}
14
+ = root_search_result.feature["name"]
15
+ - if root_search_result.feature["tags"]
16
+ = haml :tag_links, {:locals => {:tags => root_search_result.feature["tags"]}, :layout => false}
17
+
16
18
  %ul
17
- - if search_result.scenario && search_result.scenario["id"]
18
- %li
19
- %a{:href => "/features/#{search_result.scenario["id"].gsub(";", "/scenario/")}"}
20
- = search_result.scenario["name"]
21
- - if search_result.scenario["tags"]
22
- = haml :tag_links, {:locals => {:tags => search_result.scenario["tags"]}, :layout => false}
19
+ - @search_results.items.select { |r| r.feature["id"] == current_feature_id }.each do |search_result|
20
+ - if search_result.scenario && search_result.scenario["id"]
21
+ %li
22
+ %a{:href => "/features/#{search_result.scenario["id"].gsub(";", "/scenario/")}"}
23
+ = search_result.scenario["name"]
24
+ - if search_result.scenario["tags"]
25
+ = haml :tag_links, {:locals => {:tags => search_result.scenario["tags"]}, :layout => false}
23
26
  - else
24
27
  %p Where's Wally? This search returned no results.
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require 'fileutils'
3
+ require "wally/counts_tags"
4
+
5
+ module Wally
6
+ describe CountsTags do
7
+ before do
8
+ FileUtils.mkdir_p "application-features"
9
+ end
10
+
11
+ after do
12
+ FileUtils.rm_rf "application-features"
13
+ end
14
+
15
+ def write_feature(name, contents)
16
+ File.open("application-features/#{name}", "w") do |file|
17
+ file.write(contents)
18
+ end
19
+ end
20
+
21
+ 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")
24
+ lists_features = ListsFeatures.new("application-features")
25
+
26
+ CountsTags.new(lists_features).count_tags.should == {
27
+ "@tag1" => 1,
28
+ "@tag2" => 3
29
+ }
30
+ end
31
+
32
+ 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")
35
+ lists_features = ListsFeatures.new("application-features")
36
+ CountsTags.new(lists_features).count_tags.should == {
37
+ "@tag1" => 3,
38
+ "@tag3" => 1
39
+ }
40
+ end
41
+ end
42
+ 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.15
4
+ version: 0.0.16
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-23 00:00:00.000000000Z
12
+ date: 2011-11-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70131146162700 !ruby/object:Gem::Requirement
16
+ requirement: &70288097150820 !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: *70131146162700
24
+ version_requirements: *70288097150820
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: haml
27
- requirement: &70131146162280 !ruby/object:Gem::Requirement
27
+ requirement: &70288097150260 !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: *70131146162280
35
+ version_requirements: *70288097150260
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdiscount
38
- requirement: &70131146161780 !ruby/object:Gem::Requirement
38
+ requirement: &70288097149660 !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: *70131146161780
46
+ version_requirements: *70288097149660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: gherkin
49
- requirement: &70131146161320 !ruby/object:Gem::Requirement
49
+ requirement: &70288097149000 !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: *70131146161320
57
+ version_requirements: *70288097149000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: komainu
60
- requirement: &70131146160860 !ruby/object:Gem::Requirement
60
+ requirement: &70288097134480 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70131146160860
68
+ version_requirements: *70288097134480
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: cucumber
71
- requirement: &70131146160300 !ruby/object:Gem::Requirement
71
+ requirement: &70288097133960 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70131146160300
79
+ version_requirements: *70288097133960
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: capybara
82
- requirement: &70131146159800 !ruby/object:Gem::Requirement
82
+ requirement: &70288097133180 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70131146159800
90
+ version_requirements: *70288097133180
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rspec
93
- requirement: &70131146159080 !ruby/object:Gem::Requirement
93
+ requirement: &70288097132520 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70131146159080
101
+ version_requirements: *70288097132520
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: fakefs
104
- requirement: &70131146157960 !ruby/object:Gem::Requirement
104
+ requirement: &70288097131960 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70131146157960
112
+ version_requirements: *70288097131960
113
113
  description: ''
114
114
  email:
115
115
  - andrew.vos@gmail.com
@@ -128,7 +128,9 @@ files:
128
128
  - example-features/example-with-background.feature
129
129
  - example-features/example_with_tags.feature
130
130
  - example-features/has-lots-of-tags.feature
131
+ - example-features/multiple-scenarios.feature
131
132
  - features/browse_features.feature
133
+ - features/list_tags.feature
132
134
  - features/search_features.feature
133
135
  - features/step_definitions/browse_features_steps.rb
134
136
  - features/step_definitions/search_features_steps.rb
@@ -136,6 +138,7 @@ files:
136
138
  - features/support/env.rb
137
139
  - lib/wally.rb
138
140
  - lib/wally/application.rb
141
+ - lib/wally/counts_tags.rb
139
142
  - lib/wally/lists_features.rb
140
143
  - lib/wally/public/bootstrap.min.css
141
144
  - lib/wally/public/skin.css
@@ -150,6 +153,7 @@ files:
150
153
  - lib/wally/views/search.haml
151
154
  - lib/wally/views/tag_links.haml
152
155
  - spec/spec_helper.rb
156
+ - spec/wally/counts_tags_spec.rb
153
157
  - spec/wally/lists_features_spec.rb
154
158
  - spec/wally/search_features_spec.rb
155
159
  - wally.gemspec
@@ -179,11 +183,13 @@ specification_version: 3
179
183
  summary: ''
180
184
  test_files:
181
185
  - features/browse_features.feature
186
+ - features/list_tags.feature
182
187
  - features/search_features.feature
183
188
  - features/step_definitions/browse_features_steps.rb
184
189
  - features/step_definitions/search_features_steps.rb
185
190
  - features/step_definitions/steps.rb
186
191
  - features/support/env.rb
187
192
  - spec/spec_helper.rb
193
+ - spec/wally/counts_tags_spec.rb
188
194
  - spec/wally/lists_features_spec.rb
189
195
  - spec/wally/search_features_spec.rb