flavored_gherkin 0.1 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/flavored_gherkin.svg)](https://badge.fury.io/rb/flavored_gherkin)
|
4
4
|
[![Build status](https://travis-ci.org/rajatthareja/FlavoredGherkin.svg?branch=master)](https://travis-ci.org/rajatthareja/FlavoredGherkin)
|
5
5
|
[![Windows Build status](https://ci.appveyor.com/api/projects/status/agvyur7bg5ul1444/branch/master?svg=true)](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: []
|