henry-container 0.0.7 → 0.0.8

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.
Files changed (53) hide show
  1. data/.gitignore +2 -0
  2. data/.rvmrc +1 -0
  3. data/.yardoc/checksums +6 -0
  4. data/.yardoc/object_types +0 -0
  5. data/.yardoc/objects/root.dat +0 -0
  6. data/.yardoc/proxy_types +0 -0
  7. data/Gemfile +4 -0
  8. data/Rakefile +2 -0
  9. data/bin/henry-ruby-container +23 -0
  10. data/doc/Henry.html +128 -0
  11. data/doc/Henry/Container.html +325 -0
  12. data/doc/Henry/Task.html +551 -0
  13. data/doc/Henry/Task/CucumberTask.html +299 -0
  14. data/doc/Henry/Task/RspecTask.html +299 -0
  15. data/doc/_index.html +153 -0
  16. data/doc/class_list.html +53 -0
  17. data/doc/css/common.css +1 -0
  18. data/doc/css/full_list.css +57 -0
  19. data/doc/css/style.css +328 -0
  20. data/doc/file_list.html +52 -0
  21. data/doc/frames.html +28 -0
  22. data/doc/index.html +153 -0
  23. data/doc/js/app.js +214 -0
  24. data/doc/js/full_list.js +173 -0
  25. data/doc/js/jquery.js +4 -0
  26. data/doc/method_list.html +124 -0
  27. data/doc/top-level-namespace.html +112 -0
  28. data/{henry-container-0.0.1.gem → gems/henry-container-0.0.1.gem} +0 -0
  29. data/{henry-container-0.0.2.gem → gems/henry-container-0.0.2.gem} +0 -0
  30. data/{henry-container-0.0.3.gem → gems/henry-container-0.0.3.gem} +0 -0
  31. data/{henry-container-0.0.4.gem → gems/henry-container-0.0.4.gem} +0 -0
  32. data/{henry-container-0.0.5.gem → gems/henry-container-0.0.5.gem} +0 -0
  33. data/{henry-container-0.0.6.gem → gems/henry-container-0.0.6.gem} +0 -0
  34. data/gems/henry-container-0.0.7.gem +0 -0
  35. data/gems/henry-container-0.0.8.gem +0 -0
  36. data/henry-container.gemspec +24 -0
  37. data/henry-context.yml.sample +4 -0
  38. data/in.henry.sample +14 -0
  39. data/lib/.yardoc/checksums +0 -0
  40. data/lib/.yardoc/object_types +0 -0
  41. data/lib/.yardoc/objects/root.dat +0 -0
  42. data/lib/.yardoc/proxy_types +0 -0
  43. data/lib/henry.rb +8 -0
  44. data/lib/henry/.yardoc/checksums +0 -0
  45. data/lib/henry/.yardoc/object_types +0 -0
  46. data/lib/henry/.yardoc/objects/root.dat +0 -0
  47. data/lib/henry/.yardoc/proxy_types +0 -0
  48. data/lib/henry/container.rb +151 -0
  49. data/lib/henry/container/version.rb +11 -0
  50. data/lib/henry/task.rb +32 -0
  51. data/lib/henry/task/cucumber_task.rb +50 -0
  52. data/lib/henry/task/rspec_task.rb +50 -0
  53. metadata +55 -8
@@ -0,0 +1,4 @@
1
+ tasks:
2
+ - name: Hotels Frontend
3
+ class_name: CucumberTask
4
+
data/in.henry.sample ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "all":{
3
+ },
4
+ "Hotels Frontend":{
5
+ "countries":{
6
+ },
7
+ "validations":[
8
+ ],
9
+ "excludeValidations":[
10
+ "filters"
11
+ ]
12
+ }
13
+ }
14
+
File without changes
Binary file
Binary file
Binary file
data/lib/henry.rb ADDED
@@ -0,0 +1,8 @@
1
+ require_relative 'henry/task'
2
+ require_relative 'henry/container'
3
+
4
+ # Henry
5
+ module Henry
6
+
7
+ end
8
+
File without changes
Binary file
Binary file
Binary file
@@ -0,0 +1,151 @@
1
+ require_relative 'container/version'
2
+
3
+ require 'yaml'
4
+ require 'ostruct'
5
+ require 'json'
6
+ require 'rake'
7
+ require 'colorize'
8
+
9
+ module Henry
10
+
11
+ # Henry Container
12
+ class Container
13
+
14
+ # Nothing to be done here yet...
15
+ def initialize(opts)
16
+ @opts = opts
17
+ end
18
+
19
+ # Executes the loaded tasks and stores their results.
20
+ def execute
21
+ self.before_execution
22
+
23
+ self.tasks_results = self.tasks.collect do |task|
24
+ task.execute(self.task_params(task.name))
25
+ end
26
+
27
+ self.update_results
28
+
29
+ self.dump_results
30
+ end
31
+
32
+ protected
33
+
34
+ # Initial state the conteiner execution results.
35
+ #
36
+ # @return [Hash] the results template.
37
+ RESULTS_TEMPLATE = {
38
+ summary: {
39
+ total: 0,
40
+ tasks_results: [],
41
+ breakdown_by_status_code: {
42
+ 0 => 0,
43
+ 1 => 0,
44
+ 2 => 0
45
+ },
46
+ }
47
+ }
48
+
49
+ # Returns the input file path based on the given options.
50
+ #
51
+ # @return [String] the input file path.
52
+ def input_file_path
53
+ "#{@opts[:"in-dir"]}#{@opts[:in]}"
54
+ end
55
+
56
+ # Returns the output file path based on the given options.
57
+ #
58
+ # @return [String] the output file path.
59
+ def output_file_path
60
+ "#{@opts[:"out-dir"]}#{@opts[:out]}"
61
+ end
62
+
63
+ # Executes required validations before execution.
64
+ def before_execution
65
+ unless File.exists?(self.input_file_path)
66
+ abort "#{"'#{self.input_file_path}' file does not exist.".red}\n #{'*'.red} If running isolated make sure to create it first.\n #{'*'.red} If running from Henry contact us at henry@despegar.it."
67
+ end
68
+
69
+ unless File.exists?('henry-context.yml')
70
+ abort "'henry-context.yml' file does not exist. You need it in order to execute a Henry compatible test.".red
71
+ end
72
+
73
+ end
74
+
75
+ # Loads and parses the @opts[:in] params.
76
+ #
77
+ # @return [{String => String}] the execution params.
78
+ def params
79
+ @params ||= JSON.parse(File.read(self.input_file_path))
80
+ end
81
+
82
+ # Returns the default params.
83
+ # @note Custom task_params will overwrite the defaults.
84
+ #
85
+ # @return [Hash] the default params.
86
+ def default_params
87
+ @default_params ||= self.params['all']
88
+ end
89
+
90
+ # Returns the custom params for the given task.
91
+ # @note default_params will be used for undefined keys.
92
+ #
93
+ # @param [String] task_name the target Task name.
94
+ # @return [Hash] the Task custom params.
95
+ def task_params(task_name)
96
+ self.default_params.merge(self.params[task_name] || {})
97
+ end
98
+
99
+ # Load and parses the henry-context.yml params.
100
+ #
101
+ # @return [{String => String}] the execution context.
102
+ def context
103
+ @context ||= OpenStruct.new(YAML.load_file('henry-context.yml'))
104
+ end
105
+
106
+ # Returns the tasks to be executed based on the context.
107
+ #
108
+ # @return [<Task>] tasks to be executed.
109
+ def tasks
110
+ @tasks ||= self.context.tasks.collect { |task_data| Task.create(task_data["name"], task_data) }
111
+ end
112
+
113
+ # Returns the execution's current results.
114
+ #
115
+ # @return [Hash] the execution's current resutls.
116
+ def results
117
+ @results ||= RESULTS_TEMPLATE
118
+ end
119
+
120
+ # Returns the tasks_results node from the results hash.
121
+ #
122
+ # @return [Array]
123
+ def tasks_results
124
+ self.results[:summary][:tasks_results]
125
+ end
126
+
127
+ # Serts the tasks_results node of the results hash.
128
+ #
129
+ # @param [Array] results the tasks_results collection.
130
+ def tasks_results=(results)
131
+ self.results[:summary][:tasks_results] = results
132
+ end
133
+
134
+ # Updates the results attributes based on the task_results.
135
+ def update_results
136
+ self.tasks_results.each do |task_results|
137
+ self.results[:summary][:total] += 1
138
+
139
+ self.results[:summary][:breakdown_by_status_code][task_results[:code]] += 1
140
+ end
141
+ end
142
+
143
+ # Writes into @opts[:out] the execution results.
144
+ def dump_results
145
+ File.open(self.output_file_path, 'w') { |f| f.write(results.to_json) }
146
+ end
147
+
148
+ end
149
+
150
+ end
151
+
@@ -0,0 +1,11 @@
1
+ module Henry
2
+
3
+ class Container
4
+
5
+ # Current Gem version
6
+ VERSION = '0.0.8'
7
+
8
+ end
9
+
10
+ end
11
+
data/lib/henry/task.rb ADDED
@@ -0,0 +1,32 @@
1
+ require_relative 'task/cucumber_task'
2
+ require_relative 'task/rspec_task'
3
+
4
+ module Henry
5
+
6
+ # Henry Task
7
+ class Task
8
+
9
+ # Accessors for name and data
10
+ attr_accessor :name, :data
11
+
12
+ # Returns an instance of the target Task class.
13
+ # @note Factory to create XTask instances.
14
+ #
15
+ # @return [Task]
16
+ def self.create(name, data)
17
+ return Kernel.eval(data['class_name']).new(name, data)
18
+ end
19
+
20
+ # Initialize the Task with the given name and data.
21
+ def initialize(name, data)
22
+ self.name = name
23
+ self.data = OpenStruct.new(data)
24
+ end
25
+
26
+ # Nothing to be done here yet...
27
+ def execute(params)
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,50 @@
1
+ require 'rake'
2
+ require 'cucumber/rake/task'
3
+
4
+ module Henry
5
+
6
+ class Task
7
+
8
+ # The Henry Task implementation for Cucumber
9
+ class CucumberTask < Task
10
+
11
+ # Makes available the cucumber rake task.
12
+ Cucumber::Rake::Task.new do |t|
13
+ t.cucumber_opts = %w{--out cucumber.out}
14
+ end
15
+
16
+ # Executes the CucumberTask and returns its results.
17
+ #
18
+ # @return [Hash] the CucumberTask results.
19
+ def execute(params)
20
+ begin
21
+ File.open('cucumber.out', 'w') { |f| }
22
+
23
+ #tail_pid = Process.spawn('tail -f cucumber.out')
24
+
25
+ Rake.application['cucumber'].invoke
26
+
27
+ #Process.kill(:SIGINT, tail_pid)
28
+
29
+ {
30
+ code:0,
31
+ message:"OK",
32
+ data:File.open('cucumber.out', 'r').read,
33
+ stacktrace:nil
34
+ }
35
+ rescue Exception => e
36
+ {
37
+ code:2,
38
+ message:e.message,
39
+ data:File.open('cucumber.out', 'r').read,
40
+ stacktrace:e.backtrace
41
+ }
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
@@ -0,0 +1,50 @@
1
+ require 'rake'
2
+ require 'rspec/core/rake_task'
3
+
4
+ module Henry
5
+
6
+ class Task
7
+
8
+ # The Henry Task implementation for Rspec
9
+ class RspecTask < Task
10
+
11
+ # Makes available the spec rake task.
12
+ RSpec::Core::RakeTask.new do |t|
13
+ t.rspec_opts = '--out rspec.out --format documentation --color'
14
+ end
15
+
16
+ # Executes the CucumberTask and returns its results.
17
+ #
18
+ # @return [Hash] the CucumberTask results.
19
+ def execute(params)
20
+ begin
21
+ File.open('rspec.out', 'w') { |f| }
22
+
23
+ tail_pid = Process.spawn('tail -f rspec.out')
24
+
25
+ Rake.application['spec'].invoke
26
+
27
+ Process.kill(:SIGINT, tail_pid)
28
+
29
+ {
30
+ code:0,
31
+ message:"OK",
32
+ data:File.open('rspec.out', 'r').read,
33
+ stacktrace:nil
34
+ }
35
+ rescue Exception => e
36
+ {
37
+ code:2,
38
+ message:e.message,
39
+ data:File.open('rspec.out', 'r').read,
40
+ stacktrace:e.backtrace
41
+ }
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: henry-container
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -94,16 +94,63 @@ dependencies:
94
94
  description: The Ruby Container for Henry
95
95
  email:
96
96
  - decurnex.roberto@gmail.com
97
- executables: []
97
+ executables:
98
+ - henry-ruby-container
98
99
  extensions: []
99
100
  extra_rdoc_files: []
100
101
  files:
101
- - henry-container-0.0.1.gem
102
- - henry-container-0.0.2.gem
103
- - henry-container-0.0.3.gem
104
- - henry-container-0.0.4.gem
105
- - henry-container-0.0.5.gem
106
- - henry-container-0.0.6.gem
102
+ - .gitignore
103
+ - .rvmrc
104
+ - .yardoc/checksums
105
+ - .yardoc/object_types
106
+ - .yardoc/objects/root.dat
107
+ - .yardoc/proxy_types
108
+ - Gemfile
109
+ - Rakefile
110
+ - bin/henry-ruby-container
111
+ - doc/Henry.html
112
+ - doc/Henry/Container.html
113
+ - doc/Henry/Task.html
114
+ - doc/Henry/Task/CucumberTask.html
115
+ - doc/Henry/Task/RspecTask.html
116
+ - doc/_index.html
117
+ - doc/class_list.html
118
+ - doc/css/common.css
119
+ - doc/css/full_list.css
120
+ - doc/css/style.css
121
+ - doc/file_list.html
122
+ - doc/frames.html
123
+ - doc/index.html
124
+ - doc/js/app.js
125
+ - doc/js/full_list.js
126
+ - doc/js/jquery.js
127
+ - doc/method_list.html
128
+ - doc/top-level-namespace.html
129
+ - gems/henry-container-0.0.1.gem
130
+ - gems/henry-container-0.0.2.gem
131
+ - gems/henry-container-0.0.3.gem
132
+ - gems/henry-container-0.0.4.gem
133
+ - gems/henry-container-0.0.5.gem
134
+ - gems/henry-container-0.0.6.gem
135
+ - gems/henry-container-0.0.7.gem
136
+ - gems/henry-container-0.0.8.gem
137
+ - henry-container.gemspec
138
+ - henry-context.yml.sample
139
+ - in.henry.sample
140
+ - lib/.yardoc/checksums
141
+ - lib/.yardoc/object_types
142
+ - lib/.yardoc/objects/root.dat
143
+ - lib/.yardoc/proxy_types
144
+ - lib/henry.rb
145
+ - lib/henry/.yardoc/checksums
146
+ - lib/henry/.yardoc/object_types
147
+ - lib/henry/.yardoc/objects/root.dat
148
+ - lib/henry/.yardoc/proxy_types
149
+ - lib/henry/container.rb
150
+ - lib/henry/container/version.rb
151
+ - lib/henry/task.rb
152
+ - lib/henry/task/cucumber_task.rb
153
+ - lib/henry/task/rspec_task.rb
107
154
  homepage: http://henry.despegar.it
108
155
  licenses: []
109
156
  post_install_message: