automation_object 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ require_relative '_base'
3
+ require_relative '_proxy'
4
+
5
+ require_relative 'screen'
6
+
7
+ module AutomationObject
8
+ module Dsl
9
+ # Top DSL Class
10
+ class Top < Base
11
+ has_many :screens, ScreenProxy
12
+ end
13
+
14
+ # Proxy for Top Composite
15
+ # Use proxy for methods trying to do a @state call
16
+ class TopProxy < Proxy
17
+ # @param [AutomationObject::BluePrint::Composite::Top] blue_prints
18
+ # @param [AutomationObject::State::Session] state
19
+ # @param [Symbol] name
20
+ def initialize(blue_prints, state, name)
21
+ super Top, blue_prints, state, name
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,13 +1,14 @@
1
- require_relative 'proxies/proxy'
1
+ # frozen_string_literal: true
2
+ require_relative 'proxy/proxy'
2
3
  require_relative 'blue_print'
3
4
  require_relative 'driver'
4
5
  require_relative 'dsl'
5
6
  require_relative 'state'
6
7
 
7
8
  module AutomationObject
8
- #Framework class, the core
9
- #A Proxy class that will become the DSL Framework
10
- class Framework < Proxies::Proxy
9
+ # Framework class, the core
10
+ # A Proxy class that will become the DSL Framework
11
+ class Framework < Proxy::Proxy
11
12
  # @return [AutomationObject::BluePrint::Composite::Top]
12
13
  attr_accessor :blue_prints
13
14
 
@@ -28,60 +29,49 @@ module AutomationObject
28
29
  self.driver = driver
29
30
  self.blue_prints = blue_prints
30
31
 
31
- #Create the DSL
32
- #Should create all subsequent needed object
33
- @subject = self.dsl
32
+ self.state = State.create(self.driver, self.blue_prints)
33
+ @subject = Dsl.create(self.blue_prints, state)
34
34
 
35
35
  AutomationObject::Framework.singleton = self
36
36
  end
37
37
 
38
- # dsl get method
39
- # @return [Dsl] workable dsl composite object
40
- def dsl
41
- @dsl ||= Dsl.new(blue_prints: self.blue_prints, state: self.state)
42
- end
43
-
44
- # state get method
45
- # @return [State] state object which actively controls the ui state
46
- def state
47
- @state ||= State.new(self.blue_prints, self.driver)
48
- end
49
-
50
38
  # BluePrints (UI configurations) wrapped in an composite
51
39
  # Composite provides a common interface for all adapters
52
40
  # @param value [String, Hash] String to YAML files or Hash configuration
53
41
  # @return [AutomationObject::BluePrint::Composite::Top] top composite object
42
+ undef :blue_prints= if defined? :blue_prints=
54
43
  def blue_prints=(value)
55
44
  case value
56
- when String
57
- BluePrint.adapter = :yaml
58
- when Hash
59
- BluePrint.adapter = :hash
45
+ when String
46
+ BluePrint.adapter = :yaml
47
+ when Hash
48
+ BluePrint.adapter = :hash
60
49
  end
61
50
 
62
- @blue_prints = BluePrint.new(value)
51
+ @blue_prints = BluePrint.create(value)
63
52
  end
64
53
 
65
54
  # Driver port provides a formatted interface for interacting with different drivers
66
55
  # @return [AutomationObject::Driver::Driver] driver interface object
56
+ undef :driver= if defined? :driver=
67
57
  def driver=(value)
68
- case value
69
- when Selenium::WebDriver::Driver
70
- Driver.adapter = :selenium
71
- when Appium::Driver
72
- Driver.adapter = :appium
73
- else
74
- Driver.adapter = :nokogiri
75
- end
76
-
77
- @driver = Driver.new(value)
58
+ Driver.adapter = case value
59
+ when Selenium::WebDriver::Driver
60
+ :selenium
61
+ when Appium::Driver
62
+ :appium
63
+ else
64
+ :nokogiri
65
+ end
66
+
67
+ @driver = Driver.create(value)
78
68
  end
79
69
 
80
70
  # Reset the entire state, remove any values
81
71
  # Leave the driver alone here, can be done elsewhere
82
72
  # @return [void]
83
73
  def quit
84
- self.state.quit #Quit the state. That way it knows to kill threads if operational
74
+ state.quit # Quit the state. That way it knows to kill threads if operational
85
75
  self.dsl, self.state, self.blue_prints, self.driver = nil
86
76
  end
87
77
 
@@ -91,11 +81,11 @@ module AutomationObject
91
81
  class << self
92
82
  attr_accessor :singleton
93
83
 
94
- #Singleton method if using Cucumber
84
+ # Singleton method if using Cucumber
95
85
  # @return [Framework] singleton of self
96
86
  def get
97
- return self.singleton
87
+ singleton
98
88
  end
99
89
  end
100
90
  end
101
- end
91
+ end
@@ -1,30 +1,33 @@
1
- require_relative 'reflection_helper'
1
+ # frozen_string_literal: true
2
+ require_relative 'reflection'
2
3
  require_relative 'composite_hook'
3
4
 
4
5
  module AutomationObject
5
- #Composite is a super class that helps build composite objects based of a Hash
6
- #Composite classes should inherit from this class and use the class-level methods to add the components
6
+ # Composite is a super class that helps build composite objects based of a Hash
7
+ # Composite classes should inherit from this class and use the class-level methods to add the components
7
8
  class Composite
8
9
  include CompositeHook
9
- include ReflectionHelper
10
+ include Reflection
10
11
 
11
12
  attr_accessor :name, :parent, :location, :children
12
13
 
13
14
  # @param name [Symbol] name of the object
14
15
  # @param parent [Object, nil] parent composite object
15
16
  # @param location [String] string location for error/debugging purposes
16
- def initialize(name = :top, parent = nil, location = 'top')
17
+ def initialize(_name = :top, parent = nil, location = 'top')
17
18
  self.parent = parent
18
19
  self.location = location
19
20
 
20
- self.before_create_run
21
+ before_create_run
21
22
 
22
- self.add_has_one_relationships
23
- self.add_has_many_relationships
23
+ add_has_one_relationships
24
+ add_has_many_relationships
24
25
 
25
- self.after_create_run
26
+ after_create_run
26
27
  end
27
28
 
29
+ # Remove getter to solve stupid Ruby warning
30
+ undef :children if method_defined? :children
28
31
  def children
29
32
  @children ||= {}
30
33
  end
@@ -32,15 +35,15 @@ module AutomationObject
32
35
  # Get top composite Object
33
36
  # @return [AutomationObject::Composite]
34
37
  def top
35
- #Should recursively call top until parent is nil
36
- return (self.parent == nil) ? self : self.parent.top
38
+ # Should recursively call top until parent is nil
39
+ parent.nil? ? self : parent.top
37
40
  end
38
41
 
39
42
  # Abstract argument, override
40
43
  # @param name [Symbol] name of child
41
44
  # @param options [Hash] options for child
42
45
  # @return child [Object] return child composite object
43
- def get_child(name, options)
46
+ def get_child(_name, _options)
44
47
  raise 'Abstract method'
45
48
  end
46
49
 
@@ -48,48 +51,48 @@ module AutomationObject
48
51
  # @param name [Symbol] name of child
49
52
  # @param options [Hash] options for child
50
53
  # @return children [Hash] return children and names
51
- def get_children(name, options)
54
+ def get_children(_name, _options)
52
55
  raise 'Abstract method'
53
56
  end
54
57
 
55
58
  def add_has_one_relationships
56
- self.class.has_one_relationships.each { |name, options|
57
- self.children[name] = get_child(name, options)
58
- self.add_attribute(name, self.children[name])
59
- }
59
+ self.class.has_one_relationships.each do |name, options|
60
+ children[name] = get_child(name, options)
61
+ add_attribute(name, children[name])
62
+ end
60
63
  end
61
64
 
62
65
  def add_has_many_relationships
63
- self.class.has_many_relationships.each { |name, options|
66
+ self.class.has_many_relationships.each do |name, options|
64
67
  composite_children = get_children(name, options)
65
- self.children[name] = composite_children
66
- self.add_attribute(name, self.children[name])
67
- }
68
+ children[name] = composite_children
69
+ add_attribute(name, children[name])
70
+ end
68
71
  end
69
72
 
70
73
  class << self
71
- #Has many children relationship for the composite
74
+ # Has many children relationship for the composite
72
75
  # @param children_name [Symbol] name of the children, should be a BluePrint method
73
76
  # @param args [Hash] additional arguments, expects interface
74
77
  def has_many(children_name, args)
75
- self.has_many_relationships[children_name] = args
78
+ has_many_relationships[children_name] = args
76
79
  end
77
80
 
78
81
  # @return [Hash] relationships for the composite
79
82
  def has_many_relationships
80
- @has_many_relationships ||= Hash.new
83
+ @has_many_relationships ||= {}
81
84
  end
82
85
 
83
86
  # @param child_name [Symbol] name of key
84
87
  # @param args [Hash] arguments
85
88
  def has_one(child_name, args)
86
- self.has_one_relationships[child_name] = args
89
+ has_one_relationships[child_name] = args
87
90
  end
88
91
 
89
92
  # @return [Hash] hash of relationships
90
93
  def has_one_relationships
91
- @has_one_relationships ||= Hash.new
94
+ @has_one_relationships ||= {}
92
95
  end
93
96
  end
94
97
  end
95
- end
98
+ end
@@ -1,16 +1,17 @@
1
+ # frozen_string_literal: true
1
2
  module AutomationObject
2
- #Hooks for composites
3
+ # Hooks for composites
3
4
  module CompositeHook
4
5
  def before_create_run
5
- self.class.before_create_hooks.each { |before_create_hook|
6
- self.send(before_create_hook)
7
- }
6
+ self.class.before_create_hooks.each do |before_create_hook|
7
+ send(before_create_hook)
8
+ end
8
9
  end
9
10
 
10
11
  def after_create_run
11
- self.class.after_create_hooks.each { |after_create_hook|
12
- self.send(after_create_hook)
13
- }
12
+ self.class.after_create_hooks.each do |after_create_hook|
13
+ send(after_create_hook)
14
+ end
14
15
  end
15
16
 
16
17
  # @param base [Class] class to extend when included
@@ -18,29 +19,29 @@ module AutomationObject
18
19
  base.extend(ClassMethods)
19
20
  end
20
21
 
21
- #Class level methods
22
+ # Class level methods
22
23
  module ClassMethods
23
24
  # @param instance_method [Symbol] method to call
24
25
  def after_create(instance_method)
25
- self.after_create_hooks.push(instance_method)
26
+ after_create_hooks.push(instance_method)
26
27
  end
27
28
 
28
29
  # @return [Array<Symbol>] list of methods to call
29
30
  def after_create_hooks
30
- @after_create_hooks = [] unless @after_create_hooks
31
- return @after_create_hooks
31
+ @after_create_hooks = [] unless defined? @after_create_hooks
32
+ @after_create_hooks
32
33
  end
33
34
 
34
35
  # @param instance_method [Symbol] method to call
35
36
  def before_create(instance_method)
36
- self.before_create_hooks.push(instance_method)
37
+ before_create_hooks.push(instance_method)
37
38
  end
38
39
 
39
40
  # @return [Array<Symbol>] list of methods to call
40
41
  def before_create_hooks
41
- @before_create_hooks = [] unless @before_create_hooks
42
- return @before_create_hooks
42
+ @before_create_hooks = [] unless defined? @before_create_hooks
43
+ @before_create_hooks
43
44
  end
44
45
  end
45
46
  end
46
- end
47
+ end
@@ -1,16 +1,16 @@
1
- module AutomationObject::BluePrint
2
- #Collect files in directory recursively and return Array
3
- module FileHelper
1
+ # frozen_string_literal: true
2
+ # Extend file class
3
+ # Collect files in directory recursively and return Array
4
+ class File
5
+ class << self
4
6
  # @param path [String] specified directory path for getting files underneath
5
7
  # @returns [Array] list of file paths that exist recursively underneath a directory
6
8
  def collect_files(path)
7
- unless File.exists?(path)
8
- raise "Expecting path to exist, got #{path}"
9
- end
9
+ raise "Expecting path to exist, got #{path}" unless File.exist?(path)
10
10
 
11
11
  if File.directory?(path)
12
- @file_array = Array.new
13
- self.recursive_collection(path)
12
+ @file_array = []
13
+ recursive_collection(path)
14
14
  else
15
15
  @file_array = [path]
16
16
  end
@@ -24,15 +24,15 @@ module AutomationObject::BluePrint
24
24
  # @param path [String] specified directory path for getting files underneath
25
25
  def recursive_collection(path)
26
26
  Dir.foreach(path) do |item|
27
- next if item == '.' or item == '..'
27
+ next if item == '.' || item == '..'
28
28
 
29
- file_path = File.join(path, "#{item}")
29
+ file_path = File.join(path, item.to_s)
30
30
  if File.directory?(file_path)
31
- self.recursive_collection(file_path)
31
+ recursive_collection(file_path)
32
32
  else
33
33
  @file_array.push(file_path)
34
34
  end
35
35
  end
36
36
  end
37
37
  end
38
- end
38
+ end
@@ -1,8 +1,9 @@
1
- #Hash class method additions
2
- class ::Hash
1
+ # frozen_string_literal: true
2
+ # Hash class method additions
3
+ class Hash
3
4
  def deep_merge(second)
4
- merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
5
- self.merge(second, &merger)
5
+ merger = proc { |_key, v1, v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? v1.merge(v2, &merger) : v2 }
6
+ merge(second, &merger)
6
7
  end
7
8
 
8
9
  def symbolize_keys_deep!(h = self)
@@ -12,4 +13,4 @@ class ::Hash
12
13
  symbolize_keys_deep! h[ks] if h[ks].is_a?(Hash)
13
14
  end
14
15
  end
15
- end
16
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ # Kernel method additions
3
+ module Kernel
4
+ def suppress_warnings
5
+ original_verbosity = $VERBOSE
6
+ $VERBOSE = nil
7
+ result = yield
8
+ $VERBOSE = original_verbosity
9
+ result
10
+ end
11
+ end
@@ -1,28 +1,29 @@
1
+ # frozen_string_literal: true
1
2
  module AutomationObject
2
- #Helper module for adding attributes/alias to classes dynamically
3
- #Reflection/MetaProgramming
4
- module ReflectionHelper
3
+ # Helper module for adding attributes/alias to classes dynamically
4
+ # Reflection/MetaProgramming
5
+ module Reflection
5
6
  # @param name [String, Symbol] name of attribute to add
6
7
  # @param value [Object] value of attribute
7
8
  def add_attribute(name, value)
8
9
  name = name.to_s
9
10
  alias_name = name + '?' if name.gsub!(/\?$/, '')
10
11
 
11
- self.class.send(:attr_accessor, name)
12
+ self.class.send(:attr_accessor, name) unless self.class.method_defined? name
12
13
  instance_variable_set("@#{name}", value)
13
14
 
14
- self.add_alias(alias_name, name) if alias_name
15
+ add_alias(alias_name, name) if alias_name
15
16
  end
16
17
 
17
18
  # @param alias_name [Symbol, String] name of alias to add
18
19
  # @param attribute_name [Symbol, String] attribute to link to
19
20
  def add_alias(alias_name, attribute_name)
20
- singleton_class = class << self;
21
- self;
21
+ singleton_class = class << self
22
+ self
22
23
  end
23
24
  singleton_class.send(:define_method, alias_name) do
24
25
  instance_variable_get("@#{attribute_name}")
25
26
  end
26
27
  end
27
28
  end
28
- end
29
+ end
@@ -1,27 +1,37 @@
1
- #String class method additions
2
- class ::String
1
+ # frozen_string_literal: true
2
+ # String class method additions
3
+ class String
4
+ # Test whether a string is a valid url or not
5
+ # @return [Boolean]
3
6
  def valid_url?
4
7
  uri = URI.parse(self)
5
- if uri.kind_of?(URI::HTTP)
6
- if self.match(/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix)
7
- return true
8
- else
9
- return false
10
- end
11
- else
12
- return false
13
- end
8
+ return true if uri.is_a?(URI::HTTP)
9
+ return !(self =~ /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix).nil?
14
10
  rescue URI::InvalidURIError
15
11
  return false
16
12
  end
17
13
 
18
14
  def join_url(url)
19
- full_url = self.chomp('/') + url.reverse.chomp('/').reverse
20
- return full_url
15
+ full_url = chomp('/') + url.reverse.chomp('/').reverse
16
+ full_url
21
17
  end
22
18
 
19
+ # Convert self to pascal case
23
20
  def pascalize
24
21
  return self if self !~ /_/ && self =~ /[A-Z]+.*/
25
- self.split('_').map { |part| part.capitalize }.join
22
+ split('_').map(&:capitalize).join
26
23
  end
27
- end
24
+
25
+ # Convert string to underscore
26
+ # @return [String] underscored self string
27
+ def to_underscore!
28
+ gsub!(/(.)([A-Z])/, '\1_\2')
29
+ downcase!
30
+ end
31
+
32
+ # Convert string to underscore
33
+ # @return [String] underscored string
34
+ def to_underscore
35
+ dup.tap(&:to_underscore!)
36
+ end
37
+ end