automation_object 0.0.4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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