automation_object 0.5.0 → 0.5.1

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 (167) hide show
  1. checksums.yaml +4 -4
  2. data/lib/automation_object.rb +22 -11
  3. data/lib/automation_object/blue_print.rb +13 -12
  4. data/lib/automation_object/blue_print/composite/automatic_onload_modal.rb +9 -8
  5. data/lib/automation_object/blue_print/composite/base.rb +5 -4
  6. data/lib/automation_object/blue_print/composite/custom_method.rb +8 -7
  7. data/lib/automation_object/blue_print/composite/element.rb +6 -5
  8. data/lib/automation_object/blue_print/composite/element_array.rb +6 -5
  9. data/lib/automation_object/blue_print/composite/element_hash.rb +7 -6
  10. data/lib/automation_object/blue_print/composite/helpers/element_helper.rb +7 -7
  11. data/lib/automation_object/blue_print/composite/helpers/multiple_elements_helper.rb +5 -4
  12. data/lib/automation_object/blue_print/composite/hook.rb +9 -11
  13. data/lib/automation_object/blue_print/composite/hook_action.rb +25 -24
  14. data/lib/automation_object/blue_print/composite/hook_element_requirements.rb +14 -13
  15. data/lib/automation_object/blue_print/composite/modal.rb +11 -21
  16. data/lib/automation_object/blue_print/composite/screen.rb +22 -16
  17. data/lib/automation_object/blue_print/composite/top.rb +13 -12
  18. data/lib/automation_object/blue_print/composite/view.rb +27 -16
  19. data/lib/automation_object/blue_print/hash_adapter.rb +15 -11
  20. data/lib/automation_object/blue_print/hash_adapter/automatic_onload_modal.rb +12 -11
  21. data/lib/automation_object/blue_print/hash_adapter/composite.rb +28 -25
  22. data/lib/automation_object/blue_print/hash_adapter/custom_method.rb +11 -10
  23. data/lib/automation_object/blue_print/hash_adapter/element.rb +10 -9
  24. data/lib/automation_object/blue_print/hash_adapter/element_array.rb +10 -9
  25. data/lib/automation_object/blue_print/hash_adapter/element_hash.rb +11 -10
  26. data/lib/automation_object/blue_print/hash_adapter/helpers/element_helper.rb +20 -25
  27. data/lib/automation_object/blue_print/hash_adapter/helpers/multiple_elements_helper.rb +15 -14
  28. data/lib/automation_object/blue_print/hash_adapter/helpers/validation_error.rb +9 -8
  29. data/lib/automation_object/blue_print/hash_adapter/helpers/validation_helper.rb +19 -24
  30. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate.rb +8 -5
  31. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_allowed_keys.rb +7 -8
  32. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_element_presence_of.rb +28 -23
  33. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_instance_of.rb +12 -13
  34. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_modal_presence_of.rb +27 -23
  35. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_presence_of.rb +9 -8
  36. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_screen_presence_of.rb +27 -23
  37. data/lib/automation_object/blue_print/hash_adapter/helpers/validators/validate_view_presence_of.rb +25 -21
  38. data/lib/automation_object/blue_print/hash_adapter/hook.rb +14 -11
  39. data/lib/automation_object/blue_print/hash_adapter/hook_action.rb +45 -47
  40. data/lib/automation_object/blue_print/hash_adapter/hook_element_requirements.rb +24 -28
  41. data/lib/automation_object/blue_print/hash_adapter/modal.rb +14 -13
  42. data/lib/automation_object/blue_print/hash_adapter/screen.rb +23 -22
  43. data/lib/automation_object/blue_print/hash_adapter/top.rb +16 -15
  44. data/lib/automation_object/blue_print/hash_adapter/view.rb +58 -4
  45. data/lib/automation_object/blue_print/yaml_adapter.rb +33 -34
  46. data/lib/automation_object/driver.rb +15 -13
  47. data/lib/automation_object/driver/appium_adapter/driver.rb +47 -46
  48. data/lib/automation_object/driver/appium_adapter/element.rb +29 -96
  49. data/lib/automation_object/driver/base.rb +4 -2
  50. data/lib/automation_object/driver/common_selenium/driver.rb +60 -0
  51. data/lib/automation_object/driver/common_selenium/element.rb +107 -0
  52. data/lib/automation_object/driver/common_selenium/element_geometry.rb +86 -0
  53. data/lib/automation_object/driver/driver.rb +60 -30
  54. data/lib/automation_object/driver/element.rb +70 -15
  55. data/lib/automation_object/driver/nokogiri_adapter/driver.rb +88 -34
  56. data/lib/automation_object/driver/nokogiri_adapter/element.rb +94 -16
  57. data/lib/automation_object/driver/nokogiri_adapter/error.rb +29 -8
  58. data/lib/automation_object/driver/nokogiri_adapter/{backup/form.rb → form.rb} +19 -6
  59. data/lib/automation_object/driver/nokogiri_adapter/request.rb +17 -0
  60. data/lib/automation_object/driver/nokogiri_adapter/session.rb +94 -0
  61. data/lib/automation_object/driver/nokogiri_adapter/window.rb +86 -0
  62. data/lib/automation_object/driver/selenium_adapter/driver.rb +36 -45
  63. data/lib/automation_object/driver/selenium_adapter/element.rb +15 -85
  64. data/lib/automation_object/dsl.rb +11 -28
  65. data/lib/automation_object/dsl/_base.rb +70 -0
  66. data/lib/automation_object/dsl/_proxy.rb +24 -0
  67. data/lib/automation_object/dsl/element.rb +34 -0
  68. data/lib/automation_object/dsl/element_array.rb +34 -0
  69. data/lib/automation_object/dsl/element_hash.rb +34 -0
  70. data/lib/automation_object/dsl/modal.rb +43 -0
  71. data/lib/automation_object/dsl/screen.rb +45 -0
  72. data/lib/automation_object/dsl/top.rb +25 -0
  73. data/lib/automation_object/framework.rb +28 -38
  74. data/lib/automation_object/helpers/composite.rb +30 -27
  75. data/lib/automation_object/helpers/composite_hook.rb +16 -15
  76. data/lib/automation_object/{blue_print/helpers/file_helper.rb → helpers/file.rb} +12 -12
  77. data/lib/automation_object/helpers/hash.rb +6 -5
  78. data/lib/automation_object/helpers/kernel.rb +11 -0
  79. data/lib/automation_object/helpers/{reflection_helper.rb → reflection.rb} +9 -8
  80. data/lib/automation_object/helpers/string.rb +25 -15
  81. data/lib/automation_object/{proxies → proxy}/mutex_proxy.rb +18 -21
  82. data/lib/automation_object/proxy/proxy.rb +23 -0
  83. data/lib/automation_object/proxy/throttle_proxy.rb +52 -0
  84. data/lib/automation_object/state.rb +11 -29
  85. data/lib/automation_object/state/{blue_print_adapter/composite.rb → composite/_base.rb} +35 -25
  86. data/lib/automation_object/state/{blue_print_adapter/helpers/element_helper.rb → composite/_common_element.rb} +11 -11
  87. data/lib/automation_object/state/composite/element.rb +22 -0
  88. data/lib/automation_object/state/composite/element_array.rb +27 -0
  89. data/lib/automation_object/state/composite/element_hash.rb +33 -0
  90. data/lib/automation_object/state/composite/element_proxy.rb +33 -0
  91. data/lib/automation_object/state/composite/helpers/window.rb +61 -0
  92. data/lib/automation_object/state/composite/helpers/window_manager.rb +60 -0
  93. data/lib/automation_object/state/composite/hook.rb +56 -0
  94. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_action.rb +10 -8
  95. data/lib/automation_object/state/composite/hook_actions/action_loop.rb +36 -0
  96. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/change_screen.rb +7 -5
  97. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/change_to_previous_screen.rb +7 -5
  98. data/lib/automation_object/state/composite/hook_actions/close_modal.rb +29 -0
  99. data/lib/automation_object/state/composite/hook_actions/close_screen.rb +19 -0
  100. data/lib/automation_object/state/composite/hook_actions/element_requirement.rb +32 -0
  101. data/lib/automation_object/state/composite/hook_actions/new_screen.rb +35 -0
  102. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/possible_screen_changes.rb +8 -7
  103. data/lib/automation_object/state/composite/hook_actions/reset_screen.rb +14 -0
  104. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/show_modal.rb +7 -5
  105. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/sleep.rb +4 -2
  106. data/lib/automation_object/state/{blue_print_adapter → composite}/hook_actions/wait_for_elements.rb +7 -5
  107. data/lib/automation_object/state/composite/modal.rb +45 -0
  108. data/lib/automation_object/state/composite/screen.rb +58 -0
  109. data/lib/automation_object/state/composite/top.rb +51 -0
  110. data/lib/automation_object/state/error.rb +45 -6
  111. data/lib/automation_object/state/session.rb +25 -23
  112. data/lib/automation_object/step_definitions.rb +5 -3
  113. data/lib/automation_object/step_definitions/element.rb +77 -0
  114. data/lib/automation_object/step_definitions/element_array.rb +135 -0
  115. data/lib/automation_object/step_definitions/element_hash.rb +126 -0
  116. data/lib/automation_object/step_definitions/screen.rb +62 -0
  117. data/lib/automation_object/step_definitions/{cache.rb → support/cache.rb} +8 -6
  118. data/lib/automation_object/step_definitions/support/element_array.rb +40 -0
  119. data/lib/automation_object/step_definitions/support/element_hash.rb +41 -0
  120. data/lib/automation_object/step_definitions/{parse.rb → support/parse.rb} +8 -6
  121. data/lib/automation_object/version.rb +2 -1
  122. metadata +203 -103
  123. data/lib/automation_object/driver/helpers/selenium_driver_helper.rb +0 -41
  124. data/lib/automation_object/driver/helpers/selenium_element_helper.rb +0 -138
  125. data/lib/automation_object/driver/nokogiri_adapter/backup/driver.rb +0 -83
  126. data/lib/automation_object/driver/nokogiri_adapter/backup/element.rb +0 -66
  127. data/lib/automation_object/driver/nokogiri_adapter/backup/helpers/driver_element_helper.rb +0 -52
  128. data/lib/automation_object/driver/nokogiri_adapter/backup/session.rb +0 -115
  129. data/lib/automation_object/dsl/blue_print_adapter.rb +0 -16
  130. data/lib/automation_object/dsl/blue_print_adapter/composite.rb +0 -54
  131. data/lib/automation_object/dsl/blue_print_adapter/element.rb +0 -14
  132. data/lib/automation_object/dsl/blue_print_adapter/element_array.rb +0 -14
  133. data/lib/automation_object/dsl/blue_print_adapter/element_hash.rb +0 -14
  134. data/lib/automation_object/dsl/blue_print_adapter/modal.rb +0 -23
  135. data/lib/automation_object/dsl/blue_print_adapter/screen.rb +0 -26
  136. data/lib/automation_object/dsl/blue_print_adapter/top.rb +0 -19
  137. data/lib/automation_object/dsl/models.rb +0 -18
  138. data/lib/automation_object/dsl/proxies/element.rb +0 -16
  139. data/lib/automation_object/dsl/proxies/element_array.rb +0 -16
  140. data/lib/automation_object/dsl/proxies/element_hash.rb +0 -16
  141. data/lib/automation_object/dsl/proxies/helpers/composite_helper.rb +0 -74
  142. data/lib/automation_object/dsl/proxies/modal.rb +0 -17
  143. data/lib/automation_object/dsl/proxies/screen.rb +0 -17
  144. data/lib/automation_object/dsl/proxies/top.rb +0 -17
  145. data/lib/automation_object/proxies/proxy.rb +0 -20
  146. data/lib/automation_object/proxies/throttle_proxy.rb +0 -57
  147. data/lib/automation_object/state/blue_print_adapter.rb +0 -16
  148. data/lib/automation_object/state/blue_print_adapter/element.rb +0 -20
  149. data/lib/automation_object/state/blue_print_adapter/element_array.rb +0 -25
  150. data/lib/automation_object/state/blue_print_adapter/element_hash.rb +0 -31
  151. data/lib/automation_object/state/blue_print_adapter/element_proxy.rb +0 -28
  152. data/lib/automation_object/state/blue_print_adapter/helpers/screen_manager.rb +0 -137
  153. data/lib/automation_object/state/blue_print_adapter/helpers/window.rb +0 -39
  154. data/lib/automation_object/state/blue_print_adapter/hook.rb +0 -56
  155. data/lib/automation_object/state/blue_print_adapter/hook_actions/action_loop.rb +0 -35
  156. data/lib/automation_object/state/blue_print_adapter/hook_actions/close_modal.rb +0 -31
  157. data/lib/automation_object/state/blue_print_adapter/hook_actions/close_screen.rb +0 -19
  158. data/lib/automation_object/state/blue_print_adapter/hook_actions/element_requirement.rb +0 -34
  159. data/lib/automation_object/state/blue_print_adapter/hook_actions/new_screen.rb +0 -37
  160. data/lib/automation_object/state/blue_print_adapter/hook_actions/reset_screen.rb +0 -18
  161. data/lib/automation_object/state/blue_print_adapter/modal.rb +0 -26
  162. data/lib/automation_object/state/blue_print_adapter/screen.rb +0 -32
  163. data/lib/automation_object/state/blue_print_adapter/top.rb +0 -45
  164. data/lib/automation_object/step_definitions/action.rb +0 -21
  165. data/lib/automation_object/step_definitions/element/actions.rb +0 -87
  166. data/lib/automation_object/step_definitions/element/regex.rb +0 -24
  167. data/lib/automation_object/step_definitions/element/steps.rb +0 -67
@@ -1,80 +1,17 @@
1
- require_relative '../helpers/selenium_element_helper'
1
+ # frozen_string_literal: true
2
+ require_relative '../common_selenium/element'
2
3
 
3
4
  module AutomationObject
4
5
  module Driver
5
6
  module SeleniumAdapter
6
- #Element proxy for Selenium
7
- #Conform Selenium element interface to what's expected of the Driver Port
8
- class Element < AutomationObject::Proxies::Proxy
9
- include AutomationObject::Driver::SeleniumElementHelper
7
+ # Element proxy for Selenium
8
+ # Conform Selenium element interface to what's expected of the Driver Port
9
+ class Element < AutomationObject::Proxy::Proxy
10
+ include AutomationObject::Driver::CommonSelenium::Element
10
11
 
11
- def initialize(args)
12
- @driver = args.fetch :driver
13
- @subject = args.fetch :element
14
- end
15
-
16
- # Set or Get attribute
17
- # @param key [String] key of element
18
- # @param value [String, nil] set value or leave blank
19
- # @return [String, nil]
20
- def attribute(key, value = nil)
21
- @subject.attribute(key, value)
22
- end
23
-
24
- # @return [String] id of element
25
- def id
26
- @subject.id
27
- end
28
-
29
- # @return [String] href of element
30
- def href
31
- @subject.attribute('href')
32
- end
33
-
34
- # Text of element
35
- # @return [String, nil]
36
- def text
37
- @subject.text
38
- end
39
-
40
- # Type into an element
41
- # @return [void]
42
- def send_keys(string)
43
- @subject.send_keys(string)
44
- end
45
-
46
- # Clear the element field
47
- # @return [void]
48
- def clear
49
- @subject.clear
50
- end
51
-
52
- # @return [Boolean]
53
- def visible?
54
- @subject.displayed?
55
- end
56
-
57
- # @return [Boolean]
58
- def invisible?
59
- !@subject.displayed?
60
- end
61
-
62
- # Get the location
63
- # @return [Point]
64
- def location
65
- @subject.location
66
- end
67
-
68
- # Get the size of an element
69
- # @return [Dimension]
70
- def size
71
- @subject.size
72
- end
73
-
74
- # Perform a submit action on an element
75
- # @return [void]
76
- def submit
77
- @subject.submit
12
+ def initialize(driver, element)
13
+ @driver = driver
14
+ @subject = element
78
15
  end
79
16
 
80
17
  # Scroll the element into view
@@ -82,35 +19,28 @@ module AutomationObject
82
19
  def scroll_into_view
83
20
  @subject.location_once_scrolled_into_view
84
21
 
85
- element_location = self.location
22
+ element_location = location
86
23
  scroll_position = @driver.scroll_position
87
24
 
88
- middle_y_bounds = scroll_position[:y] + @driver.inner_window_height/2
25
+ middle_y_bounds = scroll_position[:y] + @driver.inner_window_height / 2
89
26
 
90
27
  if middle_y_bounds > element_location.y
91
- #Add
28
+ # Add
92
29
  y_difference = middle_y_bounds - element_location.y
93
30
  scroll_y_position = scroll_position[:y] - y_difference
94
31
  else
95
- #Subtract
32
+ # Subtract
96
33
  y_difference = element_location.y - middle_y_bounds
97
34
  scroll_y_position = scroll_position[:y] + y_difference
98
35
  end
99
36
 
100
- #Get the element to halfway
37
+ # Get the element to halfway
101
38
  scroll_x_position = element_location.x.to_f
102
39
 
103
40
  javascript_string = "return window.scroll(#{scroll_x_position}, #{scroll_y_position});"
104
41
  @driver.execute_script(javascript_string)
105
42
  end
106
-
107
- # Perform a click action on the element
108
- # @return [void]
109
- def click
110
- self.scroll_into_view
111
- @subject.click
112
- end
113
43
  end
114
44
  end
115
45
  end
116
- end
46
+ end
@@ -1,33 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'dsl/top'
3
+
1
4
  module AutomationObject
2
- #Dsl Port
5
+ # Dsl Port
3
6
  module Dsl
4
- extend self
5
-
6
- # @return [AutomationObject::Dsl::Module]
7
- def adapter
8
- return @adapter if @adapter
9
- self.adapter = :blue_print
10
- @adapter
11
- end
12
-
13
- # Sets adapter const will append _adapter if needed
14
- # @param adapter_name [String] name of adapter wanted for composite creation
15
- def adapter=(adapter_name)
16
- adapter_name = adapter_name.to_s
17
- adapter_name << '_adapter' unless adapter_name.match(/_adapter$/)
18
- adapter_const = adapter_name.pascalize
19
-
20
- require_relative "dsl/#{adapter_name}"
21
- @adapter = AutomationObject::Dsl.const_get("#{adapter_const}")
22
- end
23
-
24
- # Creates/returns composite and attaches the State to the composite
25
- # @return [AutomationObject::Dsl::Models::Top]
26
- def new(args={})
27
- composite = self.adapter.build(args)
28
- composite.state = args.fetch(:state)
7
+ module_function
29
8
 
30
- return composite
9
+ # @param [AutomationObject::BluePrint::Composite::Top] blue_prints
10
+ # @param [AutomationObject::State::Session] state
11
+ # @return [AutomationObject::Dsl::Top]
12
+ def create(blue_prints, state)
13
+ TopProxy.new(blue_prints, state, :top)
31
14
  end
32
15
  end
33
- end
16
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AutomationObject
4
+ module Dsl
5
+ # Base DSL Object
6
+ class Base < OpenStruct
7
+ # @param [AutomationObject::BluePrint::Composite::] blue_prints
8
+ # @param [AutomationObject::State::Session] state
9
+ def initialize(blue_prints, state)
10
+ ostruct_hash = {}
11
+
12
+ # Add attributes the call super
13
+ self.class.has_many_relationships.each do |name, composite_class|
14
+ blue_prints.send(name).each do |child_key, child_blue_prints|
15
+ ostruct_hash[child_key] = composite_class.new(child_blue_prints, state, child_key)
16
+ end
17
+ end
18
+
19
+ super ostruct_hash
20
+ end
21
+
22
+ # @param _indent [Integer]
23
+ # @return [String]
24
+ def inspect(_indent = 5)
25
+ string = self.class.to_s
26
+
27
+ to_h.each do |key, value|
28
+ string += formatted_name(key, _indent)
29
+ string += sub_inspect(value, _indent)
30
+ end
31
+
32
+ string
33
+ end
34
+
35
+ # @param key [String]
36
+ # @param indent [Integer]
37
+ # @return [String]
38
+ def formatted_name(key, indent)
39
+ # TODO: finish
40
+ # color = self[key].alive? ? :green : :blue
41
+ "\n#{' ' * indent} #{key}:".colorize(:green)
42
+ end
43
+
44
+ # @param value [Object]
45
+ # @param indent [Integer]
46
+ # @return [String]
47
+ def sub_inspect(value, indent)
48
+ if value.is_a?(Base)
49
+ " #{value.inspect(indent + 10)}"
50
+ else
51
+ " #{value.inspect}"
52
+ end
53
+ end
54
+
55
+ class << self
56
+ # Has many children relationship for the composite
57
+ # @param children_name [Symbol] name of the children, should be a BluePrint method
58
+ # @param composite_class [Class] interface
59
+ def has_many(children_name, composite_class)
60
+ has_many_relationships[children_name] = composite_class
61
+ end
62
+
63
+ # @return [Hash] relationships for the composite
64
+ def has_many_relationships
65
+ @has_many_relationships ||= {}
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ require_relative '../proxy/proxy'
3
+
4
+ module AutomationObject
5
+ module Dsl
6
+ # Base Proxy Object
7
+ # Proxies intercept commands and issue calls to the state
8
+ # Prevents inspection from picking up internal methods
9
+ class Proxy < AutomationObject::Proxy::Proxy
10
+ # @param subject_class [AutomationObject::Dsl::CompositeBase, nil]
11
+ # @param blue_prints [AutomationObject::BluePrint::Composite::CompositeBase]
12
+ # @param state [AutomationObject::State::Session]
13
+ # @param name [Symbol]
14
+ def initialize(subject_class, blue_prints, state, name)
15
+ @blue_prints = blue_prints
16
+ @state = state
17
+ @name = name
18
+ @subject_class = subject_class
19
+
20
+ @subject = @subject_class.new(blue_prints, state)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_proxy'
3
+
4
+ module AutomationObject
5
+ module Dsl
6
+ # Element DSL Class
7
+ class Element < Base
8
+ end
9
+
10
+ # Proxy for Element
11
+ class ElementProxy < Proxy
12
+ # @param [AutomationObject::BluePrint::Composite::Element] blue_prints
13
+ # @param [AutomationObject::State::Session] state
14
+ # @param [Symbol] name
15
+ def initialize(blue_prints, state, name)
16
+ super Element, blue_prints, state, name
17
+ end
18
+
19
+ # @param [Symbol] method
20
+ # @param [Array, nil] args
21
+ # @param [Proc] block
22
+ def method_missing(method, *args, &block)
23
+ return super if Element.methods.include?(method)
24
+
25
+ if @subject.is_a?(AutomationObject::Dsl::Element)
26
+ # puts "@state.load(:element, #{@name})"
27
+ @subject = @state.load(:element, @name)
28
+ end
29
+
30
+ super
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_proxy'
3
+
4
+ module AutomationObject
5
+ module Dsl
6
+ # ElementArray DSL Class
7
+ class ElementArray < Base
8
+ end
9
+
10
+ # Proxy for ElementArray
11
+ class ElementArrayProxy < Proxy
12
+ # @param [AutomationObject::BluePrint::Composite::ElementArray] blue_prints
13
+ # @param [AutomationObject::State::Session] state
14
+ # @param [Symbol] name
15
+ def initialize(blue_prints, state, name)
16
+ super ElementArray, blue_prints, state, name
17
+ end
18
+
19
+ # @param [Symbol] method
20
+ # @param [Array, nil] args
21
+ # @param [Proc] block
22
+ def method_missing(method, *args, &block)
23
+ return super if ElementArray.methods.include?(method)
24
+
25
+ if @subject.is_a?(AutomationObject::Dsl::ElementArray)
26
+ # puts "@state.load(:element_array, #{@name})"
27
+ @subject = @state.load(:element_array, @name)
28
+ end
29
+
30
+ super
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_proxy'
3
+
4
+ module AutomationObject
5
+ module Dsl
6
+ # ElementHash DSL Class
7
+ class ElementHash < Base
8
+ end
9
+
10
+ # Proxy for ElementHash
11
+ class ElementHashProxy < Proxy
12
+ # @param [AutomationObject::BluePrint::Composite::ElementHash] blue_prints
13
+ # @param [AutomationObject::State::Session] state
14
+ # @param [Symbol] name
15
+ def initialize(blue_prints, state, name)
16
+ super ElementHash, blue_prints, state, name
17
+ end
18
+
19
+ # @param [Symbol] method
20
+ # @param [Array, nil] args
21
+ # @param [Proc] block
22
+ def method_missing(method, *args, &block)
23
+ return super if ElementHash.methods.include?(method)
24
+
25
+ if @subject.is_a?(AutomationObject::Dsl::ElementHash)
26
+ # puts "@state.load(:element_hash, #{@name})"
27
+ @subject = @state.load(:element_hash, @name)
28
+ end
29
+
30
+ super
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_base'
3
+ require_relative '_proxy'
4
+
5
+ require_relative 'element'
6
+ require_relative 'element_array'
7
+ require_relative 'element_hash'
8
+
9
+ module AutomationObject
10
+ module Dsl
11
+ # Modal DSL Class
12
+ class Modal < Base
13
+ has_many :elements, ElementProxy
14
+ has_many :element_arrays, ElementArrayProxy
15
+ has_many :element_hashes, ElementHashProxy
16
+ end
17
+
18
+ # Proxy for Modal
19
+ class ModalProxy < Proxy
20
+ # @param [AutomationObject::BluePrint::Composite::Modal] blue_prints
21
+ # @param [AutomationObject::State::Session] state
22
+ # @param [Symbol] name
23
+ def initialize(blue_prints, state, name)
24
+ super Modal, blue_prints, state, name
25
+ end
26
+
27
+ # @param [Symbol] method
28
+ # @param [Array, nil] args
29
+ # @param [Proc] block
30
+ def method_missing(method, *args, &block)
31
+ return super if Modal.methods.include?(method)
32
+
33
+ # Attempt to load screen if composite object contains that child
34
+ if @subject.methods.include?(method)
35
+ # puts "@state.load(:modal, #{@name})"
36
+ @state.load(:modal, @name)
37
+ end
38
+
39
+ super
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_base'
3
+ require_relative '_proxy'
4
+
5
+ require_relative 'modal'
6
+ require_relative 'element'
7
+ require_relative 'element_array'
8
+ require_relative 'element_hash'
9
+
10
+ module AutomationObject
11
+ module Dsl
12
+ # Screen DSL Class
13
+ class Screen < Base
14
+ has_many :modals, ModalProxy
15
+ has_many :elements, ElementProxy
16
+ has_many :element_arrays, ElementArrayProxy
17
+ has_many :element_hashes, ElementHashProxy
18
+ end
19
+
20
+ # Proxy for Screen
21
+ class ScreenProxy < Proxy
22
+ # @param [AutomationObject::BluePrint::Composite::Screen] blue_prints
23
+ # @param [AutomationObject::State::Session] state
24
+ # @param [Symbol] name
25
+ def initialize(blue_prints, state, name)
26
+ super Screen, blue_prints, state, name
27
+ end
28
+
29
+ # @param [Symbol] method
30
+ # @param [Array, nil] args
31
+ # @param [Proc] block
32
+ def method_missing(method, *args, &block)
33
+ return super if Screen.methods.include?(method)
34
+
35
+ # Attempt to load screen if composite object contains that child
36
+ if @subject.methods.include?(method)
37
+ # puts "@state.load(:screen, #{@name})"
38
+ @state.load(:screen, @name)
39
+ end
40
+
41
+ super
42
+ end
43
+ end
44
+ end
45
+ end