Class: WorldDb::CreateDb

Inherits:
ActiveRecord::Migration
  • Object
show all
Defined in:
lib/worlddb/schema.rb

Instance Method Summary collapse

Instance Method Details

#downObject

method up

Raises:

  • (ActiveRecord::IrreversibleMigration)


122
123
124
# File 'lib/worlddb/schema.rb', line 122

def down
  raise ActiveRecord::IrreversibleMigration
end

#upObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/worlddb/schema.rb', line 6

def up

create_table :countries do |t|
  t.string  :title,  :null => false
  t.string  :key,    :null => false
  t.string  :code,   :null => false  # short three letter code (FIFA country code e.g. ITA)
  t.string  :synonyms  # comma separated list of synonyms
  t.integer :pop,    :null => false    # population count
  t.integer :area,   :null => false    #  area in square km (sq. km)
  t.references :country  # for supra(nationals) n depend(encies)
  
  ## flags (use single int named flags - why? why not?  
  t.boolean :s,  :null => false, :default => false   # supra(national) flag e.g. eu
  t.boolean :c,  :null => false, :default => false   # country flag (is this needed?)
  t.boolean :d,  :null => false, :default => false   # dependency flag
 
  # extras
  t.string  :motor      # optional auto motor (vehicle) licene plate
  t.string  :iso2       # optional iso two letter country code
  t.string  :iso3       # optional iso three letter country code
  t.string  :fifa       # optional fifa country code
  t.string  :net        # optional internet top level domain (tld)
  t.string  :wikipedia  # optional wikipedia page name -- en.wikipedia.org/wiki/<name>

  ## timestamp at last
  t.timestamps
end


add_index :countries, :key,  :unique => true
add_index :countries, :code, :unique => true


create_table :regions do |t|
  t.string :title,  :null => false
  t.string :key,    :null => false
  t.string :code     # short two or three letter code e.g. NY, OAX, etc.
  t.string :synonyms  # comma separated list of synonyms
  t.references :country, :null => false
  t.integer :pop     # optional population count
  t.integer :area    # optional area in square km (sq. km)
  t.timestamps
end

add_index :regions, [:key, :country_id], :unique => true


create_table :cities do |t|
  t.string :title, :null => false
  t.string :key,   :null => false
  t.string :code     # short three letter code (ITAT/airport code e.g. NYC or VIE)
  t.string :synonyms  # comma separated list of synonyms
  t.references :country,  :null => false
  t.references :region    # optional for now
  t.references :city  # optional parent (e.g. metro for city, or city for district)
  t.integer :pop     # optional population count (city proper)
  t.integer :popm    # optional population count (metropolitan/aglomeration)
  t.integer :area    # optional area in square km (sq. km)
  t.float   :lat   # optional for now
  t.float   :lng   # optional for now

  ## flags (use single int named flags - why? why not?    
  t.boolean :m,  :null => false, :default => false   # metro flag
  t.boolean :c,  :null => false, :default => false   # city flag (is this needed?)
  t.boolean :d,  :null => false, :default => false   # district flag

  ### t.boolean :capital, :null => false, :default => false  # is national captial?
  
  t.timestamps
end

create_table :tags do |t|
  t.string :key,  :null => false
  t.string :slug, :null => false
  t.string :title    # todo: make required?
  t.integer :grade, :null => false, :default => 1  # grade/tier e.g. 1/2/3 for now
  ## todo: add parent or similar for hierachy (for tag stacks/packs)
  t.timestamps
end

add_index :tags, :key,  :unique => true

create_table :taggings do |t|
  t.references :tag,  :null => false
  t.references :taggable, :polymorphic => true
  t.timestamps   # todo: use only t.datetime :created_at (do we get ar magic? is updated used/needed??)
end

add_index :taggings, :tag_id
add_index :taggings, [:taggable_id, :taggable_type]


create_table :langs do |t|  # langs == languages (e.g. en/English, de/Deutsch, etc.)
  t.string :key,   :null => false
  t.string :title, :null => false
  t.timestamps
end

create_table :usages do |t|  # join table for countries_langs
  t.references :country,  :null => false
  t.references :lang,     :null => false
  t.boolean    :official, :null => false, :default => true  # is_official language in country
  t.boolean    :minor,    :null => false, :default => false # spoken by minority 
  t.float      :percent     # usage in percent e.g. 90.0, 0.55, etc.
  t.timestamps
end

### fix: move to PropDb ? into props gem? why? why not?
create_table :props do |t|
  t.string :key,   :null => false
  t.string :value, :null => false
  t.timestamps
end

end