Skip to content

Commit

Permalink
add sqlite exporter
Browse files Browse the repository at this point in the history
  • Loading branch information
nullstyle committed Nov 3, 2009
1 parent 066bbca commit 46d2e01
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 0 deletions.
2 changes: 2 additions & 0 deletions given_name/j/ja.yml
Expand Up @@ -95,6 +95,8 @@
gender: male gender: male
- james: - james:
gender: unisex gender: unisex
census1990:
frequency: 3.318
- jamey: - jamey:
gender: unisex gender: unisex
- jami: - jami:
Expand Down
1 change: 1 addition & 0 deletions given_name/s/sc.yml
Expand Up @@ -7,6 +7,7 @@
gender: male gender: male
- scott: - scott:
gender: unisex gender: unisex
origin: gaelic
- scottie: - scottie:
gender: unisex gender: unisex
- scotty: - scotty:
Expand Down
19 changes: 19 additions & 0 deletions lib/name-database/entry.rb
Expand Up @@ -20,6 +20,25 @@ def initialize(set, file, data)
end end
end end


def metadata_without_nesting
returning({}) do |result|
NameDatabase::Entry.flattened_meta("", result, meta)
end
end

def self.flattened_meta(prefix, result, meta)
meta.each do |key, value|
flattened_key = prefix.blank? ? key : "#{prefix}/#{key}"

case value
when Hash
result.merge! flattened_meta(flattened_key, result, value)
else
result[flattened_key] = value
end
end
end



def path() def path()
set.data_file_path(name) set.data_file_path(name)
Expand Down
53 changes: 53 additions & 0 deletions tasks/exporters/sqlite.rake
@@ -0,0 +1,53 @@
require 'sequel'

task "export:sqlite" => [:db, "export:sqlite:schema"] do

#first insert the given_names
@names = @output[:names]
@meta = @output[:metadata]

puts "dumping given names"
@db.given_names.each do |entry|
row = @names.insert :name => entry.name, :type => "given"

entry.metadata_without_nesting.each do |key, value|
@meta.insert :key => key, :value => value
end
end

# puts "dumping family names"
# @db.family_names.each do |entry|
# @names << {:name => entry.name, :type => "family"}
# end

end

namespace "export:sqlite" do
task :db => "out" do

existing = Dir["out/*.sqlite"].length
path = "out/names#{(".#{existing}" if existing > 0)}.sqlite"

@output = Sequel.sqlite(path)
end

task :schema => "export:sqlite:db" do

@output.create_table :names do
primary_key :id
String :name
String :type

index [:type, :name]
end

@output.create_table :metadata do
foreign_key :name_id, :names
String :key
String :value

index [:name_id, :key]
end

end
end

0 comments on commit 46d2e01

Please sign in to comment.