flattendb 0.2.0 → 0.2.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.
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