cuke_parser 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/lib/cuke_parser.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require 'parse_engine/json_parser.rb'
2
+ require 'parse_engine/html_parser.rb'
2
3
  require 'parse_engine/parser_utils.rb'
3
4
 
4
5
  module CukeParser
5
6
 
6
7
  @json_parser = ParseEngine::JsonParser.new
8
+ @html_parser = ParseEngine::HtmlParser.new
7
9
  @parser_utils = ParseEngine::ParserUtils.new
8
10
 
9
11
  def CukeParser.write_pretty(build,file)
@@ -21,5 +23,9 @@ module CukeParser
21
23
  def CukeParser.json_jenkins_list(file_path,timestamp)
22
24
  @json_parser.get_jenkins_build_list(file_path,timestamp)
23
25
  end
26
+
27
+ def CukeParser.html(file_path)
28
+ @html_parser.get_build(file_path)
29
+ end
24
30
 
25
31
  end #end CukeParser module
@@ -0,0 +1,103 @@
1
+ require 'nokogiri'
2
+ require 'cuke_model/feature.rb'
3
+ require 'cuke_model/scenario.rb'
4
+ require 'cuke_model/step.rb'
5
+ require 'cuke_model/suite.rb'
6
+
7
+ module CukeParser
8
+ module ParseEngine
9
+ class HtmlParser
10
+
11
+ def initialize
12
+ @utils = ParserUtils.new
13
+ @system_data_path = "/archive/systemData.json"
14
+ @cuke_data = "/archive/cucumber.html"
15
+ end
16
+
17
+ def get_build(file_path)
18
+ if File.exists?(file_path)
19
+ today = Time.now
20
+ date = today.to_s.split(" ")[0]
21
+ time = today.to_s.split(" ")[1]
22
+ @cur_build = CukeModel::CukeSuite.new(date,time,today,nil,nil,nil,nil,nil)
23
+ return parse_build(file_path)
24
+ else
25
+ #nothing was found
26
+ return false
27
+ end
28
+ end
29
+
30
+ def parse_build(file_path)
31
+ page = Nokogiri::HTML(open(file_path))
32
+ features = parse_features(page)
33
+ if @cur_build.status.empty?
34
+ #all the steps passed
35
+ @cur_build.status = "passed"
36
+ end
37
+ script = page.css('script').to_a.pop(2)
38
+ duration = script[0].text.gsub("document.getElementById('duration').innerHTML = \"Finished in <strong>","")
39
+ duration = duration.to_s.gsub(" seconds</strong>\";","")
40
+ @cur_build.duration = 0
41
+ @cur_build.converted_duration = duration
42
+ @cur_build.features = features['list']
43
+ return @cur_build
44
+ end
45
+
46
+ def parse_features(features)
47
+ feature_data = Hash['duration', 0, 'list', Array.new]
48
+ features.css('div.feature').each do |feature|
49
+ @cur_feature = CukeModel::CukeFeature.new("Feature",feature.css('span.val')[0].text.gsub("Feature: ",""))
50
+ scenarios = parse_scenarios((feature.css('div.background') + feature.css('div.scenario')))
51
+ if @cur_feature.status.empty?
52
+ #all the steps passed
53
+ @cur_feature.status = "passed"
54
+ end
55
+ @cur_feature.duration = scenarios['duration']
56
+ @cur_feature.converted_duration = @utils.format_time(scenarios['duration'])
57
+ @cur_feature.scenarios = scenarios['list']
58
+ feature_data['list'].push(@cur_feature)
59
+ feature_data['duration'] = feature_data['duration'] + @cur_feature.duration
60
+ end
61
+ return feature_data
62
+ end
63
+
64
+ def parse_scenarios(scenarios)
65
+ scenario_data = Hash['duration', 0, 'list', Array.new]
66
+ scenarios.each do |scenario|
67
+ @cur_scenario = CukeModel::CukeScenario.new(scenario.css('span.keyword')[0].text.gsub(":",""),scenario.css('span.val')[0].text)
68
+ steps = parse_steps(scenario.css('ol li div.step_name'))
69
+ if @cur_scenario.status.empty?
70
+ #all the steps passed
71
+ @cur_scenario.status = "passed"
72
+ end
73
+ @cur_scenario.duration = steps['duration']
74
+ @cur_scenario.converted_duration = @utils.format_time(steps['duration'])
75
+ @cur_scenario.steps = steps['list']
76
+ scenario_data['list'].push(@cur_scenario)
77
+ scenario_data['duration'] = scenario_data['duration'] + @cur_scenario.duration
78
+ end
79
+ return scenario_data
80
+ end
81
+
82
+ def parse_steps(steps)
83
+ step_data = Hash['duration', 0, 'list', Array.new]
84
+ steps.each do |step|
85
+ stepErrorMessage = ''
86
+ stepFailureImage = "I NEED TO FIND IMAGE"
87
+ if step.parent.attribute('class').to_s.gsub("step ","") == "failed"
88
+ @cur_scenario.status = "failed"
89
+ @cur_feature.status = "failed"
90
+ @cur_build.status = "failed"
91
+ stepErrorMessage = "I NEED TO FIND ERROR"
92
+ # #failed steps should have an image available:
93
+ # unless step['embeddings'].nil?
94
+ # stepFailureImage = step['embeddings'][0]['data']
95
+ # end
96
+ end
97
+ step_data['list'].push(CukeModel::CukeStep.new(step.css('span.keyword').text,step.css('span.val').text,0,0,step.parent.attribute('class').to_s.gsub("step ",""),stepErrorMessage,stepFailureImage))
98
+ end
99
+ return step_data
100
+ end
101
+ end
102
+ end
103
+ end
@@ -29,6 +29,9 @@ module CukeParser
29
29
  if build_folder <= build_stamp
30
30
  drop_num = dir.index(build_folder) + 1
31
31
  end
32
+ if build_folder.length < 19
33
+ dir.delete_at(dir.index(build_folder))
34
+ end
32
35
  end
33
36
  end
34
37
  dir = dir.drop(drop_num)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuke_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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: 2013-04-27 00:00:00.000000000 Z
12
+ date: 2013-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: builder
16
- requirement: &26605152 !ruby/object:Gem::Requirement
16
+ requirement: &25625196 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.1.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *26605152
24
+ version_requirements: *25625196
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &26625204 !ruby/object:Gem::Requirement
27
+ requirement: &25624848 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.4.6
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *26625204
35
+ version_requirements: *25624848
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &26624712 !ruby/object:Gem::Requirement
38
+ requirement: &25624212 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.9.2
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *26624712
46
+ version_requirements: *25624212
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &26623416 !ruby/object:Gem::Requirement
49
+ requirement: &25622832 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 2.11.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *26623416
57
+ version_requirements: *25622832
58
58
  description: Library to easily pull out information for tracking your Cukes
59
59
  email: rick.beyer@gmail.com
60
60
  executables: []
@@ -66,6 +66,7 @@ files:
66
66
  - lib/cuke_model/step.rb
67
67
  - lib/cuke_model/suite.rb
68
68
  - lib/cuke_parser.rb
69
+ - lib/parse_engine/html_parser.rb
69
70
  - lib/parse_engine/json_parser.rb
70
71
  - lib/parse_engine/parser_utils.rb
71
72
  - test/cuke_parser_test.rb
@@ -99,7 +100,7 @@ rubyforge_project:
99
100
  rubygems_version: 1.8.16
100
101
  signing_key:
101
102
  specification_version: 3
102
- summary: cuke_parser-0.0.5
103
+ summary: cuke_parser-0.0.6
103
104
  test_files:
104
105
  - test/cuke_parser_test.rb
105
106
  - test/json_test.rb