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,31 @@
1
+ #Require parent class
2
+ require_relative 'base'
3
+
4
+ require_relative 'hook_action'
5
+ require_relative 'hook_element_requirements'
6
+
7
+ module AutomationObject
8
+ module BluePrint
9
+ module Composite
10
+ #Hook composite class, passing method to adapter only
11
+ #Hoping to improve code completion and standard interface where
12
+ #classes use this as a template to add additional adapters
13
+ class Hook < Base
14
+ # @return [HookAction]
15
+ def before
16
+ self.adapter.before
17
+ end
18
+
19
+ # @return [HookAction]
20
+ def after
21
+ self.adapter.after
22
+ end
23
+
24
+ # @return [Array<HookElementRequirements>] array of element requirements
25
+ def live?
26
+ self.adapter.live?
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,84 @@
1
+ #Require parent class
2
+ require_relative 'base'
3
+
4
+ require_relative 'hook_element_requirements'
5
+
6
+ module AutomationObject
7
+ module BluePrint
8
+ module Composite
9
+ #HookAction composite class, passing method to adapter only
10
+ #Hoping to improve code completion and standard interface where
11
+ #classes use this as a template to add additional adapters
12
+ class HookAction < Base
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
+ self.adapter.hook_order
17
+ end
18
+
19
+ #Get length of hook actions
20
+ # @return [Integer] length of hook actions
21
+ def length
22
+ self.adapter.length
23
+ end
24
+
25
+ #See if hook actions are empty
26
+ # @return [Boolean] if hook actions are empty
27
+ def empty?
28
+ self.adapter.empty?
29
+ end
30
+
31
+ # @return [Symbol, nil] screen to change to
32
+ def change_screen
33
+ self.adapter.change_screen
34
+ end
35
+
36
+ # @return [Symbol, nil] new screen
37
+ def new_screen
38
+ self.adapter.new_screen
39
+ end
40
+
41
+ # @return [Boolean]
42
+ def close_screen
43
+ self.adapter.close_screen
44
+ end
45
+
46
+ # @return [Boolean]
47
+ def close_modal
48
+ self.adapter.close_modal
49
+ end
50
+
51
+ # @return [Boolean]
52
+ def change_to_previous_screen
53
+ self.adapter.change_to_previous_screen
54
+ end
55
+
56
+ # @return [Symbol, nil]
57
+ def show_modal
58
+ self.adapter.show_modal
59
+ end
60
+
61
+ # @return [Array]
62
+ def possible_screen_changes
63
+ self.adapter.possible_screen_changes
64
+ end
65
+
66
+ #@return [Boolean] reset the screen?
67
+ def reset_screen
68
+ self.adapter.reset_screen
69
+ end
70
+
71
+ #@return [Numeric] amount of time to sleep
72
+ def sleep
73
+ self.adapter.sleep
74
+ end
75
+
76
+ #Custom method for array of children instead of Hash
77
+ # @return [Array<HookElementRequirements>] array of wait for element children
78
+ def wait_for_elements
79
+ self.adapter.wait_for_elements
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,39 @@
1
+ #Require parent class
2
+ require_relative 'base'
3
+
4
+ require_relative 'element'
5
+
6
+ module AutomationObject
7
+ module BluePrint
8
+ module Composite
9
+ #HookElementRequirements composite class, passing method to adapter only
10
+ #Hoping to improve code completion and standard interface where
11
+ #classes use this as a template to add additional adapters
12
+ class HookElementRequirements < Base
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
+ self.adapter.hook_order
17
+ end
18
+
19
+ #Get element requirement
20
+ # @param name [Symbol] name of requested requirement
21
+ def requirement(name)
22
+ self.adapter.requirement(name)
23
+ end
24
+
25
+ #Get name of the element
26
+ # @return [Symbol] name of element
27
+ def element_name
28
+ self.adapter.element_name
29
+ end
30
+
31
+ #Convience for getting element blueprints
32
+ # @return [AutomationObject::BluePrint::Composite::Element]
33
+ def element_blueprints(composite_object = nil)
34
+ self.adapter.element_blueprints(composite_object)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,56 @@
1
+ #Require parent class
2
+ require_relative 'base'
3
+
4
+ require_relative 'automatic_onload_modal'
5
+ require_relative 'hook'
6
+
7
+ require_relative 'modal'
8
+ require_relative 'element'
9
+ require_relative 'element_array'
10
+ require_relative 'element_hash'
11
+
12
+ module AutomationObject
13
+ module BluePrint
14
+ module Composite
15
+ #Modal composite class, passing method to adapter only
16
+ #Hoping to improve code completion and standard interface where
17
+ #classes use this as a template to add additional adapters
18
+ class Modal < Base
19
+ # @return [Array<Symbol>]
20
+ def included_views
21
+ self.adapter.screens
22
+ end
23
+
24
+ # @return [Array<AutomaticOnloadModal>]
25
+ def automatic_onload_modals
26
+ self.adapter.automatic_onload_modals
27
+ end
28
+
29
+ # @return [Array<Symbol>]
30
+ def automatic_screen_changes
31
+ self.adapter.automatic_screen_changes
32
+ end
33
+
34
+ # @return [Hook]
35
+ def load
36
+ self.adapter.load
37
+ end
38
+
39
+ # @return [Hash<Element>]
40
+ def elements
41
+ self.adapter.elements
42
+ end
43
+
44
+ # @return [Hash<ElementArray>]
45
+ def element_arrays
46
+ self.adapter.element_arrays
47
+ end
48
+
49
+ # @return [Hash<ElementHash>]
50
+ def element_hashes
51
+ self.adapter.element_hashes
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,61 @@
1
+ #Require parent class
2
+ require_relative 'base'
3
+
4
+ require_relative 'automatic_onload_modal'
5
+ require_relative 'hook'
6
+
7
+ require_relative 'modal'
8
+ require_relative 'element'
9
+ require_relative 'element_array'
10
+ require_relative 'element_hash'
11
+
12
+ module AutomationObject
13
+ module BluePrint
14
+ module Composite
15
+ #Screen composite class, passing method to adapter only
16
+ #Hoping to improve code completion and standard interface where
17
+ #classes use this as a template to add additional adapters
18
+ class Screen < Base
19
+ # @return [Array<Symbol>]
20
+ def included_views
21
+ self.adapter.screens
22
+ end
23
+
24
+ # @return [Array<AutomaticOnloadModal>]
25
+ def automatic_onload_modals
26
+ self.adapter.automatic_onload_modals
27
+ end
28
+
29
+ # @return [Array<Symbol>]
30
+ def automatic_screen_changes
31
+ self.adapter.automatic_screen_changes
32
+ end
33
+
34
+ # @return [Hook]
35
+ def load
36
+ self.adapter.load
37
+ end
38
+
39
+ # @return [Hash<Modal>]
40
+ def modals
41
+ self.adapter.modals
42
+ end
43
+
44
+ # @return [Hash<Element>]
45
+ def elements
46
+ self.adapter.elements
47
+ end
48
+
49
+ # @return [Hash<ElementArray>]
50
+ def element_arrays
51
+ self.adapter.element_arrays
52
+ end
53
+
54
+ # @return [Hash<ElementHash>]
55
+ def element_hashes
56
+ self.adapter.element_hashes
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,51 @@
1
+ #Require parent class
2
+ require_relative 'base'
3
+
4
+ require_relative 'screen'
5
+ require_relative 'view'
6
+
7
+ module AutomationObject
8
+ module BluePrint
9
+ module Composite
10
+ #Top composite class, passing method to adapter only
11
+ #Hoping to improve code completion and standard interface where
12
+ #classes use this as a template to add additional adapters
13
+ class Top < Base
14
+ # @return [Hash<Screen>]
15
+ def screens
16
+ self.adapter.screens
17
+ end
18
+
19
+ # @return [Hash<View>]
20
+ def views
21
+ self.adapter.views
22
+ end
23
+
24
+ # @return [String, nil] base url to navigate to upon framework creation
25
+ def base_url
26
+ self.adapter.base_url
27
+ end
28
+
29
+ # @return [Symbol, nil] default screen to be set when framework is created
30
+ def default_screen
31
+ self.adapter.default_screen
32
+ end
33
+
34
+ # @return [Numeric] sleep when transitioning screens
35
+ def screen_transition_sleep
36
+ self.adapter.screen_transition_sleep
37
+ end
38
+
39
+ # @return [Hash] driver methods to throttle
40
+ def throttle_driver_methods
41
+ self.adapter.throttle_driver_methods
42
+ end
43
+
44
+ # @return [Hash] element methods to throttle
45
+ def throttle_element_methods
46
+ self.adapter.throttle_element_methods
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,48 @@
1
+ #Require parent class
2
+ require_relative 'base'
3
+
4
+ module AutomationObject
5
+ module BluePrint
6
+ module Composite
7
+ #View composite class, passing method to adapter only
8
+ #Hoping to improve code completion and standard interface where
9
+ #classes use this as a template to add additional adapters
10
+ class View < Base
11
+ # @return [Array<AutomaticOnloadModal>]
12
+ def automatic_onload_modals
13
+ self.adapter.automatic_onload_modals
14
+ end
15
+
16
+ # @return [Array<Symbol>]
17
+ def automatic_screen_changes
18
+ self.adapter.automatic_screen_changes
19
+ end
20
+
21
+ # @return [Hook]
22
+ def load
23
+ self.adapter.load
24
+ end
25
+
26
+ # @return [Hash<Modal>]
27
+ def modals
28
+ self.adapter.modals
29
+ end
30
+
31
+ # @return [Hash<Element>]
32
+ def elements
33
+ self.adapter.elements
34
+ end
35
+
36
+ # @return [Hash<ElementArray>]
37
+ def element_arrays
38
+ self.adapter.element_arrays
39
+ end
40
+
41
+ # @return [Hash<ElementHash>]
42
+ def element_hashes
43
+ self.adapter.element_hashes
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ require_relative 'composite/top'
2
+ require_relative 'hash_adapter/top'
3
+
4
+ module AutomationObject::BluePrint
5
+ #BluePrint Hash Adapter
6
+ module HashAdapter
7
+ extend self
8
+ # @param [Hash] hash that includes all the information needed to create a BluePrint
9
+ # @return [AutomationObject::BluePrint::Composite::Top] Composite BluePrint Object
10
+ def build(hash = {})
11
+ hash.symbolize_keys_deep!
12
+
13
+ top_hash = AutomationObject::BluePrint::HashAdapter::Top.new(hash)
14
+ AutomationObject::BluePrint::Composite::Top.new(top_hash)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,35 @@
1
+ #Require parent class
2
+ require_relative 'composite'
3
+
4
+ module AutomationObject
5
+ module BluePrint
6
+ module HashAdapter
7
+ #Automatic Onload Modal Composite
8
+ class AutomaticOnloadModal < Composite
9
+ #Validations
10
+ validates :modal_name, instance_of: [String, Symbol], modal_presence_of: true, presence_of: true
11
+ validates :number_of_checks, instance_of: Numeric
12
+ validates :close, instance_of: TrueClass
13
+
14
+ def modal_name
15
+ modal_name = self.hash[:modal_name]
16
+
17
+ case modal_name
18
+ when Symbol, String
19
+ return modal_name.to_sym
20
+ else
21
+ return nil
22
+ end
23
+ end
24
+
25
+ def number_of_checks
26
+ return self.hash[:number_of_checks] ||= 1
27
+ end
28
+
29
+ def close
30
+ return self.hash[:close] ||= false
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,93 @@
1
+ require_relative '../../helpers/composite'
2
+
3
+ require_relative 'helpers/validation_helper'
4
+ require_relative 'helpers/validation_error'
5
+
6
+ module AutomationObject
7
+ module BluePrint
8
+ module HashAdapter
9
+ class Composite < AutomationObject::Composite
10
+ include ValidationHelper
11
+
12
+ attr_accessor :hash
13
+
14
+ # @param hash [Hash] hash for the composite to build of off
15
+ # @param name [Symbol] name of composite element
16
+ # @param parent [Object, nil] parent composite object
17
+ # @param location [String] string location for error/debugging purposes
18
+ def initialize(hash = {}, name = :top, parent = nil, location = 'top')
19
+ #Add hash before calling super
20
+ self.hash = (hash.is_a?(Hash)) ? hash : {}
21
+ self.hash.symbolize_keys_deep!
22
+
23
+ super(name, parent, location)
24
+
25
+ #Validate using ValidationHelper
26
+ unless self.valid?
27
+ if self.parent
28
+ self.parent.add_errors(self.errors)
29
+ else
30
+ raise ValidationError.new(self.errors.uniq.reverse)
31
+ end
32
+ end
33
+ end
34
+
35
+ # Overriding base get_child method
36
+ # @param name [Symbol] name of child
37
+ # @param options [Hash] options for child
38
+ def get_child(name, options)
39
+ child = (self.hash[name].is_a?(Hash)) ? self.hash[name] : Hash.new
40
+ child_location = self.location + "[#{name}]"
41
+
42
+ create_composite(options, child, name, child_location)
43
+ end
44
+
45
+ # Overriding base get_children method
46
+ # @param name [Symbol] name of child
47
+ # @param options [Hash] options for child
48
+ # @return children [Hash] return children and names
49
+ def get_children(name, options)
50
+ children = self.hash[name]
51
+ children = (children.is_a?(Hash)) ? children : Hash.new
52
+
53
+ self.create_hash_children(children, options)
54
+ end
55
+
56
+ # @param name [Symbol] name of child
57
+ # @param children [Array] hash of children
58
+ # @param args [Hash] arguments for adding children
59
+ def create_array_children(name, children, args)
60
+ composite_children = children.map.with_index { |child, index|
61
+ location = (args[:location]) ? args[:location] : self.location
62
+ child_location = location + "[#{index}]"
63
+
64
+ create_composite(args, child, "#{name}[#{index}]", child_location)
65
+ }
66
+
67
+ return composite_children
68
+ end
69
+
70
+ # @param children [Hash] hash of children
71
+ # @param args [Hash] arguments for adding children
72
+ def create_hash_children(children, args)
73
+ composite_children = children.inject({}) { |hash, (key, value)|
74
+ child_location = self.location + "[#{key}]"
75
+
76
+ hash[key] = create_composite(args, value, key, child_location)
77
+ hash
78
+ }
79
+
80
+ return composite_children
81
+ end
82
+
83
+ def create_composite(args, child, name, location)
84
+ #Get the Composite Class that corresponds with the HashAdapter Class
85
+ class_name = args[:interface].name.split('::').last
86
+ composite_class = AutomationObject::BluePrint::Composite.const_get(class_name)
87
+
88
+ composite_class.new(args[:interface].new(child, name, self, location))
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end