chemlab 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a222da79b20553b786775c82b01e9a84c51f068818297704426366b808e196d
4
- data.tar.gz: 99a1e05b09add1236903c8bf2935d4bc3c4b69192a6e6d3fb3bb5001168f8ea3
3
+ metadata.gz: b8768461aba3f55a80a1ef51e13b894d8f876343abb1a402c7de72e4fbfa4a9e
4
+ data.tar.gz: a3a48670a730d1d873ce671d94de87198478e54bfa2f29665aa2c05bf686f328
5
5
  SHA512:
6
- metadata.gz: 0eebd3ac81a76497d753ed1dedc2a26d712328b8026ddb938911a26bd8519a09646ae2ff199b094976ec9b8c9dc4114a2138ceb69ee8bcbb42e0fbbeadb0101e
7
- data.tar.gz: 87cc0eb243c2ffe942f4998cde1e981f275e4d7e372aa3480100a6ba9e106847f39c6bc15f477bd00b08f2e0c2a1011eee8741f69fa78f016fe0df4f15929ff9
6
+ metadata.gz: 9f6b5cd6c624455c9204da1815b891f65a97725309acf4157b280df795c56f072aa905ae3d48c75a3c42c7414bee7a3408d379dcfdbbc406eb1d849f6c4da3ed
7
+ data.tar.gz: 5cc500d4395d6470dc19cb4e250721d600d34e2f0f561410de26437490cf83d2529122c19d7da64ed7f17fd135f3fbfd93cfd01e90a253faae8b54956a7b2092
@@ -16,7 +16,7 @@ module Chemlab
16
16
  raise %(Cannot create new library `#{library_name}` as the directory "#{library_name}" already exists)
17
17
  end
18
18
 
19
- require 'active_support/core_ext/string/inflections'
19
+ require 'chemlab/core_ext/string/inflections'
20
20
 
21
21
  @library = {
22
22
  name: library_name,
@@ -53,7 +53,7 @@ module Chemlab
53
53
 
54
54
  library = Stubber.libraries.last # last appended library is this Page Library
55
55
 
56
- require 'active_support/core_ext/string/inflections'
56
+ require 'chemlab/core_ext/string/inflections'
57
57
 
58
58
  stub_path = @path.gsub(@path[@path.rindex('.')..], '.stub.rb')
59
59
  File.open(stub_path, 'w') do |stub|
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Start monkey patch of Object::String
4
+ class String
5
+ # Classify a string
6
+ # @example
7
+ # 'test_class'.classify #=> TestClass
8
+ # @example
9
+ # 'testclass'.classify #=> Testclass
10
+ def classify
11
+ split('_').map(&:capitalize).join
12
+ end
13
+
14
+ # Underscore a multi-worded string
15
+ # @example
16
+ # 'TestClass'.underscore #=> 'test_class'
17
+ # @example
18
+ # 'Class'.underscore #=> 'class'
19
+ def underscore
20
+ chars.each_with_object(+'') do |c, str|
21
+ str << '_' if c.match?(/[A-Z]/) && !str.size.zero?
22
+ str << c.downcase
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Start monkey patch of String
4
+ class String
5
+ # Find the root module (parent module) of a class or module
6
+ # @example
7
+ # 'A::B::C'.root_module #=> A
8
+ # 'A::B'.root_module => A
9
+ # @return [Module] the root module
10
+ def root_module
11
+ Object.const_get(split('::').first)
12
+ end
13
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chemlab
4
+ # Application Library Definition
5
+ # Provides accessors for +:base_url+, +:base_url=+
6
+ # +base_url+ will default to Chemlab's configured base_url
7
+ module Library
8
+ def self.included(base)
9
+ base.module_eval do
10
+ class << self
11
+ # The Base URL where this library / application exists
12
+ # If you have multiple applications that Chemlab will target,
13
+ # this is useful for having separate base_urls.
14
+ #
15
+ # @return [String] the base_url. +Chemlab.configuration.base_url+ by default if not set
16
+ #
17
+ # @example
18
+ # Chemlab.configure do |chemlab|
19
+ # A.base_url = 'https://first_app'
20
+ # B.base_url = 'https://second_app'
21
+ # chemlab.base_url = 'https://main_app'
22
+ #
23
+ # chemlab.libraries = [A, B, C]
24
+ #
25
+ # C.base_url #=> https://main_app
26
+ # end
27
+ attr_writer :base_url
28
+
29
+ def base_url
30
+ @base_url ||= Chemlab.configuration.base_url
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'forwardable'
4
+ require 'chemlab/core_ext/string/root_module'
4
5
 
5
6
  module Chemlab
6
7
  module Runtime
@@ -17,13 +18,56 @@ module Chemlab
17
18
  @session = Session.new(browser_options)
18
19
  end
19
20
 
21
+ # Navigate to a given Page library
22
+ # @param [Class<Chemlab::Page>] page_class the class of the Page to navigate to
23
+ # @example
24
+ # Given:
25
+ # module TheLibrary
26
+ # def self.base_url
27
+ # 'https://example.com'
28
+ # end
29
+ # class ThePage < Chemlab::Page
30
+ # path '/path'
31
+ # end
32
+ # end
33
+ #
34
+ # Chemlab::Runtime::Browser.navigate_to(TheLibrary::ThePage) #=> Navigates to https://example.com/path
35
+ #
36
+ # @example
37
+ # Given:
38
+ # Chemlab.configure do |chemlab|
39
+ # chemlab.base_url = 'https://example.com'
40
+ # end
41
+ #
42
+ # class ThePage < Chemlab::Page
43
+ # path '/'
44
+ # end
45
+ #
46
+ # Chemlab::Runtime::Browser.navigate_to(ThePage) #=> Navigates to https://example.com/path
20
47
  def self.navigate_to(page_class)
21
- Chemlab.configuration.browser.navigate_to(page_class.path)
48
+ unless page_class&.name.respond_to?(:root_module)
49
+ return Chemlab.configuration.browser.navigate_to(Chemlab.configuration.base_url + page_class.path)
50
+ end
51
+
52
+ # workaround for file:// protocol. URI.join() does not work with URI.join('file:///Users', '/user')
53
+ uri = if URI(page_class.name.root_module.base_url).scheme == 'file'
54
+ URI(File.join(page_class.name.root_module.base_url, page_class.path))
55
+ else
56
+ URI.join(page_class.name.root_module.base_url, page_class.path)
57
+ end
58
+
59
+ Chemlab.configuration.browser.navigate_to(uri)
22
60
  end
23
61
 
24
- def navigate_to(path)
62
+ # Navigate to a URI or Path
63
+ # @param [URI,String] uri_or_path the URI or path
64
+ # @return [URI,String] the URI or Path that was navigated to
65
+ # @example
66
+ # Chemlab.configuration.browser.navigate_to('/path') #=> /path
67
+ # Chemlab.configuration.browser.navigate_to(URI('https://example.com/path')) #=> URI('https://example.com/path')
68
+ def navigate_to(uri_or_path)
25
69
  @session ||= Chemlab.configuration.browser.session
26
- @session.engine.goto(Chemlab.configuration.base_url + path)
70
+ @session.engine.goto(uri_or_path.to_s)
27
71
  end
28
72
 
29
73
  # The options used to create the browser session
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Chemlab
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
data/lib/chemlab.rb CHANGED
@@ -34,6 +34,7 @@ module Chemlab
34
34
  autoload :Element, 'chemlab/element'
35
35
  autoload :Component, 'chemlab/component'
36
36
  autoload :Page, 'chemlab/page'
37
+ autoload :Library, 'chemlab/library'
37
38
 
38
39
  # Runtime modules
39
40
  module Runtime
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chemlab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab Quality
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-01 00:00:00.000000000 Z
11
+ date: 2021-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -122,90 +122,94 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 0.9.26
125
- - !ruby/object:Gem::Dependency
126
- name: activesupport-inflector
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 0.1.0
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 0.1.0
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: colorize
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - "~>"
144
130
  - !ruby/object:Gem::Version
145
- version: 0.8.1
131
+ version: '0.8'
146
132
  type: :runtime
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
136
  - - "~>"
151
137
  - !ruby/object:Gem::Version
152
- version: 0.8.1
138
+ version: '0.8'
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: i18n
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - "~>"
158
144
  - !ruby/object:Gem::Version
159
- version: 1.8.10
145
+ version: '1.8'
160
146
  type: :runtime
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
150
  - - "~>"
165
151
  - !ruby/object:Gem::Version
166
- version: 1.8.10
152
+ version: '1.8'
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: rake
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
- - - "~>"
157
+ - - ">="
172
158
  - !ruby/object:Gem::Version
173
- version: 13.0.3
159
+ version: '12'
160
+ - - "<"
161
+ - !ruby/object:Gem::Version
162
+ version: '14'
174
163
  type: :runtime
175
164
  prerelease: false
176
165
  version_requirements: !ruby/object:Gem::Requirement
177
166
  requirements:
178
- - - "~>"
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '12'
170
+ - - "<"
179
171
  - !ruby/object:Gem::Version
180
- version: 13.0.3
172
+ version: '14'
181
173
  - !ruby/object:Gem::Dependency
182
174
  name: selenium-webdriver
183
175
  requirement: !ruby/object:Gem::Requirement
184
176
  requirements:
185
- - - "~>"
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '3'
180
+ - - "<"
186
181
  - !ruby/object:Gem::Version
187
- version: 4.0.0.beta4
182
+ version: '5'
188
183
  type: :runtime
189
184
  prerelease: false
190
185
  version_requirements: !ruby/object:Gem::Requirement
191
186
  requirements:
192
- - - "~>"
187
+ - - ">="
193
188
  - !ruby/object:Gem::Version
194
- version: 4.0.0.beta4
189
+ version: '3'
190
+ - - "<"
191
+ - !ruby/object:Gem::Version
192
+ version: '5'
195
193
  - !ruby/object:Gem::Dependency
196
194
  name: watir
197
195
  requirement: !ruby/object:Gem::Requirement
198
196
  requirements:
199
- - - "~>"
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '6'
200
+ - - "<"
200
201
  - !ruby/object:Gem::Version
201
- version: 7.0.0.beta4
202
+ version: '8'
202
203
  type: :runtime
203
204
  prerelease: false
204
205
  version_requirements: !ruby/object:Gem::Requirement
205
206
  requirements:
206
- - - "~>"
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '6'
210
+ - - "<"
207
211
  - !ruby/object:Gem::Version
208
- version: 7.0.0.beta4
212
+ version: '8'
209
213
  description:
210
214
  email:
211
215
  - quality@gitlab.com
@@ -235,7 +239,10 @@ files:
235
239
  - lib/chemlab/cli/stubber.rb
236
240
  - lib/chemlab/component.rb
237
241
  - lib/chemlab/configuration.rb
242
+ - lib/chemlab/core_ext/string/inflections.rb
243
+ - lib/chemlab/core_ext/string/root_module.rb
238
244
  - lib/chemlab/element.rb
245
+ - lib/chemlab/library.rb
239
246
  - lib/chemlab/page.rb
240
247
  - lib/chemlab/runtime/browser.rb
241
248
  - lib/chemlab/runtime/env.rb
@@ -258,7 +265,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
258
265
  requirements:
259
266
  - - ">="
260
267
  - !ruby/object:Gem::Version
261
- version: 2.7.2
268
+ version: '2.5'
262
269
  required_rubygems_version: !ruby/object:Gem::Requirement
263
270
  requirements:
264
271
  - - ">="