looky-lu 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- N2RkZTA3N2Q3YzI0YzcxMzg0NGUwMDUyYTViMTg1YTAzMmNkZmY3Yg==
4
+ ODcwZmI4M2U3MjUxMGRjZTkxZmQ2M2NiMzIyODEyM2I1ZjA5ZDZiNA==
5
5
  data.tar.gz: !binary |-
6
- ZjlmNmMzNWQxNmZkMTFmOTQxNTJkYjRkZGI4YmJhODEyZGExMTMzZA==
6
+ YzE3NmQ0MGE4YjM5NjU4OTQ5N2JhMzNmNDdkNzBkYjZiYjBlYjk3OA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NDU4ZGNlMTU0NzZiM2UzOTM2NGFlNTZmMTZjYjIwMTRiYzMzMDI5MmY1NDNk
10
- MTMxNWZhNDc2MjU5NzU4NzQ1ZTZjMmI4NWVlZjA1NTZmZTI2YTY0N2RkMzQ4
11
- ZWU2NTNlNWJmYzgyYTRiNTY0MzhmNjJjNGRjZjZiMDE4NDZjODQ=
9
+ Njc5NjZlZTVlZmM1ZDA5Mjk2YmEyMjJmODdkMzQ1ZGI5Mjk0YjIzMDIyZjUx
10
+ YWRhZjFlYWE3YTg3OTJhODNkNzZlN2U5YzA2YjViZmQ0ZDg3NTQ3ZTk3NWI0
11
+ MmZjNzgxYTE1NTZhM2YwM2NhYjQ3YjJmMWU3ZTE2Nzc0NjJhZWQ=
12
12
  data.tar.gz: !binary |-
13
- ZTVkMzgyN2Q1NWM2MGI2NzU0NWU1MDNjMTM1NGZlNDAzMzZmMjNiYzVmYzg2
14
- NmIzMjNmZjhhOWE3ZDM0Y2Y0N2Y5NmQ4NDZiOTAxNjZmMDMzZTIzNmVmOTgy
15
- OGRkODg4MDQ0NmRmMDU4ZmFkMmZmODk2MTk3OThhM2MyMTg1NWM=
13
+ MDIwZTViYjRkMGQ0ZWY4ODA0ODcxMWU5MDJiMGNiOTNjN2JjMzhiMzBiZDdh
14
+ YjQ0MmY1MWU3MTMxMDVkOWQwYTI0OWQ2ZTBlOTIxNGYxY2Q4MmU3YTE5OGFi
15
+ NzBhOGE3ZGY0NWExYjc3YmYzYWMzYzE0NzdkZDkyZjM0YTNkMjc=
data/README.md CHANGED
@@ -13,40 +13,43 @@ For example, you need a State object that is an LU table for all of the states i
13
13
  Using my example above of needing a State object:
14
14
 
15
15
  Install LookyLu
16
- ```
17
- gem install looky-lu
18
- ```
16
+
17
+ gem install looky-lu
18
+
19
19
  Or add to your gemfile
20
- ```
21
- gem 'looky-lu'
22
- ```
20
+
21
+ gem 'looky-lu'
22
+
23
23
 
24
24
  Generate the ActiveRecord model and the needed migration
25
- ```
26
- rails g lookylu:state
27
- ```
28
25
 
26
+ rails g lookylu:state
27
+
28
+
29
+ Populate the database with the 50 states plus D.C.
30
+
31
+ rails g lookylu:state_data State united_states
32
+
29
33
  Migrate your database
30
- ```
31
- rake db:migrate
32
- ```
33
34
 
34
- Populate the database with the 50 stats plus D.C.
35
- ```
36
- rails g lookylu:state_data State united_states
37
- ```
35
+ rake db:migrate
36
+
37
+ Seed your database
38
+
39
+ rake db:seed
40
+
38
41
 
39
42
  ## Additional Options ##
40
43
 
41
44
  For generating the Model and migration
42
- ```
43
- rails g lookylu:state -h
44
- ```
45
+
46
+ rails g lookylu:state -h
47
+
45
48
 
46
49
  For generating the LU data
47
- ```
48
- rails g lookylu:state_data -h
49
- ```
50
+
51
+ rails g lookylu:state_data -h
52
+
50
53
 
51
54
  ## Current LU Data Available ##
52
55
 
@@ -0,0 +1,196 @@
1
+ countries: [
2
+ {name: 'Afghanistan', abbreviation: 'AF'},
3
+ {name: 'Albania', abbreviation: 'AL'},
4
+ {name: 'Algeria', abbreviation: 'AG'},
5
+ {name: 'Andorra', abbreviation: 'AN'},
6
+ {name: 'Angola', abbreviation: 'AO'},
7
+ {name: 'Antigua and Barbuda', abbreviation: 'AC'},
8
+ {name: 'Argentina', abbreviation: 'AR'},
9
+ {name: 'Armenia', abbreviation: 'AM'},
10
+ {name: 'Australia', abbreviation: 'AS'},
11
+ {name: 'Austria', abbreviation: 'AU'},
12
+ {name: 'Azerbaijan', abbreviation: 'AJ'},
13
+ {name: 'Bahamas, The', abbreviation: 'BF'},
14
+ {name: 'Bahrain', abbreviation: 'BA'},
15
+ {name: 'Bangladesh', abbreviation: 'BG'},
16
+ {name: 'Barbados', abbreviation: 'BB'},
17
+ {name: 'Belarus', abbreviation: 'BO'},
18
+ {name: 'Belgium', abbreviation: 'BE'},
19
+ {name: 'Belize', abbreviation: 'BH'},
20
+ {name: 'Benin', abbreviation: 'BN'},
21
+ {name: 'Bhutan', abbreviation: 'BT'},
22
+ {name: 'Bolivia', abbreviation: 'BL'},
23
+ {name: 'Bosnia and Herzegovina', abbreviation: 'BK'},
24
+ {name: 'Botswana', abbreviation: 'BC'},
25
+ {name: 'Brazil', abbreviation: 'BR'},
26
+ {name: 'Brunei', abbreviation: 'BX'},
27
+ {name: 'Bulgaria', abbreviation: 'BU'},
28
+ {name: 'Burkina Faso', abbreviation: 'UV'},
29
+ {name: 'Burma', abbreviation: 'BM'},
30
+ {name: 'Burundi', abbreviation: 'BY'},
31
+ {name: 'Cambodia', abbreviation: 'CB'},
32
+ {name: 'Cameroon', abbreviation: 'CM'},
33
+ {name: 'Canada', abbreviation: 'CA'},
34
+ {name: 'Cape Verde', abbreviation: 'CV'},
35
+ {name: 'Central African Republic', abbreviation: 'CT'},
36
+ {name: 'Chad', abbreviation: 'CD'},
37
+ {name: 'Chile', abbreviation: 'CI'},
38
+ {name: 'China', abbreviation: 'CH'},
39
+ {name: 'Colombia', abbreviation: 'CO'},
40
+ {name: 'Comoros', abbreviation: 'CN'},
41
+ {name: 'Congo', abbreviation: 'CG'},
42
+ {name: 'Costa Rica', abbreviation: 'CS'},
43
+ {name: "Côte d'Ivoire", abbreviation: 'IV'},
44
+ {name: 'Croatia', abbreviation: 'HR'},
45
+ {name: 'Cuba', abbreviation: 'CU'},
46
+ {name: 'Cyprus', abbreviation: 'CY'},
47
+ {name: 'Czech Republic', abbreviation: 'EZ'},
48
+ {name: 'Denmark', abbreviation: 'DA'},
49
+ {name: 'Djibouti', abbreviation: 'DJ'},
50
+ {name: 'Dominica', abbreviation: 'DO'},
51
+ {name: 'Dominican Republic', abbreviation: 'DR'},
52
+ {name: 'Ecuador', abbreviation: 'EC'},
53
+ {name: 'Egypt', abbreviation: 'EG'},
54
+ {name: 'El Salvador', abbreviation: 'ES'},
55
+ {name: 'Equatorial Guinea', abbreviation: 'EK'},
56
+ {name: 'Eritrea', abbreviation: 'ER'},
57
+ {name: 'Estonia', abbreviation: 'EN'},
58
+ {name: 'Ethiopia', abbreviation: 'ET'},
59
+ {name: 'Fiji', abbreviation: 'FJ'},
60
+ {name: 'Finland', abbreviation: 'FI'},
61
+ {name: 'France', abbreviation: 'FR'},
62
+ {name: 'Gabon', abbreviation: 'GB'},
63
+ {name: 'Gambia, The', abbreviation: 'GA'},
64
+ {name: 'Georgia', abbreviation: 'GG'},
65
+ {name: 'Germany', abbreviation: 'GM'},
66
+ {name: 'Ghana', abbreviation: 'GH'},
67
+ {name: 'Greece', abbreviation: 'GR'},
68
+ {name: 'Grenada', abbreviation: 'GJ'},
69
+ {name: 'Guatemala', abbreviation: 'GT'},
70
+ {name: 'Guinea', abbreviation: 'GV'},
71
+ {name: 'Guinea-Bissau', abbreviation: 'PU'},
72
+ {name: 'Guyana', abbreviation: 'GY'},
73
+ {name: 'Haiti', abbreviation: 'HA'},
74
+ {name: 'Holy See', abbreviation: 'VT'},
75
+ {name: 'Honduras', abbreviation: 'HO'},
76
+ {name: 'Hungary', abbreviation: 'HU'},
77
+ {name: 'Iceland', abbreviation: 'IC'},
78
+ {name: 'India', abbreviation: 'IN'},
79
+ {name: 'Indonesia', abbreviation: 'ID'},
80
+ {name: 'Iran', abbreviation: 'IR'},
81
+ {name: 'Iraq', abbreviation: 'IZ'},
82
+ {name: 'Ireland', abbreviation: 'EI'},
83
+ {name: 'Israel', abbreviation: 'IS'},
84
+ {name: 'Italy', abbreviation: 'IT'},
85
+ {name: 'Jamaica', abbreviation: 'JM'},
86
+ {name: 'Japan', abbreviation: 'JA'},
87
+ {name: 'Jordan', abbreviation: 'JO'},
88
+ {name: 'Kazakhstan', abbreviation: 'KZ'},
89
+ {name: 'Kenya', abbreviation: 'KE'},
90
+ {name: 'Kiribati', abbreviation: 'KR'},
91
+ {name: 'Korea, North', abbreviation: 'KN'},
92
+ {name: 'Korea, South', abbreviation: 'KS'},
93
+ {name: 'Kosovo', abbreviation: 'KV'},
94
+ {name: 'Kuwait', abbreviation: 'KU'},
95
+ {name: 'Kyrgyzstan', abbreviation: 'KG'},
96
+ {name: 'Laos', abbreviation: 'LA'},
97
+ {name: 'Latvia', abbreviation: 'LG'},
98
+ {name: 'Lebanon', abbreviation: 'LE'},
99
+ {name: 'Lesotho', abbreviation: 'LT'},
100
+ {name: 'Liberia', abbreviation: 'LI'},
101
+ {name: 'Libya', abbreviation: 'LY'},
102
+ {name: 'Liechtenstein', abbreviation: 'LS'},
103
+ {name: 'Lithuania', abbreviation: 'LH'},
104
+ {name: 'Luxembourg', abbreviation: 'LU'},
105
+ {name: 'Macedonia', abbreviation: 'MK'},
106
+ {name: 'Madagascar', abbreviation: 'MA'},
107
+ {name: 'Malawi', abbreviation: 'MI'},
108
+ {name: 'Malaysia', abbreviation: 'MY'},
109
+ {name: 'Maldives', abbreviation: 'MV'},
110
+ {name: 'Mali', abbreviation: 'ML'},
111
+ {name: 'Malta', abbreviation: 'MT'},
112
+ {name: 'Marshall Islands', abbreviation: 'RM'},
113
+ {name: 'Mauritania', abbreviation: 'MR'},
114
+ {name: 'Mauritius', abbreviation: 'MP'},
115
+ {name: 'Mexico', abbreviation: 'MX'},
116
+ {name: 'Micronesia, Federated States of', abbreviation: 'FM'},
117
+ {name: 'Moldova', abbreviation: 'MD'},
118
+ {name: 'Monaco', abbreviation: 'MN'},
119
+ {name: 'Mongolia', abbreviation: 'MG'},
120
+ {name: 'Montenegro', abbreviation: 'MJ'},
121
+ {name: 'Morocco', abbreviation: 'MO'},
122
+ {name: 'Mozambique', abbreviation: 'MZ'},
123
+ {name: 'Namibia', abbreviation: 'WA'},
124
+ {name: 'Nauru', abbreviation: 'NR'},
125
+ {name: 'Nepal', abbreviation: 'NP'},
126
+ {name: 'Netherlands', abbreviation: 'NL'},
127
+ {name: 'New Zealand', abbreviation: 'NZ'},
128
+ {name: 'Nicaragua', abbreviation: 'NU'},
129
+ {name: 'Niger', abbreviation: 'NG'},
130
+ {name: 'Nigeria', abbreviation: 'NI'},
131
+ {name: 'Norway', abbreviation: 'NO'},
132
+ {name: 'Oman', abbreviation: 'MU'},
133
+ {name: 'Pakistan', abbreviation: 'PK'},
134
+ {name: 'Palau', abbreviation: 'PS'},
135
+ {name: 'Panama', abbreviation: 'PM'},
136
+ {name: 'Papua New Guinea', abbreviation: 'PP'},
137
+ {name: 'Paraguay', abbreviation: 'PA'},
138
+ {name: 'Peru', abbreviation: 'PE'},
139
+ {name: 'Philippines', abbreviation: 'RP'},
140
+ {name: 'Poland', abbreviation: 'PL'},
141
+ {name: 'Portugal', abbreviation: 'PO'},
142
+ {name: 'Qatar', abbreviation: 'QA'},
143
+ {name: 'Romania', abbreviation: 'RO'},
144
+ {name: 'Russia', abbreviation: 'RS'},
145
+ {name: 'Rwanda', abbreviation: 'RW'},
146
+ {name: 'Saint Kitts and Nevis', abbreviation: 'SC'},
147
+ {name: 'Saint Lucia', abbreviation: 'ST'},
148
+ {name: 'Saint Vincent and the Grenadines', abbreviation: 'VC'},
149
+ {name: 'Samoa', abbreviation: 'WS'},
150
+ {name: 'San Marino', abbreviation: 'SM'},
151
+ {name: 'Sao Tome and Principe', abbreviation: 'TP'},
152
+ {name: 'Saudi Arabia', abbreviation: 'SA'},
153
+ {name: 'Senegal', abbreviation: 'SG'},
154
+ {name: 'Serbia', abbreviation: 'RI'},
155
+ {name: 'Seychelles', abbreviation: 'SE'},
156
+ {name: 'Sierra Leone', abbreviation: 'SL'},
157
+ {name: 'Singapore', abbreviation: 'SN'},
158
+ {name: 'Slovakia', abbreviation: 'LO'},
159
+ {name: 'Slovenia', abbreviation: 'SI'},
160
+ {name: 'Solomon Islands', abbreviation: 'BP'},
161
+ {name: 'Somalia', abbreviation: 'SO'},
162
+ {name: 'South Africa', abbreviation: 'SF'},
163
+ {name: 'South Sudan', abbreviation: 'OD'},
164
+ {name: 'Spain', abbreviation: 'SP'},
165
+ {name: 'Sri Lanka', abbreviation: 'CE'},
166
+ {name: 'Sudan', abbreviation: 'SU'},
167
+ {name: 'Suriname', abbreviation: 'NS'},
168
+ {name: 'Swaziland', abbreviation: 'WZ'},
169
+ {name: 'Sweden', abbreviation: 'SW'},
170
+ {name: 'Switzerland', abbreviation: 'SZ'},
171
+ {name: 'Syria', abbreviation: 'SY'},
172
+ {name: 'Tajikistan', abbreviation: 'TI'},
173
+ {name: 'Tanzania', abbreviation: 'TZ'},
174
+ {name: 'Thailand', abbreviation: 'TH'},
175
+ {name: 'Timor-Leste', abbreviation: 'TT'},
176
+ {name: 'Togo', abbreviation: 'TO'},
177
+ {name: 'Tonga', abbreviation: 'TN'},
178
+ {name: 'Trinidad and Tobago', abbreviation: 'TD'},
179
+ {name: 'Tunisia', abbreviation: 'TS'},
180
+ {name: 'Turkey', abbreviation: 'TU'},
181
+ {name: 'Turkmenistan', abbreviation: 'TX'},
182
+ {name: 'Tuvalu', abbreviation: 'TV'},
183
+ {name: 'Uganda', abbreviation: 'UG'},
184
+ {name: 'Ukraine', abbreviation: 'UP'},
185
+ {name: 'United Arab Emirates', abbreviation: 'AE'},
186
+ {name: 'United Kingdom', abbreviation: 'UK'},
187
+ {name: 'United States', abbreviation: 'US'},
188
+ {name: 'Uruguay', abbreviation: 'UY'},
189
+ {name: 'Uzbekistan', abbreviation: 'UZ'},
190
+ {name: 'Vanuatu', abbreviation: 'NH'},
191
+ {name: 'Venezuela', abbreviation: 'VE'},
192
+ {name: 'Vietnam', abbreviation: 'VM'},
193
+ {name: 'Yemen', abbreviation: 'YM'},
194
+ {name: 'Zambia', abbreviation: 'ZA'},
195
+ {name: 'Zimbabwe', abbreviation: 'ZI'}
196
+ ]
@@ -1,6 +1,22 @@
1
1
  module LookyLu
2
2
  class States
3
3
 
4
+ def self.insert_data(country_name, object_name)
5
+
6
+ states = from_country country_name
7
+ begin
8
+ class_object = eval(object_name.camelize)
9
+
10
+ states.each do |s|
11
+ class_object.create(s)
12
+ end
13
+ rescue => e
14
+ raise "Could not find object for #{object_name.camelize}"
15
+ end
16
+
17
+ end
18
+
19
+
4
20
  def self.from_country(country_name)
5
21
 
6
22
  yml = YAML.load_file(File.dirname(__FILE__) + "/states.yml")
@@ -6,34 +6,19 @@ module Lookylu
6
6
  class StateDataGenerator < Lookylu::Generators::BaseGenerator
7
7
  class_option :country_name, type: :string, default: 'united_states', desc: "Choose a country: united_states, canada, or all."
8
8
 
9
- def populate_data
10
- connect_to_db
11
- unless ActiveRecord::Base.connection.table_exists? plural_name
12
- raise "Table #{plural_name} does not exist. Please build the needed migration and migrate your database"
13
- end
14
- begin
15
- class_object = eval(object_name.capitalize)
9
+ def append_seeds
16
10
 
17
- LookyLu::States.from_country(options.country_name).each do |data|
18
- class_object.where(data).first_or_create
19
- end
11
+ the_file = 'db/seeds.rb'
12
+ to_append = "\nLookyLu::States.insert_data('#{options.country_name}', '#{object_name}')\n"
20
13
 
21
- puts "There are now #{pluralize(class_object.count, model_name)}"
22
- rescue => e
23
- raise "Could not find object for #{model_name}"
24
- end
14
+ #File.open(the_file, 'a') do |file|
15
+ # file.write "\nLookyLu::States.insert_data('#{options.country_name}', '#{object_name}')\n"
16
+ #end
25
17
 
26
- end
27
-
28
- private
18
+ FileUtils.touch the_file
19
+ append_file(the_file, to_append)
29
20
 
30
- def connect_to_db
31
- ActiveRecord::Base.establish_connection db_config
32
- end
33
-
34
- def db_config
35
- Rails.configuration.database_configuration[::Rails.env]
36
- end
21
+ end
37
22
 
38
23
  end
39
24
  end
@@ -34,7 +34,7 @@ module Lookylu
34
34
  end
35
35
 
36
36
  def model_location
37
- "app/models/#{model_name}.rb"
37
+ "app/models/#{file_name}.rb"
38
38
  end
39
39
 
40
40
  end
@@ -1,3 +1,3 @@
1
1
  module LookyLu
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,8 +1,23 @@
1
1
  require 'spec_helper'
2
2
  require 'data/lu/states'
3
+ require 'app/models/State'
3
4
 
4
5
  describe LookyLu::States do
5
6
 
7
+ describe 'insert data' do
8
+
9
+ it 'should insert some data' do
10
+ LookyLu::States.insert_data('united_states', 'state')
11
+ State.count.should == 51
12
+ end
13
+
14
+ it 'should properly error when object does not exist' do
15
+ expect {LookyLu::States.insert_data('united_states', 'not_there')}.
16
+ to raise_error 'Could not find object for NotThere'
17
+ end
18
+
19
+ end
20
+
6
21
  describe 'from country' do
7
22
 
8
23
  it 'should pull only united states' do
@@ -10,45 +10,35 @@ describe Lookylu::Generators::StateDataGenerator do
10
10
  @gen.object_name = 'State'
11
11
  end
12
12
 
13
- it 'should pull the database configs' do
14
- Rails.should_receive(:configuration).and_return(double('configuration', database_configuration: {}))
15
- @gen.send(:db_config)
16
- end
13
+ describe 'execute generator' do
17
14
 
18
- it 'should connect to the database' do
19
- pending 'How to test this?'
20
- end
15
+ after(:each) do
16
+ FileUtils.rm_rf 'db'
17
+ end
21
18
 
22
- describe 'populate data' do
19
+ it 'should append to file' do
20
+ Dir.mkdir('db')
21
+ @gen.append_seeds
23
22
 
24
- before(:each) do
25
- Lookylu::Generators::StateDataGenerator.any_instance.stub(:db_config).and_return(database_config)
23
+ File.open('db/seeds.rb') do |file|
24
+ file.read.should == "\nLookyLu::States.insert_data('united_states', 'State')\n"
25
+ end
26
26
  end
27
27
 
28
- after(:each) do
29
- load_db
30
- end
28
+ it 'should append to existing file' do
31
29
 
32
- it 'should fail if table is not there' do
33
- @gen.send(:connect_to_db)
34
- ActiveRecord::Base.connection.drop_table @gen.plural_name
30
+ Dir.mkdir('db')
35
31
 
36
- expect {@gen.populate_data}.
37
- to raise_error "Table #{@gen.plural_name} does not exist. Please build the needed migration and migrate your database"
38
- end
32
+ File.open('db/seeds.rb', 'w') do |file|
33
+ file.write 'This is a test'
34
+ end
39
35
 
40
- it 'should add object data' do
41
- Object.any_instance.should_receive(:puts).with("There are now #{@gen.pluralize(LookyLu::States.from_country('united_states').count, @gen.plural_model_name)}")
36
+ @gen.append_seeds
42
37
 
43
- @gen.options.country_name = 'united_states'
44
- @gen.populate_data
45
- State.count.should == LookyLu::States.from_country('united_states').count
46
- end
38
+ File.open('db/seeds.rb') do |file|
39
+ file.read.should == "This is a test\nLookyLu::States.insert_data('united_states', 'State')\n"
40
+ end
47
41
 
48
- it 'should not fail if object does not exist' do
49
- @gen.object_name = 'no_model'
50
- expect {@gen.populate_data}.
51
- to raise_error "Could not find object for #{@gen.model_name}"
52
42
  end
53
43
 
54
44
  end
@@ -14,7 +14,7 @@ describe Lookylu::Generators::StateGenerator do
14
14
  #.send(:method_name, args)
15
15
 
16
16
  it 'should get model location' do
17
- @gen.send(:model_location).should == "app/models/ObjectName.rb"
17
+ @gen.send(:model_location).should == "app/models/object_name.rb"
18
18
  end
19
19
 
20
20
  it 'should get migration_location' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: looky-lu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Hopp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-17 00:00:00.000000000 Z
11
+ date: 2013-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -194,6 +194,7 @@ files:
194
194
  - README.md
195
195
  - Rakefile
196
196
  - lib/app/models/State.rb
197
+ - lib/data/lu/countries.yml
197
198
  - lib/data/lu/states.rb
198
199
  - lib/data/lu/states.yml
199
200
  - lib/db/migrations/create_states.rb.erb