henry-container 0.0.20 → 0.0.22

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.
@@ -21,6 +21,8 @@ BANNER
21
21
  opt :"out-dir", "Custom dir path where the results will be written", :default => '.'
22
22
  opt :in, "Custom name for the input file.", :default => 'in.henry'
23
23
  opt :"in-dir", "Custom dir path where the input will be read from.", :default => '.'
24
+ opt :hints, "Custom name for the task hints (tasks to be executed) file.", :default => 'task.hints'
25
+ opt :"hints-dir", "Custom dir path where the task hints (tasks to be executed) will be read from.", :default => '.'
24
26
  end
25
27
 
26
28
  Henry::Container.new(opts).execute
@@ -3,7 +3,7 @@ module Henry
3
3
  class Container
4
4
 
5
5
  # Current Gem version
6
- VERSION = '0.0.20'
6
+ VERSION = '0.0.22'
7
7
 
8
8
  end
9
9
 
@@ -20,8 +20,8 @@ module Henry
20
20
  def execute
21
21
  self.before_execution
22
22
 
23
- self.tasks_results = self.tasks.collect do |task|
24
- task.execute(self.task_params(task.name))
23
+ self.tasks.each do |task|
24
+ self.task_results << task.execute(self.task_params(task.name)) if task.enabled?
25
25
  end
26
26
 
27
27
  self.update_results
@@ -59,12 +59,16 @@ module Henry
59
59
  def output_file_path
60
60
  "#{@opts[:"out-dir"]}/#{@opts[:out]}"
61
61
  end
62
+
63
+ # Returns the task hints file path based on the given options.
64
+ #
65
+ # @return [String] the task hints file path.
66
+ def hints_file_path
67
+ "#{@opts[:"hints-dir"]}/#{@opts[:hints]}"
68
+ end
62
69
 
63
70
  # Executes required validations before execution.
64
71
  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
72
 
69
73
  unless File.exists?('henry-context.yml')
70
74
  abort "'henry-context.yml' file does not exist. You need it in order to execute a Henry compatible test.".red
@@ -72,11 +76,23 @@ module Henry
72
76
 
73
77
  end
74
78
 
75
- # Loads and parses the @opts[:in] params.
79
+ # Returns the execution params.
76
80
  #
77
81
  # @return [{String => String}] the execution params.
78
82
  def params
79
- @params ||= JSON.parse(File.read(self.input_file_path))
83
+ @params ||= self.load_params
84
+
85
+ if File.exists?(self.input_file_path)
86
+ @params ||= JSON.parse(File.read(self.input_file_path))
87
+ end
88
+
89
+ # Loads and parses the @opts[:in] params, if they exists.
90
+ #
91
+ # @return [{String => String}] the execution params.
92
+ def load_params
93
+ return {} unless File.exists?(self.input_file_path)
94
+
95
+ JSON.parse(File.read(self.input_file_path))
80
96
  end
81
97
 
82
98
  # Returns the default params.
@@ -84,7 +100,7 @@ module Henry
84
100
  #
85
101
  # @return [Hash] the default params.
86
102
  def default_params
87
- @default_params ||= self.params['all']
103
+ @default_params ||= (self.params['all'] || {})
88
104
  end
89
105
 
90
106
  # Returns the custom params for the given task.
@@ -96,6 +112,23 @@ module Henry
96
112
  self.default_params.merge(self.params[task_name] || {})
97
113
  end
98
114
 
115
+
116
+ # Returns de task hints (tasks to be executed) or an empty array if they are not defined.
117
+ #
118
+ # @return [<String>] the task hints
119
+ def task_hints
120
+ @task_hints ||= self.load_task_hints
121
+ end
122
+
123
+ # Loads and parses the @opts[:hints] params, if they exists.
124
+ #
125
+ # @return [<String>] the execution params.
126
+ def load_task_hints
127
+ return [] unless File.exists?(self.hints_file_path)
128
+
129
+ JSON.parse(File.read(self.hints_file_path))
130
+ end
131
+
99
132
  # Load and parses the henry-context.yml params.
100
133
  #
101
134
  # @return [{String => String}] the execution context.
@@ -107,7 +140,22 @@ module Henry
107
140
  #
108
141
  # @return [<Task>] tasks to be executed.
109
142
  def tasks
110
- @tasks ||= self.context.tasks.collect { |task_data| Task.create(task_data["name"], task_data) }
143
+ @tasks ||= self.build_tasks
144
+ end
145
+
146
+ # Builds and disables the Tasks to be executed based on the context and hints.
147
+ #
148
+ # @return [<Task>] tasks to be executed.
149
+ def build_tasks
150
+ tasks = self.context.tasks.collect do |task_data|
151
+ Task.create(task_data["name"], task_data)
152
+ end
153
+
154
+ return tasks if self.task_hints.empty?
155
+
156
+ tasks.each do |task|
157
+ task.disable! unless self.task_hints.include? task.name
158
+ end
111
159
  end
112
160
 
113
161
  # Returns the execution's current results.
data/lib/henry/task.rb CHANGED
@@ -7,7 +7,7 @@ module Henry
7
7
  class Task
8
8
 
9
9
  # Accessors for name and data
10
- attr_accessor :name, :data
10
+ attr_accessor :name, :data, :enabled
11
11
 
12
12
  # Returns an instance of the target Task class.
13
13
  # @note Factory to create XTask instances.
@@ -21,6 +21,31 @@ module Henry
21
21
  def initialize(name, data)
22
22
  self.name = name
23
23
  self.data = OpenStruct.new(data)
24
+ self.enabled = true
25
+ end
26
+
27
+ # Returns true whenever the Task is enabled.
28
+ #
29
+ # @return [True,False]
30
+ def enabled?
31
+ self.enabled
32
+ end
33
+
34
+ # Returns true whenever the Task is disabled.
35
+ #
36
+ # @return [True,False]
37
+ def disabled?
38
+ !self.enabled?
39
+ end
40
+
41
+ # Makes the Task enabled
42
+ def enable!
43
+ self.enabled = true
44
+ end
45
+
46
+ # Makes the Task disabled
47
+ def disable!
48
+ self.enabled = false
24
49
  end
25
50
 
26
51
  # Nothing to be done here yet...
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.20
4
+ version: 0.0.22
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-24 00:00:00.000000000 Z
12
+ date: 2012-07-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake