automation_object 0.6.0 → 0.7.5

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/automation_object/blue_print/hash_adapter/hook_action.rb +1 -1
  3. data/lib/automation_object/driver/appium_adapter/driver.rb +17 -1
  4. data/lib/automation_object/driver/driver.rb +7 -1
  5. data/lib/automation_object/driver/nokogiri_adapter/driver.rb +6 -0
  6. data/lib/automation_object/driver/selenium_adapter/driver.rb +16 -1
  7. data/lib/automation_object/dsl/_base.rb +6 -3
  8. data/lib/automation_object/dsl/_proxy.rb +2 -2
  9. data/lib/automation_object/dsl/element.rb +9 -3
  10. data/lib/automation_object/dsl/element_array.rb +9 -3
  11. data/lib/automation_object/dsl/element_hash.rb +9 -3
  12. data/lib/automation_object/dsl/modal.rb +9 -6
  13. data/lib/automation_object/dsl/screen.rb +5 -7
  14. data/lib/automation_object/dsl/top.rb +7 -3
  15. data/lib/automation_object/state/_base.rb +72 -0
  16. data/lib/automation_object/state/_common_element.rb +44 -0
  17. data/lib/automation_object/state/{error.rb → _error.rb} +4 -0
  18. data/lib/automation_object/state/element.rb +23 -0
  19. data/lib/automation_object/state/element_array.rb +26 -0
  20. data/lib/automation_object/state/element_hash.rb +34 -0
  21. data/lib/automation_object/state/element_proxy.rb +31 -0
  22. data/lib/automation_object/state/hook.rb +51 -0
  23. data/lib/automation_object/state/{composite/hook_action.rb → hook_action.rb} +11 -13
  24. data/lib/automation_object/state/hook_actions/action_loop.rb +43 -0
  25. data/lib/automation_object/state/hook_actions/change_screen.rb +23 -0
  26. data/lib/automation_object/state/hook_actions/change_to_previous_screen.rb +23 -0
  27. data/lib/automation_object/state/hook_actions/close_modal.rb +21 -0
  28. data/lib/automation_object/state/hook_actions/close_screen.rb +20 -0
  29. data/lib/automation_object/state/hook_actions/element_requirement.rb +30 -0
  30. data/lib/automation_object/state/hook_actions/new_screen.rb +49 -0
  31. data/lib/automation_object/state/hook_actions/possible_screen_changes.rb +23 -0
  32. data/lib/automation_object/state/{composite/hook_actions → hook_actions}/reset_screen.rb +4 -5
  33. data/lib/automation_object/state/hook_actions/show_modal.rb +18 -0
  34. data/lib/automation_object/state/hook_actions/sleep.rb +13 -0
  35. data/lib/automation_object/state/hook_actions/wait_for_elements.rb +18 -0
  36. data/lib/automation_object/state/modal.rb +47 -0
  37. data/lib/automation_object/state/screen.rb +70 -0
  38. data/lib/automation_object/state/top.rb +43 -0
  39. data/lib/automation_object/state.rb +3 -3
  40. data/lib/automation_object/version.rb +1 -1
  41. metadata +40 -43
  42. data/lib/automation_object/state/composite/_base.rb +0 -81
  43. data/lib/automation_object/state/composite/_common_element.rb +0 -38
  44. data/lib/automation_object/state/composite/element.rb +0 -24
  45. data/lib/automation_object/state/composite/element_array.rb +0 -27
  46. data/lib/automation_object/state/composite/element_hash.rb +0 -35
  47. data/lib/automation_object/state/composite/element_proxy.rb +0 -33
  48. data/lib/automation_object/state/composite/helpers/window.rb +0 -79
  49. data/lib/automation_object/state/composite/helpers/window_manager.rb +0 -59
  50. data/lib/automation_object/state/composite/hook.rb +0 -55
  51. data/lib/automation_object/state/composite/hook_actions/action_loop.rb +0 -45
  52. data/lib/automation_object/state/composite/hook_actions/change_screen.rb +0 -23
  53. data/lib/automation_object/state/composite/hook_actions/change_to_previous_screen.rb +0 -23
  54. data/lib/automation_object/state/composite/hook_actions/close_modal.rb +0 -29
  55. data/lib/automation_object/state/composite/hook_actions/close_screen.rb +0 -19
  56. data/lib/automation_object/state/composite/hook_actions/element_requirement.rb +0 -32
  57. data/lib/automation_object/state/composite/hook_actions/new_screen.rb +0 -31
  58. data/lib/automation_object/state/composite/hook_actions/possible_screen_changes.rb +0 -22
  59. data/lib/automation_object/state/composite/hook_actions/show_modal.rb +0 -23
  60. data/lib/automation_object/state/composite/hook_actions/sleep.rb +0 -15
  61. data/lib/automation_object/state/composite/hook_actions/wait_for_elements.rb +0 -20
  62. data/lib/automation_object/state/composite/modal.rb +0 -45
  63. data/lib/automation_object/state/composite/screen.rb +0 -64
  64. data/lib/automation_object/state/composite/top.rb +0 -51
  65. data/lib/automation_object/state/session.rb +0 -54
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'action_loop'
3
- require_relative '../../error'
4
-
5
- module AutomationObject
6
- module State
7
- module Composite
8
- # Close modal hook loop
9
- class CloseModal < ActionLoop
10
- def single_run
11
- return false unless driver.document_complete?
12
-
13
- raise ModalParentExpected unless composite.parent.is_a?(Modal)
14
-
15
- modal = composite.parent
16
- modal.active = modal.live?
17
-
18
- return false unless modal.active?
19
-
20
- composite.screen.modal = nil
21
- composite.screen.current_modal = nil
22
- composite.top.destroy_modal
23
-
24
- true
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'action_loop'
3
- require_relative '../../error'
4
-
5
- module AutomationObject
6
- module State
7
- module Composite
8
- # Close screen hook loop
9
- class CloseScreen < ActionLoop
10
- def single_run
11
- raise ScreenParentExpected unless composite.screen
12
-
13
- screen_name = composite.screen.name
14
- composite.top.window_closed?(screen_name)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'action_loop'
3
-
4
- module AutomationObject
5
- module State
6
- module Composite
7
- # Element requirement hook loop
8
- class ElementRequirement < ActionLoop
9
- def element
10
- @element ||= driver.find_element(*blue_prints.element_blueprints.selector_params)
11
- end
12
-
13
- def single_run
14
- blue_prints.hook_order.each do |requirement_name|
15
- next if blue_prints.requirement(requirement_name).nil?
16
-
17
- requirement_value = blue_prints.requirement(requirement_name)
18
-
19
- case requirement_name
20
- when :exists?
21
- return false if requirement_value != driver.exists?(*blue_prints.element_blueprints.selector_params)
22
- else
23
- return false if requirement_value != element.send(requirement_name)
24
- end
25
- end
26
-
27
- true
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'action_loop'
3
- require_relative '../../error'
4
-
5
- module AutomationObject
6
- module State
7
- module Composite
8
- # New screen hook loop
9
- class NewScreen < ActionLoop
10
- def single_run
11
- new_screen_name = blue_prints
12
- new_screen = composite.top.screens[new_screen_name]
13
-
14
- stored_window_handles = composite.top.window_handles
15
- driver_handles = driver.window_handles
16
-
17
- return false if driver_handles.length <= stored_window_handles.length
18
-
19
- raise MoreThenOneScreenCreated if (driver_handles.length - stored_window_handles.length) > 1
20
-
21
- composite.top.create_screen(new_screen_name)
22
- composite.top.use_screen(new_screen_name)
23
-
24
- return false unless driver.document_complete?
25
-
26
- new_screen.load.live?
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'action_loop'
3
-
4
- module AutomationObject
5
- module State
6
- module Composite
7
- # Possible screen changes hook loop
8
- class PossibleScreenChanges < ActionLoop
9
- def single_run
10
- blue_prints.each do |possible_screen_name|
11
- if possible_screen_name.load.live? != false
12
- composite.top.window.update(possible_screen_name)
13
- return true
14
- end
15
- end
16
-
17
- false
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'action_loop'
3
-
4
- module AutomationObject
5
- module State
6
- module Composite
7
- # Show modal hook loop
8
- class ShowModal < ActionLoop
9
- def single_run
10
- new_modal = composite.screen.modals[blue_prints]
11
-
12
- if new_modal.load.live? != false
13
- composite.screen.current_modal = blue_prints
14
- composite.screen.modal = new_modal
15
- return true
16
- else
17
- return false
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'action_loop'
3
-
4
- module AutomationObject
5
- module State
6
- module Composite
7
- # Sleep hook loop
8
- class Sleep < ActionLoop
9
- def single_run
10
- sleep(blue_prints)
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'action_loop'
3
-
4
- module AutomationObject
5
- module State
6
- module Composite
7
- # Wait for elements hook loop
8
- class WaitForElements < ActionLoop
9
- def single_run
10
- blue_prints.each do |hook_element_requirement|
11
- hook_element_requirement = ElementRequirement.new(driver, hook_element_requirement, 1)
12
- return false unless hook_element_requirement.run
13
- end
14
-
15
- true
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative '_base'
3
- require_relative '../error'
4
-
5
- require_relative 'element'
6
- require_relative 'element_array'
7
- require_relative 'element_hash'
8
-
9
- module AutomationObject
10
- module State
11
- module Composite
12
- # Modal composite for managing state
13
- class Modal < Base
14
- has_one :load, interface: Hook
15
-
16
- has_many :elements, interface: Element
17
- has_many :element_arrays, interface: ElementArray
18
- has_many :element_hashes, interface: ElementHash
19
-
20
- def get(type, name)
21
- case type
22
- when :element
23
- elements[name].load
24
- when :element_array
25
- element_arrays[name].load
26
- when :element_hash
27
- element_hashes[name].load
28
- else
29
- raise AutomationObject::State::UndefinedLoadTypeError
30
- end
31
- end
32
-
33
- # Whether or not modal is active
34
- # @return [Boolean]
35
- attr_accessor :active
36
-
37
- undef :active if defined? :active
38
- # @return [Boolean] screen is active or not
39
- def active
40
- @active ||= false
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative '_base'
3
- require_relative '../error'
4
-
5
- require_relative 'modal'
6
- require_relative 'hook'
7
- require_relative 'element'
8
- require_relative 'element_array'
9
- require_relative 'element_hash'
10
-
11
- module AutomationObject
12
- module State
13
- module Composite
14
- # Screen composite for managing state
15
- class Screen < Base
16
- attr_accessor :modal
17
-
18
- has_one :load, interface: Hook
19
-
20
- # Children for this composite
21
- has_many :modals, interface: Modal
22
-
23
- has_many :elements, interface: Element
24
- has_many :element_arrays, interface: ElementArray
25
- has_many :element_hashes, interface: ElementHash
26
-
27
- def use(name)
28
- self.modal = name
29
- end
30
-
31
- def get(type, name)
32
- return modals[modal].get(type, name) if modal
33
-
34
- case type
35
- when :element
36
- return elements[name].load
37
- when :element_array
38
- return element_arrays[name].load
39
- when :element_hash
40
- return element_hashes[name].load
41
- else
42
- raise AutomationObject::State::UndefinedLoadTypeError
43
- end
44
- end
45
-
46
- def reset
47
- elements.values.map(&:reset)
48
- element_arrays.values.map(&:reset)
49
- element_hashes.values.map(&:reset)
50
- end
51
-
52
- # Whether or not modal is active
53
- # @return [Boolean]
54
- attr_accessor :active
55
-
56
- undef :active if defined? :active
57
- # @return [Boolean] screen is active or not
58
- def active
59
- @active ||= false
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative '../error'
3
-
4
- require_relative '_base'
5
- require_relative 'screen'
6
-
7
- require_relative 'helpers/window_manager'
8
-
9
- module AutomationObject
10
- module State
11
- module Composite
12
- # Top composite for managing state
13
- class Top < Base
14
- include WindowManager
15
-
16
- # Children for this composite
17
- has_many :screens, interface: Screen
18
-
19
- def initialize(*args)
20
- super(*args)
21
-
22
- driver.get(blue_prints.base_url) if blue_prints.base_url
23
- new_window(initial_screen)
24
- end
25
-
26
- def current_screen
27
- screens[window.name]
28
- end
29
-
30
- # Get the initial screen
31
- # @raise [AutomationObject::State::NoInitialScreenError] if no initial screen
32
- # @return [Symbol] screen name
33
- def initial_screen
34
- # If default screen then check if its live and set it
35
- if blue_prints.default_screen
36
- default_name = blue_prints.default_screen
37
- return default_name if screens[default_name].load.live? != false
38
-
39
- raise AutomationObject::State::NoInitialScreenError
40
- end
41
-
42
- screens.each do |screen_name, screen|
43
- return screen_name if screen.load.live?
44
- end
45
-
46
- raise AutomationObject::State::NoInitialScreenError
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'error'
3
-
4
- require_relative 'composite/top'
5
-
6
- module AutomationObject
7
- module State
8
- # Session manages the DSL state
9
- class Session
10
- # @return [AutomationObject::Driver::Driver]
11
- attr_accessor :driver
12
-
13
- # @return [AutomationObject::BluePrint::Composite::Top]
14
- attr_accessor :blue_prints
15
-
16
- # @return [AutomationObject::State::Composite::Top]
17
- attr_accessor :composite
18
-
19
- # @param [AutomationObject::Driver::Driver] driver
20
- # @param [AutomationObject::BluePrint::Composite::Top] blue_prints
21
- def initialize(driver, blue_prints)
22
- self.driver = driver
23
- self.composite = Composite::Top.new(self, driver, blue_prints)
24
- end
25
-
26
- # @param type [Symbol]
27
- # @param name [Symbol]
28
- def load(type, name)
29
- case type
30
- when :screen
31
- composite.use(name)
32
- when :modal
33
- composite.current_screen.use(name)
34
- when :element, :element_array, :element_hash
35
- return composite.current_screen.get(type, name)
36
- else
37
- raise AutomationObject::State::UndefinedLoadTypeError
38
- end
39
- end
40
-
41
- # @param type [Symbol]
42
- # @param name [Symbol]
43
- # @return [Boolean]
44
- def active?(type, name)
45
- case type
46
- when :screen
47
- composite.live_screens.include?(name)
48
- else
49
- raise AutomationObject::State::UndefinedLoadTypeError
50
- end
51
- end
52
- end
53
- end
54
- end