flattendb 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 33d368b4ee2cd36d0e968a8237b66bc349a49352
4
- data.tar.gz: e578a7ac382877e76e0523364b7bbd1ffbf5c881
3
+ metadata.gz: 0bf6ce4e0242288394dd70d6c06f3fbc921d86f2
4
+ data.tar.gz: e068b6f84762dc9f170ab9c5c5eafff15de9677a
5
5
  SHA512:
6
- metadata.gz: fbf89d4936dd20e96717e94d2da16cdf35b6530ed1262cb325b44e63120334f6c5e1967e7afaf07b6fe300819b3b10d9ec41650aafd4240682900bfe1f358143
7
- data.tar.gz: c2daea8bd1275ca1e5d2bd85c42d986452aef319acb34d871333fa0398b0697b1abdb51b81027bb35ac974e1f0dd63f23c0f4d5a5149710afbaddba32abd05df
6
+ metadata.gz: f012835b0b2d5f587d8686669d081641a247a045621eae3eb218136f9867d06eac3549b3ed12eb4d434d2321026550891319a632102614b68130a1808531239b
7
+ data.tar.gz: 9d1044499a8af06a52d295c8097cea45ee0c541b5753a2f8a4fa95d0a8208f478ee72917c0ef55bde9e502fe99ecc2a42b2dafd14b82ffc1216e25ba6359165d
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to flattendb version 0.2.0
5
+ This documentation refers to flattendb version 0.2.1
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -13,9 +13,9 @@ TODO: well, the description... ;-)
13
13
  == LINKS
14
14
 
15
15
  <b></b>
16
- Documentation:: http://prometheus.rubyforge.org/flattendb
17
- Source code:: http://github.com/blackwinter/flattendb
18
- RubyForge project:: http://rubyforge.org/projects/prometheus
16
+ Documentation:: http://blackwinter.github.com/flattendb
17
+ Source code:: http://github.com/blackwinter/flattendb
18
+ RubyGem:: http://rubygems.org/gems/flattendb
19
19
 
20
20
 
21
21
  == AUTHORS
data/Rakefile CHANGED
@@ -4,17 +4,14 @@ begin
4
4
  require 'hen'
5
5
 
6
6
  Hen.lay! {{
7
- :rubyforge => {
8
- :project => %q{prometheus},
9
- :package => %q{flattendb}
10
- },
11
-
12
7
  :gem => {
8
+ :name => %q{flattendb},
13
9
  :version => FlattenDB::VERSION,
14
10
  :summary => %q{Flatten relational databases.},
15
11
  :author => %q{Jens Wille},
16
12
  :email => %q{jens.wille@gmail.com},
17
- :dependencies => %w[builder highline libxml-ruby] << ['ruby-nuggets', '>= 0.9.1']
13
+ :homepage => :blackwinter,
14
+ :dependencies => %w[builder highline libxml-ruby] << ['ruby-nuggets', '>= 0.9.2']
18
15
  }
19
16
  }}
20
17
  rescue LoadError => err
@@ -76,7 +76,7 @@ module FlattenDB
76
76
  config = options.select { |k, _| k.is_a?(String) }
77
77
  raise ArgumentError, "can't have more than one primary (root) table" if config.size > 1
78
78
 
79
- (@root, @config), _ = *config # get "first" (and only) hash element
79
+ @root, @config = config.keys.first, config.values.first
80
80
 
81
81
  @input, @output = options.values_at(:input, :output)
82
82
  end
data/lib/flattendb/cli.rb CHANGED
@@ -28,12 +28,12 @@
28
28
  ###############################################################################
29
29
  #++
30
30
 
31
- require 'nuggets/util/cli'
31
+ require 'nuggets/cli'
32
32
  require 'flattendb'
33
33
 
34
34
  module FlattenDB
35
35
 
36
- class CLI < ::Util::CLI
36
+ class CLI < ::Nuggets::CLI
37
37
 
38
38
  TYPES = {
39
39
  :mysql => {
@@ -52,7 +52,7 @@ module FlattenDB
52
52
  # ...
53
53
  end
54
54
 
55
- def flatten!(options = {}, builder_options = {})
55
+ def flatten!(options = {})
56
56
  self
57
57
  end
58
58
 
@@ -29,7 +29,7 @@
29
29
  #++
30
30
 
31
31
  require 'libxml'
32
- require 'nuggets/util/mysql'
32
+ require 'nuggets/mysql'
33
33
  require 'flattendb'
34
34
 
35
35
  module FlattenDB
@@ -51,7 +51,7 @@ module FlattenDB
51
51
  [send("parse_#{type}", tables) || 'root', tables]
52
52
  end
53
53
 
54
- def flatten!(options = {}, builder_options = {})
54
+ def flatten!(options = {})
55
55
  flatten_tables!(tables, root, config)
56
56
  self
57
57
  end
@@ -63,13 +63,10 @@ module FlattenDB
63
63
 
64
64
  if tables.size > 1
65
65
  builder.tag!(name) {
66
- tables.sort.each { |table, rows|
67
- table_to_xml(table, rows, builder)
68
- }
66
+ tables.sort.each { |table, rows| table_to_xml(table, rows, builder) }
69
67
  }
70
68
  else
71
- (table, rows), _ = *tables # get "first" (and only) hash element
72
- table_to_xml(name, rows, builder)
69
+ table_to_xml(name, tables.values.first, builder)
73
70
  end
74
71
 
75
72
  self
@@ -101,7 +98,7 @@ module FlattenDB
101
98
  def parse_sql(tables)
102
99
  name = nil
103
100
 
104
- Util::MySQL::Parser.parse(input) { |event, *args|
101
+ Nuggets::MySQL::Parser.parse(input) { |event, *args|
105
102
  case event
106
103
  when :use
107
104
  raise 'dump file contains more than one database' if name
@@ -130,28 +127,48 @@ module FlattenDB
130
127
  when Array
131
128
  inject_foreign(tables, primary_table, foreign_table, *spec)
132
129
  when Hash
133
- raise ArgumentError, "invalid join table spec, #{JOIN_KEY.inspect} missing" unless spec.has_key?(JOIN_KEY)
130
+ unless spec.has_key?(JOIN_KEY)
131
+ raise ArgumentError,
132
+ "invalid join table spec, #{JOIN_KEY.inspect} missing"
133
+ end
134
134
 
135
- join_key_spec = spec.delete(JOIN_KEY)
135
+ unless (join_key_spec = spec.delete(JOIN_KEY)).is_a?(Hash)
136
+ join_key_spec = { foreign_table => join_key_spec }
137
+ end
136
138
 
137
- joined_tables = tables.dup
138
- flatten_tables!(joined_tables, foreign_table, spec)
139
+ foreign_tables = Marshal.load(Marshal.dump(tables))
140
+ flatten_tables!(foreign_tables, foreign_table, spec)
139
141
 
140
- (join_key_spec.is_a?(Hash) ? join_key_spec : { foreign_table => join_key_spec }).each { |foreign_table_name, join_key|
142
+ join_key_spec.each { |foreign_table_name, join_key|
141
143
  local_key, foreign_key = join_key
142
144
 
143
- inject_foreign(tables, primary_table, foreign_table, local_key, foreign_key || local_key, joined_tables, foreign_table_name)
145
+ inject_foreign(
146
+ tables, primary_table, foreign_table,
147
+ local_key, foreign_key || local_key,
148
+ foreign_tables, foreign_table_name
149
+ )
144
150
  }
145
151
  else
146
- raise ArgumentError, "don't know how to handle spec of type '#{spec.class}'"
152
+ raise ArgumentError,
153
+ "don't know how to handle spec of type #{spec.class}"
147
154
  end
148
155
  } if config
149
156
 
150
157
  tables.delete_if { |table, _| table != primary_table }
151
158
  end
152
159
 
153
- def inject_foreign(tables, primary_table, foreign_table, local_key, foreign_key = local_key, foreign_tables = tables, foreign_table_name = foreign_table)
154
- raise ArgumentError, "no such foreign table: #{foreign_table}" unless foreign_tables.has_key?(foreign_table)
160
+ def inject_foreign(
161
+ tables, primary_table, foreign_table,
162
+ local_key, foreign_key = local_key,
163
+ foreign_tables = tables, foreign_table_name = foreign_table
164
+ )
165
+ unless tables.has_key?(primary_table)
166
+ raise ArgumentError, "no such primary table: #{primary_table}"
167
+ end
168
+
169
+ unless foreign_tables.has_key?(foreign_table)
170
+ raise ArgumentError, "no such foreign table: #{foreign_table}"
171
+ end
155
172
 
156
173
  foreign_rows = Hash.new { |h, k| h[k] = [] }
157
174
 
@@ -169,32 +186,27 @@ module FlattenDB
169
186
 
170
187
  def table_to_xml(table, rows, builder)
171
188
  builder.tag!(table) {
172
- rows.each { |row|
173
- row_to_xml('row', row, builder)
174
- } if rows
189
+ rows.each { |row| row_to_xml('row', row, builder) } if rows
175
190
  }
176
191
  end
177
192
 
178
193
  def row_to_xml(name, row, builder)
179
194
  builder.tag!(name) {
180
- row.sort.each { |field, content|
181
- field_to_xml(field, content, builder)
182
- }
195
+ row.sort.each { |field, value| field_to_xml(field, value, builder) }
183
196
  }
184
197
  end
185
198
 
186
- def field_to_xml(field, content, builder)
187
- case content
199
+ def field_to_xml(field, value, builder)
200
+ case value
188
201
  when String, Numeric, true, false, nil
189
- builder.tag!(column_to_element(field), content)
202
+ builder.tag!(column_to_element(field), value)
190
203
  when Array
191
- content.each { |item|
192
- field_to_xml(field, item, builder)
193
- }
204
+ value.each { |item| field_to_xml(field, item, builder) }
194
205
  when Hash
195
- row_to_xml(field, content, builder)
206
+ row_to_xml(field, value, builder)
196
207
  else
197
- raise ArgumentError, "don't know how to handle content of type '#{content.class}'"
208
+ raise ArgumentError,
209
+ "don't know how to handle value of type #{value.class}"
198
210
  end
199
211
  end
200
212
 
@@ -4,7 +4,7 @@ module FlattenDB
4
4
 
5
5
  MAJOR = 0
6
6
  MINOR = 2
7
- TINY = 0
7
+ TINY = 1
8
8
 
9
9
  class << self
10
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flattendb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-12 00:00:00.000000000 Z
11
+ date: 2013-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - '>='
60
60
  - !ruby/object:Gem::Version
61
- version: 0.9.1
61
+ version: 0.9.2
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
- version: 0.9.1
68
+ version: 0.9.2
69
69
  description: Flatten relational databases.
70
70
  email: jens.wille@gmail.com
71
71
  executables:
@@ -96,7 +96,7 @@ files:
96
96
  - example/mysql-sample.sql
97
97
  - example/mysql-sample.xml
98
98
  - example/mysql-sample2flat.yaml
99
- homepage: http://prometheus.rubyforge.org/flattendb
99
+ homepage: http://github.com/blackwinter/flattendb
100
100
  licenses: []
101
101
  metadata: {}
102
102
  post_install_message:
@@ -106,7 +106,7 @@ rdoc_options:
106
106
  - --line-numbers
107
107
  - --all
108
108
  - --title
109
- - flattendb Application documentation (v0.2.0)
109
+ - flattendb Application documentation (v0.2.1)
110
110
  - --main
111
111
  - README
112
112
  require_paths:
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  - !ruby/object:Gem::Version
123
123
  version: '0'
124
124
  requirements: []
125
- rubyforge_project: prometheus
125
+ rubyforge_project:
126
126
  rubygems_version: 2.0.3
127
127
  signing_key:
128
128
  specification_version: 4