domkey 0.3.1 → 0.4.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
  SHA1:
3
- metadata.gz: e93f5beddbdb0fad6ae8e499a06a46dc177c23b3
4
- data.tar.gz: 4a77a3c0434d61e3ce656babba4abfdfe2eb9853
3
+ metadata.gz: 6db2446775f3d86af13cba9df7fc019216d3839a
4
+ data.tar.gz: 7354d30f4de4efadde733996bb66d0e8bb9002d8
5
5
  SHA512:
6
- metadata.gz: 3cc26e517caf10802fc411947b2de31ea5dc2ca06d6b4467fd8a4a81bc5f21ce7443f5dc17baac0836a84a193f630f028fae9375b550837660d6c5fe490ca1ab
7
- data.tar.gz: 88deffe102eb2fa60e364cf7a59bdbd07b81997a54dda072d56653702f757909622fe77c9e3ffe55f8194136f18d915899fac384988fb019fa62e392a2b3ac41
6
+ metadata.gz: 1d0ae9df2963b01dfb954326d3375a9095c281ad68be78fd15cf836c02399b650be455f6367cec18971daef426858e0e44c60ebba8225f03ad4ce8106854915b
7
+ data.tar.gz: 9d24abfc09c0da8a15471c80d87225d06e11f03029c0fa37b06cbad1b40f42e71aa25e368b2e8daf59fa365ea8540d228fa3e177503afbfc6ba19ce4de1d872f
@@ -1,3 +1,3 @@
1
1
  module Domkey
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -13,11 +13,15 @@ module Domkey
13
13
 
14
14
  private
15
15
 
16
- # @api private
17
- # unselects all checkboxes before setting it with desired value
18
- def before_set
19
- validate_scope
20
- each { |o| o.set false }
16
+ def set_by_symbol value
17
+ case value
18
+ when FalseClass
19
+ each { |o| o.set false }
20
+ when TrueClass
21
+ return #noop
22
+ else
23
+ fail(Exception::NotImplementedError, "Unknown way of setting by value: #{value.inspect}")
24
+ end
21
25
  end
22
26
  end
23
27
  end
@@ -55,6 +55,8 @@ module Domkey
55
55
  # strategy for selecting OptionSelectable object
56
56
  def set_strategy value
57
57
  case value
58
+ when TrueClass, FalseClass, Symbol
59
+ set_by_symbol(value)
58
60
  when String, Regexp
59
61
  set_by_value(value)
60
62
  when Array
@@ -70,9 +72,16 @@ module Domkey
70
72
  set_by_value(value)
71
73
  end
72
74
  end
75
+ else
76
+ fail(Exception::NotImplementedError, "Unable to be set by this value: #{value.inspect}")
73
77
  end
74
78
  end
75
79
 
80
+ # true, false, or some symbol identifier
81
+ def set_by_symbol value
82
+ fail Exception::NotImplementedError, "Subclass responsible for implementing"
83
+ end
84
+
76
85
  # default strategy. set by value attribute
77
86
  def set_by_value value
78
87
  fail Exception::NotImplementedError, "Subclass responsible for implementing"
@@ -9,6 +9,10 @@ module Domkey
9
9
 
10
10
  include OptionSelectable
11
11
 
12
+ def before_set
13
+ validate_scope
14
+ end
15
+
12
16
  def set_by_index value
13
17
  [*value].each { |i| self[i.to_i].set(true) }
14
18
  end
@@ -23,10 +27,8 @@ module Domkey
23
27
  find { |o| o.value == value }
24
28
  when Regexp
25
29
  find { |o| o.value.match(value) }
26
- else
27
- false
28
30
  end
29
- o ? o.element.set : fail(Exception::NotFoundError, "Element not found with value: #{v.inspect}")
31
+ o ? o.element.set : fail(Exception::NotFoundError, "Element not found with value: #{value.inspect}")
30
32
  end
31
33
 
32
34
  def value_by_default
@@ -81,7 +81,7 @@ module Domkey
81
81
  # @api private
82
82
  # delegate to element when element responds to message
83
83
  def method_missing(message, *args, &block)
84
- if respond_to_missing?(message, false)
84
+ if element.respond_to?(message)
85
85
  element.__send__(message, *args, &block)
86
86
  else
87
87
  super
@@ -91,7 +91,7 @@ module Domkey
91
91
  # @api private
92
92
  # ruturn true when element.respond_to? message so we can delegate with confidence
93
93
  def respond_to_missing?(message, include_private = false)
94
- element.respond_to?(message) ? true : false
94
+ element.respond_to?(message) || super
95
95
  end
96
96
 
97
97
  private
@@ -116,16 +116,16 @@ module Domkey
116
116
  rescue StandardError
117
117
  return package #suitecase exploded, proc returned
118
118
  end
119
- if peeked_inside.respond_to?(:each_pair) # hash
119
+ if peeked_inside.kind_of?(Hash)
120
120
  return initialize_this peeked_inside
121
- elsif peeked_inside.respond_to?(:wd) # watir element
121
+ elsif peeked_inside.kind_of?(Watir::Container)
122
122
  return lambda { peeked_inside }
123
- elsif peeked_inside.respond_to?(:package) #pageobject
123
+ elsif peeked_inside.kind_of?(PageObject)
124
124
  return peeked_inside.package
125
125
  else
126
126
  fail Exception::Error, "package must be kind of hash, watirelement or pageobject but I got this: #{package}"
127
127
  end
128
- elsif package.respond_to?(:package) #pageobject
128
+ elsif package.respond_to?(:package, true) #pageobject
129
129
  return package.package
130
130
  else
131
131
  fail Exception::Error, "package must be kind of hash, watirelement or pageobject but I got this: #{package}"
@@ -13,9 +13,15 @@ module Domkey
13
13
 
14
14
  private
15
15
 
16
- def before_set
17
- validate_scope
16
+ def set_by_symbol value
17
+ case value
18
+ when FalseClass, TrueClass
19
+ return #noop
20
+ else
21
+ fail(Exception::NotImplementedError, "Unknown way of setting by value: #{value.inspect}")
22
+ end
18
23
  end
24
+
19
25
  end
20
26
  end
21
27
  end
@@ -7,6 +7,8 @@ module Domkey
7
7
 
8
8
  include OptionSelectable
9
9
 
10
+ private
11
+
10
12
  # by position in options array
11
13
  def set_by_index value
12
14
  [*value].each { |i| element.options[i].select }
@@ -42,12 +44,16 @@ module Domkey
42
44
  end
43
45
  end
44
46
 
45
-
46
- def before_set
47
- element.clear if element.multiple?
47
+ def set_by_symbol value
48
+ case value
49
+ when FalseClass
50
+ element.clear if element.multiple?
51
+ when TrueClass
52
+ return #noop
53
+ else
54
+ fail(Exception::NotImplementedError, "Unknown way of setting by value: #{value.inspect}")
55
+ end
48
56
  end
49
-
50
-
51
57
  end
52
58
  end
53
59
  end
@@ -45,6 +45,14 @@ module Domkey
45
45
  end
46
46
  end
47
47
 
48
+ class Select < Dispatcher
49
+
50
+ def set value
51
+ original.select value
52
+ end
53
+
54
+ end
55
+
48
56
 
49
57
  end
50
58
  end
@@ -35,11 +35,8 @@ describe Domkey::View::CheckboxGroup do
35
35
  @v = CollectionAsPageObjectCheckboxGroupView.new
36
36
  @v.group.count.should == 3
37
37
  @v.group.to_a.each { |e| e.should be_kind_of(Domkey::View::PageObject) }
38
- end
39
-
40
- it 'initial value on test page' do
41
- @v.group.value.should eql ['other']
42
- @v.group.value(:value, :index, :label).should eql [value: 'other', index: 2, label: 'Other']
38
+ # clear all selections first
39
+ @v.group.set false
43
40
  end
44
41
 
45
42
  it 'set string' do
@@ -52,6 +49,19 @@ describe Domkey::View::CheckboxGroup do
52
49
  @v.group.value.should eql ['other']
53
50
  end
54
51
 
52
+ it 'set by not implemented symbol' do
53
+ expect { @v.group.set :hello_world }.to raise_error(Domkey::Exception::NotImplementedError)
54
+ end
55
+
56
+ it 'set appends by defulat' do
57
+ @v.group.set 'tomato'
58
+ @v.group.value.should eql ['tomato']
59
+ @v.group.set 'other'
60
+ @v.group.value.should eql ['tomato', 'other']
61
+ @v.group.set false
62
+ @v.group.value.should eql []
63
+ end
64
+
55
65
  it 'set array of strings or regexp' do
56
66
  @v.group.set ['tomato']
57
67
  @v.group.value.should eql ['tomato']
@@ -17,6 +17,15 @@ describe Domkey::View::OptionSelectable do
17
17
  @widget.set('fake')
18
18
  end
19
19
 
20
+ it 'set by symbol' do
21
+ expect(@widget).to receive(:set_by_symbol)
22
+ @widget.set :hello_world
23
+ end
24
+
25
+ it 'set by not implemented strategy' do
26
+ expect { @widget.set Object.new }.to raise_error(Domkey::Exception::NotImplementedError)
27
+ end
28
+
20
29
  it 'set regex' do
21
30
  expect(@widget).to receive(:set_by_value)
22
31
  @widget.set(/fake/)
@@ -66,6 +75,10 @@ describe Domkey::View::OptionSelectable do
66
75
  expect { @widget.set(:value => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
67
76
  end
68
77
 
78
+ it ':symbol' do
79
+ expect { @widget.set :hello_world }.to raise_error(Domkey::Exception::NotImplementedError)
80
+ end
81
+
69
82
  end
70
83
 
71
84
  context 'value' do
@@ -9,22 +9,37 @@ describe Domkey::View::PageObject do
9
9
  goto_html("test.html")
10
10
  end
11
11
 
12
- context 'delegate to element for missing methods' do
13
- before :all do
14
- @o = Domkey::View::PageObject.new -> { text_field(id: 'city1') }
15
- end
12
+ context 'wrapping single watir elements' do
13
+
14
+ context 'dispatcher bridges set value and options messages' do
16
15
 
17
- it 'should delegate to element when element responds' do
18
- @o.should respond_to(:id)
19
- @o.id.should eql 'city1'
16
+ it 'select' do
17
+ o = Domkey::View::PageObject.new -> { select_list(id: 'fruit_list') }
18
+ o.set 'Tomato'
19
+ o.value.should eql 'tomato'
20
+ end
20
21
 
21
- @o.should respond_to(:click)
22
- @o.click
23
22
  end
24
23
 
25
- it 'should not delegate to element when element does not repsond' do
26
- @o.should_not respond_to(:textaramabada)
27
- expect { @o.textaramabada }.to raise_error(NoMethodError)
24
+ context 'delegate unimplmemented messages' do
25
+
26
+ before :all do
27
+ @o = Domkey::View::PageObject.new -> { text_field(id: 'city1') }
28
+ end
29
+
30
+ it 'should delegate to element when element responds' do
31
+ @o.should respond_to(:id)
32
+ @o.id.should eql 'city1'
33
+
34
+ @o.should respond_to(:click)
35
+ @o.click
36
+ end
37
+
38
+ it 'should not delegate to element when element does not repsond' do
39
+ @o.should_not respond_to(:textaramabada)
40
+ expect { @o.textaramabada }.to raise_error(NoMethodError)
41
+ end
28
42
  end
43
+
29
44
  end
30
45
  end
@@ -67,11 +67,21 @@ describe Domkey::View::RadioGroup do
67
67
  @v.group.value([:index, :label]).should eql [{:index=>0, :label=>"Cucumber"}]
68
68
  end
69
69
 
70
- it 'set false has no effect' do
70
+ it 'set false noop' do
71
71
  @v.group.set false
72
72
  @v.group.value.should eql ['other']
73
73
  end
74
74
 
75
+ it 'set true noop' do
76
+ @v.group.set false
77
+ @v.group.value.should eql ['other']
78
+ end
79
+
80
+ it 'set by not implemented symbol errors' do
81
+ expect { @v.group.set :hello_world }.to raise_error(Domkey::Exception::NotImplementedError)
82
+ end
83
+
84
+
75
85
  it 'set empty array has no effect' do
76
86
  @v.group.set []
77
87
  @v.group.value.should eql ['other']
@@ -25,13 +25,12 @@ describe Domkey::View::SelectList do
25
25
 
26
26
  before :each do
27
27
  goto_html("test.html")
28
+ @widget.set false
28
29
  end
29
30
 
30
- it 'initial value on the test page' do
31
+ it 'initial example' do
32
+ @widget.set ["2", "3"]
31
33
  @widget.value.should eql ["2", "3"]
32
- end
33
-
34
- it 'initial value by keys on the test page' do
35
34
  # array
36
35
  @widget.value([:index, :text, :value]).should eql [{:index=>1, :text=>"English", :value=>"2"}, {:index=>2, :text=>"Norwegian", :value=>"3"}]
37
36
  # splat list
@@ -107,6 +106,10 @@ describe Domkey::View::SelectList do
107
106
  @widget.value.should eql ["1", "2", "", "Swedish"]
108
107
  end
109
108
 
109
+ it 'set by symbol' do
110
+ expect { @widget.set :hello_world }.to raise_error(Domkey::Exception::NotImplementedError)
111
+ end
112
+
110
113
  it 'options by default' do
111
114
  @widget.options.should eql ["1", "2", "3", "", "Swedish"]
112
115
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: domkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - rubytester
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-07 00:00:00.000000000 Z
12
+ date: 2014-04-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: watir-webdriver