cuker 0.3.15 → 0.3.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8dea6f1d74926122a091f9d183bf99e986dc262837b8c9c4f07f8896481f9b91
4
- data.tar.gz: a6df0acfc07e13568d9389337457a8a0066f3c7ea713abf786183ff6109f46e9
3
+ metadata.gz: c6b1d180c3c6993a9369242cbb2f1f8f5d445b99e9ea053b0b23a1c8b2afa015
4
+ data.tar.gz: 44f6f7ec50da9849b81c3f12b7149087073781d0bd802dcec5f6f05381a8df66
5
5
  SHA512:
6
- metadata.gz: 3ecbbc946d9b0a2841c90cd095c7361d8e1d7bc8261eea31de6854b6b5b568dba3484dd96573aa55685261f56e857d500611476139e9a9a9a9e46121013f485e
7
- data.tar.gz: 33bd0377c5b3711873c942e339dcf1ef43d435996d3f18586e8493b740818e588723a1110838faefc397e66207ba0b28da8ccccfd083f5fbb8b51e153bfa8446
6
+ metadata.gz: 4242e860043fc50f7321d3dd157d372a12ea7f3b97187d07ddbb6645a71101de9b32ac3acbf2670355e803f3bda2395a388b14e52fa19b9fb24c86dddfb8092f
7
+ data.tar.gz: 37782b63570653d0115514017671247af1220e777ac54dca1b7940e6adbc0f8223b73cf8f66eb0c3583db2dfb5174b5ea388cc32b073c724105d37dbc9ab4efb
data/Gemfile CHANGED
@@ -1,16 +1,16 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in cuker.gemspec
4
- gemspec
5
-
6
-
7
- # core
8
- gem 'rspec'
9
- gem 'logging'
10
- gem 'require_all'
11
- gem 'awesome_print'
12
- gem 'gherkin', '~> 5.1'
13
-
14
- # ext
15
- gem 'thor'
16
- gem 'highline'
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in cuker.gemspec
4
+ gemspec
5
+
6
+
7
+ # core
8
+ gem 'rspec'
9
+ gem 'logging'
10
+ gem 'require_all'
11
+ gem 'awesome_print'
12
+ gem 'gherkin', '~> 5.1'
13
+
14
+ # ext
15
+ gem 'thor'
16
+ gem 'highline'
data/cuker.gemspec CHANGED
@@ -1,43 +1,53 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "cuker/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "cuker"
8
- spec.version = Cuker::VERSION
9
- spec.authors = ["ufo2mstar"]
10
- spec.email = ["ufo2mstar@gmail.com"]
11
-
12
- spec.summary = %q{Cucumber Summary Gem}
13
- spec.description = %q{generates reports and gives some customizable formatting options}
14
- spec.homepage = "https://github.com/ufo2mstar/cuker"
15
- spec.license = "MIT"
16
-
17
- # # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
- # # to allow pushing to a single host or delete this section to allow pushing to any host.
19
- # if spec.respond_to?(:metadata)
20
- # # spec.metadata["allowed_push_host"] = "http://mygemserver.com"
21
- #
22
- # spec.metadata["homepage_uri"] = spec.homepage
23
- # spec.metadata["source_code_uri"] = spec.homepage
24
- # spec.metadata["changelog_uri"] = "https://github.com/ufo2mstar/cuker/blob/master/CHANGELOG.md"
25
- # else
26
- # raise "RubyGems 2.0 or newer is required to protect against " \
27
- # "public gem pushes."
28
- # end
29
-
30
- # Specify which files should be added to the gem when it is released.
31
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
- end
35
- spec.bindir = "exe"
36
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
- # gem.executables = ["cuker"]
38
- spec.require_paths = ["lib"]
39
-
40
- spec.add_development_dependency "bundler", "~> 2.0"
41
- spec.add_development_dependency "rake", "~> 10.0"
42
- spec.add_development_dependency "rspec", "~> 3.0"
43
- end
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "cuker/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "cuker"
8
+ spec.version = Cuker::VERSION
9
+ spec.authors = ["ufo2mstar"]
10
+ spec.email = ["ufo2mstar@gmail.com"]
11
+
12
+ spec.summary = %q{Cucumber Summary Gem}
13
+ spec.description = %q{generates reports and gives some customizable formatting options}
14
+ spec.homepage = "https://github.com/ufo2mstar/cuker"
15
+ spec.license = "MIT"
16
+
17
+ # # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ # if spec.respond_to?(:metadata)
20
+ # # spec.metadata["allowed_push_host"] = "http://mygemserver.com"
21
+ #
22
+ # spec.metadata["homepage_uri"] = spec.homepage
23
+ # spec.metadata["source_code_uri"] = spec.homepage
24
+ # spec.metadata["changelog_uri"] = "https://github.com/ufo2mstar/cuker/blob/master/CHANGELOG.md"
25
+ # else
26
+ # raise "RubyGems 2.0 or newer is required to protect against " \
27
+ # "public gem pushes."
28
+ # end
29
+
30
+ # Specify which files should be added to the gem when it is released.
31
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
+ end
35
+ spec.bindir = "exe"
36
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
+ # gem.executables = ["cuker"]
38
+ spec.require_paths = ["lib"]
39
+
40
+ spec.add_development_dependency "bundler", "~> 2.0"
41
+ spec.add_development_dependency "rake", "~> 10.0"
42
+ spec.add_development_dependency "rspec", "~> 3.0"
43
+
44
+ spec.add_development_dependency "awesome_print"
45
+ # spec.add_development_dependency "bundler", "~> 2.0"
46
+ spec.add_development_dependency "gherkin", "~> 5.1"
47
+ spec.add_development_dependency "highline"
48
+ spec.add_development_dependency "logging"
49
+ # spec.add_development_dependency "rake", "~> 10.0"
50
+ spec.add_development_dependency "require_all"
51
+ spec.add_development_dependency "thor"
52
+
53
+ end
@@ -0,0 +1,57 @@
1
+ require 'thor'
2
+
3
+ require 'require_all'
4
+ # require_all 'lib/cuker/**/*.rb'
5
+ # require_all 'lib/cuker/*.rb'
6
+ require_rel '**/*.rb'
7
+ require_rel '*.rb'
8
+
9
+
10
+ module Cuker
11
+ # module GPHelper
12
+ # def self.dash_print(ary)
13
+ # # ary.each {|x| puts " - '#{x}'"}
14
+ # end
15
+ # end
16
+
17
+ # class CukerCmd < Thor
18
+ class CukerCmd
19
+ include LoggerSetup
20
+
21
+ CONSTS = []
22
+ PRESETS = {
23
+ :simple_csv => [CsvModel, CsvWriter],
24
+ :simple_jira => [JiraModel, JiraWriter],
25
+ }
26
+
27
+ # desc "report PRESET_KEY [FEATURE_PATH [REPORT_PATH [REPORT_FILE_NAME [LOG_LEVEL]]]]",
28
+ # "reports parsed results into \nREPORT_PATH/REPORT_FILE_NAME \nfor all '*.feature' files in the given FEATURE_PATH\nSTDIO LOG_LEVEL adjustable\n"
29
+
30
+ def report preset_key, report_file_name = 'sample_report', feat_path = "../", report_path = ".", log_level = :error
31
+ init_logger log_level
32
+ report_path = File.join report_path, 'reports', LOG_TIME_TODAY
33
+
34
+ msg = "running '#{preset_key.to_s.upcase}' reporter @\n Feature Path: '#{feat_path}' \n Report Path => '#{report_path}' - '#{report_file_name}'\n"
35
+
36
+ @log.info msg
37
+ puts msg
38
+
39
+ model, writer = PRESETS[preset_key]
40
+
41
+ gr = GherkinRipper.new feat_path
42
+ ast_map = gr.ast_map
43
+ preset_model = model.new ast_map
44
+ preset_writer = writer.new
45
+ grr = GherkinReporter.new preset_writer, preset_model, report_path, report_file_name
46
+ grr.write
47
+ end
48
+
49
+ private
50
+
51
+ def init
52
+ # todo: init things if needed
53
+ end
54
+ end
55
+
56
+ # GherkinParserCmd.start(ARGV)
57
+ end
data/lib/cuker/high.rb CHANGED
@@ -1,57 +1,62 @@
1
+ # require 'cuker'
1
2
  # require 'highline'
2
3
  #
3
- # # Basic usage
4
+ # CCC = Cuker::CukerCmd.new
5
+ # CLI = HighLine.new
4
6
  #
5
- # cli = HighLine.new
6
- # answer = cli.ask "What do you think?"
7
- # puts "You have answered: #{answer}"
8
- #
9
- #
10
- # # Default answer
11
- #
12
- # cli.ask("Company? ") { |q| q.default = "none" }
13
- #
14
- #
15
- # # Validation
16
- #
17
- # cli.ask("Age? ", Integer) { |q| q.in = 0..105 }
18
- # cli.ask("Name? (last, first) ") { |q| q.validate = /\A\w+, ?\w+\Z/ }
19
- #
20
- #
21
- # # Type conversion for answers:
22
- #
23
- # cli.ask("Birthday? ", Date)
24
- # cli.ask("Interests? (comma sep list) ", lambda { |str| str.split(/,\s*/) })
7
+ # DEFAULT_REPORT_FILE_NAME = 'DEFAULT_REPORT_NAME'
8
+ # # DEFAULT_FEATURES_PATH = "../../features/uat/gcm/jira_stories/"
9
+ # DEFAULT_FEATURES_PATH = "."
10
+ # # DEFAULT_REPORT_PATH = './reports'
25
11
  #
12
+ # def ask_for_input_location
13
+ # loc = CLI.ask "\nType your JIRA number:\n"
14
+ # File.join DEFAULT_FEATURES_PATH, '**', loc
15
+ # end
26
16
  #
27
- # # Reading passwords:
17
+ # def ask_for_output_file_name
18
+ # name = CLI.ask "\nType your report file name: \n[hit enter to use default name => '#{DEFAULT_REPORT_FILE_NAME}']\n"
19
+ # name.empty? ? DEFAULT_REPORT_FILE_NAME : name
20
+ # end
28
21
  #
29
- # cli.ask("Enter your password: ") { |q| q.echo = false }
30
- # cli.ask("Enter your password: ") { |q| q.echo = "x" }
22
+ # def handle_call preset
23
+ # begin
24
+ # feat_path = ask_for_input_location
25
+ # report_name = ask_for_output_file_name
26
+ # file_name = CCC.report preset, report_name, feat_path
27
+ # CLI.say("\n\nCreated '#{preset}' @ '#{file_name}' ... Enjoy!\n") if file_name
28
+ # rescue Exception
29
+ # puts "An Error occured\nplease contact NarenSS (v675166) for more details\n"
30
+ # puts e
31
+ # end
32
+ # end
31
33
  #
34
+ # def exit_message
35
+ # CLI.say("Thank you for using Cuker :)\nFeel free to reach out to NarenSS (v675166) for any feature request\nHave a very good day!")
36
+ # exit
37
+ # end
32
38
  #
33
- # # ERb based output (with HighLine's ANSI color tools):
39
+ # loop do
40
+ # # Menus:
41
+ # CLI.say("\nREPORT_NUMBERS:\n")
42
+ # CLI.choose do |menu|
43
+ # menu.prompt = "\n\nType the REPORT_NUMBER you want to generate?\n"
34
44
  #
35
- # cli.say("This should be <%= color('bold', BOLD) %>!")
45
+ # presets = Cuker::CukerCmd::PRESETS
36
46
  #
47
+ # presets.keys.each do |option|
48
+ # menu.choice(option) do
49
+ # handle_call option
50
+ # end
51
+ # end
37
52
  #
38
- # # Menus:
53
+ # menu.choice(:quit) {exit_message}
54
+ # menu.default = :quit
55
+ # end
39
56
  #
40
- # cli.choose do |menu|
41
- # menu.prompt = "Please choose your favorite programming language? "
42
- # menu.choice(:ruby) { cli.say("Good choice!") }
43
- # menu.choices(:python, :perl) { cli.say("Not from around here, are you?") }
44
- # menu.default = :ruby
57
+ # answer = CLI.ask "\nWant to rerun? \n[ type anything and hit enter to rerun\nor just hit enter to quit this program ]\n"
58
+ # break if answer.empty?
59
+ # puts "\n... rebooting ...\n\n"
45
60
  # end
46
61
  #
47
- # ## Using colored indices on Menus
48
- #
49
- # HighLine::Menu.index_color = :rgb_77bbff # set default index color
50
- #
51
- # cli.choose do |menu|
52
- # menu.index_color = :rgb_999999 # override default color of index
53
- # # you can also use constants like :blue
54
- # menu.prompt = "Please choose your favorite programming language? "
55
- # menu.choice(:ruby) { cli.say("Good choice!") }
56
- # menu.choices(:python, :perl) { cli.say("Not from around here, are you?") }
57
- # end
62
+ # exit_message
data/lib/cuker/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module Cuker
2
- VERSION = "0.3.15"
3
- end
1
+ module Cuker
2
+ VERSION = "0.3.17"
3
+ end
@@ -27,11 +27,50 @@ class AbstractModel
27
27
  end
28
28
 
29
29
  def get_values_ary ary_of_hshs
30
- ary_of_hshs.map {|hsh| hsh.values}.flatten
30
+ ary_of_hshs.map(&:values).flatten
31
31
  end
32
32
 
33
33
  def get_keys_ary ary_of_hshs
34
- ary_of_hshs.map {|hsh| hsh.keys}.flatten
34
+ ary_of_hshs.map(&:keys).flatten
35
+ end
36
+
37
+ # utility methods
38
+ # used by any model
39
+
40
+ def name_merge hsh
41
+ str = ""
42
+ @log.warn "name merge for #{hsh}"
43
+ str += hsh[:name].strip.force_encoding("UTF-8") if hsh[:name]
44
+ str += " - #{hsh[:description].strip.force_encoding("UTF-8")}" if hsh[:description]
45
+ str
46
+ end
47
+
48
+
49
+ def union feat_tags, tags
50
+ (feat_tags.to_set | tags.to_set).to_a # union
51
+ end
52
+
53
+ def surround ary, sep
54
+ # "#{sep}#{ary.is_a?(Array)? ary.join(sep) : ary}#{sep}"
55
+ # "#{sep}#{ary.join(sep)}#{sep}"
56
+ simple_surround ary.join(sep), sep
57
+ end
58
+
59
+ def simple_surround item, sep
60
+ "#{sep}#{item}#{sep}"
61
+ end
62
+
63
+ # def padded_surround item, sep, pad
64
+ # "#{sep}#{pad}#{item}#{pad}#{sep}"
65
+ # end
66
+
67
+ def get_tags(hsh)
68
+ if hsh[:tags] and hsh[:tags].any?
69
+ hsh[:tags].map {|tag| tag[:name]}
70
+ else
71
+ @log.warn "No Tags found in #{hsh[:keyword]} @ #{@file_path}"
72
+ []
73
+ end
35
74
  end
36
75
 
37
76
  end
@@ -66,9 +66,9 @@ class AbstractSheet
66
66
  end
67
67
 
68
68
  def add_row ary
69
- @log.error "argument not an array.. instead is a '#{ary.class}' -> '#{ary}'" unless ary.is_a? Array
70
69
  @rows << ary
71
70
  end
71
+ alias :add_line :add_row
72
72
 
73
73
  # @return ary of rows
74
74
  def read_rows
@@ -121,23 +121,6 @@ module Cuker
121
121
  end
122
122
  end
123
123
 
124
- def get_tags(hsh)
125
- if hsh[:tags] and hsh[:tags].any?
126
- hsh[:tags].map {|tag| tag[:name]}
127
- else
128
- @log.warn "No Tags found in #{hsh[:keyword]} @ #{@file_path}"
129
- []
130
- end
131
- end
132
-
133
- def name_merge hsh
134
- str = ""
135
- @log.warn "name merge for #{hsh}"
136
- str += hsh[:name].strip.force_encoding("UTF-8") if hsh[:name]
137
- str += " - #{hsh[:description].strip.force_encoding("UTF-8")}" if hsh[:description]
138
- str
139
- end
140
-
141
124
  end
142
125
 
143
126
  class Identifier
@@ -46,7 +46,7 @@ class CsvSheet < AbstractSheet
46
46
 
47
47
  def add_row row_ary
48
48
  super row_ary
49
- # @csv_sheet << ary
49
+ @log.warn "argument not an array.. instead is a '#{row_ary.class}' -> '#{row_ary}'" unless row_ary.is_a? Array
50
50
  CSV.open(@name, "ab") do |csv|
51
51
  csv << row_ary
52
52
  end
@@ -3,6 +3,14 @@ module Cuker
3
3
  class JiraModel < AbstractModel
4
4
  include LoggerSetup
5
5
 
6
+ JIRA_ICONS = {
7
+ info: "(i)",
8
+ pass: "(/)",
9
+ fail: "(x)",
10
+ exclam: "(!)",
11
+ question: "(?)",
12
+ }
13
+
6
14
  def initialize ast_map
7
15
  super
8
16
  @log.trace "initing #{self.class}"
@@ -14,7 +22,7 @@ module Cuker
14
22
  title = make_title @order
15
23
  data = make_rows
16
24
 
17
- @title = [surround(title, '||')]
25
+ @title = surround(title, '||')
18
26
  @data = data.join("\n").split("\n")
19
27
  end
20
28
 
@@ -24,7 +32,8 @@ module Cuker
24
32
  [
25
33
  # {:counter => "Sl.No"},
26
34
  {:s_num => "Scen ID"},
27
- {:s_content => "Scenario"},
35
+ {:s_title => "Feature/Scenario"},
36
+ {:s_content => "Steps"},
28
37
  {:item => "Result"},
29
38
  ]
30
39
  # # todo: make title order reorderable
@@ -47,13 +56,31 @@ module Cuker
47
56
  @file_path = file_path
48
57
  in_feat_counter = 0
49
58
  if ast[:type] == :GherkinDocument
50
- in_feature(ast) do |feat_tags, feat_title, feat_item|
51
- in_item(feat_item) do |tags, title, content|
52
- row_hsh = {
53
- :s_num => "#{feat_counter}.#{in_feat_counter += 1}",
54
- :s_content => content.join("\n"),
55
- :item => "|(/)|",
56
- }
59
+ in_feature(ast) do |feat_tags_ary, feat_title, feat_item|
60
+ in_item(feat_item) do |tags_ary, title, type, content_ary|
61
+ row_hsh = {}
62
+ if type == :Background
63
+ row_hsh = {
64
+ :s_num => "#{feat_counter}",
65
+ :s_title => "Feature: #{feat_title}\nBackground: #{title}",
66
+ :s_content => surround_panel(content_ary.join("\n")),
67
+ :item => simple_surround(JIRA_ICONS[:empty], '|'),
68
+ }
69
+ elsif type == :Scenario or type == :ScenarioOutline
70
+ row_hsh = {
71
+ :s_num => "#{feat_counter}.#{in_feat_counter += 1}",
72
+ :s_title => title,
73
+ :s_content => surround_panel(content_ary.join("\n")),
74
+ :item => simple_surround(JIRA_ICONS[type == :ScenarioOutline ? :info : :exclam], '|'),
75
+ }
76
+ elsif type == :Examples
77
+ row_hsh = {
78
+ :s_num => "#{feat_counter}.#{in_feat_counter}.x",
79
+ :s_title => title, # example title
80
+ :s_content => surround_panel(content_ary.join("\n")),
81
+ :item => simple_surround(JIRA_ICONS[:info], '|'),
82
+ }
83
+ end
57
84
  row_ary = []
58
85
  get_keys_ary(@order).each {|k| row_ary << row_hsh[k]}
59
86
  res << surround(row_ary, '|')
@@ -72,29 +99,26 @@ module Cuker
72
99
  feat_tags = get_tags feat
73
100
  feat_title = name_merge feat
74
101
  children = feat[:children]
75
- children.each do |item|
76
- yield feat_tags, feat_title, item
102
+ children.each do |child|
103
+ yield feat_tags, feat_title, child
77
104
  end
78
105
  else
79
106
  @log.warn "No Features found in file @ #{@file_path}"
80
107
  end
81
108
  end
82
109
 
83
- def in_item(item)
84
- item_title = name_merge item
85
- tags = get_tags item
86
- @bg_steps ||= []
87
- if item[:type] == :Background
88
- yield tags, item_title, get_steps(item)
89
- # todo: think about handling this
90
- elsif item[:type] == :Scenario
91
- yield tags, item_title, get_steps(item)
92
- @bg_steps = nil
93
- elsif item[:type] == :ScenarioOutline
94
- yield tags, item_title, get_steps(item)
95
- @bg_steps = nil
110
+ def in_item(child)
111
+ item_title = name_merge child
112
+ tags = get_tags child
113
+ if child[:type] == :Background
114
+ yield tags, item_title, child[:type], get_steps(child)
115
+ elsif child[:type] == :Scenario
116
+ yield tags, item_title, child[:type], get_steps(child)
117
+ elsif child[:type] == :ScenarioOutline
118
+ yield tags, item_title, child[:type], get_steps(child)
119
+ # todo: think about new examples in new lines
96
120
  else
97
- @log.warn "Unknown type '#{item[:type]}' found in file @ #{@file_path}"
121
+ @log.warn "Unknown type '#{child[:type]}' found in file @ #{@file_path}"
98
122
  end
99
123
  end
100
124
 
@@ -105,6 +129,7 @@ module Cuker
105
129
  in_step(steps) do |step|
106
130
  content += step
107
131
  end
132
+ content += in_example(hsh[:examples]) if hsh[:examples]
108
133
  content
109
134
  else
110
135
  @log.warn "No Tags found in #{hsh[:keyword]} @ #{@file_path}"
@@ -112,13 +137,51 @@ module Cuker
112
137
  end
113
138
  end
114
139
 
140
+ def in_example(examples)
141
+ res = []
142
+ examples.each do |example|
143
+ if example[:type] == :Examples
144
+ res << " "
145
+
146
+ eg_title = "Examples: #{name_merge(example)}"
147
+ res << eg_title
148
+
149
+ eg_header = surround(in_table_row(example[:tableHeader]), '||')
150
+ res << eg_header
151
+
152
+ eg_rows = example[:tableBody]
153
+ eg_rows.map {|row_hsh| res << surround(in_table_row(row_hsh), '|')}
154
+
155
+ else
156
+ @log.warn "Unknown type '#{item[:type]}' found in file @ #{@file_path}"
157
+ end
158
+ end
159
+ res
160
+ end
161
+
162
+ def in_table_row row_hsh
163
+ if row_hsh[:type] == :TableRow
164
+ row_hsh[:cells].map(&method(:in_table_cell))
165
+ else
166
+ @log.warn "Expected :TableRow in #{row_hsh} @ #{@file_path}"
167
+ []
168
+ end
169
+ end
170
+
171
+ def in_table_cell cell_hsh
172
+ if cell_hsh[:type] == :TableCell
173
+ cell_hsh[:value]
174
+ else
175
+ @log.warn "Expected :TableCell in #{cell_hsh} @ #{@file_path}"
176
+ end
177
+ end
178
+
115
179
  def in_step(steps)
116
- # todo: table
117
180
  steps.each do |step|
118
181
  if step[:type] == :Step
119
182
  step_ary = []
120
183
  step_ary << [
121
- step[:keyword].strip,
184
+ "*#{step[:keyword].strip}*", # bolding the keywords
122
185
  step[:text].strip
123
186
  ].join(" ")
124
187
  step_ary += in_step_args(step[:argument]) if step[:argument]
@@ -140,35 +203,20 @@ module Cuker
140
203
  return res
141
204
  elsif arg[:type] == :DocString
142
205
  # todo: handle if needed
206
+ @log.warn "Docstrings found in '#{arg}' found in file @ #{@file_path}"
143
207
  else
144
208
  @log.warn "Unknown type '#{arg[:type]}' found in file @ #{@file_path}"
145
209
  end
146
210
  []
147
211
  end
148
212
 
149
- def get_tags(hsh)
150
- if hsh[:tags] and hsh[:tags].any?
151
- hsh[:tags].map {|tag| tag[:name]}
213
+ def surround_panel str, title = nil
214
+ if title
215
+ "{panel:title = #{title}} #{str} {panel}"
152
216
  else
153
- @log.warn "No Tags found in #{hsh[:keyword]} @ #{@file_path}"
154
- []
217
+ "{panel} #{str} {panel}"
155
218
  end
156
219
  end
157
220
 
158
- def union feat_tags, tags
159
- (feat_tags.to_set | tags.to_set).to_a # union
160
- end
161
-
162
- def surround ary, sep
163
- "#{sep}#{ary.join(sep)}#{sep}"
164
- end
165
-
166
- def name_merge hsh
167
- str = ""
168
- @log.warn hsh
169
- str += hsh[:name].strip.force_encoding("UTF-8") if hsh[:name]
170
- str += hsh[:description].strip.force_encoding("UTF-8") if hsh[:description]
171
- str
172
- end
173
221
  end
174
222
  end
@@ -7,16 +7,16 @@ class JiraWriter < AbstractWriter
7
7
  @log.debug "initing #{self.class}"
8
8
  end
9
9
 
10
- def write_title title_ary
11
- super title_ary
10
+ def write_title title_line
11
+ super title_line
12
12
  @log.debug "JW write title"
13
- @active_sheet.add_row title_ary
13
+ @active_sheet.add_line title_line
14
14
  end
15
15
 
16
- def write_new_row row_ary
17
- super row_ary
16
+ def write_new_row row_line
17
+ super row_line
18
18
  @log.debug "JW write row"
19
- @active_sheet.add_row row_ary
19
+ @active_sheet.add_line row_line
20
20
  end
21
21
 
22
22
  def make_new_sheet name = nil
@@ -39,11 +39,11 @@ class JiraFile < AbstractSheet
39
39
  @csv_sheet = File.open(file_name, "wb")
40
40
  end
41
41
 
42
- def add_row row_ary
43
- super row_ary
44
- # @csv_sheet << ary
42
+ def add_line line
43
+ super line
44
+ @log.warn "argument not a String.. instead is a '#{line.class}' -> '#{line}'" unless line.is_a? String
45
45
  File.open(@name, "ab") do |file|
46
- file << "#{row_ary}\n"
46
+ file << "#{line}\n"
47
47
  end
48
48
  end
49
49
 
data/lib/cuker.rb CHANGED
@@ -1,7 +1,7 @@
1
- require 'cuker/version'
2
- require 'cuker/gp'
3
-
4
- module Cuker
5
- CukerError = Class.new StandardError
6
-
1
+ require 'cuker/version'
2
+ require 'cuker/cuker_cmd'
3
+
4
+ module Cuker
5
+ CukerError = Class.new StandardError
6
+
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.15
4
+ version: 0.3.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - ufo2mstar
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-13 00:00:00.000000000 Z
11
+ date: 2019-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,90 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: awesome_print
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
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: gherkin
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: highline
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
+ - !ruby/object:Gem::Dependency
98
+ name: logging
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: require_all
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: thor
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
55
139
  description: generates reports and gives some customizable formatting options
56
140
  email:
57
141
  - ufo2mstar@gmail.com
@@ -72,11 +156,11 @@ files:
72
156
  - bin/setup
73
157
  - cuker.gemspec
74
158
  - lib/cuker.rb
159
+ - lib/cuker/cuker_cmd.rb
75
160
  - lib/cuker/gherkin_lexer.rb
76
161
  - lib/cuker/gherkin_parser.rb
77
162
  - lib/cuker/gherkin_reporter.rb
78
163
  - lib/cuker/gherkin_ripper.rb
79
- - lib/cuker/gp.rb
80
164
  - lib/cuker/helper/file_helper.rb
81
165
  - lib/cuker/helper/gherkin_helper.rb
82
166
  - lib/cuker/high.rb
data/lib/cuker/gp.rb DELETED
@@ -1,82 +0,0 @@
1
- require 'thor'
2
-
3
- require 'require_all'
4
- # require_all 'lib/cuker/**/*.rb'
5
- # require_all 'lib/cuker/*.rb'
6
- require_rel '**/*.rb'
7
- require_rel '*.rb'
8
-
9
-
10
- module Cuker
11
- module GPHelper
12
- def self.dash_print(ary)
13
- # ary.each {|x| puts " - '#{x}'"}
14
- end
15
- end
16
-
17
- class GherkinParserCmd < Thor
18
- include LoggerSetup
19
-
20
- GPTOOL = GherkinParser.new
21
- PRESET_LOCS = ['*', './*']
22
-
23
- desc "gp LOCATION", "parse all *.feature files in the given LOCATION"
24
-
25
- def gp loc = "../jira*/**/*", file_name = nil
26
- init
27
- @log.warn "running GPTOOL @ #{loc}"
28
- end
29
-
30
- desc "gpp", "parse all *.feature files in the preset locations: \n#{GPHelper.dash_print PRESET_LOCS}"
31
-
32
- def gpp
33
- init
34
- @log.warn "running GPTOOL @ #{PRESET_LOCS}"
35
- end
36
-
37
-
38
- desc "gpr FEATURE_PATH REPORT_PATH [REPORT_FILE_NAME]",
39
- "reports parsed results into REPORT_FILE_NAME for all *.feature files in the given LOCATION"
40
-
41
- def gpr report_file_name = 'sample_report', feat_path = "../", report_path = "reports"
42
- init
43
- @log.warn "running GPTOOL @ '#{feat_path}' => '#{report_path}' '#{report_file_name}.csv' "
44
-
45
- report_path = File.join report_path, LOG_TIME_TODAY
46
- @log.info Dir.pwd
47
-
48
- gr = GherkinRipper.new feat_path
49
- ast_map = gr.ast_map
50
- csv_model = CsvModel.new ast_map
51
- csv_writer = CsvWriter.new
52
- grr = GherkinReporter.new csv_writer, csv_model, report_path, report_file_name
53
- grr.write
54
- end
55
-
56
- desc "gpj FEATURE_PATH REPORT_PATH [REPORT_FILE_NAME]",
57
- "reports parsed results into REPORT_FILE_NAME for all *.feature files in the given LOCATION"
58
-
59
- def gpj feat_path = "spec/cuker_spec/testdata", report_path = "reports/#{LOG_TIME_TODAY}", report_file_name = 'sample_report'
60
- init
61
- @log.warn "running GPTOOL @ '#{feat_path}' => '#{report_path}' '#{report_file_name}.csv' "
62
-
63
- @log.info Dir.pwd
64
-
65
- gr = GherkinRipper.new feat_path
66
- ast_map = gr.ast_map
67
- csv_model = JiraModel.new ast_map
68
- csv_writer = JiraWriter.new
69
- grr = GherkinReporter.new csv_writer, csv_model, report_path, report_file_name
70
- grr.write
71
- end
72
-
73
-
74
- private
75
-
76
- def init
77
- init_logger :warn
78
- end
79
- end
80
-
81
- # GherkinParserCmd.start(ARGV)
82
- end