multisax 0.0.1 → 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: faccd217b395949d18f4b29ac75f185a7f1976bb
4
+ data.tar.gz: 24ecac5d9f3042ac03326efcb378886410d37edb
5
+ SHA512:
6
+ metadata.gz: 1e091e45e62d7c0f41015949dd97a196f37b604cc700e5a1d039a07d8e73b9e710f39c42342d3171f7f89edd150069312b6e3da021964212ffe65b0c48ff79aa
7
+ data.tar.gz: 4cbbdb6fd438fbcfb5ddf62216d5b1269798835e1f8cd0ec75e5d7902290285934ec668177c35f0fa564922bb2de19c21241e8b8ec4e45b74fd89c3225156e69
@@ -0,0 +1,19 @@
1
+ .DS_Store
2
+
3
+ *.gem
4
+ *.rbc
5
+ .bundle
6
+ .config
7
+ .yardoc
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
@@ -1,5 +1,13 @@
1
1
  = ChangeLog
2
2
 
3
+ == 0.0.2 (2013 Nov 13)
4
+ - Now you can create an instance of MultiSAX::SAX.
5
+ - Please note that passed class to MultiSAX is still modified directly.
6
+ - So only MultiSAX::SAX instances are thread-safe.
7
+ - MultiSAX::Sax is now an instance of MultiSAX::SAX (this is backward-compatible).
8
+ - You can specify :nokogirihtml explicitly to parse HTML.
9
+ - Fixed attrs with Ox (now String is passed, not Symbol)
10
+
3
11
  == 0.0.1 (2013 Jul 8)
4
12
  - Added ChangeLog.
5
13
  - Added Ruby 1.8.7 support.
data/Gemfile CHANGED
@@ -11,8 +11,6 @@ group :optional do
11
11
  end
12
12
 
13
13
  group :development do
14
- gem "rspec", ">= 2.8.0"
15
- gem "rdoc", ">= 3.12"
16
- gem "bundler", ">= 1.0.0"
17
- gem "jeweler", ">= 1.8.4"
14
+ gem "rspec"
15
+ gem "bundler"
18
16
  end
@@ -1,37 +1,27 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- diff-lcs (1.2.4)
5
- git (1.2.5)
6
- jeweler (1.8.4)
7
- bundler (~> 1.0)
8
- git (>= 1.2.5)
9
- rake
10
- rdoc
11
- json (1.8.0)
12
- libxml-ruby (2.6.0)
13
- nokogiri (1.5.10)
14
- ox (2.0.3)
15
- rake (10.0.4)
16
- rdoc (4.0.1)
17
- json (~> 1.4)
18
- rspec (2.13.0)
19
- rspec-core (~> 2.13.0)
20
- rspec-expectations (~> 2.13.0)
21
- rspec-mocks (~> 2.13.0)
22
- rspec-core (2.13.1)
23
- rspec-expectations (2.13.0)
4
+ diff-lcs (1.2.5)
5
+ libxml-ruby (2.7.0)
6
+ mini_portile (0.5.2)
7
+ nokogiri (1.6.0)
8
+ mini_portile (~> 0.5.0)
9
+ ox (2.0.11)
10
+ rspec (2.14.1)
11
+ rspec-core (~> 2.14.0)
12
+ rspec-expectations (~> 2.14.0)
13
+ rspec-mocks (~> 2.14.0)
14
+ rspec-core (2.14.7)
15
+ rspec-expectations (2.14.4)
24
16
  diff-lcs (>= 1.1.3, < 2.0)
25
- rspec-mocks (2.13.1)
17
+ rspec-mocks (2.14.4)
26
18
 
27
19
  PLATFORMS
28
20
  ruby
29
21
 
30
22
  DEPENDENCIES
31
- bundler (>= 1.0.0)
32
- jeweler (>= 1.8.4)
23
+ bundler
33
24
  libxml-ruby
34
25
  nokogiri
35
26
  ox
36
- rdoc (>= 3.12)
37
- rspec (>= 2.8.0)
27
+ rspec
data/Rakefile CHANGED
@@ -1,29 +1,12 @@
1
- # encoding: utf-8
1
+ require 'bundler/gem_tasks'
2
+ require './lib/multisax'
2
3
 
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
4
+ ### below are copied from jeweler ###
13
5
 
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = 'multisax'
18
- gem.homepage = 'http://github.com/cielavenir/multisax'
19
- gem.license = 'Ruby License (2-clause BSDL or Artistic)'
20
- gem.summary = 'Ruby Gem to handle multiple SAX libraries'
21
- gem.description = 'Ruby Gem to handle multiple SAX libraries: ox/libxml/nokogiri/rexml'
22
- gem.email = 'cielartisan@gmail.com'
23
- gem.authors = ['cielavenir']
24
- # dependencies defined in Gemfile
25
- end
26
- Jeweler::RubygemsDotOrgTasks.new
6
+ require 'rake'
7
+ # Clean up after gem building
8
+ require 'rake/clean'
9
+ CLEAN.include('pkg/*.gem')
27
10
 
28
11
  require 'rspec/core'
29
12
  require 'rspec/core/rake_task'
@@ -40,10 +23,8 @@ task :default => :spec
40
23
 
41
24
  require 'rdoc/task'
42
25
  Rake::RDocTask.new do |rdoc|
43
- version = File.read('VERSION').chomp
44
-
45
26
  rdoc.rdoc_dir = 'rdoc'
46
- rdoc.title = "multisax #{version}"
27
+ rdoc.title = 'multisax '+MultiSAX::VERSION
47
28
  rdoc.main = 'README.rdoc'
48
29
  rdoc.rdoc_files.include('README.*')
49
30
  rdoc.rdoc_files.include('LICENSE.*')
@@ -7,21 +7,22 @@
7
7
  # Note: MIT License is also applicable if that compresses LICENSE file.
8
8
 
9
9
  module MultiSAX
10
- #VERSION=''
10
+ # VERSION string
11
+ VERSION='0.0.2'
11
12
 
12
13
  # The class to handle XML libraries.
13
- class Sax
14
- @@parser=nil
15
- @@saxmodule=nil
14
+ class SAX
15
+ @parser=nil
16
+ @saxmodule=nil
16
17
  # Library loader.
17
18
  # Arguments are list (or Array) of libraries.
18
19
  # Currently the following are supported (order by speed):
19
20
  # :ox, :libxml, :nokogiri, :rexmlstream, :rexmlsax2
20
21
  # If multiple selected, MultiSAX will try the libraries one by one and use the first usable one.
21
- def self.open(*list)
22
- return @@parser if @@parser
22
+ # For HTML, you can specify :nokogirihtml explicitly.
23
+ def open(*list)
24
+ return @parser if @parser
23
25
  list=[:ox,:libxml,:nokogiri,:rexmlstream,:rexmlsax2] if list.size==0
24
- list=list.first if list.first.is_a?(Array)
25
26
  list.each{|e_module|
26
27
  case e_module
27
28
  when :ox
@@ -30,14 +31,14 @@ module MultiSAX
30
31
  require 'ox'
31
32
  require 'stringio' #this should be standard module.
32
33
  rescue LoadError;next end
33
- @@parser=e_module
34
+ @parser=e_module
34
35
  methods=Ox::Sax.private_instance_methods(false)-Class.private_instance_methods(false)
35
36
  if methods[0].is_a?(String) #Hack for 1.8.x
36
37
  methods-=['value','attr_value']
37
38
  else
38
39
  methods-=[:value,:attr_value]
39
40
  end
40
- @@saxmodule=Module.new{
41
+ @saxmodule=Module.new{
41
42
  methods.each{|e|define_method(e){|*a|}}
42
43
  }
43
44
  break
@@ -45,21 +46,21 @@ module MultiSAX
45
46
  begin
46
47
  require 'libxml'
47
48
  rescue LoadError;next end
48
- @@parser=e_module;break
49
- when :nokogiri
49
+ @parser=e_module;break
50
+ when :nokogiri,:nokogirihtml
50
51
  #nokogiri 1.5.x are supported on Ruby 1.8.7.
51
52
  #next if RUBY_VERSION<'1.9'
52
53
  begin
53
54
  require 'nokogiri'
54
55
  rescue LoadError;next end
55
- @@parser=e_module
56
+ @parser=e_module
56
57
  methods=Nokogiri::XML::SAX::Document.instance_methods(false)-Class.instance_methods(false)
57
58
  if methods[0].is_a?(String) #Hack for 1.8.x
58
59
  methods-=['start_element_namespace','end_element_namespace']
59
60
  else
60
61
  methods-=[:start_element_namespace,:end_element_namespace]
61
62
  end
62
- @@saxmodule=Module.new{
63
+ @saxmodule=Module.new{
63
64
  methods.each{|e|define_method(e){|*a|}}
64
65
  }
65
66
  break
@@ -69,55 +70,50 @@ module MultiSAX
69
70
  require 'rexml/parsers/streamparser'
70
71
  require 'rexml/streamlistener'
71
72
  rescue LoadError;next end
72
- @@parser=e_module;break
73
+ @parser=e_module;break
73
74
  when :rexmlsax2
74
75
  begin
75
76
  require 'rexml/document'
76
77
  require 'rexml/parsers/sax2parser'
77
78
  require 'rexml/sax2listener'
78
79
  rescue LoadError;next end
79
- @@parser=e_module;break
80
+ @parser=e_module;break
80
81
  end
81
82
  }
82
- return @@parser
83
+ return @parser
83
84
  end
84
85
  # Reset MultiSAX state so that you can re-open() another library.
85
- def self.reset() @@parser=nil;@@saxmodule=nil end
86
+ def reset() @parser=nil;@saxmodule=nil end
86
87
  # Returns which module is actually chosen.
87
- def self.parser() @@parser end
88
+ def parser() @parser end
88
89
 
89
90
  private
90
91
  #(private) Patches listener to accept library-specific APIs.
91
- def self.method_mapping(listener)
92
- #raise "MultiSAX::Sax open first" if !@@parser
93
- case @@parser
92
+ def method_mapping(listener)
93
+ #raise "MultiSAX::Sax open first" if !@parser
94
+ case @parser
94
95
  when :ox
96
+ saxmodule=@saxmodule
95
97
  listener.instance_eval{
96
- extend @@saxmodule
98
+ extend saxmodule
97
99
  @saxwrapper_tag=nil
98
- @saxwrapper_attr=[]
100
+ @saxwrapper_attr={}
99
101
  def start_element(tag)
100
102
  # I hope provided Listener's sax_tag_start will NOT be used elsewhere.
101
103
  #alias :attrs_done :attrs_done_normal
102
104
  @saxwrapper_tag=tag
103
- @saxwrapper_attr=[]
105
+ @saxwrapper_attr={}
104
106
  end
105
107
  # These "instance methods" are actually injected to listener class using instance_eval.
106
108
  # i.e. not APIs. You cannot call these methods from outside.
107
109
  def attr(name,str)
108
- @saxwrapper_attr<<[name,str]
110
+ @saxwrapper_attr[name.to_s]=str
109
111
  end
110
112
  #--
111
113
  #alias :attr_value :attr
112
114
  #++
113
115
  def attrs_done_xmldecl
114
- version=@saxwrapper_attr.assoc(:version)
115
- version&&=version[1]
116
- encoding=@saxwrapper_attr.assoc(:encoding)
117
- encoding&&=encoding[1]
118
- standalone=@saxwrapper_attr.assoc(:standalone)
119
- standalone&&=standalone[1]
120
- sax_xmldecl(version,encoding,standalone)
116
+ sax_xmldecl(@saxwrapper_attr['version'],@saxwrapper_attr['encoding'],@saxwrapper_attr['standalone'])
121
117
  end
122
118
  def attrs_done_normal
123
119
  sax_tag_start(@saxwrapper_tag.to_s,@saxwrapper_attr)
@@ -144,9 +140,10 @@ module MultiSAX
144
140
  alias :on_comment :sax_comment
145
141
  #alias :xmldecl :sax_xmldecl
146
142
  }
147
- when :nokogiri
143
+ when :nokogiri,:nokogirihtml
144
+ saxmodule=@saxmodule
148
145
  listener.instance_eval{
149
- extend @@saxmodule
146
+ extend saxmodule
150
147
  alias :start_element_namespace :sax_start_element_namespace
151
148
  alias :start_element :sax_tag_start
152
149
  alias :end_element_namespace :sax_end_element_namespace
@@ -187,37 +184,39 @@ module MultiSAX
187
184
  # From 0.0.1, source can be IO as well as String.
188
185
  # SAX's listeners are usually modified destructively.
189
186
  # So instances shouldn't be provided.
190
- def self.parse(source,listener)
191
- self.open if !@@parser
192
- raise "Failed to open SAX library. REXML, which is a standard Ruby module, might be also corrupted." if !@@parser
187
+ def parse(source,listener)
188
+ open if !@parser
189
+ raise "Failed to open SAX library. REXML, which is a standard Ruby module, might be also corrupted." if !@parser
193
190
  @listener=listener
194
- self.method_mapping(@listener)
191
+ method_mapping(@listener)
195
192
  if source.is_a?(String)
196
- case @@parser
197
- when :ox then Ox.sax_parse(@listener,StringIO.new(source),:convert_special=>true)
198
- when :libxml then parser=LibXML::XML::SaxParser.string(source);parser.callbacks=@listener;parser.parse
199
- when :nokogiri then parser=Nokogiri::XML::SAX::Parser.new(@listener);parser.parse(source)
200
- when :rexmlstream then REXML::Parsers::StreamParser.new(source,@listener).parse
201
- when :rexmlsax2 then parser=REXML::Parsers::SAX2Parser.new(source);parser.listen(@listener);parser.parse
193
+ case @parser
194
+ when :ox then Ox.sax_parse(@listener,StringIO.new(source),:convert_special=>true)
195
+ when :libxml then parser=LibXML::XML::SaxParser.string(source);parser.callbacks=@listener;parser.parse
196
+ when :nokogiri then parser=Nokogiri::XML::SAX::Parser.new(@listener);parser.parse(source)
197
+ when :nokogirihtml then parser=Nokogiri::HTML::SAX::Parser.new(@listener);parser.parse(source)
198
+ when :rexmlstream then REXML::Parsers::StreamParser.new(source,@listener).parse
199
+ when :rexmlsax2 then parser=REXML::Parsers::SAX2Parser.new(source);parser.listen(@listener);parser.parse
202
200
  end
203
201
  else
204
- case @@parser
205
- when :ox then Ox.sax_parse(@listener,source,:convert_special=>true)
206
- when :libxml then parser=LibXML::XML::SaxParser.io(source);parser.callbacks=@listener;parser.parse
207
- when :nokogiri then parser=Nokogiri::XML::SAX::Parser.new(@listener);parser.parse(source)
208
- when :rexmlstream then REXML::Parsers::StreamParser.new(source,@listener).parse
209
- when :rexmlsax2 then parser=REXML::Parsers::SAX2Parser.new(source);parser.listen(@listener);parser.parse
202
+ case @parser
203
+ when :ox then Ox.sax_parse(@listener,source,:convert_special=>true)
204
+ when :libxml then parser=LibXML::XML::SaxParser.io(source);parser.callbacks=@listener;parser.parse
205
+ when :nokogiri then parser=Nokogiri::XML::SAX::Parser.new(@listener);parser.parse(source)
206
+ when :nokogirihtml then parser=Nokogiri::HTML::SAX::Parser.new(@listener);parser.parse(source)
207
+ when :rexmlstream then REXML::Parsers::StreamParser.new(source,@listener).parse
208
+ when :rexmlsax2 then parser=REXML::Parsers::SAX2Parser.new(source);parser.listen(@listener);parser.parse
210
209
  end
211
210
  end
212
211
  @listener
213
212
  end
214
213
 
215
214
  # Parses file as XML. Error handling might be changed in the future.
216
- def self.parsefile(filename,listener)
215
+ def parsefile(filename,listener)
217
216
  #begin
218
217
  return nil unless FileTest::readable?(filename)
219
218
  File.open(filename,'rb'){|f|
220
- self.parse(f,listener)
219
+ parse(f,listener)
221
220
  }
222
221
  #rescue
223
222
  # return nil
@@ -226,30 +225,55 @@ module MultiSAX
226
225
  end
227
226
  end
228
227
 
228
+ # This class provides singleton interface to MultiSAX::SAX.
229
+ class Sax
230
+ @@multisax_singleton=SAX.new
231
+ # MultiSAX::SAX#open
232
+ def self.open(*list) @@multisax_singleton.open(*list) end
233
+ # MultiSAX::SAX#reset
234
+ def self.reset() @@multisax_singleton.reset() end
235
+ # MultiSAX::SAX#parser
236
+ def self.parser() @@multisax_singleton.parser() end
237
+ # MultiSAX::SAX#parse
238
+ def self.parse(source,listener) @@multisax_singleton.parse(source,listener) end
239
+ # MultiSAX::SAX#parsefile
240
+ def self.parsefile(filename,listener) @@multisax_singleton.parsefile(filename,listener) end
241
+ end
242
+
229
243
  # MultiSAX callbacks.
230
- # MultiSAX::Sax listener should include this module.
244
+ # MultiSAX::SAX listener should include this module.
231
245
  module Callbacks
232
246
  # Cited from Nokogiri to convert Nokogiri::XML::SAX::Document into module.
233
247
  # https://github.com/sparklemotion/nokogiri/blob/master/lib/nokogiri/xml/sax/document.rb
234
248
  def sax_start_element_namespace name, attrs = [], prefix = nil, uri = nil, ns = []
235
249
  # Deal with SAX v1 interface
236
250
  name = [prefix, name].compact.join(':')
237
- attributes = ns.map { |ns_prefix,ns_uri|
238
- [['xmlns', ns_prefix].compact.join(':'), ns_uri]
239
- } + attrs.map { |attr|
240
- [[attr.prefix, attr.localname].compact.join(':'), attr.value]
251
+ # modified in 0.0.2
252
+ attributes = {}
253
+ ns.each{|ns_prefix,ns_uri|
254
+ attributes[['xmlns', ns_prefix].compact.join(':')]=ns_uri
255
+ }
256
+ attrs.each{|attr|
257
+ attributes[[attr.prefix, attr.localname].compact.join(':')]=attr.value
241
258
  }
242
259
  sax_tag_start name, attributes
243
260
  end
261
+ # Cited from Nokogiri
244
262
  def sax_end_element_namespace name, prefix = nil, uri = nil
245
263
  # Deal with SAX v1 interface
246
264
  sax_tag_end [prefix, name].compact.join(':')
247
265
  end
248
- def sax_tag_start(tag,attr) end
266
+ # Start of tag
267
+ def sax_tag_start(tag,attrs) end
268
+ # End of tag
249
269
  def sax_tag_end(tag) end
270
+ # Comment
250
271
  def sax_comment(text) end
272
+ # CDATA
251
273
  def sax_cdata(text) end
274
+ # Text
252
275
  def sax_text(text) end
276
+ # XML declaration (not available if parser is :libxml)
253
277
  def sax_xmldecl(version,encoding,standalone) end
254
278
  end
255
279
  end
@@ -1,61 +1,27 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
1
+ # coding: utf-8
2
+ require './lib/multisax'
5
3
 
6
- Gem::Specification.new do |s|
7
- s.name = "multisax"
8
- s.version = "0.0.1"
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "multisax"
6
+ spec.version = MultiSAX::VERSION
7
+ spec.authors = ["cielavenir"]
8
+ spec.email = ["cielartisan@gmail.com"]
9
+ spec.description = "Ruby Gem to handle multiple SAX libraries: ox/libxml/nokogiri/rexml"
10
+ spec.summary = "Ruby Gem to handle multiple SAX libraries"
11
+ spec.homepage = "http://github.com/cielavenir/multisax"
12
+ spec.license = "Ruby License (2-clause BSDL or Artistic)"
9
13
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["cielavenir"]
12
- s.date = "2013-07-08"
13
- s.description = "Ruby Gem to handle multiple SAX libraries: ox/libxml/nokogiri/rexml"
14
- s.email = "cielartisan@gmail.com"
15
- s.extra_rdoc_files = [
16
- "LICENSE.txt",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".rspec",
22
- "CHANGELOG.rdoc",
23
- "Gemfile",
24
- "Gemfile.lock",
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.extra_rdoc_files = [
25
18
  "LICENSE.txt",
26
19
  "README.rdoc",
27
- "Rakefile",
28
- "VERSION",
29
- "lib/multisax.rb",
30
- "multisax.gemspec",
31
- "spec/multisax_spec.rb",
32
- "spec/spec_helper.rb"
20
+ "CHANGELOG.rdoc",
33
21
  ]
34
- s.homepage = "http://github.com/cielavenir/multisax"
35
- s.licenses = ["Ruby License (2-clause BSDL or Artistic)"]
36
- s.require_paths = ["lib"]
37
- s.rubygems_version = "1.8.25"
38
- s.summary = "Ruby Gem to handle multiple SAX libraries"
22
+ spec.require_paths = ["lib"]
39
23
 
40
- if s.respond_to? :specification_version then
41
- s.specification_version = 3
42
-
43
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
- s.add_development_dependency(%q<rspec>, [">= 2.8.0"])
45
- s.add_development_dependency(%q<rdoc>, [">= 3.12"])
46
- s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
47
- s.add_development_dependency(%q<jeweler>, [">= 1.8.4"])
48
- else
49
- s.add_dependency(%q<rspec>, [">= 2.8.0"])
50
- s.add_dependency(%q<rdoc>, [">= 3.12"])
51
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
52
- s.add_dependency(%q<jeweler>, [">= 1.8.4"])
53
- end
54
- else
55
- s.add_dependency(%q<rspec>, [">= 2.8.0"])
56
- s.add_dependency(%q<rdoc>, [">= 3.12"])
57
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
58
- s.add_dependency(%q<jeweler>, [">= 1.8.4"])
59
- end
24
+ spec.add_development_dependency "bundler"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec"
60
27
  end
61
-
@@ -4,9 +4,11 @@ class MultiSAXTester
4
4
  include MultiSAX::Callbacks
5
5
  def initialize
6
6
  @result=[]
7
+ @attrib=nil
7
8
  end
8
9
  def sax_tag_start(tag,attrs)
9
10
  @result<<tag
11
+ @attrib=attrs['foo'] if tag=='sax'
10
12
  end
11
13
  def sax_tag_end(tag)
12
14
  @result<<tag
@@ -15,13 +17,14 @@ class MultiSAXTester
15
17
  text.strip!
16
18
  @result<<text if text.size>0
17
19
  end
18
- #def sax_xmldecl(version,encoding,standalone)
19
- #end
20
- attr_reader :result
20
+ def sax_xmldecl(version,encoding,standalone)
21
+ @xmlencoding=encoding
22
+ end
23
+ attr_reader :result,:attrib,:xmlencoding
21
24
  end
22
25
  input_xml=<<"EOM"
23
- <?xml version="1.0" encoding="utf-8"?>
24
- <hello><sax>world</sax></hello>
26
+ <?xml version="1.0" encoding="UTF-8"?>
27
+ <hello><sax foo="bar">world</sax></hello>
25
28
  EOM
26
29
  answer=['hello','sax','world','sax','hello']
27
30
 
@@ -30,67 +33,97 @@ describe "MultiSAX::Sax.parse (String)" do
30
33
  MultiSAX::Sax.reset
31
34
  MultiSAX::Sax.open(:unknown).should be_false
32
35
  end
33
- it ":rexmlstream" do
36
+ it "uses :rexmlstream" do
34
37
  MultiSAX::Sax.reset
35
38
  MultiSAX::Sax.open(:rexmlstream)
36
39
  MultiSAX::Sax.parser.should eq :rexmlstream
37
- MultiSAX::Sax.parse(input_xml,MultiSAXTester.new).result.should eq answer
40
+ listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
41
+ listener.result.should eq answer
42
+ listener.attrib.should eq 'bar'
43
+ listener.xmlencoding.should eq 'UTF-8'
38
44
  end
39
- it ":rexmlsax2" do
45
+ it "uses :rexmlsax2" do
40
46
  MultiSAX::Sax.reset
41
47
  MultiSAX::Sax.open(:rexmlsax2)
42
48
  MultiSAX::Sax.parser.should eq :rexmlsax2
43
- MultiSAX::Sax.parse(input_xml,MultiSAXTester.new).result.should eq answer
49
+ listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
50
+ listener.result.should eq answer
51
+ listener.attrib.should eq 'bar'
52
+ listener.xmlencoding.should eq 'UTF-8'
44
53
  end
45
- it ":ox" do
54
+ it "uses :ox" do
46
55
  MultiSAX::Sax.reset
47
56
  MultiSAX::Sax.open(:ox)
48
57
  MultiSAX::Sax.parser.should eq :ox
49
- MultiSAX::Sax.parse(input_xml,MultiSAXTester.new).result.should eq answer
58
+ listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
59
+ listener.result.should eq answer
60
+ listener.attrib.should eq 'bar'
61
+ listener.xmlencoding.should eq 'UTF-8'
50
62
  end
51
- it ":libxml" do
63
+ it "uses :libxml" do
52
64
  MultiSAX::Sax.reset
53
65
  MultiSAX::Sax.open(:libxml)
54
66
  MultiSAX::Sax.parser.should eq :libxml
55
- MultiSAX::Sax.parse(input_xml,MultiSAXTester.new).result.should eq answer
67
+ listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
68
+ listener.result.should eq answer
69
+ listener.attrib.should eq 'bar'
70
+ #listener.xmlencoding.should eq 'UTF-8'
56
71
  end
57
- it ":nokogiri" do
72
+ it "uses :nokogiri" do
58
73
  MultiSAX::Sax.reset
59
74
  MultiSAX::Sax.open(:nokogiri)
60
75
  MultiSAX::Sax.parser.should eq :nokogiri
61
- MultiSAX::Sax.parse(input_xml,MultiSAXTester.new).result.should eq answer
76
+ listener=MultiSAX::Sax.parse(input_xml,MultiSAXTester.new)
77
+ listener.result.should eq answer
78
+ listener.attrib.should eq 'bar'
79
+ listener.xmlencoding.should eq 'UTF-8'
62
80
  end
63
81
  end
64
82
 
65
83
  describe "MultiSAX::Sax.parse (IO)" do
66
- it ":rexmlstream" do
84
+ it "uses :rexmlstream" do
67
85
  MultiSAX::Sax.reset
68
86
  MultiSAX::Sax.open(:rexmlstream)
69
87
  MultiSAX::Sax.parser.should eq :rexmlstream
70
- MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new).result.should eq answer
88
+ listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
89
+ listener.result.should eq answer
90
+ listener.attrib.should eq 'bar'
91
+ listener.xmlencoding.should eq 'UTF-8'
71
92
  end
72
- it ":rexmlsax2" do
93
+ it "uses :rexmlsax2" do
73
94
  MultiSAX::Sax.reset
74
95
  MultiSAX::Sax.open(:rexmlsax2)
75
96
  MultiSAX::Sax.parser.should eq :rexmlsax2
76
- MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new).result.should eq answer
97
+ listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
98
+ listener.result.should eq answer
99
+ listener.attrib.should eq 'bar'
100
+ listener.xmlencoding.should eq 'UTF-8'
77
101
  end
78
- it ":ox" do
102
+ it "uses :ox" do
79
103
  MultiSAX::Sax.reset
80
104
  MultiSAX::Sax.open(:ox)
81
105
  MultiSAX::Sax.parser.should eq :ox
82
- MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new).result.should eq answer
106
+ listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
107
+ listener.result.should eq answer
108
+ listener.attrib.should eq 'bar'
109
+ listener.xmlencoding.should eq 'UTF-8'
83
110
  end
84
- it ":libxml" do
111
+ it "uses :libxml" do
85
112
  MultiSAX::Sax.reset
86
113
  MultiSAX::Sax.open(:libxml)
87
114
  MultiSAX::Sax.parser.should eq :libxml
88
- MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new).result.should eq answer
115
+ listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
116
+ listener.result.should eq answer
117
+ listener.attrib.should eq 'bar'
118
+ #listener.xmlencoding.should eq 'UTF-8'
89
119
  end
90
- it ":nokogiri" do
120
+ it "uses :nokogiri" do
91
121
  MultiSAX::Sax.reset
92
122
  MultiSAX::Sax.open(:nokogiri)
93
123
  MultiSAX::Sax.parser.should eq :nokogiri
94
- MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new).result.should eq answer
124
+ listener=MultiSAX::Sax.parse(StringIO.new(input_xml),MultiSAXTester.new)
125
+ listener.result.should eq answer
126
+ listener.attrib.should eq 'bar'
127
+ listener.xmlencoding.should eq 'UTF-8'
95
128
  end
96
129
  end
@@ -18,6 +18,6 @@ end
18
18
  # in ./support/ and its subdirectories.
19
19
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
20
20
 
21
- RSpec.configure do |config|
22
-
23
- end
21
+ RSpec.configure{|config|
22
+ config.color=true
23
+ }
metadata CHANGED
@@ -1,97 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multisax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - cielavenir
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-08 00:00:00.000000000 Z
11
+ date: 2013-11-13 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: rspec
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 2.8.0
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 2.8.0
30
- - !ruby/object:Gem::Dependency
31
- name: rdoc
14
+ name: bundler
32
15
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
16
  requirements:
35
- - - ! '>='
17
+ - - '>='
36
18
  - !ruby/object:Gem::Version
37
- version: '3.12'
19
+ version: '0'
38
20
  type: :development
39
21
  prerelease: false
40
22
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
23
  requirements:
43
- - - ! '>='
24
+ - - '>='
44
25
  - !ruby/object:Gem::Version
45
- version: '3.12'
26
+ version: '0'
46
27
  - !ruby/object:Gem::Dependency
47
- name: bundler
28
+ name: rake
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
- - - ! '>='
31
+ - - '>='
52
32
  - !ruby/object:Gem::Version
53
- version: 1.0.0
33
+ version: '0'
54
34
  type: :development
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
- - - ! '>='
38
+ - - '>='
60
39
  - !ruby/object:Gem::Version
61
- version: 1.0.0
40
+ version: '0'
62
41
  - !ruby/object:Gem::Dependency
63
- name: jeweler
42
+ name: rspec
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ! '>='
45
+ - - '>='
68
46
  - !ruby/object:Gem::Version
69
- version: 1.8.4
47
+ version: '0'
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ! '>='
52
+ - - '>='
76
53
  - !ruby/object:Gem::Version
77
- version: 1.8.4
78
- description: ! 'Ruby Gem to handle multiple SAX libraries: ox/libxml/nokogiri/rexml'
79
- email: cielartisan@gmail.com
54
+ version: '0'
55
+ description: 'Ruby Gem to handle multiple SAX libraries: ox/libxml/nokogiri/rexml'
56
+ email:
57
+ - cielartisan@gmail.com
80
58
  executables: []
81
59
  extensions: []
82
60
  extra_rdoc_files:
83
61
  - LICENSE.txt
84
62
  - README.rdoc
63
+ - CHANGELOG.rdoc
85
64
  files:
86
- - .document
87
- - .rspec
65
+ - .gitignore
88
66
  - CHANGELOG.rdoc
89
67
  - Gemfile
90
68
  - Gemfile.lock
91
69
  - LICENSE.txt
92
70
  - README.rdoc
93
71
  - Rakefile
94
- - VERSION
95
72
  - lib/multisax.rb
96
73
  - multisax.gemspec
97
74
  - spec/multisax_spec.rb
@@ -99,29 +76,27 @@ files:
99
76
  homepage: http://github.com/cielavenir/multisax
100
77
  licenses:
101
78
  - Ruby License (2-clause BSDL or Artistic)
79
+ metadata: {}
102
80
  post_install_message:
103
81
  rdoc_options: []
104
82
  require_paths:
105
83
  - lib
106
84
  required_ruby_version: !ruby/object:Gem::Requirement
107
- none: false
108
85
  requirements:
109
- - - ! '>='
86
+ - - '>='
110
87
  - !ruby/object:Gem::Version
111
88
  version: '0'
112
- segments:
113
- - 0
114
- hash: 3842720625323194338
115
89
  required_rubygems_version: !ruby/object:Gem::Requirement
116
- none: false
117
90
  requirements:
118
- - - ! '>='
91
+ - - '>='
119
92
  - !ruby/object:Gem::Version
120
93
  version: '0'
121
94
  requirements: []
122
95
  rubyforge_project:
123
- rubygems_version: 1.8.25
96
+ rubygems_version: 2.0.3
124
97
  signing_key:
125
- specification_version: 3
98
+ specification_version: 4
126
99
  summary: Ruby Gem to handle multiple SAX libraries
127
- test_files: []
100
+ test_files:
101
+ - spec/multisax_spec.rb
102
+ - spec/spec_helper.rb
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.0.1