edsl 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6436be2a1cda4e3ab53243cfddb9b19563530c5c8b55afe918562434c168b5d4
4
- data.tar.gz: 78067b244a23b49e6401a68766551d6f35972e09e798d972bf0d7ca467db7957
3
+ metadata.gz: 262bddb9dfb3d2caaa3d9c53431254ae3fb664522520d71bf226164dd6760ce7
4
+ data.tar.gz: c0df10648dd230dcee5126616b751387408960c0fc12fa0d2273227199dfbcff
5
5
  SHA512:
6
- metadata.gz: 65efa208961743a6a4da88502620b197bf7fc60eb5abe20bb23418bc398e2b9d5b9259122590f8083fea4a1a59af9a5e5dcc90f7c7d07d6feabf1812394ae40b
7
- data.tar.gz: 46555775d32e1ecfa8bb79f5cfaf3d83937b98291027053ea8d1d4b19fd0dc4cebc6e4393886359f58c0a4ad7711fe9fe2c4d3dcad89baf3e37f71a0c3ecef69
6
+ metadata.gz: 61b89fd6e0c20679f5c97b4818e601919cefe020760ca08ec52d4696507576c5445138b8c0df8c0f6b8b74c425d3116f163a705943fdb57a915b80c6ce701f3b
7
+ data.tar.gz: a44fe39d57630650bc998cd888494eb8975683cf92f7c051302e94fd5d2a7966b7626aeb21b19da8a3a50f47c4a3e57ec16acd31f1a2095c5a2354bd27ae6bfb
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # EDSL - Element DSL
2
2
 
3
- This gem implements an extensible DSL for declaring web elements as part of a page object pattern. This gem does **not** implement the page object pattern, for an implementation of page object using this gem see edsl-pageobject.
3
+ This gem implements an extensible DSL for declaring web elements as part of a page object pattern. This gem does **not** implement the page object pattern, for an implementation of page object using this gem see [edsl-pageobject](https://github.com/donavan/edsl-pageobject).
4
4
 
5
5
  This gem was created out of the need to rapidly produce abstractions for non-standard web elements. With EDSL support for new accessors and other DSL methods can be implemented without needing to modify any EDSL source or monkey patching. It allows you to rapidly prototype using lambdas, or to build full classes to use in place of existing elements.
6
6
 
data/lib/edsl/dsl.rb CHANGED
@@ -79,8 +79,8 @@ module EDSL
79
79
  # A text field could be declared like this:
80
80
  # element(:username, id: 'some_id', how: Proc.new { |name, container, opts| container.text_field(opts) }, default_method: :value, assign_method: :set)
81
81
  #
82
- def element(name, opts)
83
- element_method = _add_element_method(name, opts)
82
+ def element(name, opts, &block)
83
+ element_method = _add_element_method(name, opts, &block)
84
84
  _add_common_methods(name, element_method, opts)
85
85
  _add_assignment_methods(name, element_method, opts)
86
86
  end
@@ -117,14 +117,14 @@ module EDSL
117
117
 
118
118
  # rubocop:disable Metrics/AbcSize
119
119
  # Helper function to reduce perceived complexity of element
120
- def _add_element_method(name, opts)
120
+ def _add_element_method(name, opts, &block)
121
121
  how = opts.delete(:how)
122
122
  hooks = opts.delete(:hooks)
123
123
  wrapper_fn = opts.delete(:wrapper_fn) || ->(e, _p) { return e }
124
124
 
125
125
  ele_meth = "#{name}_element"
126
126
  define_method(ele_meth) do
127
- ele = yield if block_given?
127
+ ele = yield self if block_given?
128
128
  ele ||= how.call(name, self, opts) if how.is_a?(Proc)
129
129
  ele ||= send(how, opts)
130
130
  ele = wrapper_fn.call(ele, self)
data/lib/edsl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module EDSL
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
@@ -3,7 +3,7 @@ require 'facets/string/snakecase'
3
3
  module EDSL
4
4
  # This module extends the DSL to include the various Watir elements
5
5
  module WatirElements
6
- SPECIAL_ELEMENTS = %i[button a radio_set input select textarea].freeze
6
+ SPECIAL_ELEMENTS = %i[button a radio_set input select textarea ul footer frameset head header ol].freeze
7
7
 
8
8
  TEXT_ELEMENTS = Watir.tag_to_class.keys.reject { |k| SPECIAL_ELEMENTS.include?(k) }.map { |t| t.to_s.snakecase }.freeze
9
9
  TEXT_ELEMENTS.each do |tag|
@@ -18,5 +18,11 @@ module EDSL
18
18
 
19
19
  SETABLE_ELEMENTS = %i[radio checkbox].freeze
20
20
  SETABLE_ELEMENTS.each { |tag| EDSL.define_accessor(tag, how: tag, default_method: :set?, assign_method: :set) }
21
+
22
+ GENERIC_ELEMENTS = %i[ul footer frameset head header ol]
23
+ GENERIC_ELEMENTS.each { |tag| EDSL.define_accessor(tag, how: tag) }
24
+
25
+ SELECT_ELEMENTS = %i[select select_list]
26
+ SELECT_ELEMENTS.each { |tag| EDSL.define_accessor(tag, how: tag, default_method: :text, assign_method: :select) }
21
27
  end
22
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Donavan Stanley
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-24 00:00:00.000000000 Z
11
+ date: 2018-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler