iegrip 0.0.4

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4c45c0f0882cc76475e1140bc1ee21e6a3ba6d66
4
+ data.tar.gz: 451d53a837b9b8611e494d9bb0e2e0c808a5e6ca
5
+ SHA512:
6
+ metadata.gz: 40c1f957bb348752a61130da1fb2c88c10e45a2422a1a0dfc63f73e066feb742f3a89ce54ebd6bb4e256262ea0393a2526716b555ce1bdd4dbab547e2d19bde9
7
+ data.tar.gz: e67222c69f2785c7b83ed7e261ed3516fbe0b8d700ed35965b2382735daa4e97a474d2a3153e6aeeaf5303568d0603ba20c89ead072b904479722568636699a6
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in iegrip.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 yac4423
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # Iegrip
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'iegrip'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install iegrip
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/[my-github-username]/iegrip/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/iegrip-0.0.2.gem ADDED
Binary file
data/iegrip.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'iegrip/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "iegrip"
8
+ spec.version = IEgrip::VERSION
9
+ spec.authors = ["yac4423"]
10
+ spec.email = ["iegrip@tech-notes.dyndns.org"]
11
+ spec.summary = %q{Control Internet Explorer from Ruby script.}
12
+ spec.description = %q{Control Internet Explorer from Ruby script.}
13
+ spec.homepage = "https://github.com/yac4423/iegrip"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
@@ -0,0 +1,68 @@
1
+ module IEgrip
2
+ class GripWrapper
3
+ def initialize(raw_object, ie_obj)
4
+ if raw_object.methods.include?("raw")
5
+ @raw_object = raw_object.raw
6
+ else
7
+ @raw_object = raw_object
8
+ end
9
+ @ie_obj = ie_obj
10
+ end
11
+
12
+ def raw
13
+ @raw_object
14
+ end
15
+
16
+ def inspect()
17
+ "<#{self.class}>"
18
+ end
19
+
20
+ def ole_methodNames
21
+ list = []
22
+ @raw_object.ole_methods.each {|ole_method|
23
+ list.push ole_method.name
24
+ }
25
+ list
26
+ end
27
+
28
+ private
29
+
30
+ OLE_METHODS = [:Type, :Initialize]
31
+ def method_missing(m_id, *params)
32
+ unless OLE_METHODS.include?(m_id)
33
+ missing_method_name = m_id.to_s.downcase
34
+ methods.each {|method|
35
+ if method.to_s.downcase == missing_method_name
36
+ return send(method, *params)
37
+ end
38
+ }
39
+ end
40
+ # Undefined Method is throwed to raw_object
41
+ begin
42
+ @raw_object.send(m_id, *params)
43
+ rescue
44
+ raise $!,$!.message, caller
45
+ end
46
+ end
47
+
48
+ def toRaw(target_obj)
49
+ target_obj.respond_to?("raw") ? target_obj.raw : target_obj
50
+ end
51
+ end
52
+
53
+ class FileSystemObject
54
+ include Singleton
55
+ def initialize
56
+ @body = WIN32OLE.new('Scripting.FileSystemObject')
57
+ end
58
+
59
+ def fullpath(filename)
60
+ @body.getAbsolutePathName(filename)
61
+ end
62
+
63
+ def GetFileVersion(fullpath)
64
+ @body.GetFileVersion(fullpath)
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,3 @@
1
+ module IEgrip
2
+ VERSION = "0.0.4"
3
+ end
data/lib/iegrip.rb ADDED
@@ -0,0 +1,541 @@
1
+ #!ruby -Ks
2
+
3
+ # IEGrip Ver.0.00 2014/10/06
4
+ # Copyright (C) 2014 Yac <iegrip@tech-notes.dyndns.org>
5
+ # This software is released under the MIT License, see LICENSE.txt.
6
+ require 'win32ole'
7
+ require 'win32api'
8
+ require 'singleton'
9
+ require "iegrip/version"
10
+ require 'iegrip/GripWrapper'
11
+
12
+ module IEgrip
13
+ # ========================
14
+ # IE Application
15
+ # ========================
16
+ class IE < GripWrapper
17
+ def initialize()
18
+ @raw_object = WIN32OLE.new("InternetExplorer.Application")
19
+ @raw_object.visible = true
20
+ fs = FileSystemObject.instance
21
+ ver = fs.GetFileVersion(@raw_object.FullName)
22
+ @majorVersion = ver.split(/\./)[0].to_i
23
+ @urlDownloadToFile = Win32API.new('urlmon', 'URLDownloadToFileA', %w(l p p l l), 'l')
24
+ end
25
+
26
+ def version
27
+ @majorVersion
28
+ end
29
+
30
+ def document()
31
+ doc = Document.new(@raw_object.Document, self)
32
+ end
33
+
34
+ def navigate(url)
35
+ @raw_object.navigate(url)
36
+ sleep 0.5
37
+ wait_stable()
38
+ end
39
+
40
+ COMPLETE_STATE = 4
41
+ def wait_stable()
42
+ while @raw_object.Busy == true
43
+ sleep 0.5
44
+ end
45
+ loop do
46
+ break if @raw_object.ReadyState == COMPLETE_STATE
47
+ sleep 0.5
48
+ end
49
+ end
50
+
51
+ def export(href, filename)
52
+ @urlDownloadToFile.call(0, href, filename, 0, 0)
53
+ end
54
+ end
55
+
56
+ # ========================
57
+ # Node
58
+ # ========================
59
+ class Node < GripWrapper
60
+ NODETYPE_DIC = {
61
+ 1 => :ELEMENT_NODE,
62
+ 2 => :ATTRIBUTE_NODE,
63
+ 3 => :TEXT_NODE,
64
+ 4 => :CDATA_SECTION_NODE,
65
+ 5 => :ENTITY_REFERENCE_NODE,
66
+ 6 => :ENTITY_NODE,
67
+ 7 => :PROCESSING_INSTRUCTION_NODE,
68
+ 8 => :COMMENT_NODE,
69
+ 9 => :DOCUMENT_NODE,
70
+ 10 => :DOCUMENT_TYPE_NODE,
71
+ 11 => :DOCUMENT_FRAGMENT_NODE,
72
+ 12 => :NOTATION_NODE,
73
+ }
74
+ def tagName
75
+ case self.nodeType
76
+ when 3
77
+ @raw_object.nodeName
78
+ else
79
+ @raw_object.tagName.downcase
80
+ end
81
+ end
82
+
83
+ def nodeName
84
+ @raw_object.nodeName
85
+ end
86
+
87
+ def nodeTypeName
88
+ nodetype = @raw_object.nodetype
89
+ NODETYPE_DIC[nodetype] || :UNKNOWN
90
+ end
91
+
92
+ def inspect
93
+ "<#{self.class}, Name:#{self.nodeName}>"
94
+ end
95
+
96
+ def childNodes
97
+ raw_childNodes = @raw_object.childNodes
98
+ raw_childNodes ? NodeList.new(raw_childNodes, @ie_obj) : nil
99
+ end
100
+
101
+ def parentNode
102
+ raw_element = @raw_object.parentNode()
103
+ raw_element ? TagElement.new(raw_element, @ie_obj) : nil
104
+ end
105
+
106
+ def previousSibling
107
+ raw_node = @raw_object.previousSibling()
108
+ raw_node ? Node.new(raw_node, @ie_obj) : nil
109
+ end
110
+
111
+ def nextSibling
112
+ raw_node = @raw_object.nextSibling()
113
+ raw_node ? Node.new(raw_node, @ie_obj) : nil
114
+ end
115
+
116
+ def firstChild
117
+ raw_node = @raw_object.firstChild()
118
+ raw_node ? Node.new(raw_node, @ie_obj) : nil
119
+ end
120
+
121
+ def lastChild
122
+ raw_node = @raw_object.lastChild()
123
+ raw_node ? Node.new(raw_node, @ie_obj) : nil
124
+ end
125
+
126
+ def hasChildNodes()
127
+ #@raw_object.hasChildNodes() # This method return WIN32OLE object. not boolean
128
+ @raw_object.childNodes.length > 0
129
+ end
130
+
131
+ def contains(node)
132
+ @raw_object.contains(toRaw(node))
133
+ end
134
+
135
+ def isEqualNode(node)
136
+ @raw_object.isEqualNode(toRaw(node))
137
+ end
138
+
139
+ def getElementById(tag_id)
140
+ raw_element = @raw_object.getElementById(tag_id)
141
+ raw_element ? TagElement.new(raw_element, @ie_obj) : nil
142
+ end
143
+
144
+ def getElementsByName(name)
145
+ raw_col = @raw_object.getElementsByName(name)
146
+ raw_col ? TagElementCollection.new(raw_col, @ie_obj) : nil
147
+ end
148
+
149
+ def getElementsByTagName(tag_name)
150
+ raw_col = @raw_object.getElementsByTagName(tag_name)
151
+ raw_col ? TagElementCollection.new(raw_col, @ie_obj) : nil
152
+ end
153
+ alias tags getElementsByTagName
154
+
155
+ def getStructure(level=0)
156
+ structure = []
157
+ self.childNodes.each {|subnode|
158
+ next if (subnode.nodeType == 3) or (subnode.nodeType == 8)
159
+ if subnode.hasChildNodes()
160
+ sub_struct = subnode.getStructure(level+1)
161
+ if sub_struct.size > 0
162
+ structure.push (" " * level) + "<#{subnode.tagName}>"
163
+ structure += sub_struct
164
+ structure.push (" " * level) + "</#{subnode.tagName}>"
165
+ else
166
+ structure.push (" " * level) + "<#{subnode.tagName}/>"
167
+ end
168
+ else
169
+ structure.push (" " * level) + "<#{subnode.tagName}/>"
170
+ end
171
+ }
172
+ return structure
173
+ end
174
+ end
175
+
176
+ # ========================
177
+ # IE.Document
178
+ # ========================
179
+ class Document < Node
180
+ def frames(index=nil)
181
+ if index
182
+ return(nil) if index >= @raw_object.Frames.length
183
+ Frames.new(@raw_object.frames, @ie_obj)[index]
184
+ else
185
+ Frames.new(@raw_object.frames, @ie_obj)
186
+ end
187
+ end
188
+
189
+ def head()
190
+ raw_head = @raw_object.head
191
+ raw_head ? TagElement.new(raw_head, @ie_obj) : nil
192
+ end
193
+
194
+ def body()
195
+ #raw_body = @raw_object.getElementsByTagName("BODY")
196
+ #raw_body ? TagElementCollection.new(raw_body, @ie_obj)[0] : nil
197
+ TagElement.new(@raw_object.body, @ie_obj)
198
+ end
199
+
200
+ def all
201
+ raw_all = @raw_object.all
202
+ raw_all ? TagElementCollection.new(raw_all, @ie_obj) : nil
203
+ end
204
+
205
+
206
+ def documentElement
207
+ raw_element = @raw_object.documentElement()
208
+ raw_element ? TagElement.new(raw_element, @ie_obj) : nil
209
+ end
210
+
211
+ def createElement(tag_name)
212
+ raw_element = @raw_object.createElement(tag_name)
213
+ TagElement.new(raw_element, @ie_obj)
214
+ end
215
+
216
+ def createAttribute(attr_name)
217
+ raw_attr = @raw_object.createAttribute(attr_name);
218
+ Attr.new(raw_attr, @ie_obj)
219
+ end
220
+
221
+ end
222
+
223
+ # ========================
224
+ # TAG Element
225
+ # ========================
226
+ class TagElement < Node
227
+ def tagname
228
+ @raw_object.tagName.downcase
229
+ end
230
+
231
+ def text=(set_text)
232
+ case tagName
233
+ when "SELECT"
234
+ option_list = tags("OPTION")
235
+ option_list.each {|option_element|
236
+ if option_element.innerText == set_text
237
+ option_element.selected = true
238
+ break
239
+ end
240
+ }
241
+ else
242
+ @raw_object.value = set_text
243
+ end
244
+ end
245
+
246
+ def inspect()
247
+ case tagName
248
+ when "SELECT"
249
+ innerHTML = replace_cr_code(self.innerHTML)
250
+ "<#{self.class}, TAG:#{tagName}, [#{self.innerHTML}]"
251
+ when "INPUT", "IMG", "A"
252
+ outerHTML = replace_cr_code(self.outerHTML)
253
+ "<#{self.class}, TAG:#{tagName}, [#{self.outerHTML}]"
254
+ when "TR", "TD"
255
+ innerText = replace_cr_code(self.innerText)
256
+ "<#{self.class}, TAG:#{tagName}, [#{innerText}]"
257
+ else
258
+ "<#{self.class}, TAG:#{tagName}>"
259
+ end
260
+ end
261
+
262
+ def to_s
263
+ @raw_object.value
264
+ end
265
+
266
+ def click
267
+ if @ie_obj.version >= 10
268
+ case self.tagname.downcase
269
+ when "a"
270
+ href = self.href
271
+ @ie_obj.navigate(href)
272
+ when "input"
273
+ if self.Type.downcase == "submit"
274
+ puts "**** Submit Type is detected."
275
+ parent_form = self.getParentForm()
276
+ if parent_form
277
+ puts "parent_form = #{parent_form.outerHTML}"
278
+ ret_val = parent_form.submit()
279
+ puts "parent_form.submit() submit is called. ret_val = #{ret_val.inspect}"
280
+ sleep 1
281
+ parent_form.raw.submit()
282
+ parent_form.fireEvent("onSubmit")
283
+ parent_form.fireEvent("onClick")
284
+ else
285
+ puts "parent_form not detected."
286
+ end
287
+ end
288
+ when "button"
289
+ @raw_object.fireEvent("onClick")
290
+ else
291
+ @raw_object.click
292
+ end
293
+ else
294
+ @raw_object.click
295
+ end
296
+ @ie_obj.wait_stable()
297
+ end
298
+
299
+ def getElementsByTagName(tag_name)
300
+ raw_collection = @raw_object.getElementsByTagName(tag_name)
301
+ raw_collection ? TagElementCollection.new(raw_collection, @ie_obj) : nil
302
+ end
303
+ alias tags getElementsByTagName
304
+
305
+ def all
306
+ TagElementCollection.new(@raw_object.all, @ie_obj)
307
+ end
308
+
309
+ def parentElement
310
+ raw_parent = @raw_object.parentElement
311
+ raw_parent ? TagElement.new(raw_parent, @ie_obj) : nil
312
+ end
313
+
314
+ def getParentForm()
315
+ puts "getParentForm() is called."
316
+ parent_tag = self.parentElement
317
+ loop do
318
+ puts "parent_tag = #{parent_tag.inspect}"
319
+ if parent_tag == nil
320
+ return nil
321
+ elsif parent_tag.tagName == "form"
322
+ return parent_tag
323
+ else
324
+ parent_tag = parent_tag.parentElement
325
+ end
326
+ end
327
+ end
328
+
329
+ def export(filename)
330
+ case self.tagName.downcase
331
+ when "img"
332
+ @ie_obj.export(self.src, filename)
333
+ when "a"
334
+ @ie_obj.export(self.href, filename)
335
+ else
336
+ raise "export() is not support."
337
+ end
338
+ end
339
+
340
+ def setAttributeNode(attribute)
341
+ @raw_object.setAttributeNode(toRaw(attribute));
342
+ end
343
+
344
+ def getAttribute(attr_name)
345
+ @raw_object.getAttribute(attr_name)
346
+ end
347
+
348
+ def getAttributeNode(attr_name)
349
+ raw_attr = @raw_object.getAttributeNode(attr_name)
350
+ raw_attr ? Attr.new(raw_attr, @ie_obj) : nil
351
+ end
352
+
353
+ def removeAttribute(attr_name)
354
+ @raw_object.removeAttribute(attr_name)
355
+ end
356
+
357
+ def removeAttributeNode( attr )
358
+ raw_attr = @raw_object.removeAttributeNode( toRaw(attr) )
359
+ raw_attr ? Attr.new(raw_attr, @ie_obj) : nil
360
+ end
361
+
362
+ private
363
+
364
+ def replace_cr_code(text)
365
+ replcae_text = text.gsub(/\r/, '\r')
366
+ replcae_text.gsub!(/\n/, '\n')
367
+ return replcae_text
368
+ end
369
+ end
370
+
371
+ # ========================
372
+ # TAG Element Collection
373
+ # ========================
374
+ class TagElementCollection < GripWrapper
375
+ def [](index)
376
+ return(nil) if index >= @raw_object.length
377
+ TagElement.new(@raw_object.item(index), @ie_obj)
378
+ end
379
+
380
+ def size
381
+ @raw_object.length
382
+ end
383
+
384
+ def each
385
+ @raw_object.each {|tag_element|
386
+ yield TagElement.new(tag_element, @ie_obj)
387
+ }
388
+ end
389
+
390
+ def getTagsByTitle(target_str)
391
+ get_tags_by_key(target_str, "VALUE")
392
+ end
393
+ def getTagsByValue(target_str)
394
+ get_tags_by_key(target_str, "VALUE")
395
+ end
396
+ def getTagsByText(target_str)
397
+ get_tags_by_key(target_str, "INNERTEXT")
398
+ end
399
+ def getTagsByName(target_str)
400
+ get_tags_by_key(target_str, "NAME")
401
+ end
402
+
403
+ def getTagByTitle(target_str)
404
+ taglist = get_tags_by_key(target_str, "VALUE")
405
+ taglist ? taglist[0]: nil
406
+ end
407
+ def getTagByValue(target_str)
408
+ taglist = get_tags_by_key(target_str, "VALUE")
409
+ taglist ? taglist[0]: nil
410
+ end
411
+ def getTagByText(target_str)
412
+ taglist = get_tags_by_key(target_str, "INNERTEXT")
413
+ taglist ? taglist[0]: nil
414
+ end
415
+ def getTagByName(target_str)
416
+ taglist = get_tags_by_key(target_str, "NAME")
417
+ taglist ? taglist[0]: nil
418
+ end
419
+ def getTagByID(target_id)
420
+ taglist = get_tags_by_key(target_id, "ID")
421
+ taglist ? taglist[0]: nil
422
+ end
423
+
424
+ def inspect()
425
+ tagname_list = []
426
+ self.each {|tag_element|
427
+ tagname_list.push "<#{tag_element.tagName}>"
428
+ }
429
+ if tagname_list.size > 3
430
+ "<#{self.class}: [#{tagname_list[0,3].join(', ')},...]"
431
+ else
432
+ "<#{self.class}: [#{tagname_list.join(', ')}]>"
433
+ end
434
+ end
435
+
436
+ private
437
+
438
+ def get_tags_by_key(target_str, key_type)
439
+ tag_list = []
440
+ @raw_object.each {|tag_element|
441
+ case key_type
442
+ when "INNERTEXT"
443
+ key_string = tag_element.innerText
444
+ when "VALUE"
445
+ key_string = tag_element.value
446
+ when "NAME"
447
+ key_string = tag_element.name
448
+ when "ID"
449
+ key_string = tag_element.ID
450
+ else
451
+ return nil
452
+ end
453
+ if key_string == target_str
454
+ tag_list.push TagElement.new(tag_element, @ie_obj)
455
+ end
456
+ }
457
+ case tag_list.size
458
+ when 0
459
+ return nil
460
+ else
461
+ return tag_list
462
+ end
463
+ end
464
+
465
+ end
466
+
467
+
468
+
469
+ # ========================
470
+ # IE.Document.Frames
471
+ # ========================
472
+ class Frames < GripWrapper
473
+ def [](index)
474
+ return(nil) if index >= @raw_object.length
475
+ Frame.new(@raw_object.item(index), @ie_obj)
476
+ end
477
+
478
+ def size
479
+ @raw_object.length
480
+ end
481
+
482
+ def each
483
+ index = 0
484
+ while index < @raw_object.length
485
+ raw_frame = @raw_object.item(index)
486
+ yield Frame.new(raw_frame, @ie_obj)
487
+ index += 1
488
+ end
489
+ end
490
+ end
491
+
492
+ # ========================
493
+ # IE.Document.Frames.item(n)
494
+ # ========================
495
+ class Frame < GripWrapper
496
+ def document
497
+ Document.new(@raw_object.document, @ie_obj)
498
+ end
499
+ end
500
+
501
+ # ========================
502
+ # NodeList
503
+ # ========================
504
+ class NodeList < GripWrapper
505
+ def [](index)
506
+ return(nil) if index >= @raw_object.length
507
+ Node.new(@raw_object.item(index), @ie_obj)
508
+ end
509
+
510
+ def size
511
+ @raw_object.length
512
+ end
513
+
514
+ def each
515
+ index = 0
516
+ loop do
517
+ break if index >= @raw_object.length
518
+ raw_node = @raw_object.item(index)
519
+ yield Node.new(raw_node, @ie_obj)
520
+ index += 1
521
+ end
522
+ end
523
+ end
524
+
525
+
526
+ class Attr < GripWrapper
527
+ def value=(value_str)
528
+ @raw_object.value = value_str
529
+ end
530
+ def value
531
+ @raw_object.value
532
+ end
533
+
534
+ def ownerElement()
535
+ TagElement.new(@raw_object.ownerElement, @ie_obj)
536
+ end
537
+ end
538
+ end
539
+
540
+
541
+
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: iegrip
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - yac4423
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Control Internet Explorer from Ruby script.
42
+ email:
43
+ - iegrip@tech-notes.dyndns.org
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - iegrip-0.0.2.gem
54
+ - iegrip.gemspec
55
+ - lib/iegrip.rb
56
+ - lib/iegrip/GripWrapper.rb
57
+ - lib/iegrip/version.rb
58
+ homepage: https://github.com/yac4423/iegrip
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 2.0.14
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: Control Internet Explorer from Ruby script.
82
+ test_files: []