mysql-xml 0.1

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.
Files changed (5) hide show
  1. data/Changelog +5 -0
  2. data/LICENSE +14 -0
  3. data/README.rdoc +12 -0
  4. data/lib/mysql-xml.rb +63 -0
  5. metadata +58 -0
@@ -0,0 +1,5 @@
1
+ commit 4c53acc8b9ef986c8abae424945babf7501298a6
2
+ Author: Andrew Cholakian <andrew@andrew.intra>
3
+ Date: Mon Nov 16 13:09:59 2009 -0800
4
+
5
+ Initial Import
data/LICENSE ADDED
@@ -0,0 +1,14 @@
1
+ This file is part of mysql-xml
2
+
3
+ mysql-xml is free software: you can redistribute it and/or modify
4
+ it under the terms of the GNU General Public License as published by
5
+ the Free Software Foundation, either version 3 of the License, or
6
+ (at your option) any later version.
7
+
8
+ mysql-xml is distributed in the hope that it will be useful,
9
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ GNU General Public License for more details.
12
+
13
+ You should have received a copy of the GNU General Public License
14
+ along with mysql-xml. If not, see <http://www.gnu.org/licenses/>.
@@ -0,0 +1,12 @@
1
+ #Provides an easy way to parse XML output from mysql -X.
2
+ #MySQLXML::parse takes an IO object for the XML and a block that gets called
3
+ #once for each record. The records are represented as hashes keyed by string
4
+ #representations of column names.
5
+ #
6
+ #Example:
7
+ # MySQLXML::parse(File.new('test.xml')) do |record|
8
+ # puts record['username']
9
+ # end
10
+ #
11
+ #This uses REXML's stream parser, so it should be reasonably
12
+ #memory efficient.
@@ -0,0 +1,63 @@
1
+ #Provides an easy way to parse XML output from mysql -X.
2
+ #MySQLXML::parse takes an IO object for the XML and a block that gets called
3
+ #once for each record.
4
+ #
5
+ #Example:
6
+ # require 'mysql-xml'
7
+ # MySQLXML::parse(File.new('test.xml')) do |record|
8
+ # puts record.inspect
9
+ # end
10
+ #
11
+ #This uses REXML's stream parser, so it should be reasonably
12
+ #memory efficient.
13
+ require 'rexml/document'
14
+ require 'rexml/parsers/streamparser'
15
+
16
+ module MySQLXML
17
+ def self.parse(io,&block)
18
+ listener = MyXListener.new(block)
19
+ REXML::Document.parse_stream(io,listener)
20
+ return listener.records
21
+ end
22
+
23
+ class MyXListener
24
+ attr_reader :records
25
+
26
+ def initialize(block)
27
+ #Track where we are in the tree.
28
+ @context = []
29
+ @cur_record = nil
30
+ @cur_field_name = nil
31
+ @block = block
32
+ end
33
+
34
+ def tag_start(name, attrs)
35
+ @context << name
36
+ if name == 'row'
37
+ @cur_record = {}
38
+ elsif name == 'field'
39
+ @cur_field_name = attrs['name']
40
+ end
41
+ end
42
+
43
+ def text(text)
44
+ if @context[-1] == 'field'
45
+ @cur_record[@cur_field_name] = text
46
+ end
47
+ end
48
+
49
+ def tag_end(name)
50
+ @context.pop
51
+ if name == 'field'
52
+ @cur_field_name = nil
53
+ elsif name == 'row'
54
+ @block.call(@cur_record)
55
+ @cur_record = nil
56
+ end
57
+ end
58
+
59
+ #Silence method missing exceptions since we only
60
+ #need to handle some events
61
+ def method_missing(*opts); end
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mysql-xml
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Cholakian
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-16 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Provides a simple, fast way of parsing XML dumps of MySQL data.
17
+ email: andrew@andrewvc.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README.rdoc
26
+ - Changelog
27
+ - LICENSE
28
+ - lib/mysql-xml.rb
29
+ has_rdoc: true
30
+ homepage: http://www.andrewvc.com/mysql-xml
31
+ licenses: []
32
+
33
+ post_install_message:
34
+ rdoc_options: []
35
+
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: "0"
43
+ version:
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: "0"
49
+ version:
50
+ requirements: []
51
+
52
+ rubyforge_project:
53
+ rubygems_version: 1.3.5
54
+ signing_key:
55
+ specification_version: 3
56
+ summary: Provides a simple, fast way of parsing XML dumps of MySQL data.
57
+ test_files: []
58
+