worlddb 0.6.8 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -102,6 +102,7 @@ lib/worlddb/models/region.rb
102
102
  lib/worlddb/models/tag.rb
103
103
  lib/worlddb/models/tagging.rb
104
104
  lib/worlddb/reader.rb
105
+ lib/worlddb/readers/code_reader.rb
105
106
  lib/worlddb/readers/hash_reader.rb
106
107
  lib/worlddb/readers/line_reader.rb
107
108
  lib/worlddb/readers/values_reader.rb
data/Rakefile CHANGED
@@ -1,9 +1,17 @@
1
+ require 'pp'
1
2
  require 'hoe'
2
3
  require './lib/worlddb/version.rb'
3
4
 
4
5
  ## NB: plugin (hoe-manifest) not required; just used for future testing/development
5
6
  Hoe::plugin :manifest # more options for manifests (in the future; not yet)
6
7
 
8
+
9
+ ###########
10
+ #### NB: if you try this script at home
11
+ # you need to create a (symbolic) link to the world.db fixtures
12
+ # e.g. use ln -s ../world.db data or similar
13
+
14
+
7
15
  Hoe.spec 'worlddb' do
8
16
 
9
17
  self.version = WorldDB::VERSION
@@ -15,11 +23,6 @@ Hoe.spec 'worlddb' do
15
23
 
16
24
  self.author = 'Gerald Bauer'
17
25
  self.email = 'opensport@googlegroups.com'
18
-
19
- # switch extension to .markdown for gihub formatting
20
- # - auto-added from Manifest.txt (see define_spec in class Hoe)
21
- # self.readme_file = 'README.md'
22
- # self.history_file = 'History.md'
23
26
 
24
27
  self.extra_deps = [
25
28
  ['activerecord', '~> 3.2'] # NB: will include activesupport,etc.
@@ -32,4 +35,49 @@ Hoe.spec 'worlddb' do
32
35
  :required_ruby_version => '>= 1.9.2'
33
36
  }
34
37
 
35
- end
38
+ end
39
+
40
+ ##############################
41
+ ## for testing
42
+ ##
43
+ ## NB: use rake -I ./lib dev:test # fresh import (starts w/ clean wipe out)
44
+
45
+ namespace :dev do
46
+
47
+ BUILD_DIR = "./build"
48
+
49
+ WORLD_DB_PATH = "#{BUILD_DIR}/world.db"
50
+
51
+ DB_CONFIG = {
52
+ :adapter => 'sqlite3',
53
+ :database => WORLD_DB_PATH
54
+ }
55
+
56
+ directory BUILD_DIR
57
+
58
+ task :clean do
59
+ rm WORLD_DB_PATH if File.exists?( WORLD_DB_PATH )
60
+ end
61
+
62
+ task :env => BUILD_DIR do
63
+ require './lib/worlddb.rb'
64
+
65
+ pp DB_CONFIG
66
+ ActiveRecord::Base.establish_connection( DB_CONFIG )
67
+ end
68
+
69
+ task :create => :env do
70
+ WorldDB.create
71
+ end
72
+
73
+ task :import => :env do
74
+ WorldDB.read_all # populate world tables
75
+ WorldDB.stats
76
+ end
77
+
78
+
79
+ desc 'worlddb - test loading of builtin fixtures'
80
+ task :test => [:clean, :create, :import]
81
+
82
+
83
+ end # namespace :dev
@@ -2,11 +2,6 @@ module WorldDB
2
2
 
3
3
  class Loader
4
4
 
5
- ## make models available in worlddb module by default with namespace
6
- # e.g. lets you use City instead of Models::City
7
- include WorldDB::Models
8
-
9
-
10
5
  def initialize( logger=nil )
11
6
  if logger.nil?
12
7
  @logger = Logger.new(STDOUT)
@@ -34,42 +29,27 @@ class Loader
34
29
  end # method run
35
30
 
36
31
 
32
+ class CodeContext
33
+ ## make models available in worlddb module by default with namespace
34
+ # e.g. lets you use City instead of Models::City
35
+ include WorldDB::Models
36
+ end
37
+
38
+ ### todo: rename to load_fixtures_w_include_path (a little shorter - why? why not?)
37
39
  def load_fixtures_with_include_path( name, include_path ) # load from file system
38
40
  path = "#{include_path}/#{name}.rb"
39
41
 
40
42
  puts "*** loading data '#{name}' (#{path})..."
41
43
 
42
- code = File.read( path )
43
-
44
- load_fixtures_worker( code )
45
- end
46
-
47
- def load_fixtures_builtin( name ) # load from gem (built-in)
48
- path = "#{WorldDB.root}/data/#{name}.rb"
44
+ CodeReader.new( logger, path ).eval( CodeContext )
49
45
 
50
- puts "*** loading data '#{name}' (#{path})..."
46
+ # Prop.create!( :key => "db.#{name}.version", :value => WorldDB::VERSION )
47
+ end
51
48
 
52
- code = File.read( path )
53
-
54
- load_fixtures_worker( code )
49
+ def load_fixtures_builtin( name ) # load from gem (built-in)
50
+ load_fixtures_with_include_path( name, WorldDB.data_path )
55
51
  end
56
-
57
52
 
58
- private
59
- def load_fixtures_worker( code )
60
-
61
- self.class_eval( code )
62
53
 
63
- # NB: same as
64
- #
65
- # module WorldDB
66
- # include WorldDB::Models
67
- # <code here>
68
- # end
69
-
70
- # Prop.create!( :key => "db.#{name}.version", :value => SportDB::VERSION )
71
-
72
- end
73
-
74
54
  end # class Loader
75
55
  end # module WorldDB
@@ -3,7 +3,33 @@
3
3
  module WorldDB::Models
4
4
 
5
5
  class Prop < ActiveRecord::Base
6
+
7
+ def self.create_from_worlddb_fixture!( name, path )
8
+ key = "db.#{fixture_name_to_prop_key(name)}.version"
6
9
 
7
- end # class Prop
10
+ if path.starts_with?( WorldDB.data_path )
11
+ value = "world.yml.#{WorldDB::VERSION}" # assume builtin
12
+ else
13
+ value = "file.txt.#{File.mtime(path).strftime('%Y.%m.%d')}"
14
+ end
15
+
16
+ Prop.create!( key: key, value: value )
17
+ end
18
+
19
+ private
20
+
21
+ # helper
22
+ # change at/2012_13/bl to at.2012/13.bl
23
+ # or quali_2012_13_europe_c to quali.2012/13.europe.c
8
24
 
25
+ def self.fixture_name_to_prop_key( name )
26
+ prop_key = name.gsub( '/', '.' )
27
+ prop_key = prop_key.gsub( /(\d{4})_(\d{2})/, '\1/\2' ) # 2012_13 => 2012/13
28
+ prop_key = prop_key.gsub( '_', '.' )
29
+ prop_key
30
+ end
31
+
32
+
33
+ end # class Prop
34
+
9
35
  end # module WorldDB::Models
@@ -23,25 +23,33 @@ class Reader
23
23
  args.each do |arg|
24
24
  name = arg # File.basename( arg, '.*' )
25
25
 
26
- if opts.load?
27
- load_countries_builtin( name ) if opts.countries?
28
- load_regions_builtin( opts.country, name ) if opts.regions?
29
- load_cities_builtin( opts.country, name ) if opts.cities?
26
+ data_path = opts.load? ? WorldDB.data_path : opts.data_path
27
+
28
+ if opts.countries?
29
+ load_countries_with_include_path( name, data_path )
30
+ elsif opts.regions?
31
+ load_regions_with_include_path( opts.country, name, data_path )
32
+ elsif opts.cities?
33
+ load_cities_with_include_path( opts.country, name, data_path )
30
34
  else
31
- load_countries_with_include_path( name, opts.data_path ) if opts.countries?
32
- load_regions_with_include_path( opts.country, name, opts.data_path ) if opts.regions?
33
- load_cities_with_include_path( opts.country, name, opts.data_path ) if opts.cities?
35
+ ## todo: issue a warning here; no fixture type specified; assume country?
34
36
  end
35
- end
37
+ end # each arg
36
38
 
37
39
  end
38
40
 
39
41
 
40
- ############################
41
- # load from file system
42
-
43
42
  def load_with_include_path( name, include_path )
44
- if name =~ /^([a-z]{3,})\/countries/
43
+
44
+ if name =~ /\/fifa/
45
+ load_xxx_with_include_path( 'fifa', name, include_path )
46
+ elsif name =~ /\/iso3/
47
+ load_xxx_with_include_path( 'iso3', name, include_path )
48
+ elsif name =~ /\/internet/
49
+ load_xxx_with_include_path( 'net', name, include_path )
50
+ elsif name =~ /\/motor/
51
+ load_xxx_with_include_path( 'motor', name, include_path )
52
+ elsif name =~ /^([a-z]{3,})\/countries/ # e.g. africa/countries or america/countries
45
53
  ## auto-add continent (from folder structure) as tag
46
54
  load_countries_with_include_path( name, include_path, :tags => $1 )
47
55
  elsif name =~ /\/([a-z]{2})\/cities/
@@ -56,71 +64,46 @@ class Reader
56
64
  end
57
65
  end
58
66
 
67
+ def load_builtin( name ) ## convenience helper (requires proper named files w/ convention)
68
+ load_with_include_path( name, WorldDB.data_path )
69
+ end
70
+
71
+
59
72
  def load_countries_with_include_path( name, include_path, more_values={} )
60
73
  load_fixtures_with_include_path_for( Country, name, include_path, more_values )
61
74
  end
62
75
 
63
- def load_regions_with_include_path( country_key, name, include_path )
64
- country = Country.find_by_key!( country_key )
65
- puts "Country #{country.key} >#{country.title} (#{country.code})<"
66
-
67
- load_fixtures_with_include_path_for( Region, name, include_path, country_id: country.id )
76
+ def load_countries_builtin( name, more_values={} )
77
+ load_countries_with_include_path( name, WorldDB.data_path, more_values )
68
78
  end
69
79
 
70
- def load_cities_with_include_path( country_key, name, include_path )
80
+
81
+ def load_regions_with_include_path( country_key, name, include_path )
71
82
  country = Country.find_by_key!( country_key )
72
83
  puts "Country #{country.key} >#{country.title} (#{country.code})<"
73
84
 
74
- load_fixtures_with_include_path_for( City, name, include_path, country_id: country.id )
85
+ load_fixtures_with_include_path_for( Region, name, include_path, country_id: country.id )
75
86
  end
76
-
77
- ##################################
78
- # load from gem (built-in)
79
87
 
80
- def load_builtin( name ) ## convenience helper (requires proper named files w/ convention)
81
-
82
- if name =~ /\/fifa/
83
- load_xxx_builtin( 'fifa', name )
84
- elsif name =~ /\/iso3/
85
- load_xxx_builtin( 'iso3', name )
86
- elsif name =~ /\/internet/
87
- load_xxx_builtin( 'net', name )
88
- elsif name =~ /\/motor/
89
- load_xxx_builtin( 'motor', name )
90
- elsif name =~ /^([a-z]{3,})\/countries/ # e.g. africa/countries or america/countries
91
- ## auto-add continent (from folder structure) as tag
92
- load_countries_builtin( name, :tags => $1 )
93
- elsif name =~ /\/([a-z]{2})\/cities/
94
- load_cities_builtin( $1, name )
95
- elsif name =~ /\/([a-z]{2})\/regions/
96
- load_regions_builtin( $1, name )
97
- else
98
- puts "*** error: unknown world.db fixture type >#{name}<"
99
- # todo/fix: exit w/ error
100
- end
88
+ def load_regions_builtin( country_key, name )
89
+ load_regions_with_include_path( country_key, name, WorldDB.data_path )
101
90
  end
102
91
 
103
- def load_countries_builtin( name, more_values )
104
- load_fixtures_builtin_for( Country, name, more_values )
105
- end
106
92
 
107
- def load_regions_builtin( country_key, name )
93
+ def load_cities_with_include_path( country_key, name, include_path )
108
94
  country = Country.find_by_key!( country_key )
109
95
  puts "Country #{country.key} >#{country.title} (#{country.code})<"
110
-
111
- load_fixtures_builtin_for( Region, name, country_id: country.id )
96
+
97
+ load_fixtures_with_include_path_for( City, name, include_path, country_id: country.id )
112
98
  end
113
-
114
- def load_cities_builtin( country_key, name )
115
- country = Country.find_by_key!( country_key )
116
- puts "Country #{country.key} >#{country.title} (#{country.code})<"
117
99
 
118
- load_fixtures_builtin_for( City, name, country_id: country.id )
100
+ def load_cities_builtin( country_key, name )
101
+ load_cities_with_include_path( country_key, name, WorldDB.data_path )
119
102
  end
120
103
 
121
104
 
122
- def load_xxx_builtin( xxx, name )
123
- path = "#{WorldDB.root}/data/#{name}.yml"
105
+ def load_xxx_with_include_path( xxx, name, include_path )
106
+ path = "#{include_path}/#{name}.yml"
124
107
 
125
108
  puts "*** parsing data '#{name}' (#{path})..."
126
109
 
@@ -132,7 +115,11 @@ class Reader
132
115
  country.save!
133
116
  end
134
117
 
135
- Prop.create!( key: "db.#{fixture_name_to_prop_key(name)}.version", value: "world.yml.#{WorldDB::VERSION}" )
118
+ Prop.create_from_worlddb_fixture!( name, path )
119
+ end
120
+
121
+ def load_xxx_builtin( xxx, name )
122
+ load_xxx_with_include_path( xxx, name, WorldDB.data_path )
136
123
  end
137
124
 
138
125
 
@@ -146,19 +133,7 @@ private
146
133
 
147
134
  load_fixtures_worker_for( clazz, reader )
148
135
 
149
- Prop.create!( key: "db.#{fixture_name_to_prop_key(name)}.version", value: "file.txt.#{File.mtime(path).strftime('%Y.%m.%d')}" )
150
- end
151
-
152
- def load_fixtures_builtin_for( clazz, name, more_values={} ) # load from gem (built-in)
153
- path = "#{WorldDB.root}/data/#{name}.txt"
154
-
155
- puts "*** parsing data '#{name}' (#{path})..."
156
-
157
- reader = ValuesReader.new( logger, path, more_values )
158
-
159
- load_fixtures_worker_for( clazz, reader )
160
-
161
- Prop.create!( key: "db.#{fixture_name_to_prop_key(name)}.version", value: "world.txt.#{WorldDB::VERSION}" )
136
+ Prop.create_from_worlddb_fixture!( name, path )
162
137
  end
163
138
 
164
139
 
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+
3
+ class CodeReader
4
+
5
+ def initialize( logger=nil, path )
6
+ if logger.nil?
7
+ @logger = Logger.new(STDOUT)
8
+ @logger.level = Logger::INFO
9
+ else
10
+ @logger = logger
11
+ end
12
+
13
+ @path = path
14
+
15
+ ## nb: assume/enfore utf-8 encoding (with or without BOM - byte order mark)
16
+ ## - see worlddb/utils.rb
17
+
18
+ @code = File.read_utf8( @path )
19
+ end
20
+
21
+ def eval( klass )
22
+ klass.class_eval( @code )
23
+
24
+ # NB: same as
25
+ #
26
+ # module WorldDB
27
+ # include WorldDB::Models
28
+ # <code here>
29
+ # end
30
+ end
31
+
32
+ attr_reader :logger
33
+
34
+ end # class CodeReader
@@ -15,7 +15,15 @@ class HashReader
15
15
 
16
16
  ## nb: assume/enfore utf-8 encoding (with or without BOM - byte order mark)
17
17
  ## - see worlddb/utils.rb
18
- @hash = YAML.load( File.read_utf8( @path ))
18
+
19
+ text = File.read_utf8( @path )
20
+ ### hack for syck yaml parser (e.g.ruby 1.9.2) (cannot handle !!null)
21
+ ## change it to !null to get plain nil
22
+ ## w/ both syck and psych/libyml
23
+
24
+ text = text.gsub( '!!null', '!null' )
25
+
26
+ @hash = YAML.load( text )
19
27
  end
20
28
 
21
29
  attr_reader :logger
data/lib/worlddb/utils.rb CHANGED
@@ -26,21 +26,6 @@ class File
26
26
  end
27
27
  end # class File
28
28
 
29
-
30
-
31
- ##
32
- # fix/todo: share helper w/ other readers
33
-
34
- # helper
35
- # change at/2012_13/bl to at.2012/13.bl
36
- # or quali_2012_13_europe_c to quali.2012/13.europe.c
37
-
38
- def fixture_name_to_prop_key( name )
39
- prop_key = name.gsub( '/', '.' )
40
- prop_key = prop_key.gsub( /(\d{4})_(\d{2})/, '\1/\2' ) # 2012_13 => 2012/13
41
- prop_key = prop_key.gsub( '_', '.' )
42
- prop_key
43
- end
44
29
 
45
30
  ############
46
31
  ### fix/todo: share helper for all text readers/parsers- where to put it?
@@ -1,5 +1,5 @@
1
1
 
2
2
  module WorldDB
3
- VERSION = '0.6.8'
3
+ VERSION = '0.7.0'
4
4
  end
5
5
 
data/lib/worlddb.rb CHANGED
@@ -30,6 +30,7 @@ require 'worlddb/models/tag'
30
30
  require 'worlddb/models/tagging'
31
31
  require 'worlddb/schema' # NB: requires worlddb/models (include WorldDB::Models)
32
32
  require 'worlddb/utils'
33
+ require 'worlddb/readers/code_reader'
33
34
  require 'worlddb/readers/line_reader'
34
35
  require 'worlddb/readers/values_reader'
35
36
  require 'worlddb/readers/hash_reader'
@@ -47,6 +48,11 @@ module WorldDB
47
48
  def self.root
48
49
  "#{File.expand_path( File.dirname(File.dirname(__FILE__)) )}"
49
50
  end
51
+
52
+ # builtin path to fixture data
53
+ def self.data_path
54
+ "#{root}/data"
55
+ end
50
56
 
51
57
  def self.main
52
58
  Runner.new.run(ARGV)
@@ -67,82 +73,100 @@ module WorldDB
67
73
  end
68
74
 
69
75
  def self.fixtures # all builtin fixtures; helper for covenience
76
+ africa_fixtures +
77
+ america_fixtures +
78
+ europe_fixtures +
79
+ asia_fixtures +
80
+ oceania_fixtures
81
+ end
82
+
83
+ def self.africa_fixtures
84
+ ['countries',
85
+ '1_codes/fifa',
86
+ '1_codes/internet',
87
+ '1_codes/iso3'].map { |path| "africa/#{path}" }
88
+ end
89
+
90
+ def self.america_fixtures
91
+ ['countries',
92
+ '1_codes/fifa',
93
+ '1_codes/internet',
94
+ '1_codes/iso3',
95
+ '1_codes/motor',
96
+ 'br/regions',
97
+ 'br/cities',
98
+ 'ca/regions',
99
+ 'ca/cities',
100
+ 'mx/regions',
101
+ 'mx/cities',
102
+ 'us/regions',
103
+ 'us/cities',
104
+ 've/regions',
105
+ 've/cities'].map { |path| "america/#{path}" }
106
+ end
107
+
108
+ def self.asia_fixtures
109
+ ['countries',
110
+ '1_codes/fifa',
111
+ '1_codes/internet',
112
+ '1_codes/iso3',
113
+ 'jp/cities'].map { |path| "asia/#{path}" }
114
+ end
115
+
116
+ def self.europe_fixtures
117
+ ['countries',
118
+ '1_codes/fifa',
119
+ '1_codes/internet',
120
+ '1_codes/iso3',
121
+ '1_codes/motor',
122
+ 'at/regions',
123
+ 'at/cities',
124
+ 'be/regions',
125
+ 'be/cities',
126
+ 'bg/cities',
127
+ 'by/cities',
128
+ 'ch/cities',
129
+ 'cy/cities',
130
+ 'cz/regions',
131
+ 'cz/cities',
132
+ 'de/regions',
133
+ 'de/cities',
134
+ 'dk/cities',
135
+ 'ee/cities',
136
+ 'en/regions',
137
+ 'en/cities',
138
+ 'es/regions',
139
+ 'es/cities',
140
+ 'fi/cities',
141
+ 'fr/regions',
142
+ 'fr/cities',
143
+ 'gr/cities',
144
+ 'hr/cities',
145
+ 'hu/cities',
146
+ 'ie/cities',
147
+ 'it/cities',
148
+ 'lt/cities',
149
+ 'lv/cities',
150
+ 'nl/cities',
151
+ 'no/cities',
152
+ 'pl/cities',
153
+ 'pt/cities',
154
+ 'ro/cities',
155
+ 'rs/cities',
156
+ 'ru/cities',
157
+ 'sc/cities',
158
+ 'se/cities',
159
+ 'tr/cities',
160
+ 'ua/cities',
161
+ 'wa/cities'].map { |path| "europe/#{path}" }
162
+ end
70
163
 
71
- ['africa/countries',
72
- 'africa/1_codes/fifa',
73
- 'africa/1_codes/internet',
74
- 'africa/1_codes/iso3',
75
- 'america/countries',
76
- 'america/1_codes/fifa',
77
- 'america/1_codes/internet',
78
- 'america/1_codes/iso3',
79
- 'america/1_codes/motor',
80
- 'america/br/regions',
81
- 'america/br/cities',
82
- 'america/ca/regions',
83
- 'america/ca/cities',
84
- 'america/mx/regions',
85
- 'america/mx/cities',
86
- 'america/us/regions',
87
- 'america/us/cities',
88
- 'america/ve/regions',
89
- 'america/ve/cities',
90
- 'asia/countries',
91
- 'asia/1_codes/fifa',
92
- 'asia/1_codes/internet',
93
- 'asia/1_codes/iso3',
94
- 'asia/jp/cities',
95
- 'europe/countries',
96
- 'europe/1_codes/fifa',
97
- 'europe/1_codes/internet',
98
- 'europe/1_codes/iso3',
99
- 'europe/1_codes/motor',
100
- 'europe/at/regions',
101
- 'europe/at/cities',
102
- 'europe/be/regions',
103
- 'europe/be/cities',
104
- 'europe/bg/cities',
105
- 'europe/by/cities',
106
- 'europe/ch/cities',
107
- 'europe/cy/cities',
108
- 'europe/cz/regions',
109
- 'europe/cz/cities',
110
- 'europe/de/regions',
111
- 'europe/de/cities',
112
- 'europe/dk/cities',
113
- 'europe/ee/cities',
114
- 'europe/en/regions',
115
- 'europe/en/cities',
116
- 'europe/es/regions',
117
- 'europe/es/cities',
118
- 'europe/fi/cities',
119
- 'europe/fr/regions',
120
- 'europe/fr/cities',
121
- 'europe/gr/cities',
122
- 'europe/hr/cities',
123
- 'europe/hu/cities',
124
- 'europe/ie/cities',
125
- 'europe/it/cities',
126
- 'europe/lt/cities',
127
- 'europe/lv/cities',
128
- 'europe/nl/cities',
129
- 'europe/no/cities',
130
- 'europe/pl/cities',
131
- 'europe/pt/cities',
132
- 'europe/ro/cities',
133
- 'europe/rs/cities',
134
- 'europe/ru/cities',
135
- 'europe/sc/cities',
136
- 'europe/se/cities',
137
- 'europe/tr/cities',
138
- 'europe/ua/cities',
139
- 'europe/wa/cities',
140
- 'oceania/countries',
141
- 'oceania/1_codes/fifa',
142
- 'oceania/1_codes/internet',
143
- 'oceania/1_codes/iso3',
144
- 'oceania/au/cities'
145
- ]
164
+ def self.oceania_fixtures
165
+ ['countries',
166
+ '1_codes/fifa',
167
+ '1_codes/internet',
168
+ '1_codes/iso3',
169
+ 'au/cities'].map { |path| "oceania/#{path}" }
146
170
  end
147
171
 
148
172
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worlddb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 6
9
- - 8
10
- version: 0.6.8
8
+ - 7
9
+ - 0
10
+ version: 0.7.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gerald Bauer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-12-02 00:00:00 Z
18
+ date: 2012-12-05 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: activerecord
@@ -175,6 +175,7 @@ files:
175
175
  - lib/worlddb/models/tag.rb
176
176
  - lib/worlddb/models/tagging.rb
177
177
  - lib/worlddb/reader.rb
178
+ - lib/worlddb/readers/code_reader.rb
178
179
  - lib/worlddb/readers/hash_reader.rb
179
180
  - lib/worlddb/readers/line_reader.rb
180
181
  - lib/worlddb/readers/values_reader.rb