flavored_gherkin 0.1 → 0.3
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.
- checksums.yaml +4 -4
- data/README.md +10 -5
- data/bin/flavored_gherkin +1 -1
- data/flavored_gherkin.gemspec +7 -5
- data/lib/flavored_gherkin.rb +5 -4
- data/lib/flavored_gherkin/flavour.rb +7 -0
- data/lib/flavored_gherkin/pdf_flavour.rb +127 -0
- data/template/footer.erb +1 -1
- data/template/head.erb +1 -1
- metadata +23 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7000dd4a6449c98993ad1e828cb4fdcc91900bf
|
4
|
+
data.tar.gz: bb365294fe5c6fef118db1db563003f844a312e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 575f4b4a872d21dec210548439e766ba1c699028f848c1e29f479f756e0fa1da4bb59a8995fb956b69563176ad0d6a85afa6179105a4b1c27504339f85fdb004
|
7
|
+
data.tar.gz: 2c4797c56ea45f93db9cd59e7fc83e3dbe96e8c577a48cc5952b6109cb32f2aa88473e2788063f9363b9620f102eb09e0e8b4d5b93b6aa77e3f44632e68ccd14
|
data/README.md
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
#
|
1
|
+
# FlavoredGherkin
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/flavored_gherkin)
|
4
4
|
[](https://travis-ci.org/rajatthareja/FlavoredGherkin)
|
5
5
|
[](https://ci.appveyor.com/project/rajatthareja/flavoredgherkin)
|
6
6
|
|
7
7
|
|
8
|
-
Ruby gem to convert gherkin feature files into html flavour.
|
8
|
+
Ruby gem to convert gherkin feature files into html and pdf flavour.
|
9
9
|
|
10
|
-
**[
|
10
|
+
**[Html Flavour Sample](http://flavoredgherkin.rajatthareja.com/sample/Flavored_Gherkin_Sample.html)**
|
11
11
|
|
12
|
-
|
12
|
+
**[Pdf Flavour Sample](http://flavoredgherkin.rajatthareja.com/sample/Flavored_Gherkin_Sample.pdf)**
|
13
|
+
|
14
|
+
**More flavours coming soon!**
|
13
15
|
|
14
16
|
## Installation
|
15
17
|
|
@@ -33,12 +35,13 @@ gem install flavored_gherkin
|
|
33
35
|
| title | [String] | 'Flavored Gherkin' | Flavored Gherkin Title |
|
34
36
|
| feature_path / input_path | [String] | Present Working Directory | Feature Files Path |
|
35
37
|
| output_path | [String] | Present Working Directory | Flavored Gherkin Output Path |
|
38
|
+
| flavour | [String] | 'Html' | 'Html' or 'Pdf' |
|
36
39
|
|
37
40
|
### Code Examples:
|
38
41
|
|
39
42
|
```ruby
|
40
43
|
|
41
|
-
require '
|
44
|
+
require 'flavored_gherkin'
|
42
45
|
|
43
46
|
# Example 1:
|
44
47
|
|
@@ -73,6 +76,7 @@ gem install flavored_gherkin
|
|
73
76
|
FlavoredGherkin.title = 'My Features'
|
74
77
|
FlavoredGherkin.feature_path = 'myFolder/features'
|
75
78
|
FlavoredGherkin.output_path = 'myFolder/my_features'
|
79
|
+
FlavoredGherkin.flavour = 'pdf'
|
76
80
|
|
77
81
|
FlavoredGherkin.build
|
78
82
|
|
@@ -85,6 +89,7 @@ gem install flavored_gherkin
|
|
85
89
|
| -t, --source | TITLE | Flavored Gherkin Title |
|
86
90
|
| -f, --features / -i, --in | FEATURE_PATH | Feature Files Path |
|
87
91
|
| -o, --out | OUTPUT_PATH | Flavored Gherkin Output Path |
|
92
|
+
| -F, --flavour | FLAVOUR | 'Html' or 'Pdf' |
|
88
93
|
|
89
94
|
### CLI Example:
|
90
95
|
|
data/bin/flavored_gherkin
CHANGED
@@ -10,7 +10,7 @@ opt_parser = OptionParser.new do |opts|
|
|
10
10
|
opts.separator 'Flavored Gherkin options:'
|
11
11
|
|
12
12
|
opts.on('-F', '--flavour FLAVOUR', String, 'Flavored Gherkin Flavour') do |flavour|
|
13
|
-
options[:flavour] = flavour
|
13
|
+
options[:flavour] = flavour.capitalize
|
14
14
|
end
|
15
15
|
|
16
16
|
opts.on('-f', '--features FEATURE_PATH', String, 'Feature Files Path') do |feature_path|
|
data/flavored_gherkin.gemspec
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'flavored_gherkin'
|
3
|
-
s.version = '0.
|
3
|
+
s.version = '0.3'
|
4
4
|
s.bindir = 'bin'
|
5
|
-
s.summary = '
|
6
|
-
s.description = ''
|
5
|
+
s.summary = 'FlavoredGherkin'
|
6
|
+
s.description = 'Ruby gem to convert gherkin feature files into html and pdf flavour.'
|
7
|
+
s.post_install_message = 'More flavours coming soon!'
|
7
8
|
s.authors = ['Rajat Thareja']
|
8
9
|
s.email = 'rajat.thareja.1990@gmail.com'
|
9
10
|
s.homepage = 'http://flavoredgherkin.rajatthareja.com'
|
10
11
|
s.license = 'MIT'
|
11
|
-
s.required_ruby_version = '>=
|
12
|
+
s.required_ruby_version = '>= 2.1'
|
12
13
|
|
13
14
|
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(sample/|css/|js/|pkg/|testing/|coverage/|CNAME|.gitignore|appveyor.yml|.travis.yml|_config.yml|Gemfile|Rakefile|fg.ico)}) }
|
14
15
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
15
16
|
s.test_files = s.files.grep(%r{^(testing)/})
|
16
17
|
|
17
|
-
s.add_runtime_dependency 'gherkin', '>=
|
18
|
+
s.add_runtime_dependency 'gherkin', '>= 3.2.0'
|
19
|
+
s.add_runtime_dependency 'prawn', '>= 2.2.0'
|
18
20
|
|
19
21
|
s.add_development_dependency 'rake', '< 13.0'
|
20
22
|
s.add_development_dependency 'rspec', '< 4.0'
|
data/lib/flavored_gherkin.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require_relative 'flavored_gherkin/html_flavour'
|
3
|
+
require_relative 'flavored_gherkin/pdf_flavour'
|
3
4
|
|
4
5
|
##
|
5
6
|
# Flavored Gherkin
|
@@ -49,7 +50,7 @@ module FlavoredGherkin
|
|
49
50
|
#
|
50
51
|
def self.flavour=(flavour)
|
51
52
|
@options ||= {}
|
52
|
-
@options[:flavour] = flavour
|
53
|
+
@options[:flavour] = flavour.capitalize
|
53
54
|
end
|
54
55
|
|
55
56
|
##
|
@@ -126,7 +127,7 @@ module FlavoredGherkin
|
|
126
127
|
elsif options.is_a? Hash
|
127
128
|
@options.merge! options
|
128
129
|
end
|
129
|
-
const_get(flavour).new.build title, feature_files, output_path
|
130
|
+
const_get(flavour + 'Flavour').new.build title, feature_files, output_path
|
130
131
|
end
|
131
132
|
|
132
133
|
##
|
@@ -136,7 +137,7 @@ module FlavoredGherkin
|
|
136
137
|
#
|
137
138
|
def self.flavour
|
138
139
|
@options ||= {}
|
139
|
-
[
|
140
|
+
%w[Html Pdf].include?(@options[:flavour]) ? @options[:flavour] : 'Html'
|
140
141
|
end
|
141
142
|
|
142
143
|
##
|
@@ -146,7 +147,7 @@ module FlavoredGherkin
|
|
146
147
|
#
|
147
148
|
def self.title
|
148
149
|
@options ||= {}
|
149
|
-
@options[:title] || (@options[:feature_path] || @options[:input_path] || 'Gherkin/Flavored').split('/').reverse[0..5].join(' ').
|
150
|
+
@options[:title] || (@options[:feature_path] || @options[:input_path] || 'Gherkin/Flavored').split('/').reverse[0..5].join(' ').delete('.')
|
150
151
|
end
|
151
152
|
|
152
153
|
##
|
@@ -5,6 +5,13 @@ module FlavoredGherkin
|
|
5
5
|
# Base for Flavored Gherkin Flavours
|
6
6
|
#
|
7
7
|
class Flavour
|
8
|
+
##
|
9
|
+
# Parser Feature Files and Returns List of Gherkin Documents
|
10
|
+
#
|
11
|
+
# @param [Array] feature_files List of feature files
|
12
|
+
#
|
13
|
+
# @return [Array] List of Gherkin Documents
|
14
|
+
#
|
8
15
|
def get_gherkins(feature_files)
|
9
16
|
parser = Gherkin::Parser.new
|
10
17
|
feature_files.map do |file|
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'prawn'
|
2
|
+
require_relative 'flavour'
|
3
|
+
|
4
|
+
module FlavoredGherkin
|
5
|
+
##
|
6
|
+
# PDF Flavored Gherkin
|
7
|
+
#
|
8
|
+
class PdfFlavour < Flavour
|
9
|
+
##
|
10
|
+
# Build PDF Flavored Gherkin
|
11
|
+
#
|
12
|
+
def build(title, feature_files, output_path)
|
13
|
+
info = {
|
14
|
+
Title: title,
|
15
|
+
Author: 'FlavoredGherkin',
|
16
|
+
CreationDate: Time.now
|
17
|
+
}
|
18
|
+
|
19
|
+
gherkins = Flavour.new.get_gherkins(feature_files)
|
20
|
+
|
21
|
+
tags = {}
|
22
|
+
|
23
|
+
Prawn::Document.generate("#{output_path}.pdf", info: info) do |pdf|
|
24
|
+
pdf.font_size 30
|
25
|
+
pdf.text title, align: :center, color: '3a5b93', stylr: :bold
|
26
|
+
pdf.move_down 30
|
27
|
+
|
28
|
+
pdf.font_size 20
|
29
|
+
pdf.text 'Index', color: '3a5b93', stylr: :bold
|
30
|
+
pdf.move_down 10
|
31
|
+
|
32
|
+
pdf.font_size 12
|
33
|
+
pdf.bounding_box([10, pdf.cursor], width: pdf.bounds.right) do
|
34
|
+
gherkins.each_with_index do |g, fid|
|
35
|
+
pdf.move_down 10
|
36
|
+
|
37
|
+
pdf.text "<color rgb='3a5b93'>O</color> <link anchor='Feature #{fid}'>#{g[:feature][:name]}</link>", inline_format: true
|
38
|
+
|
39
|
+
pdf.bounding_box([10, pdf.cursor], width: pdf.bounds.right) do
|
40
|
+
g[:feature][:children].each_with_index do |scenario, sid|
|
41
|
+
next if scenario[:type] == :Background
|
42
|
+
pdf.text "<color rgb='3a5b93'>o</color> <link anchor='Scenario #{fid} #{sid}'>#{scenario[:name]}</link>", inline_format: true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
gherkins.each_with_index do |g, fid|
|
49
|
+
pdf.start_new_page
|
50
|
+
|
51
|
+
pdf.add_dest "Feature #{fid}", pdf.dest_xyz(pdf.bounds.absolute_left, pdf.y)
|
52
|
+
|
53
|
+
feature_tags = g[:feature][:tags].map { |t| t[:name] }
|
54
|
+
pdf.text(feature_tags.join(' '), color: '00695c')
|
55
|
+
feature_tags.each do |tag|
|
56
|
+
count = 0
|
57
|
+
g[:feature][:children].each do |scenario|
|
58
|
+
next if scenario[:type] == :Background
|
59
|
+
count += scenario[:examples] ? scenario[:examples].map { |e| e[:tableBody] }.flatten.size : 1
|
60
|
+
end
|
61
|
+
tags[tag] ? tags[tag] += count : tags[tag] = count
|
62
|
+
end
|
63
|
+
|
64
|
+
pdf.font_size 14
|
65
|
+
pdf.text "<b><color rgb='3a5b93'>" + g[:feature][:keyword] + '</color></b> ' + g[:feature][:name], inline_format: true, style: :bold
|
66
|
+
pdf.font_size 12
|
67
|
+
|
68
|
+
pdf.bounding_box([10, pdf.cursor], width: pdf.bounds.right) do
|
69
|
+
pdf.text g[:feature][:description]
|
70
|
+
|
71
|
+
g[:feature][:children].each_with_index do |scenario, sid|
|
72
|
+
pdf.move_down 10
|
73
|
+
|
74
|
+
pdf.add_dest "Scenario #{fid} #{sid}", pdf.dest_xyz(pdf.bounds.absolute_left, pdf.y)
|
75
|
+
|
76
|
+
if scenario[:tags]
|
77
|
+
scenario_tags = scenario[:tags].map { |tag| tag[:name] }
|
78
|
+
pdf.text(scenario_tags.join(' '), color: '00695c')
|
79
|
+
scenario_tags.each do |tag|
|
80
|
+
count = scenario[:examples] ? scenario[:examples].map { |e| e[:tableBody] }.flatten.size : 1
|
81
|
+
tags[tag] ? tags[tag] += count : tags[tag] = count
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
pdf.text "<b><color rgb='3a5b93'>" + scenario[:keyword] + '</color></b> ' + scenario[:name], inline_format: true
|
86
|
+
|
87
|
+
scenario[:steps].each do |step|
|
88
|
+
pdf.bounding_box([10, pdf.cursor], width: pdf.bounds.right) do
|
89
|
+
pdf.text "<b><color rgb='3a5b93'>" + step[:keyword] + '</color></b> ' + step[:text].gsub('<', "<color rgb='558b2f'>").gsub('>', '</color>'), inline_format: true
|
90
|
+
|
91
|
+
if step[:argument]
|
92
|
+
pdf.bounding_box([10, pdf.cursor], width: pdf.bounds.right) do
|
93
|
+
step[:argument][:rows].each do |row|
|
94
|
+
pdf.text('| ' + row[:cells].map { |cell| cell[:value] }.join(' | ') + ' |')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
next unless scenario[:examples]
|
101
|
+
scenario[:examples].each do |example|
|
102
|
+
pdf.text example[:keyword], color: '3a5b93', style: :bold
|
103
|
+
|
104
|
+
pdf.bounding_box([10, pdf.cursor], width: pdf.bounds.right) do
|
105
|
+
pdf.text('| ' + example[:tableHeader][:cells].map { |cell| cell[:value] }.join(' | ') + ' |', style: :bold, color: '558b2f')
|
106
|
+
example[:tableBody].each do |row|
|
107
|
+
pdf.text('| ' + row[:cells].map { |cell| cell[:value] }.join(' | ') + ' |')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
pdf.start_new_page
|
115
|
+
|
116
|
+
pdf.font_size 20
|
117
|
+
pdf.text 'Tags', color: '3a5b93', stylr: :bold
|
118
|
+
pdf.move_down 10
|
119
|
+
|
120
|
+
pdf.font_size 12
|
121
|
+
tags.each do |tag, count|
|
122
|
+
pdf.text "<b>#{tag} : </b>#{count}", inline_format: true
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
data/template/footer.erb
CHANGED
@@ -34,4 +34,4 @@
|
|
34
34
|
});
|
35
35
|
</script>
|
36
36
|
|
37
|
-
<script type="text/javascript" src="https://cdn.rawgit.com/rajatthareja/FlavoredGherkin/
|
37
|
+
<script type="text/javascript" src="https://cdn.rawgit.com/rajatthareja/FlavoredGherkin/v0.1/js/flavored.gherkin.min.js"></script>
|
data/template/head.erb
CHANGED
@@ -8,5 +8,5 @@
|
|
8
8
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
9
9
|
<link href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css" rel="stylesheet">
|
10
10
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css" media="screen,projection"/>
|
11
|
-
<link href="https://cdn.rawgit.com/rajatthareja/FlavoredGherkin/
|
11
|
+
<link href="https://cdn.rawgit.com/rajatthareja/FlavoredGherkin/v0.1/css/flavored.gherkin.min.css" rel="stylesheet">
|
12
12
|
</head>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flavored_gherkin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rajat Thareja
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gherkin
|
@@ -16,14 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: prawn
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.2.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.2.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,7 +66,7 @@ dependencies:
|
|
52
66
|
- - "<"
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '4.0'
|
55
|
-
description:
|
69
|
+
description: Ruby gem to convert gherkin feature files into html and pdf flavour.
|
56
70
|
email: rajat.thareja.1990@gmail.com
|
57
71
|
executables:
|
58
72
|
- flavored_gherkin
|
@@ -66,6 +80,7 @@ files:
|
|
66
80
|
- lib/flavored_gherkin.rb
|
67
81
|
- lib/flavored_gherkin/flavour.rb
|
68
82
|
- lib/flavored_gherkin/html_flavour.rb
|
83
|
+
- lib/flavored_gherkin/pdf_flavour.rb
|
69
84
|
- template/background.erb
|
70
85
|
- template/feature.erb
|
71
86
|
- template/footer.erb
|
@@ -80,7 +95,7 @@ homepage: http://flavoredgherkin.rajatthareja.com
|
|
80
95
|
licenses:
|
81
96
|
- MIT
|
82
97
|
metadata: {}
|
83
|
-
post_install_message:
|
98
|
+
post_install_message: More flavours coming soon!
|
84
99
|
rdoc_options: []
|
85
100
|
require_paths:
|
86
101
|
- lib
|
@@ -88,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
88
103
|
requirements:
|
89
104
|
- - ">="
|
90
105
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
106
|
+
version: '2.1'
|
92
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
108
|
requirements:
|
94
109
|
- - ">="
|
@@ -99,5 +114,5 @@ rubyforge_project:
|
|
99
114
|
rubygems_version: 2.6.14
|
100
115
|
signing_key:
|
101
116
|
specification_version: 4
|
102
|
-
summary:
|
117
|
+
summary: FlavoredGherkin
|
103
118
|
test_files: []
|