automation_object 0.0.4 → 0.5.0

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 (163) hide show
  1. checksums.yaml +4 -4
  2. data/lib/automation_object.rb +14 -72
  3. data/lib/automation_object/blue_print.rb +37 -100
  4. data/lib/automation_object/blue_print/composite/automatic_onload_modal.rb +28 -0
  5. data/lib/automation_object/blue_print/composite/base.rb +18 -0
  6. data/lib/automation_object/blue_print/composite/custom_method.rb +23 -0
  7. data/lib/automation_object/blue_print/composite/element.rb +20 -0
  8. data/lib/automation_object/blue_print/composite/element_array.rb +21 -0
  9. data/lib/automation_object/blue_print/composite/element_hash.rb +26 -0
  10. data/lib/automation_object/blue_print/composite/helpers/element_helper.rb +33 -0
  11. data/lib/automation_object/blue_print/composite/helpers/multiple_elements_helper.rb +18 -0
  12. data/lib/automation_object/blue_print/composite/hook.rb +31 -0
  13. data/lib/automation_object/blue_print/composite/hook_action.rb +84 -0
  14. data/lib/automation_object/blue_print/composite/hook_element_requirements.rb +39 -0
  15. data/lib/automation_object/blue_print/composite/modal.rb +56 -0
  16. data/lib/automation_object/blue_print/composite/screen.rb +61 -0
  17. data/lib/automation_object/blue_print/composite/top.rb +51 -0
  18. data/lib/automation_object/blue_print/composite/view.rb +48 -0
  19. data/lib/automation_object/blue_print/hash_adapter.rb +17 -0
  20. data/lib/automation_object/blue_print/hash_adapter/automatic_onload_modal.rb +35 -0
  21. data/lib/automation_object/blue_print/hash_adapter/composite.rb +93 -0
  22. data/lib/automation_object/blue_print/hash_adapter/custom_method.rb +30 -0
  23. data/lib/automation_object/blue_print/hash_adapter/element.rb +34 -0
  24. data/lib/automation_object/blue_print/hash_adapter/element_array.rb +36 -0
  25. data/lib/automation_object/blue_print/hash_adapter/element_hash.rb +43 -0
  26. data/lib/automation_object/blue_print/hash_adapter/helpers/element_helper.rb +59 -0
  27. data/lib/automation_object/blue_print/hash_adapter/helpers/multiple_elements_helper.rb +35 -0
  28. data/lib/automation_object/blue_print/hash_adapter/helpers/validation_error.rb +26 -0
  29. data/lib/automation_object/blue_print/hash_adapter/helpers/validation_helper.rb +99 -0
  30. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate.rb +23 -0
  31. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_allowed_keys.rb +31 -0
  32. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_element_presence_of.rb +55 -0
  33. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_instance_of.rb +39 -0
  34. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_modal_presence_of.rb +54 -0
  35. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_presence_of.rb +36 -0
  36. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_screen_presence_of.rb +55 -0
  37. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_view_presence_of.rb +52 -0
  38. data/lib/automation_object/blue_print/hash_adapter/hook.rb +35 -0
  39. data/lib/automation_object/blue_print/hash_adapter/hook_action.rb +134 -0
  40. data/lib/automation_object/blue_print/hash_adapter/hook_element_requirements.rb +64 -0
  41. data/lib/automation_object/blue_print/hash_adapter/modal.rb +52 -0
  42. data/lib/automation_object/blue_print/hash_adapter/screen.rb +91 -0
  43. data/lib/automation_object/blue_print/hash_adapter/top.rb +63 -0
  44. data/lib/automation_object/blue_print/hash_adapter/view.rb +29 -0
  45. data/lib/automation_object/blue_print/helpers/file_helper.rb +38 -0
  46. data/lib/automation_object/blue_print/yaml_adapter.rb +50 -0
  47. data/lib/automation_object/driver.rb +44 -0
  48. data/lib/automation_object/driver/appium_adapter/driver.rb +150 -0
  49. data/lib/automation_object/driver/appium_adapter/element.rb +118 -0
  50. data/lib/automation_object/driver/base.rb +11 -0
  51. data/lib/automation_object/driver/driver.rb +69 -245
  52. data/lib/automation_object/driver/element.rb +51 -210
  53. data/lib/automation_object/driver/helpers/selenium_driver_helper.rb +41 -0
  54. data/lib/automation_object/driver/helpers/selenium_element_helper.rb +138 -0
  55. data/lib/automation_object/driver/nokogiri_adapter/backup/driver.rb +83 -0
  56. data/lib/automation_object/driver/nokogiri_adapter/backup/element.rb +66 -0
  57. data/lib/automation_object/driver/nokogiri_adapter/backup/form.rb +29 -0
  58. data/lib/automation_object/driver/nokogiri_adapter/backup/helpers/driver_element_helper.rb +52 -0
  59. data/lib/automation_object/driver/nokogiri_adapter/backup/session.rb +115 -0
  60. data/lib/automation_object/driver/nokogiri_adapter/driver.rb +104 -0
  61. data/lib/automation_object/driver/nokogiri_adapter/element.rb +85 -0
  62. data/lib/automation_object/driver/nokogiri_adapter/error.rb +17 -0
  63. data/lib/automation_object/driver/selenium_adapter/driver.rb +143 -0
  64. data/lib/automation_object/driver/selenium_adapter/element.rb +116 -0
  65. data/lib/automation_object/dsl.rb +33 -0
  66. data/lib/automation_object/dsl/blue_print_adapter.rb +16 -0
  67. data/lib/automation_object/dsl/blue_print_adapter/composite.rb +54 -0
  68. data/lib/automation_object/dsl/blue_print_adapter/element.rb +14 -0
  69. data/lib/automation_object/dsl/blue_print_adapter/element_array.rb +14 -0
  70. data/lib/automation_object/dsl/blue_print_adapter/element_hash.rb +14 -0
  71. data/lib/automation_object/dsl/blue_print_adapter/modal.rb +23 -0
  72. data/lib/automation_object/dsl/blue_print_adapter/screen.rb +26 -0
  73. data/lib/automation_object/dsl/blue_print_adapter/top.rb +19 -0
  74. data/lib/automation_object/dsl/models.rb +18 -0
  75. data/lib/automation_object/dsl/proxies/element.rb +16 -0
  76. data/lib/automation_object/dsl/proxies/element_array.rb +16 -0
  77. data/lib/automation_object/dsl/proxies/element_hash.rb +16 -0
  78. data/lib/automation_object/dsl/proxies/helpers/composite_helper.rb +74 -0
  79. data/lib/automation_object/dsl/proxies/modal.rb +17 -0
  80. data/lib/automation_object/dsl/proxies/screen.rb +17 -0
  81. data/lib/automation_object/dsl/proxies/top.rb +17 -0
  82. data/lib/automation_object/framework.rb +79 -386
  83. data/lib/automation_object/helpers/composite.rb +95 -0
  84. data/lib/automation_object/helpers/composite_hook.rb +46 -0
  85. data/lib/automation_object/helpers/hash.rb +15 -0
  86. data/lib/automation_object/helpers/reflection_helper.rb +28 -0
  87. data/lib/automation_object/helpers/string.rb +27 -0
  88. data/lib/automation_object/proxies/mutex_proxy.rb +63 -0
  89. data/lib/automation_object/proxies/proxy.rb +20 -0
  90. data/lib/automation_object/proxies/throttle_proxy.rb +57 -0
  91. data/lib/automation_object/state.rb +37 -0
  92. data/lib/automation_object/state/blue_print_adapter.rb +16 -0
  93. data/lib/automation_object/state/blue_print_adapter/composite.rb +65 -0
  94. data/lib/automation_object/state/blue_print_adapter/element.rb +20 -0
  95. data/lib/automation_object/state/blue_print_adapter/element_array.rb +25 -0
  96. data/lib/automation_object/state/blue_print_adapter/element_hash.rb +31 -0
  97. data/lib/automation_object/state/blue_print_adapter/element_proxy.rb +28 -0
  98. data/lib/automation_object/state/blue_print_adapter/helpers/element_helper.rb +31 -0
  99. data/lib/automation_object/state/blue_print_adapter/helpers/screen_manager.rb +137 -0
  100. data/lib/automation_object/state/blue_print_adapter/helpers/window.rb +39 -0
  101. data/lib/automation_object/state/blue_print_adapter/hook.rb +56 -0
  102. data/lib/automation_object/state/blue_print_adapter/hook_action.rb +33 -0
  103. data/lib/automation_object/state/blue_print_adapter/hook_actions/action_loop.rb +35 -0
  104. data/lib/automation_object/state/blue_print_adapter/hook_actions/change_screen.rb +26 -0
  105. data/lib/automation_object/state/blue_print_adapter/hook_actions/change_to_previous_screen.rb +21 -0
  106. data/lib/automation_object/state/blue_print_adapter/hook_actions/close_modal.rb +31 -0
  107. data/lib/automation_object/state/blue_print_adapter/hook_actions/close_screen.rb +19 -0
  108. data/lib/automation_object/state/blue_print_adapter/hook_actions/element_requirement.rb +34 -0
  109. data/lib/automation_object/state/blue_print_adapter/hook_actions/new_screen.rb +37 -0
  110. data/lib/automation_object/state/blue_print_adapter/hook_actions/possible_screen_changes.rb +21 -0
  111. data/lib/automation_object/state/blue_print_adapter/hook_actions/reset_screen.rb +18 -0
  112. data/lib/automation_object/state/blue_print_adapter/hook_actions/show_modal.rb +26 -0
  113. data/lib/automation_object/state/blue_print_adapter/hook_actions/sleep.rb +18 -0
  114. data/lib/automation_object/state/blue_print_adapter/hook_actions/wait_for_elements.rb +20 -0
  115. data/lib/automation_object/state/blue_print_adapter/modal.rb +26 -0
  116. data/lib/automation_object/state/blue_print_adapter/screen.rb +32 -0
  117. data/lib/automation_object/state/blue_print_adapter/top.rb +45 -0
  118. data/lib/automation_object/state/error.rb +24 -0
  119. data/lib/automation_object/state/session.rb +38 -0
  120. data/lib/automation_object/step_definitions.rb +14 -0
  121. data/lib/automation_object/step_definitions/action.rb +21 -0
  122. data/lib/automation_object/step_definitions/cache.rb +23 -0
  123. data/lib/automation_object/step_definitions/element/actions.rb +87 -0
  124. data/lib/automation_object/step_definitions/element/regex.rb +24 -0
  125. data/lib/automation_object/step_definitions/element/steps.rb +67 -0
  126. data/lib/automation_object/step_definitions/parse.rb +39 -0
  127. data/lib/automation_object/version.rb +1 -1
  128. metadata +194 -110
  129. data/lib/automation_object/blue_print_validation/base_validation.rb +0 -44
  130. data/lib/automation_object/blue_print_validation/common_methods.rb +0 -106
  131. data/lib/automation_object/blue_print_validation/element_validation.rb +0 -198
  132. data/lib/automation_object/blue_print_validation/formatted_errors.rb +0 -41
  133. data/lib/automation_object/blue_print_validation/hook_validation.rb +0 -393
  134. data/lib/automation_object/blue_print_validation/key_value_constants.rb +0 -75
  135. data/lib/automation_object/blue_print_validation/modal_validation.rb +0 -37
  136. data/lib/automation_object/blue_print_validation/screen_modal_common_methods.rb +0 -119
  137. data/lib/automation_object/blue_print_validation/screen_validation.rb +0 -21
  138. data/lib/automation_object/blue_print_validation/validation_object.rb +0 -32
  139. data/lib/automation_object/driver/anonymous.rb +0 -27
  140. data/lib/automation_object/element/element.rb +0 -145
  141. data/lib/automation_object/element/element_array.rb +0 -12
  142. data/lib/automation_object/element/element_cell.rb +0 -126
  143. data/lib/automation_object/element/element_group.rb +0 -33
  144. data/lib/automation_object/element/element_hash.rb +0 -25
  145. data/lib/automation_object/element/element_helpers.rb +0 -29
  146. data/lib/automation_object/element/element_methods.rb +0 -134
  147. data/lib/automation_object/element/elements_helpers.rb +0 -204
  148. data/lib/automation_object/framework/events.rb +0 -8
  149. data/lib/automation_object/framework/helpers.rb +0 -101
  150. data/lib/automation_object/framework/print_objects.rb +0 -67
  151. data/lib/automation_object/framework/screen_monitor.rb +0 -55
  152. data/lib/automation_object/framework/screen_routing.rb +0 -310
  153. data/lib/automation_object/framework/window_helpers.rb +0 -181
  154. data/lib/automation_object/hash.rb +0 -6
  155. data/lib/automation_object/hook_helpers.rb +0 -27
  156. data/lib/automation_object/logger.rb +0 -179
  157. data/lib/automation_object/object.rb +0 -22
  158. data/lib/automation_object/screen/modal.rb +0 -8
  159. data/lib/automation_object/screen/screen.rb +0 -209
  160. data/lib/automation_object/screen/screen_hook_helpers.rb +0 -319
  161. data/lib/automation_object/screen/screen_modal_helpers.rb +0 -101
  162. data/lib/automation_object/screen/screen_prompt_helpers.rb +0 -21
  163. data/lib/automation_object/screen/screen_window_helpers.rb +0 -149
@@ -0,0 +1,39 @@
1
+ require_relative 'validate'
2
+
3
+ module AutomationObject
4
+ module BluePrint
5
+ module HashAdapter
6
+ module Validators
7
+ #Validator that tests that a element is defined when it is called elsewhere through a hook
8
+ class ValidateInstanceOf < Validate
9
+ # @param args [Hash] arguments for the validation class
10
+ def initialize(args)
11
+ @key = args.fetch :key
12
+ #Convert to array of instances for consistency
13
+ @should_be_instances_of = (args.fetch(:args).is_a?(Array)) ? args.fetch(:args) : [args.fetch(:args)]
14
+ end
15
+
16
+ # Validates the composite object and throws errors on failure
17
+ # @param composite_object [Object] Composite object to be tested.
18
+ # @return [nil] no return on exceptions on failure
19
+ def validate(composite_object)
20
+ #Get the hash value from the composite object
21
+ target_value = composite_object.hash[@key]
22
+
23
+ #Skip empty or non-existent
24
+ return unless target_value
25
+
26
+ @should_be_instances_of.each { |should_be_instance_of|
27
+ return if target_value.is_a?(should_be_instance_of)
28
+ }
29
+
30
+ error_message = "Invalid Type: #{target_value.class}, at: #{composite_object.location}[#{@key}]."
31
+ error_message << " Allowed Type(s): #{@should_be_instances_of}"
32
+
33
+ self.error_messages.push(error_message)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,54 @@
1
+ require_relative 'validate'
2
+
3
+ module AutomationObject
4
+ module BluePrint
5
+ module HashAdapter
6
+ module Validators
7
+ #Validator that tests that a modal is defined when it is called elsewhere through a hook
8
+ class ValidateModalPresenceOf < Validate
9
+ # @param args [Hash] arguments for the validation class
10
+ def initialize(args)
11
+ @key = args.fetch :key
12
+ end
13
+
14
+ # Validates the composite object and throws errors on failure
15
+ # @param composite_object [Object] Composite object to be tested.
16
+ # @return [nil] no return on exceptions on failure
17
+ def validate(composite_object)
18
+ #Get the hash value from the composite object
19
+ target_value = composite_object.hash[@key]
20
+ target_values = (target_value.is_a?(Array)) ? target_value : [target_value]
21
+
22
+ return unless target_value
23
+
24
+ valid_modals = self.find_modals(composite_object)
25
+
26
+ target_values.each { |modal|
27
+ modal = modal.to_sym
28
+ next if valid_modals.include?(modal)
29
+
30
+ error_message = "Invalid Modal: #{modal}, at: #{composite_object.location}[#{@key}]."
31
+ error_message << " Valid Modal(s): #{valid_modals}"
32
+ self.error_messages.push(error_message)
33
+ }
34
+ end
35
+
36
+ #Traverses up a composite tree to find :modals in a hash
37
+ # @param composite_object [Object] composite object to traverse up
38
+ # @return [Array<Symbol>] array of modal names
39
+ def find_modals(composite_object)
40
+ #Using the hash instead of the method because lower nodes will get validated
41
+ #before composite is finished building
42
+ if composite_object.hash[:modals].is_a?(Hash)
43
+ return composite_object.hash[:modals].keys #Should be Hash with modal names as the keys
44
+ elsif composite_object.parent
45
+ return self.find_modals(composite_object.parent)
46
+ end
47
+
48
+ return []
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,36 @@
1
+ require_relative 'validate'
2
+
3
+ module AutomationObject
4
+ module BluePrint
5
+ module HashAdapter
6
+ module Validators
7
+ #Validates tests the a key exists on a composite hash
8
+ class ValidatePresenceOf < Validate
9
+ # @param args [Hash] arguments for the validation class
10
+ def initialize(args)
11
+ @key = args.fetch :key
12
+
13
+ options = args.fetch :args, {}
14
+ options = (options.is_a?(Hash)) ? options : {}
15
+ @unless_presence_of = options.fetch :unless_presence_of, nil
16
+ end
17
+
18
+ # Validates the composite object and throws errors on failure
19
+ # @param composite_object [Object] Composite object to be tested.
20
+ # @return [nil] no return on exceptions on failure
21
+ def validate(composite_object)
22
+ #Get the hash value from the composite object
23
+ return if composite_object.hash.has_key?(@key)
24
+
25
+ #Do unless_presence_of check
26
+ if @unless_presence_of
27
+ return if composite_object.hash.has_key?(@unless_presence_of)
28
+ end
29
+
30
+ self.error_messages.push("Required Key Missing: #{@key}, at: #{composite_object.location}.")
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,55 @@
1
+ require_relative 'validate'
2
+
3
+ module AutomationObject
4
+ module BluePrint
5
+ module HashAdapter
6
+ module Validators
7
+ #Validator that tests that a screen is defined when it is called elsewhere through a hook
8
+ class ValidateScreenPresenceOf < Validate
9
+ # @param args [Hash] arguments for the validation class
10
+ def initialize(args)
11
+ @key = args.fetch :key
12
+ end
13
+
14
+ # Validates the composite object and throws errors on failure
15
+ # @param composite_object [Object] Composite object to be tested.
16
+ # @return [nil] no return on exceptions on failure
17
+ def validate(composite_object)
18
+ #Get the hash value from the composite object
19
+ target_value = composite_object.hash[@key]
20
+
21
+ return unless target_value
22
+
23
+ target_values = (target_value.is_a?(Array)) ? target_value : [target_value]
24
+
25
+ valid_screens = self.find_screens(composite_object)
26
+
27
+ target_values.each { |screen|
28
+ screen = screen.to_sym
29
+ next if valid_screens.include?(screen)
30
+
31
+ error_message = "Invalid Screen: #{screen}, at: #{composite_object.location}[#{@key}]."
32
+ error_message << " Valid Screen(s): #{valid_screens}"
33
+ self.error_messages.push(error_message)
34
+ }
35
+ end
36
+
37
+ #Traverses up a composite tree to find :screens in a hash
38
+ # @param composite_object [Object] composite object to traverse up
39
+ # @return [Array<Symbol>] array of screen names
40
+ def find_screens(composite_object)
41
+ #Using the hash instead of the method because lower nodes will get validated
42
+ #before composite is finished building
43
+ if composite_object.hash[:screens].is_a?(Hash)
44
+ return composite_object.hash[:screens].keys #Should be Hash with screen names as the keys
45
+ elsif composite_object.parent
46
+ return self.find_screens(composite_object.parent)
47
+ end
48
+
49
+ return []
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,52 @@
1
+ require_relative 'validate'
2
+
3
+ module AutomationObject
4
+ module BluePrint
5
+ module HashAdapter
6
+ module Validators
7
+ #Validator that tests that a view is defined when it is called elsewhere through a hook
8
+ class ValidateViewPresenceOf < Validate
9
+ # @param args [Hash] arguments for the validation class
10
+ def initialize(args)
11
+ @key = args.fetch :key
12
+ end
13
+
14
+ # Validates the composite object and throws errors on failure
15
+ # @param composite_object [Object] Composite object to be tested.
16
+ # @return [nil] no return on exceptions on failure
17
+ def validate(composite_object)
18
+ #Get the hash value from the composite object
19
+ target_value = composite_object.hash[@key]
20
+ target_values = (target_value.is_a?(Array)) ? target_value : [target_value]
21
+
22
+ return unless target_value
23
+
24
+ valid_views = self.find_views(composite_object)
25
+
26
+ target_values.each { |view|
27
+ view = view.to_sym
28
+ next if valid_views.include?(view)
29
+
30
+ error_message = "Invalid View: #{view}, at: #{composite_object.location}[#{@key}]."
31
+ error_message << " Valid Views(s): #{valid_views}"
32
+ self.error_messages.push(error_message)
33
+ }
34
+ end
35
+
36
+ #Need to traverse up the composite tree and find views
37
+ def find_views(composite_object)
38
+ #Using the hash instead of the method because lower nodes will get validated
39
+ #before composite is finished building
40
+ if composite_object.hash[:views].is_a?(Hash)
41
+ return composite_object.hash[:views].keys #Should be Hash with view names as the keys
42
+ elsif composite_object.parent
43
+ return self.find_views(composite_object.parent)
44
+ end
45
+
46
+ return []
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,35 @@
1
+ #Require parent class
2
+ require_relative 'composite'
3
+
4
+ require_relative 'hook_action'
5
+ require_relative 'hook_element_requirements'
6
+
7
+ module AutomationObject
8
+ module BluePrint
9
+ module HashAdapter
10
+ #Hook composite
11
+ class Hook < Composite
12
+ #Call the live? method so that it creates the needed Array of ElementRequirement interfaces
13
+ before_create :live?
14
+
15
+ #Relationships
16
+ has_one :before, interface: HookAction
17
+ has_one :after, interface: HookAction
18
+
19
+ #Validations
20
+ validates_keys allowed_keys: [:before, :live?, :after]
21
+
22
+ # @return [Array<HookElementRequirements>] array of element requirements
23
+ def live?
24
+ return @live if @live
25
+
26
+ children = self.hash[:live?]
27
+ children = (children.is_a?(Array)) ? children : Array.new
28
+
29
+ @live = self.create_array_children(:live, children, {interface: HookElementRequirements, location: self.location + '[live?]'})
30
+ return @live
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,134 @@
1
+ #Require parent class
2
+ require_relative 'composite'
3
+ require_relative 'hook_element_requirements'
4
+
5
+ module AutomationObject
6
+ module BluePrint
7
+ module HashAdapter
8
+ #Hook action composite
9
+ class HookAction < Composite
10
+ #Call the wait_for_elements method to generate the children
11
+ before_create :wait_for_elements
12
+
13
+ #Validations
14
+ validates_keys allowed_keys: [:new_screen, :show_modal, :close_screen, :change_screen,
15
+ :sleep, :wait_for_elements, :change_to_previous_screen, :close_modal, :reset_screen,
16
+ :possible_screen_changes]
17
+
18
+ validates :change_screen, instance_of: [String, Symbol], screen_presence_of: true
19
+ validates :new_screen, instance_of: [String, Symbol], screen_presence_of: true
20
+ validates :change_to_previous_screen, instance_of: TrueClass
21
+ validates :close_modal, instance_of: TrueClass
22
+ validates :close_screen, instance_of: TrueClass
23
+ validates :possible_screen_changes, instance_of: String, screen_presence_of: true
24
+ validates :reset_screen, instance_of: TrueClass
25
+ validates :show_modal, instance_of: String, modal_presence_of: true
26
+ validates :sleep, instance_of: Numeric
27
+ validates :wait_for_elements, instance_of: Array
28
+
29
+ #Get the order to run the hook in
30
+ # @return [Array<Symbol>] list of hook methods to run in given order
31
+ def hook_order
32
+ return self.hash.keys
33
+ end
34
+
35
+ #Get length of hook actions
36
+ # @return [Integer] length of hook actions
37
+ def length
38
+ return self.hash.keys.length
39
+ end
40
+
41
+ #See if hook actions are empty
42
+ # @return [Boolean] if hook actions are empty
43
+ def empty?
44
+ return !(self.hash.keys.length > 0)
45
+ end
46
+
47
+ # @return [Symbol, nil] screen to change to
48
+ def change_screen
49
+ change_screen = self.hash[:change_screen]
50
+
51
+ case change_screen
52
+ when Symbol, String
53
+ return change_screen.to_sym
54
+ else
55
+ return nil
56
+ end
57
+ end
58
+
59
+ # @return [Symbol, nil] new screen
60
+ def new_screen
61
+ new_screen = self.hash[:new_screen]
62
+
63
+ case new_screen
64
+ when Symbol, String
65
+ return new_screen.to_sym
66
+ else
67
+ return nil
68
+ end
69
+ end
70
+
71
+ # @return [Boolean]
72
+ def close_screen
73
+ return self.hash[:close_screen] ||= false
74
+ end
75
+
76
+ # @return [Boolean]
77
+ def close_modal
78
+ return self.hash[:close_modal] ||= false
79
+ end
80
+
81
+ # @return [Boolean]
82
+ def change_to_previous_screen
83
+ return self.hash[:change_to_previous_screen] ||= false
84
+ end
85
+
86
+ # @return [Symbol, nil]
87
+ def show_modal
88
+ show_modal = self.hash[:show_modal]
89
+
90
+ case show_modal
91
+ when Symbol, String
92
+ return show_modal.to_sym
93
+ else
94
+ return nil
95
+ end
96
+ end
97
+
98
+ # @return [Array]
99
+ def possible_screen_changes
100
+ if self.hash[:possible_screen_changes].is_a?(Array)
101
+ return self.hash[:possible_screen_changes].map { |value| value.to_sym }
102
+ else
103
+ return Array.new
104
+ end
105
+ end
106
+
107
+ #@return [Boolean] reset the screen?
108
+ def reset_screen
109
+ return self.hash[:reset_screen] ||= false
110
+ end
111
+
112
+ #@return [Numeric] amount of time to sleep
113
+ def sleep
114
+ return self.hash[:sleep] ||= 0
115
+ end
116
+
117
+ #Custom method for array of children instead of Hash
118
+ # @return [Array<HookElementRequirements>] array of wait for element children
119
+ def wait_for_elements
120
+ return @wait_for_elements if @wait_for_elements
121
+ wait_for_elements = self.hash[:wait_for_elements]
122
+
123
+ children = (wait_for_elements.is_a?(Array)) ? wait_for_elements : Array.new
124
+ @wait_for_elements = self.create_array_children(:wait_for_elements, children,
125
+ {interface: HookElementRequirements,
126
+ location: self.location + '[wait_for_elements]'
127
+ })
128
+
129
+ return @wait_for_elements
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,64 @@
1
+ #Require parent class
2
+ require_relative 'composite'
3
+
4
+ module AutomationObject
5
+ module BluePrint
6
+ module HashAdapter
7
+ #Hook Element Requirements-level composite
8
+ class HookElementRequirements < Composite
9
+ #Valdiations
10
+ validates :element_name, presence_of: true, instance_of: [String, Symbol], element_presence_of: true
11
+ validates :exists?, presence_of: true, instance_of: [FalseClass, TrueClass]
12
+
13
+ #Get the order to run the hook in
14
+ # @return [Array<Symbol>] list of hook methods to run in given order
15
+ def hook_order
16
+ hook_order = [:exists?] #Always put exists? first
17
+
18
+ self.hash.keys.each { |hook_name|
19
+ hook_order.push(hook_name) unless [:element_name, :exists?].include?(hook_name)
20
+ }
21
+
22
+ return hook_order
23
+ end
24
+
25
+ #Get element requirement
26
+ # @param name [Symbol] name of requested requirement
27
+ def requirement(name)
28
+ return self.hash[name] ||= nil
29
+ end
30
+
31
+ #Get name of the element
32
+ # @return [Symbol] name of element
33
+ def element_name
34
+ element_name = self.hash[:element_name]
35
+
36
+ case element_name
37
+ when Symbol, String
38
+ return element_name.to_sym
39
+ else
40
+ return nil
41
+ end
42
+ end
43
+
44
+ #Convience for getting element blueprints
45
+ # @return [AutomationObject::BluePrint::HashAdapter::Element]
46
+ def element_blueprints(composite_object = nil)
47
+ unless composite_object
48
+ composite_object = self
49
+ end
50
+
51
+ #Traverse!
52
+ if composite_object.hash[:elements].is_a?(Hash)
53
+
54
+ return composite_object.elements[self.element_name]
55
+ elsif composite_object.parent
56
+ return self.element_blueprints(composite_object.parent)
57
+ end
58
+
59
+ return nil
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end