allure-cucumber 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YjcyNWVjNzM4OWU1ZWNmOGM3MGEyMjA2MzA1ZDlkMTc0ZWFjNTNhYg==
5
+ data.tar.gz: !binary |-
6
+ ZTVlNjdlMjI5OWRlMjAxMzU0NGE0NjIzMDA4OWJjYmZhNTUwMzY1MQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MTAyZmU4ZDk3ZDNkOTgwNTQ3OWM1NDcwOTZlZTAxYTI0MmYyMmMyZjljMTJk
10
+ NTQwNjA1OGMzYjEyYzg0OWVlOGY3NzI2ZmNjMWY5YmE0NzI4NWYxZWZiNWZi
11
+ NTY2YTMzYzBlOWUzNGEzMzZhYWFhNzZmYmU4ZTI1Y2YzNTNmYWQ=
12
+ data.tar.gz: !binary |-
13
+ YWYyMjgzNGI0MWYxMjQyZTZmYmM2YjkzMGJmZTJjMDEzNGNiNTY0OTA2NjY4
14
+ ZTJmNjZmNTMzM2ViZWUxZjk1YzhhNWM3MTUwYzE4ZWU2NmJhZWQxNjliNjE1
15
+ ZDNhNWE4NmU4M2UxNTQ2YjgxYjk1NzlmZDkxN2FiYTkyMmQxZjA=
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in allure-cucumber.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Imran
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,35 @@
1
+ # AllureCucumber
2
+
3
+ Allure adaptor for [cucumber](http://cukes.info/). This borrows code heavily from [allure-rspec](https://github.com/allure-framework/allure-rspec) gem.
4
+ This is an experimental gem and very much a work in progress.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'allure-cucumber'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install allure-cucumber
19
+
20
+ ## Usage
21
+
22
+ Use `--format AllureCucumber::Formatter` while running cucumber or add it to `cucumber.yml`
23
+
24
+ By default, allure artifacts are stored in `/allure/data`. To change this set `AllureCucumber::Config.output_dir = directory-for-allure-xml` in your `env.rb` file.
25
+
26
+ You can attach files to steps
27
+
28
+ ```ruby
29
+ # file: features/support/env.rb
30
+
31
+ include AllureCucumber::DSL
32
+
33
+ attach_file(title, file)
34
+ ```
35
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/allure-cucumber/version', __FILE__)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "allure-cucumber"
6
+ spec.version = AllureCucumber::Version::STRING
7
+ spec.authors = ["Imran Khan"]
8
+ spec.email = ["9ikhan@gmail.com"]
9
+ spec.summary = "allure-cucumber-#{AllureCucumber::Version::STRING}"
10
+ spec.description = %q{Adaptor to use Allure framework with cucumber}
11
+ spec.homepage = ""
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files -z`.split("\x0")
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_dependency 'nokogiri', '~> 1.6.0'
20
+ spec.add_dependency 'uuid'
21
+ spec.add_dependency 'mimemagic'
22
+ spec.add_dependency 'cucumber'
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.5"
25
+ spec.add_development_dependency "rake"
26
+
27
+ end
@@ -0,0 +1,29 @@
1
+ require "allure-cucumber/version"
2
+ require 'allure-cucumber/dsl'
3
+ require 'allure-cucumber/builder'
4
+ require 'allure-cucumber/formatter'
5
+ require 'allure-cucumber/feature_tracker'
6
+
7
+
8
+ module AllureCucumber
9
+
10
+ module Config
11
+ class << self
12
+ attr_accessor :output_dir
13
+
14
+ DEFAULT_OUTPUT_DIR = 'allure/data'
15
+
16
+ def output_dir
17
+ @output_dir || DEFAULT_OUTPUT_DIR
18
+ end
19
+
20
+ end
21
+ end
22
+
23
+ class << self
24
+ def configure(&block)
25
+ yield Config
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,164 @@
1
+ require 'rexml/text'
2
+ require 'nokogiri'
3
+
4
+ module AllureCucumber
5
+
6
+ class Builder
7
+ class << self
8
+ attr_accessor :suites
9
+ MUTEX = Mutex.new
10
+
11
+ def init_suites
12
+ MUTEX.synchronize {
13
+ self.suites ||= {}
14
+ }
15
+ end
16
+
17
+ def start_suite(title)
18
+ init_suites
19
+ MUTEX.synchronize do
20
+ puts "Starting suite : #{title}"
21
+ self.suites[title] = {
22
+ :title => title,
23
+ :start => timestamp,
24
+ :tests => {},
25
+ }
26
+ end
27
+ end
28
+
29
+ def start_test(suite, test, severity = :normal)
30
+ MUTEX.synchronize do
31
+ puts "Starting test : #{test}"
32
+ self.suites[suite][:tests][test] = {
33
+ :title => test,
34
+ :start => timestamp,
35
+ :severity => severity,
36
+ :failure => nil,
37
+ :steps => {},
38
+ :attachments => []
39
+ }
40
+ end
41
+ end
42
+
43
+ def stop_test(suite, test, result = {})
44
+ self.suites[suite][:tests][test][:steps].each do |step_title, step|
45
+ if step[:stop].nil? || step[:stop] == 0
46
+ stop_step(suite, test, step_title, result[:status])
47
+ end
48
+ end
49
+ MUTEX.synchronize do
50
+ puts "Stopping test : #{test}"
51
+ self.suites[suite][:tests][test][:stop] = timestamp(result[:finished_at])
52
+ self.suites[suite][:tests][test][:start] = timestamp(result[:started_at])
53
+ self.suites[suite][:tests][test][:status] = result[:status]
54
+ if (result[:status].to_sym != :passed)
55
+ self.suites[suite][:tests][test][:failure] = {
56
+ :stacktrace => escape((result[:caller] || []).map { |s| s.to_s }.join("\r\n")),
57
+ :message => escape(result[:exception].to_s),
58
+ }
59
+ end
60
+
61
+ end
62
+ end
63
+
64
+ def escape(text)
65
+ text
66
+ end
67
+
68
+ def start_step(suite, test, step, time = nil, severity = :normal)
69
+ MUTEX.synchronize do
70
+ puts "Starting step : #{step}"
71
+ self.suites[suite][:tests][test][:steps][step] = {
72
+ :title => step,
73
+ :start => timestamp(time),
74
+ :severity => severity || :normal,
75
+ :attachments => []
76
+ }
77
+ end
78
+ end
79
+
80
+ def add_attachment(suite, test, attachment, step = nil)
81
+ attach = {
82
+ :title => attachment[:title],
83
+ :source => attachment[:source],
84
+ :type => attachment[:type],
85
+ :size => attachment[:size],
86
+ }
87
+ if step.nil?
88
+ self.suites[suite][:tests][test][:attachments] << attach
89
+ else
90
+ self.suites[suite][:tests][test][:steps][step][:attachments] << attach
91
+ end
92
+ end
93
+
94
+ def stop_step(suite, test, step, status = :passed, time = nil)
95
+ MUTEX.synchronize do
96
+ puts "Stopping step : #{step}"
97
+ self.suites[suite][:tests][test][:steps][step][:stop] = timestamp(time)
98
+ self.suites[suite][:tests][test][:steps][step][:status] = status
99
+ end
100
+ end
101
+
102
+ def stop_suite(title)
103
+ init_suites
104
+ MUTEX.synchronize do
105
+ puts "Stopping suite : #{title}"
106
+ self.suites[title][:stop] = timestamp
107
+ end
108
+ end
109
+
110
+ def timestamp(time = nil)
111
+ ((time || Time.now).to_f * 1000).to_i
112
+ end
113
+
114
+ def each_suite_build(&block)
115
+ suites_xml = []
116
+ self.suites.each do |suite_title, suite|
117
+ builder = Nokogiri::XML::Builder.new do |xml|
118
+ xml.send "ns2:test-suite", :start => suite[:start] || 0, :stop => suite[:stop] || 0, 'xmlns' => '', "xmlns:ns2" => "urn:model.allure.qatools.yandex.ru" do
119
+ xml.send "name", suite_title
120
+ xml.send "test-cases" do
121
+ suite[:tests].each do |test_title, test|
122
+ xml.send "test-case", :start => test[:start] || 0, :stop => test[:stop] || 0, :status => test[:status] do
123
+ xml.send "name", test_title
124
+ unless test[:failure].nil?
125
+ xml.failure do
126
+ xml.message test[:failure][:message]
127
+ xml.send "stack-trace", test[:failure][:stacktrace]
128
+ end
129
+ end
130
+ xml.steps do
131
+ test[:steps].each do |step_title, step_obj|
132
+ xml.step(:start => step_obj[:start] || 0, :stop => step_obj[:stop] || 0, :status => step_obj[:status]) do
133
+ xml.send "name", step_title
134
+ xml.attachments do
135
+ step_obj[:attachments].each do |attach|
136
+ xml.attachment :source => attach[:source], :title => attach[:title], :size => attach[:size], :type => attach[:type]
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+ xml.attachments do
143
+ test[:attachments].each do |attach|
144
+ xml.attachment :source => attach[:source], :title => attach[:title], :size => attach[:size], :type => attach[:type]
145
+ end
146
+ end
147
+ xml.labels do
148
+ xml.label :name => "severity", :value => test[:severity]
149
+ end
150
+ xml.parameters
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ xml = builder.to_xml
157
+ yield suite, xml
158
+ suites_xml << xml
159
+ end
160
+ suites_xml
161
+ end
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,23 @@
1
+ require 'digest'
2
+ require 'mimemagic'
3
+ module AllureCucumber
4
+ module DSL
5
+
6
+ def attach_file(title, file)
7
+ @tracker = AllureCucumber::FeatureTracker.tracker
8
+ dir = Pathname.new(AllureCucumber::Config.output_dir)
9
+ FileUtils.mkdir_p(dir)
10
+ file_extname = File.extname(file.path.downcase)
11
+ type = MimeMagic.by_path(file.path) || "text/plain"
12
+ attachment = dir.join("#{Digest::SHA256.file(file.path).hexdigest}-attachment#{(file_extname.empty?) ? '' : file_extname}")
13
+ FileUtils.cp(file.path, attachment)
14
+ AllureCucumber::Builder.add_attachment(@tracker.feature_name, @tracker.scenario_name, {
15
+ :type => type,
16
+ :title => title,
17
+ :source => attachment.basename,
18
+ :size => File.stat(attachment).size
19
+ }, @tracker.step_name)
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ module AllureCucumber
2
+
3
+ class FeatureTracker
4
+
5
+ attr_accessor :feature_name, :scenario_name, :step_name
6
+ @@tracker = nil
7
+
8
+ def self.create
9
+ @@tracker = FeatureTracker.new unless @@tracker
10
+ private_class_method :new
11
+ @@tracker
12
+ end
13
+
14
+ def self.tracker
15
+ @@tracker
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,186 @@
1
+ require 'pathname'
2
+ require 'uuid'
3
+
4
+ module AllureCucumber
5
+ class Formatter
6
+
7
+ include AllureCucumber::DSL
8
+
9
+ def initialize(step_mother, io, options)
10
+ dir = Pathname.new(AllureCucumber::Config.output_dir)
11
+ FileUtils.rm_rf(dir)
12
+ @tracker = AllureCucumber::FeatureTracker.create
13
+ end
14
+
15
+ def before_feature(feature)
16
+ @has_background = false
17
+ @tracker.feature_name = feature.name.gsub!(/\n/, " ")
18
+ AllureCucumber::Builder.start_suite(@tracker.feature_name)
19
+ end
20
+
21
+ def before_background(*args)
22
+ @in_background = true
23
+ @has_background = true
24
+ @background_before_steps = []
25
+ @background_after_steps = []
26
+ end
27
+
28
+ def after_background(*args)
29
+ @in_background = false
30
+ end
31
+
32
+ def before_feature_element(feature_element)
33
+ @scenario_outline = feature_element.instance_of?(Cucumber::Ast::ScenarioOutline)
34
+ end
35
+
36
+ def scenario_name(keyword, name, file_colon_line, source_indent)
37
+ unless @scenario_outline
38
+ @tracker.scenario_name = (name.nil? || name == "") ? "Unnamed scenario" : name.split("\n")[0]
39
+ AllureCucumber::Builder.start_test(@tracker.feature_name, @tracker.scenario_name)
40
+ post_background_steps if @has_background
41
+ else
42
+ @scenario_outline_name = (name.nil? || name == "") ? "Unnamed scenario" : name.split("\n")[0]
43
+ end
44
+ end
45
+
46
+ def before_steps(steps)
47
+ @example_before_steps = []
48
+ @example_after_steps = []
49
+ @exception = nil
50
+ end
51
+
52
+ def before_step(step)
53
+ unless step.background?
54
+ unless @scenario_outline
55
+ @tracker.step_name = step.name
56
+ AllureCucumber::Builder.start_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name)
57
+ attach_multiline_arg(step.multiline_arg)
58
+ else
59
+ @example_before_steps << {:step => step, :time => Time.now}
60
+ end
61
+ else
62
+ @background_before_steps << {:step => step, :time => Time.now}
63
+ end
64
+ end
65
+
66
+ def after_step(step)
67
+ unless step.background?
68
+ unless @scenario_outline
69
+ AllureCucumber::Builder.stop_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name, step.status.to_sym)
70
+ else
71
+ @example_after_steps << {:step => step, :time => Time.now}
72
+ end
73
+ else
74
+ @background_after_steps << {:step => step, :time => Time.now}
75
+ end
76
+ end
77
+
78
+ def after_steps(steps)
79
+ return if @in_background || @scenario_outline
80
+ result = { status: steps.status, exception: steps.exception }
81
+ AllureCucumber::Builder.stop_test(@tracker.feature_name, @tracker.scenario_name, result)
82
+ end
83
+
84
+ def before_examples(*args)
85
+ @header_row = true
86
+ @in_examples = true
87
+ end
88
+
89
+ def before_outline_table(outline_table)
90
+ headers = outline_table.headers
91
+ rows = outline_table.rows
92
+ @current_row = -1
93
+ @table = []
94
+ rows.each do |element|
95
+ row_hash = {}
96
+ element.each_with_index do |item, index|
97
+ row_hash[headers[index]] = item
98
+ end
99
+ @table << row_hash
100
+ end
101
+ end
102
+
103
+ def before_table_row(table_row)
104
+ return unless @in_examples
105
+ unless @header_row
106
+ @scenario_status = :passed
107
+ @exception = nil
108
+ @tracker.scenario_name = "#{@scenario_outline_name} Example: #{table_row.name}"
109
+ AllureCucumber::Builder.start_test(@tracker.feature_name, @tracker.scenario_name)
110
+ post_background_steps if @has_background
111
+ @current_row += 1
112
+ @example_before_steps.each do |step|
113
+ @tracker.step_name = transform_step_name_for_outline(step[:step].name, @current_row)
114
+ AllureCucumber::Builder.start_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name, step[:time])
115
+ attach_multiline_arg(step[:step].multiline_arg)
116
+ end
117
+ end
118
+ end
119
+
120
+ def after_table_row(table_row)
121
+ return unless @in_examples or Cucumber::Ast::OutlineTable::ExampleRow === table_row
122
+ unless @header_row
123
+ @example_after_steps.each do |step|
124
+ @tracker.step_name = transform_step_name_for_outline(step[:step].name, @current_row)
125
+ if table_row.status == :failed
126
+ @exception = table_row.exception
127
+ @scenario_status = :failed
128
+ end
129
+ AllureCucumber::Builder.stop_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name, step[:step].status.to_sym, step[:time])
130
+ end
131
+ AllureCucumber::Builder.stop_test(@tracker.feature_name, @tracker.scenario_name, {:status => @scenario_status, :exception => @exception})
132
+ end
133
+ @header_row = false if @header_row
134
+ end
135
+
136
+ def after_outline_table(*args)
137
+ @in_examples = false
138
+ end
139
+
140
+ def after_feature(feature)
141
+ AllureCucumber::Builder.stop_suite(@tracker.feature_name)
142
+ end
143
+
144
+ def after_features(features)
145
+ AllureCucumber::Builder.each_suite_build do |suite, xml|
146
+ dir = Pathname.new(AllureCucumber::Config.output_dir)
147
+ FileUtils.mkdir_p(dir)
148
+ out_file = dir.join("#{UUID.new.generate}-testsuite.xml")
149
+ File.open(out_file, 'w+') do |file|
150
+ file.write(xml)
151
+ end
152
+ end
153
+ end
154
+
155
+ private
156
+
157
+ def transform_step_name_for_outline(step_name, row_num)
158
+ transformed_name = ''
159
+ @table[row_num].each do |k, v|
160
+ transformed_name == '' ? transformed_name = step_name.gsub(k, v) : transformed_name = transformed_name.gsub(k,v)
161
+ end
162
+ transformed_name
163
+ end
164
+
165
+ def attach_multiline_arg(multiline_arg)
166
+ if multiline_arg
167
+ File.open('tmp_file.txt', 'w'){ |file| file.write(multiline_arg.to_s.gsub(/\e\[(\d+)(;\d+)*m/,'')) }
168
+ attach_file("table", File.open('tmp_file.txt'))
169
+ end
170
+ end
171
+
172
+ def post_background_steps
173
+ @background_before_steps.each do |step|
174
+ @tracker.step_name = "Background : #{step[:step].name}"
175
+ AllureCucumber::Builder.start_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name, step[:time])
176
+ attach_multiline_arg(step[:step].multiline_arg)
177
+ end
178
+ @background_before_steps.each do |step|
179
+ @tracker.step_name = "Background : #{step[:step].name}"
180
+ AllureCucumber::Builder.stop_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name, step[:step].status.to_sym, step[:time])
181
+ attach_multiline_arg(step[:step].multiline_arg)
182
+ end
183
+ end
184
+
185
+ end
186
+ end
@@ -0,0 +1,5 @@
1
+ module AllureCucumber
2
+ module Version
3
+ STRING = '0.1.0'
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: allure-cucumber
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Imran Khan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.6.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.6.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: uuid
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mimemagic
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Adaptor to use Allure framework with cucumber
98
+ email:
99
+ - 9ikhan@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - .gitignore
105
+ - Gemfile
106
+ - LICENSE.txt
107
+ - README.md
108
+ - Rakefile
109
+ - allure-cucumber.gemspec
110
+ - lib/allure-cucumber.rb
111
+ - lib/allure-cucumber/builder.rb
112
+ - lib/allure-cucumber/dsl.rb
113
+ - lib/allure-cucumber/feature_tracker.rb
114
+ - lib/allure-cucumber/formatter.rb
115
+ - lib/allure-cucumber/version.rb
116
+ homepage: ''
117
+ licenses:
118
+ - MIT
119
+ metadata: {}
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ requirements: []
135
+ rubyforge_project:
136
+ rubygems_version: 2.4.1
137
+ signing_key:
138
+ specification_version: 4
139
+ summary: allure-cucumber-0.1.0
140
+ test_files: []