operawatir 0.6.pre1-jruby → 0.7.pre1-jruby

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.
data/Gemfile.lock ADDED
@@ -0,0 +1,58 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ BlueCloth (1.0.1)
5
+ builder (3.0.0)
6
+ ci_reporter (1.7.0)
7
+ builder (>= 2.1.2)
8
+ clipboard (1.0.1)
9
+ deprecated (3.0.0)
10
+ diff-lcs (1.1.3)
11
+ gem_plugin (0.2.3)
12
+ git (1.2.5)
13
+ jeweler (1.8.3)
14
+ bundler (~> 1.0)
15
+ git (>= 1.2.5)
16
+ rake
17
+ rdoc
18
+ json (1.6.5-java)
19
+ mongrel (1.1.5-java)
20
+ gem_plugin (>= 0.2.3)
21
+ rack (1.4.1)
22
+ rack-protection (1.2.0)
23
+ rack
24
+ rake (0.8.7)
25
+ rdoc (3.12)
26
+ json (~> 1.4)
27
+ rr (1.0.4)
28
+ rspec (2.6.0)
29
+ rspec-core (~> 2.6.0)
30
+ rspec-expectations (~> 2.6.0)
31
+ rspec-mocks (~> 2.6.0)
32
+ rspec-core (2.6.4)
33
+ rspec-expectations (2.6.0)
34
+ diff-lcs (~> 1.1.2)
35
+ rspec-mocks (2.6.0)
36
+ sinatra (1.3.2)
37
+ rack (~> 1.3, >= 1.3.6)
38
+ rack-protection (~> 1.2)
39
+ tilt (~> 1.3, >= 1.3.3)
40
+ tilt (1.3.3)
41
+ yard (0.7.5)
42
+
43
+ PLATFORMS
44
+ java
45
+
46
+ DEPENDENCIES
47
+ BlueCloth (= 1.0.1)
48
+ builder
49
+ bundler (~> 1.0.0)
50
+ ci_reporter
51
+ clipboard
52
+ deprecated
53
+ jeweler
54
+ mongrel (>= 1.1.5)
55
+ rr
56
+ rspec (~> 2.6.0)
57
+ sinatra (>= 1.1)
58
+ yard
data/Rakefile CHANGED
@@ -4,10 +4,20 @@ require 'jeweler'
4
4
  require 'rspec/core/rake_task'
5
5
  require 'yard'
6
6
  require 'ci/reporter/rake/rspec'
7
+ require 'rake'
8
+
7
9
 
8
10
  require './lib/operawatir/version'
9
11
 
10
12
  Jeweler::Tasks.new do |gem|
13
+
14
+ gem.files = FileList['utils/**/*.rb', '.*', 'lib/operadriver/*LICENSE.txt', 'spec/**/*.rb', 'spec/**/**/*.*', 'lib/**/*.rb', 'lib/**/*.jar', 'bin/*', '[A-Z]*', 'test/**/*'].to_a
15
+ gem.files.exclude '*.gem'
16
+ gem.files.exclude '.gitignore'
17
+ gem.files.exclude '*.xml'
18
+ gem.files.exclude '*.bat'
19
+ gem.files.exclude '*.py'
20
+
11
21
  gem.name = 'operawatir'
12
22
  gem.version = OperaWatir.version
13
23
  gem.date = Date.today.to_s
@@ -43,7 +53,6 @@ EOF
43
53
  gem.add_development_dependency 'rr'
44
54
  gem.add_development_dependency 'clipboard'
45
55
 
46
- gem.files.exclude '.gitignore'
47
56
  end
48
57
 
49
58
  CLEAN.add 'pkg'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.pre1
1
+ 0.7.pre1
Binary file
Binary file
Binary file
data/lib/operawatir.rb CHANGED
@@ -5,17 +5,15 @@ require 'java'
5
5
  include Java
6
6
 
7
7
  %w(commons-jxpath-1.3.jar commons-exec-1.1.jar protobuf-java-2.4.1.jar
8
- selenium-java-2.13.0.jar operalaunchers-0.3.jar operadriver-v0.8.1.jar
9
- guava-10.0.1.jar).each { |jar| require "operadriver/#{jar}" }
8
+ selenium-java-2.17.jar operalaunchers-0.6.jar operadriver-v0.11.jar
9
+ guava-11.0.1.jar ini4j-0.5.2.jar json-20080701.jar).each { |jar| require "operadriver/#{jar}" }
10
10
 
11
11
  include_class org.openqa.selenium.WebDriver
12
12
  include_class org.openqa.selenium.remote.RemoteWebElement
13
13
  include_class org.openqa.selenium.NoSuchElementException
14
- include_class org.openqa.selenium.interactions.Actions
15
14
  include_class org.openqa.selenium.remote.DesiredCapabilities
16
15
  include_class com.opera.core.systems.OperaDriver
17
16
  include_class com.opera.core.systems.OperaWebElement
18
- include_class com.opera.core.systems.settings.OperaDriverSettings
19
17
 
20
18
  # Desktop stuff
21
19
  include_class com.opera.core.systems.OperaDesktopDriver
@@ -63,7 +63,7 @@ class OperaWatir::Actions
63
63
  end
64
64
 
65
65
  def double_click(element = nil)
66
- element ? @actions.double_click(element.node) : @actions.double_click()
66
+ element ? @actions.doubleClick(element.node) : @actions.doubleClick()
67
67
  self
68
68
  end
69
69
 
@@ -2,7 +2,7 @@
2
2
  class OperaWatir::Browser
3
3
  include Deprecated
4
4
 
5
- attr_accessor :driver, :active_window, :preferences, :keys, :spatnav, :utils
5
+ attr_reader :driver, :active_window, :preferences, :keys, :spatnav, :utils
6
6
 
7
7
  def self.settings=(settings={})
8
8
  @desired_capabilities = nil # Bust cache
@@ -22,12 +22,12 @@ class OperaWatir::Browser
22
22
  def initialize
23
23
  OperaWatir.compatibility! unless OperaWatir.api >= 3
24
24
 
25
- self.driver = OperaDriver.new(self.class.desired_capabilities)
26
- self.active_window = OperaWatir::Window.new(self)
27
- self.preferences = OperaWatir::Preferences.new(self)
28
- self.keys = OperaWatir::Keys.new(self)
29
- self.spatnav = OperaWatir::Spatnav.new(self)
30
- self.utils = OperaWatir::Utils.new(self)
25
+ @driver = OperaDriver.new(self.class.desired_capabilities)
26
+ @active_window = OperaWatir::Window.new(self)
27
+ @preferences = OperaWatir::Preferences.new(driver)
28
+ @keys = OperaWatir::Keys.new(self)
29
+ @spatnav = OperaWatir::Spatnav.new(self)
30
+ @utils = OperaWatir::Utils.new(self)
31
31
  end
32
32
 
33
33
  alias_method :window, :active_window
@@ -168,28 +168,33 @@ class OperaWatir::Browser
168
168
  # Keyboard
169
169
 
170
170
  def key(key)
171
- driver.key(key)
171
+ keys.key(key)
172
+
173
+ if key =~ /enter/
174
+ sleep Java::ComOperaCoreSystems::OperaIntervals.EXEC_SLEEP.getValue
175
+ driver.waitForLoadToComplete
176
+ end
172
177
  end
173
178
 
174
179
  deprecated :key, 'browser.keys.send'
175
180
 
176
181
  def key_down(key)
177
- driver.keyDown(key)
182
+ keys.down(key)
178
183
  end
179
184
 
180
- deprecated :key, 'browser.keys.down'
185
+ deprecated :key_down, 'browser.keys.down'
181
186
 
182
187
  def key_up(key)
183
- driver.keyUp(key)
188
+ keys.up(key)
184
189
  end
185
190
 
186
- deprecated :key, 'browser.keys.up or browser.keys.release'
191
+ deprecated :key_up, 'browser.keys.up or browser.keys.release'
187
192
 
188
193
  def type(text)
189
- driver.type(text)
194
+ keys.send(text)
190
195
  end
191
196
 
192
- deprecated :key, 'browser.keys.send'
197
+ deprecated :type, 'browser.keys.send'
193
198
 
194
199
  # actions
195
200
 
@@ -197,6 +202,10 @@ class OperaWatir::Browser
197
202
  OperaWatir::Actions.new(browser)
198
203
  end
199
204
 
205
+ def inspect
206
+ "#<OperaWatir::Browser:#{object_id}>" # @settings=#{@settings.insepct}, @active_window=#{@active_window.inspect}"
207
+ end
208
+
200
209
  private
201
210
 
202
211
  def self.desired_capabilities(desktopwatir = false)
@@ -39,7 +39,7 @@ class OperaWatir::Element
39
39
 
40
40
  def text
41
41
  if node.tag_name =~ /input|textarea|select/i
42
- node.value.strip
42
+ node.getAttribute('value').strip
43
43
  else
44
44
  node.getText.strip
45
45
  end
@@ -9,6 +9,7 @@ require 'rspec'
9
9
  require 'rbconfig'
10
10
 
11
11
  require File.expand_path('../../../spec/operawatir/matchers', __FILE__)
12
+ $LOAD_PATH.unshift File.expand_path('../../../utils/formatters', __FILE__)
12
13
 
13
14
  module OperaWatir::DesktopHelper
14
15
  extend self
@@ -1,8 +1,10 @@
1
1
  class OperaWatir::Element
2
2
  extend Forwardable
3
3
 
4
+ attr_reader :node
5
+
4
6
  def initialize(node)
5
- self.node = node
7
+ @node = node
6
8
  end
7
9
 
8
10
  # TODO Need support for this in Webdriver
@@ -68,9 +70,12 @@ class OperaWatir::Element
68
70
  def_delegator :node, :getText, :text
69
71
  def_delegator :node, :getHTML, :html
70
72
 
71
- def_delegator :node, :getElementName, :tag_name
72
73
  def_delegator :node, :clear, :clear
73
74
 
75
+ def tag_name
76
+ node.callMethod('locator.nodeName')
77
+ end
78
+
74
79
  # On elements of type `input`, `textarea` or `select` it will fetch
75
80
  # the texteditable `value` attribute, on every other element type it
76
81
  # returns the DOM attribute `value`.
@@ -87,7 +92,8 @@ class OperaWatir::Element
87
92
  end
88
93
  =end
89
94
 
90
- node.getValue
95
+ #node.getValue
96
+ attr('value')
91
97
  end
92
98
 
93
99
  #
@@ -232,8 +238,6 @@ class OperaWatir::Element
232
238
 
233
239
  private
234
240
 
235
- attr_accessor :node
236
-
237
241
  # Finders
238
242
 
239
243
  def find_elements_by_id(value)
@@ -24,7 +24,7 @@ class OperaWatir::Keys
24
24
  #
25
25
 
26
26
  def down(*args)
27
- args.each { |key| driver.keyDown(key) }
27
+ args.each { |key| key_down(key) }
28
28
  end
29
29
 
30
30
  #
@@ -40,7 +40,7 @@ class OperaWatir::Keys
40
40
  #
41
41
 
42
42
  def up(*args)
43
- args.each { |key| driver.keyUp(key) }
43
+ args.each { |key| key_up(key) }
44
44
  end
45
45
 
46
46
  #
@@ -52,7 +52,7 @@ class OperaWatir::Keys
52
52
  #
53
53
 
54
54
  def release
55
- driver.releaseKeys
55
+ exec.releaseKeys
56
56
  end
57
57
 
58
58
  #
@@ -92,7 +92,7 @@ class OperaWatir::Keys
92
92
  when :access
93
93
  access_key item[index + 1]
94
94
  when Symbol
95
- down key
95
+ key_down key
96
96
  else
97
97
  key key
98
98
  end
@@ -106,24 +106,37 @@ class OperaWatir::Keys
106
106
  end
107
107
  end
108
108
 
109
+ def key(key)
110
+ key_down(key)
111
+ key_up(key)
112
+ end
113
+
109
114
  private
110
115
 
111
- def driver
112
- browser.driver
116
+ def key_down(key)
117
+ exec.key(key.to_s, false)
113
118
  end
114
119
 
115
- def key(key)
116
- driver.key key
120
+ def key_up(key)
121
+ exec.key(key.to_s, true)
117
122
  end
118
123
 
119
124
  def type(text)
120
- driver.type text
125
+ exec.type(text.to_s)
121
126
  end
122
127
 
123
128
  def access_key(key)
124
129
  driver.operaAction 'Enter access key mode'
125
- send key
130
+ send key.to_s
126
131
  driver.operaAction 'Leave access key mode'
127
132
  end
128
133
 
129
- end
134
+ def exec
135
+ driver.getExecService
136
+ end
137
+
138
+ def driver
139
+ browser.driver
140
+ end
141
+
142
+ end
@@ -1,31 +1,38 @@
1
1
  # -*- coding: utf-8 -*-
2
- class String
2
+ class Array
3
3
 
4
4
  #
5
- # Translates an Opera preferences key string into a Ruby method name.
6
- # It will remove tabs and spaces at beginning of string, replace
7
- # further spaces with an underscore and make the string lower-case.
8
- #
9
- # The method extends the String object and can be called as a regular
10
- # method on any string in Ruby.
5
+ # Gets the unique entries in an array.
11
6
  #
12
7
 
13
- def methodize
14
- self.gsub(/^\\t(\s+)/, '').gsub(/\s+/, '_').downcase
8
+ def uniq_by(&blk)
9
+ transforms = {}
10
+ select do |el|
11
+ t = blk[el]
12
+ should_keep = !transforms[t]
13
+ transforms[t] = true
14
+ should_keep
15
+ end
15
16
  end
16
17
 
18
+ end
19
+
20
+ class String
21
+
17
22
  #
18
- # Translates a previously keyized Opera preferences method string into
19
- # an Opera preferences key string. This is done by replacing
20
- # underscores with spaces and capitalizing each word in the string.
23
+ # Translates a preference key into a Ruby method name. It will
24
+ # remove tabs and spaces at beginning and the end of the string, remove
25
+ # paranthesis, replace further spaces and dots with underscores and make
26
+ # the final string lower-case.
21
27
  #
22
28
  # The method extends the String object and can be called as a regular
23
29
  # method on any string in Ruby.
24
30
  #
25
31
 
26
- def keyize
27
- self.gsub(/_/, ' ').gsub(/\b('?[a-z])/) { $1.capitalize }
32
+ def methodize
33
+ self.strip.gsub(/\(|\)/, '').gsub(/\s+|-+|\./, '_').downcase
28
34
  end
35
+
29
36
  end
30
37
 
31
38
  #
@@ -104,8 +111,6 @@ class OperaWatir::Preferences
104
111
  extend Forwardable
105
112
  include Enumerable
106
113
 
107
- attr_accessor :browser, :driver
108
-
109
114
  #
110
115
  # The OperaWatir::Preferences object is created automatically when you
111
116
  # create an OperaWatir::Browser object, and is available as
@@ -118,55 +123,53 @@ class OperaWatir::Preferences
118
123
  # @param [Object] browser An OperaWatir::Browser object.
119
124
  #
120
125
 
121
- def initialize(browser)
122
- self.browser, self.driver = browser, browser.driver
123
-
124
- raw_prefs = driver.listAllPrefs.to_a
125
- @_prefs = {}
126
- @_prefs = raw_prefs.map { |s| Section.new(self, s) }.sort_by { |s| s.key }
126
+ def initialize(driver)
127
+ raw_prefs = driver.preferences.all.to_a
127
128
 
128
- @old_prefs = _prefs
129
+ @sections = []
130
+ raw_prefs.collect { |p| p.get_section }.uniq.each do |section|
131
+ @sections << Section.new(raw_prefs.find_all { |p| p.get_section == section })
132
+ end
129
133
  end
130
134
 
131
- def_delegators :_prefs, :[],
132
- :each,
133
- :length,
134
- :size,
135
- :first,
136
- :last,
137
- :empty?
135
+ def_delegators :@sections, :[],
136
+ :each,
137
+ :length,
138
+ :size,
139
+ :first,
140
+ :last,
141
+ :empty?
138
142
 
139
143
  #
140
- # When calling Preferences#any_method_name, the `any_method_name` will
141
- # be caught by this method.
144
+ # When calling Preferences#any_method_name the `any_method_name` will
145
+ # be caught by this meta method.
142
146
  #
143
147
  # This is the standard way of looking up sections. `any_method_name`
144
- # should be replaced by a methodized version of the section as it
148
+ # should be replaced by a methodize version of the secion as it
145
149
  # appears in the Opera preferences list which you can find at
146
150
  # `opera:config`.
147
151
  #
148
152
  # @example
149
153
  #
150
154
  # browser.preferences.interface_colors
151
- # # will return section Interface Colors
155
+ # # will return section "Interface Colors"
152
156
  #
153
- # @param section method to look up in preferences
154
- # @return [Object] a Preferences::Section object
157
+ # @param section method to look up in preferences
158
+ # @return [Object] a Preferences::Section object
159
+ # @throws PreferencesException if section does not exist
155
160
  #
156
161
 
157
162
  def method_missing(method)
158
163
  method = method.to_s
159
-
160
- if _prefs.any? { |s| s.method == method }
161
- _prefs.find { |s| s.method == method }
162
- end
164
+ raise OperaWatir::Exceptions::PreferencesException, "Section does not exist: #{method}" unless @sections.any? { |s| s.method == method }
165
+ @sections.find { |s| s.method == method }
163
166
  end
164
167
 
165
168
  #
166
169
  # Retrieves a human-readable list of Opera preferences available.
167
170
  # This is used for convenience and should never be parsed. Consider
168
- # using the built-in Ruby iterator #each (with friends) or
169
- # Preferences#to_a for that.
171
+ # using the iterator #each (with friends) or Preferences#to_a for
172
+ # that.
170
173
  #
171
174
  # @return [String] list of preferences
172
175
  #
@@ -174,12 +177,11 @@ class OperaWatir::Preferences
174
177
  def to_s
175
178
  text = ''
176
179
 
177
- _prefs.each do |s|
180
+ @sections.each do |s|
178
181
  text << "#{s.method}\n"
179
182
 
180
183
  s.each do |k|
181
184
  text << " #{k.method}\n"
182
- text << " type: #{k.type.inspect}\n"
183
185
  text << " value: #{k.value.inspect}\n"
184
186
  text << " default: #{k.default.inspect}\n"
185
187
  text << " enabled: #{k.enabled?.inspect}\n"
@@ -192,16 +194,16 @@ class OperaWatir::Preferences
192
194
  end
193
195
 
194
196
  #
195
- # Returns a list of all preferences in array form. This can be used
196
- # for external parsing. If you wish to manipulate or iterate through
197
- # the list of preferences, consider using the built-in Ruby iterator
198
- # #each (with friends).
197
+ # Returns a duplicate list of all preferences in array form. This
198
+ # can be used for external parsing. If you wish to manipulate or
199
+ # iterate through the list of preferences, consider using the
200
+ # iterator #each (with friends).
199
201
  #
200
202
  # @return [Array] list of preferences
201
203
  #
202
204
 
203
205
  def to_a
204
- _prefs.dup
206
+ @sections.dup
205
207
  end
206
208
 
207
209
  #
@@ -212,36 +214,13 @@ class OperaWatir::Preferences
212
214
  #
213
215
 
214
216
  def exists?
215
- !_prefs.empty?
217
+ !@sections.empty?
216
218
  end
217
219
 
218
220
  alias_method :exist?, :exists? # LOL Ruby
219
221
 
220
- =begin
221
- def cleanup
222
- @old_prefs.dup
223
- end
224
-
225
- def cleanup!
226
- @old_prefs.each do |old_section|
227
- old_section.each do |old_key|
228
- #self.send(old_section.method).send(old_key.method).send(:value, old_key.value)
229
- puts "#{old_section.method}.#{old_key.method}.value = #{old_key.value}"
230
- end
231
- end
232
-
233
- _prefs
234
- end
235
- =end
236
-
237
- private
238
-
239
- def _prefs
240
- @_prefs
241
- end
242
-
243
222
  #
244
- # OperaWatir::Preferences::Section represents a section in Opera
223
+ # OperaWatir::Preferences::Section represents a section in the Opera
245
224
  # configuration.
246
225
  #
247
226
 
@@ -249,30 +228,29 @@ private
249
228
  extend Forwardable
250
229
  include Enumerable
251
230
 
252
- attr_accessor :parent, :driver, :method, :key
231
+ attr_reader :key, :method
253
232
 
254
- def initialize(parent, raw_section)
255
- self.parent, self.driver = parent, parent.driver
256
- self.method, self.key = raw_section.first.methodize, raw_section.first
257
-
258
- @_keys = raw_section[1].map { |k| Key.new(self, k) }.sort_by { |k| k.key }
233
+ def initialize(raw_section)
234
+ @key = raw_section.first.get_section
235
+ @method = @key.methodize
236
+ @keys ||= raw_section.collect { |p| Key.new(self, p) }.sort_by { |p| p.key }
259
237
  end
260
238
 
261
- def_delegators :_keys, :[],
262
- :length,
263
- :size,
264
- :first,
265
- :last,
266
- :empty?
239
+ def_delegators :@keys, :[],
240
+ :length,
241
+ :size,
242
+ :first,
243
+ :last,
244
+ :empty?
267
245
 
268
246
  def each
269
247
  return unless block_given?
270
- _keys.each { |k| yield k }
248
+ @keys.each { |k| yield k }
271
249
  end
272
250
 
273
251
  #
274
252
  # When calling Preferences::Section#any_method_name, the
275
- # `any_method_name` will be caught by this method.
253
+ # `any_method_name` will be caught by this meta method.
276
254
  #
277
255
  # This is the standard way of looking up preference entries.
278
256
  # `any_method_name` should be replaced by a methodized version of
@@ -284,68 +262,58 @@ private
284
262
  # browser.preferences.interface_colors.background
285
263
  # # will return the “Background” entry in section “Interface Colors”
286
264
  #
287
- # @param method method to look up in section
288
- # @return [Object] a Preferences::Section::Key (entry) object
265
+ # @param method method to look up in section
266
+ # @return [Object] a Preferences::Section::Key (entry) object
267
+ # @throws PreferencesException if key does not exist
289
268
  #
290
269
 
291
- def method_missing(method)
292
- method = method.to_s
293
-
294
- if _keys.any? { |k| k.method == method }
295
- _keys.find { |k| k.method == method }
296
- end
270
+ def method_missing(m)
271
+ m = m.to_s
272
+ raise OperaWatir::Exceptions::PreferencesException, "No such preference: #{method}.#{m}" unless @keys.any? { |k| k.method == m }
273
+ @keys.find { |k| k.method == m }
297
274
  end
298
275
 
299
- private
300
-
301
- def _keys
302
- @_keys
276
+ def inspect
277
+ "#<OperaWatir::Preferences::Section:#{object_id}> @key=#{key.inspect}, @method=#{method.to_sym.inspect}, @keys=[...]"
303
278
  end
304
279
 
305
280
  class Key
306
281
  extend Forwardable
307
282
  include Enumerable
308
283
 
309
- attr_accessor :parent, :driver, :method, :key, :type, :value
284
+ attr_reader :parent, :method
310
285
 
311
- def initialize(parent, raw_key)
312
- self.parent, self.driver = parent, parent.driver
313
- self.method, self.key = raw_key.first.methodize, raw_key.first
314
- raw_data = raw_key[1].to_s
286
+ def initialize(parent, raw_pref)
287
+ @parent = parent
288
+ @pref = raw_pref
289
+ @method = key.methodize
290
+ end
315
291
 
316
- raw_data =~ /^type: ([A-Z]+)$/
317
- self.type = $1.to_s.capitalize
292
+ def method
293
+ @method
294
+ end
318
295
 
319
- raw_data =~ /^value: \"(.*)\"$/
320
- @value = $1.to_s
296
+ def_delegator :@pref, :get_key, :key
321
297
 
322
- # Ruby doesn't support attr_accessor's with question mark in their
323
- # name.
324
- raw_data =~ /^enabled: (true|false)$/
325
- @enabled = $1.truthy?
298
+ def value
299
+ ruby_idiomatic(@pref.get_value)
326
300
  end
327
301
 
328
302
  #
329
- # Whether the current key entry is enabled inside Opera or not.
303
+ # Sets the key's value to the specified string.
330
304
  #
331
- # @return [Boolean] true if enabled, false if otherwise
305
+ # @param [String] value the value you wish to set for the key
332
306
  #
333
307
 
334
- def enabled?
335
- !!@enabled
336
- end
308
+ def_delegator :@pref, :set_value, :value=
337
309
 
338
310
  #
339
- # Sets the key's value to the specified string.
311
+ # Whether the current key entry is enabled inside Opera or not.
340
312
  #
341
- # @param [String] value the value you wish to set for the key
313
+ # @return [Boolean] true if enabled, false if otherwise
342
314
  #
343
315
 
344
- def value=(value)
345
- value = value.truthy? ? '1' : '0' if type.include?('Boolean')
346
- driver.setPref parent.key, key, value.to_s
347
- @value = value
348
- end
316
+ def_delegator :@pref, :is_enabled, :enabled?
349
317
 
350
318
  #
351
319
  # Returns key's default value.
@@ -354,7 +322,7 @@ private
354
322
  #
355
323
 
356
324
  def default
357
- @default ||= driver.getDefaultPref parent.key, key
325
+ ruby_idiomatic(@pref.get_default_value)
358
326
  end
359
327
 
360
328
  #
@@ -364,9 +332,29 @@ private
364
332
  #
365
333
 
366
334
  def default!
367
- self.value=(default)
335
+ @pref.reset
336
+ @pref.value
368
337
  end
338
+
339
+ def inspect
340
+ "#<OperaWatir::Preferences::Section::Key:#{object_id}> @key=#{key.inspect}, @method=#{method.to_sym.inspect}, @parent=#{parent.inspect}, @value=#{value.inspect}, @enabled=#{enabled?.inspect}, @default=#{default.inspect}"
341
+ end
342
+
343
+ private
344
+
345
+ def ruby_idiomatic(value)
346
+ case @pref.get_type.to_string
347
+ when /Integer/:
348
+ value.to_i
349
+ when /Boolean/:
350
+ !!value
351
+ else
352
+ value.to_s
353
+ end
354
+ end
355
+
369
356
  end
357
+
370
358
  end
371
359
 
372
- end
360
+ end