us_zipcode 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.travis.yml +19 -0
  4. data/Gemfile +21 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.textile +179 -0
  7. data/README.textile~ +184 -0
  8. data/Rakefile +19 -0
  9. data/features/step_definitions/common_steps.rb +76 -0
  10. data/features/step_definitions/rails_setup_steps.rb +17 -0
  11. data/features/step_definitions/rails_setup_steps.rb~ +17 -0
  12. data/features/support/env.rb +10 -0
  13. data/features/support/string.rb +128 -0
  14. data/features/zipcodes.feature +24 -0
  15. data/features/zipcodes.feature~ +24 -0
  16. data/lib/generators/us_zipcode/models_generator.rb +41 -0
  17. data/lib/generators/us_zipcode/models_generator.rb~ +41 -0
  18. data/lib/generators/us_zipcode/templates/county_model.rb +17 -0
  19. data/lib/generators/us_zipcode/templates/county_model.rb~ +17 -0
  20. data/lib/generators/us_zipcode/templates/migration.rb +41 -0
  21. data/lib/generators/us_zipcode/templates/migration.rb~ +41 -0
  22. data/lib/generators/us_zipcode/templates/state_model.rb +15 -0
  23. data/lib/generators/us_zipcode/templates/state_model.rb~ +15 -0
  24. data/lib/generators/us_zipcode/templates/zipcode_model.rb +30 -0
  25. data/lib/generators/us_zipcode/templates/zipcode_model.rb~ +30 -0
  26. data/lib/generators/us_zipcode/templates/zipcodes.rake +163 -0
  27. data/lib/generators/us_zipcode/templates/zipcodes.rake~ +163 -0
  28. data/lib/generators/us_zipcode/version.rb +3 -0
  29. data/lib/generators/us_zipcode/version.rb~ +3 -0
  30. data/lib/my_zipcode_gem.rb~ +34 -0
  31. data/lib/us_zipcode.rb +29 -0
  32. data/lib/us_zipcode.rb~ +29 -0
  33. data/rails3_2.gemfile +21 -0
  34. data/rails4_0.gemfile +23 -0
  35. data/rails4_1.gemfile +23 -0
  36. data/us_zipcode.gemspec +24 -0
  37. data/us_zipcode.gemspec~ +24 -0
  38. metadata +108 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 53d43033c31d31ac68965cdead72e8773b697010
4
+ data.tar.gz: bc506c4a298bfdfe6d98b87c1f55993e73056332
5
+ SHA512:
6
+ metadata.gz: 7c091e5a454709020baa2025a9cc68e7112ce4c22e543f9986d28e7a54c21b5e1440ecb7f01c2e5f0246b9d71c972914517d2f17f1d00597e858650e67010e2c
7
+ data.tar.gz: 66f68df2b60e9c270ddd2c1fa03a22d5e58f1c18efecb0a2853628683ae1a0fcd0a5d4206bf6bcd7e2f078f4be94551f4d9d18ea3d030108727c46df6915c7ce
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ tmp/*
6
+ vendor/bundle
7
+ lib/generators/generators
data/.travis.yml ADDED
@@ -0,0 +1,19 @@
1
+ language: ruby
2
+ bundler_args: --without development
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0
6
+ - 2.1
7
+
8
+ before_script:
9
+ # - psql -c 'create database my_zipcode_gem_test;' -U postgres
10
+ # - mysql -e 'create database my_zipcode_gem_test;'
11
+
12
+ gemfile:
13
+ - rails3_2.gemfile
14
+ - rails4_0.gemfile
15
+ - rails4_1.gemfile
16
+
17
+ branches:
18
+ only:
19
+ - master
data/Gemfile ADDED
@@ -0,0 +1,21 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ # jquery-rails is used by the dummy application
6
+ gem 'jquery-rails'
7
+ gem 'sqlite3'
8
+ gem 'mysql2'
9
+ gem 'pg'
10
+ gem 'midwire_common'
11
+
12
+ group :test do
13
+ gem 'capybara'
14
+ gem 'guard-rspec'
15
+ gem 'guard-spork'
16
+ gem 'shoulda', '~> 3.5.0'
17
+ gem 'rspec'
18
+ gem 'rspec-rails', '~> 2.12.0'
19
+ gem 'cucumber'
20
+ gem 'cucumber-rails', '~> 1.3.0', require: false
21
+ end
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2011 Chris Blackburn
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.textile ADDED
@@ -0,0 +1,179 @@
1
+ h1. Us Zip Code
2
+
3
+
4
+ Simple gem to handle zipcode lookups and related functionality. @rake zipcodes:update@ will automatically download and update your local zipcode database. Generates three models for extended zipcode functionality.
5
+
6
+ h2. Installation
7
+
8
+ Add the following line to your Gemfile:
9
+
10
+ bc. gem 'us_zipcode'
11
+
12
+ Run:
13
+
14
+ bc. rake bundle install
15
+
16
+ Generate the models and populate the data:
17
+
18
+ bc. rails g us_zipcode:models
19
+ rake db:migrate
20
+ rake zipcodes:update
21
+
22
+ You should now have three new tables and three new models, Zipcode, State, County.
23
+
24
+ h2. Usage
25
+
26
+ bc. zipcode = Zipcode.find_by_code '66206'
27
+ zipcode.state.abbr # => 'KS'
28
+ zipcode.city # => 'Shawnee Mission'
29
+ zipcode.county.name # => 'Johnson'
30
+ zipcode.lat.to_s # => '38.959356', it is actually a BigDecimal object converted to_s for documentation.
31
+ zipcode.lon.to_s # => '-94.716155', ditto
32
+ zipcode.is_geocoded? # => true, most if not all should be pre-geocoded.
33
+
34
+
35
+ You can use State and County objects as follows:
36
+
37
+ bc. state = State.find_by_abbr "MO"
38
+ state.cities.count # => 963
39
+ state.cities # gives you a sorted array of all cities for the state
40
+ state.zipcodes.count # => 1195
41
+ ...
42
+ county = state.counties.first
43
+ county.cities.count # => 5
44
+ county.cities # gives you a sorted array of all cities for the county
45
+ county.zipcodes.count # => 5
46
+
47
+
48
+ h3. Look Up City by State & zip code + county by city
49
+
50
+ First you have to select a state .On state selection , you can see the cities drop down which are associated with the selected state.
51
+ On city selection, you can see the corresponding county with its zip code.
52
+
53
+ Write the following code in your view:
54
+
55
+ <%= select_tag "state",options_from_collection_for_select(State.all, "id", "name") %>
56
+ <div id ="city"></div>
57
+ <div id ="county"></div>
58
+ <script>
59
+ $("#state").on("change", function () {
60
+ $.ajax({
61
+ url: "/mycontroller/get_cities_by_state",
62
+ dataType: "script",
63
+ method: "get",
64
+ data: {state_id: $(this).val()}
65
+ });
66
+ $("#county").html('');
67
+ });
68
+ </script>
69
+
70
+ Create mycontroller & paste the following code:
71
+
72
+ def get_cities_by_state
73
+ @cities = Zipcode.group(:city).where(state_id: params[:state_id])
74
+ end
75
+
76
+ def get_county_and_zip_by_city
77
+ @zipcodes = Zipcode.find_by_city(params[:city])
78
+ end
79
+
80
+ Create the following two js.erb files in app/views/mycontroller/
81
+
82
+ 1.get_cities_by_state.js.erb & paste the following code:
83
+
84
+ $("#city").html('<%= escape_javascript(select_tag "city", options_from_collection_for_select(@cities, :id, :city)) %>');
85
+ $("#city").on("change", function(){
86
+ $.ajax({
87
+ url: "/home/get_county_and_zip_by_city",
88
+ dataType: "script",
89
+ method: "get",
90
+ data: {city: $("#city select option:selected"). text()}
91
+ });
92
+ });
93
+
94
+ 2.get_county_and_zip_by_city.js.erb
95
+
96
+ $("#county").html('<%= escape_javascript(select_tag "county", options_from_collection_for_select(@zipcodes, :id, :county_and_zip)) %>');
97
+
98
+ In the last update your routes:
99
+
100
+ scope '/mycontroller' do
101
+ get 'get_cities_by_state' => 'mycontroller#get_cities_by_state'
102
+ get 'get_county_and_zip_by_city' => 'mycontroller#get_county_and_zip_by_city'
103
+ end
104
+
105
+
106
+
107
+ h3. Automatic JQuery/AJAX lookup
108
+
109
+ You can have a user enter a zipcode and automatically lookup their city, state and county.
110
+
111
+ Put something like this in your view:
112
+
113
+ bc. f.text_field :zip, :size => 5, :maxlength => 5, :class => 'zipcode_interactive'
114
+ f.text_field :city, :size => 20, :maxlength => 60, :readonly => true
115
+ f.text_field(:state, :size => 2, :maxlength => 2, :readonly => true)
116
+ f.text_field(:county, :size => 20, :maxlength => 60, :readonly => true)
117
+
118
+ Then add this to your application.js, but remember to replace [mycontrollername] with your own controller.
119
+
120
+ bc. $(document).ready(function() {
121
+ // Interactive Zipcodes
122
+ $('input.zipcode_interactive').blur(function(data) {
123
+ var elem_id = $(this).attr("id");
124
+ var base_id = elem_id.substring(0, elem_id.lastIndexOf("_"));
125
+ $.get("/mycontrollername/get_zip_data/" + this.value, {},
126
+ function(data) {
127
+ var zipcode = $.parseJSON(data);
128
+ var city = $('#' + base_id + '_city');
129
+ var state = $('#' + base_id + '_state');
130
+ var county = $('#' + base_id + '_county');
131
+ if (zipcode.err) {
132
+ alert(zipcode.err);
133
+ } else {
134
+ city.val(zipcode.city);
135
+ state.val(zipcode.state)
136
+ county.val(zipcode.county)
137
+ }
138
+ })
139
+ });
140
+ });
141
+
142
+ You will also need a controller method similar to this, which will return the data to your form:
143
+
144
+ bc. def get_zip_data
145
+ @zipcode = Zipcode.find_by_code(params[:code], :include => [:county, :state])
146
+ if @zipcode
147
+ @counties = County.find(:all, :conditions => [ "state_id = ?", @zipcode.county.state_id ])
148
+ data = {
149
+ 'state' => @zipcode.state.abbr,
150
+ 'county' => @zipcode.county.name,
151
+ 'city' => @zipcode.city.titleize
152
+ }
153
+ render :text => data.to_json
154
+ else
155
+ if params[:code].blank?
156
+ return true
157
+ else
158
+ if params[:code].is_zipcode?
159
+ data = {
160
+ 'err' => "Could not find Zipcode [#{params[:code]}]. If this is a valid zipcode please notify support <support@mydomain.com>, so we can update our database."
161
+ }
162
+ else
163
+ data = {
164
+ 'err' => "[#{params[:code]}] is not a valid Zipcode."
165
+ }
166
+ end
167
+ render :text => data.to_json
168
+ end
169
+ end
170
+ end
171
+
172
+ And define a route for the AJAX function in routes.rb:
173
+
174
+ bc. get 'mycontrollername/get_zip_data/:code', :controller => 'mycontrollername', :action => 'get_zip_data'
175
+
176
+ That's about it.
177
+
178
+ Let me know if there are any errors. I cut and pasted the code above from a working application, but there may be some gotchas that I missed.
179
+
data/README.textile~ ADDED
@@ -0,0 +1,184 @@
1
+ h1. Us Zip Code
2
+
3
+
4
+ Simple gem to handle zipcode lookups and related functionality. @rake zipcodes:update@ will automatically download and update your local zipcode database. Generates three models for extended zipcode functionality.
5
+
6
+ h2. Installation
7
+
8
+ Add the following line to your Gemfile:
9
+
10
+ bc. gem 'us_zipcode'
11
+
12
+ Run:
13
+
14
+ bc. rake bundle install
15
+
16
+ Generate the models and populate the data:
17
+
18
+ bc. rails g us_zipcode:models
19
+ rake db:migrate
20
+ rake zipcodes:update
21
+
22
+ You should now have three new tables and three new models, Zipcode, State, County.
23
+
24
+ h2. Usage
25
+
26
+ bc. zipcode = Zipcode.find_by_code '66206'
27
+ zipcode.state.abbr # => 'KS'
28
+ zipcode.city # => 'Shawnee Mission'
29
+ zipcode.county.name # => 'Johnson'
30
+ zipcode.lat.to_s # => '38.959356', it is actually a BigDecimal object converted to_s for documentation.
31
+ zipcode.lon.to_s # => '-94.716155', ditto
32
+ zipcode.is_geocoded? # => true, most if not all should be pre-geocoded.
33
+
34
+
35
+ You can use State and County objects as follows:
36
+
37
+ bc. state = State.find_by_abbr "MO"
38
+ state.cities.count # => 963
39
+ state.cities # gives you a sorted array of all cities for the state
40
+ state.zipcodes.count # => 1195
41
+ ...
42
+ county = state.counties.first
43
+ county.cities.count # => 5
44
+ county.cities # gives you a sorted array of all cities for the county
45
+ county.zipcodes.count # => 5
46
+
47
+
48
+ h3. Look Up City by State & zip code + county by city
49
+
50
+ First you have to select a state .On state selection , you can see the cities drop down which are associated with the selected state.
51
+ On city selection, you can see the corresponding county with its zip code.
52
+
53
+ Write the following code in your view:
54
+
55
+ <%= select_tag "state",options_from_collection_for_select(State.all, "id", "name") %>
56
+ <div id ="city"></div>
57
+ <div id ="county"></div>
58
+ <script>
59
+ $("#state").on("change", function () {
60
+ $.ajax({
61
+ url: "/mycontroller/get_cities_by_state",
62
+ dataType: "script",
63
+ method: "get",
64
+ data: {state_id: $(this).val()}
65
+ });
66
+ $("#county").html('');
67
+ });
68
+ </script>
69
+
70
+ Create mycontroller & paste the following code:
71
+
72
+ def get_cities_by_state
73
+ @cities = Zipcode.group(:city).where(state_id: params[:state_id])
74
+ end
75
+
76
+ def get_county_and_zip_by_city
77
+ @zipcodes = Zipcode.find_by_city(params[:city])
78
+ end
79
+
80
+ Create the following two js.erb files in app/views/mycontroller/
81
+
82
+ 1.get_cities_by_state.js.erb & paste the following code:
83
+
84
+ $("#city").html('<%= escape_javascript(select_tag "city", options_from_collection_for_select(@cities, :id, :city)) %>');
85
+ $("#city").on("change", function(){
86
+ $.ajax({
87
+ url: "/home/get_county_and_zip_by_city",
88
+ dataType: "script",
89
+ method: "get",
90
+ data: {city: $("#city select option:selected"). text()}
91
+ });
92
+ });
93
+
94
+ 2.get_county_and_zip_by_city.js.erb
95
+
96
+ $("#county").html('<%= escape_javascript(select_tag "county", options_from_collection_for_select(@zipcodes, :id, :county_and_zip)) %>');
97
+
98
+ In the last update your routes:
99
+
100
+ scope '/mycontroller' do
101
+ get 'get_cities_by_state' => 'mycontroller#get_cities_by_state'
102
+ get 'get_county_and_zip_by_city' => 'mycontroller#get_county_and_zip_by_city'
103
+ end
104
+
105
+
106
+
107
+ h3. Automatic JQuery/AJAX lookup
108
+
109
+ You can have a user enter a zipcode and automatically lookup their city, state and county.
110
+
111
+ Put something like this in your view:
112
+
113
+ bc. f.text_field :zip, :size => 5, :maxlength => 5, :class => 'zipcode_interactive'
114
+ f.text_field :city, :size => 20, :maxlength => 60, :readonly => true
115
+ f.text_field(:state, :size => 2, :maxlength => 2, :readonly => true)
116
+ f.text_field(:county, :size => 20, :maxlength => 60, :readonly => true)
117
+
118
+ Then add this to your application.js, but remember to replace [mycontrollername] with your own controller.
119
+
120
+ bc. $(document).ready(function() {
121
+ // Interactive Zipcodes
122
+ $('input.zipcode_interactive').blur(function(data) {
123
+ var elem_id = $(this).attr("id");
124
+ var base_id = elem_id.substring(0, elem_id.lastIndexOf("_"));
125
+ $.get("/mycontrollername/get_zip_data/" + this.value, {},
126
+ function(data) {
127
+ var zipcode = $.parseJSON(data);
128
+ var city = $('#' + base_id + '_city');
129
+ var state = $('#' + base_id + '_state');
130
+ var county = $('#' + base_id + '_county');
131
+ if (zipcode.err) {
132
+ alert(zipcode.err);
133
+ } else {
134
+ city.val(zipcode.city);
135
+ state.val(zipcode.state)
136
+ county.val(zipcode.county)
137
+ }
138
+ })
139
+ });
140
+ });
141
+
142
+ You will also need a controller method similar to this, which will return the data to your form:
143
+
144
+ bc. def get_zip_data
145
+ @zipcode = Zipcode.find_by_code(params[:code], :include => [:county, :state])
146
+ if @zipcode
147
+ @counties = County.find(:all, :conditions => [ "state_id = ?", @zipcode.county.state_id ])
148
+ data = {
149
+ 'state' => @zipcode.state.abbr,
150
+ 'county' => @zipcode.county.name,
151
+ 'city' => @zipcode.city.titleize
152
+ }
153
+ render :text => data.to_json
154
+ else
155
+ if params[:code].blank?
156
+ return true
157
+ else
158
+ if params[:code].is_zipcode?
159
+ data = {
160
+ 'err' => "Could not find Zipcode [#{params[:code]}]. If this is a valid zipcode please notify support <support@mydomain.com>, so we can update our database."
161
+ }
162
+ else
163
+ data = {
164
+ 'err' => "[#{params[:code]}] is not a valid Zipcode."
165
+ }
166
+ end
167
+ render :text => data.to_json
168
+ end
169
+ end
170
+ end
171
+
172
+ And define a route for the AJAX function in routes.rb:
173
+
174
+ bc. get 'mycontrollername/get_zip_data/:code', :controller => 'mycontrollername', :action => 'get_zip_data'
175
+
176
+ That's about it.
177
+
178
+ Let me know if there are any errors. I cut and pasted the code above from a working application, but there may be some gotchas that I missed.
179
+
180
+ h2. LOG
181
+
182
+ h3. 05/03/2011:
183
+
184
+ Initial Release
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ begin
5
+ require 'midwire_common/rake_tasks'
6
+ rescue StandardError => e
7
+ puts('>>> Can\'t load midwire_common/rake_tasks.')
8
+ puts(">>> Did you 'bundle exec'?: #{e.message}")
9
+ exit
10
+ end
11
+
12
+ require 'cucumber'
13
+ require 'cucumber/rake/task'
14
+ Cucumber::Rake::Task.new(:features) do |t|
15
+ t.cucumber_opts = "features --format progress"
16
+ end
17
+
18
+ task :default => :features
19
+ task :test => :features
@@ -0,0 +1,76 @@
1
+ When(/^I run "([^\"]*)"$/) do |command|
2
+ system("cd #{@current_directory} && #{command}").should be_true
3
+ end
4
+
5
+ When(/^I add "([^\"]*)" to file "([^\"]*)"$/) do |content, short_path|
6
+ path = File.join(@current_directory, short_path)
7
+ File.should exist(path)
8
+ File.open(path, 'a') { |f| f.write(content + "\n") }
9
+ end
10
+
11
+ When(/^I replace "([^\"]*)" with "([^\"]*)" in file "([^\"]*)"$/) do |old_content, new_content, short_path|
12
+ path = File.join(@current_directory, short_path)
13
+ File.should exist(path)
14
+ content = File.read(path).gsub(old_content, new_content)
15
+ File.open(path, 'w') { |f| f.write(content) }
16
+ end
17
+
18
+ When(/^I insert "([^\"]*)" into "([^\"]*)" after line (\d+)$/) do |content, short_path, after_line|
19
+ path = File.join(@current_directory, short_path)
20
+ File.should exist(path)
21
+ lines = File.read(path).split("\n")
22
+ lines[after_line.to_i, 0] = content
23
+ File.open(path, 'w') { |f| f.write(lines.join("\n")) }
24
+ end
25
+
26
+ Then(/^I should see file "([^\"]*)"$/) do |path|
27
+ File.should exist(File.join(@current_directory, path))
28
+ end
29
+
30
+ Then(/^I should see "(.*)" in file "([^\"]*)"$/) do |content, short_path|
31
+ path = File.join(@current_directory, short_path)
32
+ File.should exist(path)
33
+ File.readlines(path).join.should include(content)
34
+ end
35
+
36
+ Then(/^I should not see "(.*)" in file "([^\"]*)"$/) do |content, short_path|
37
+ path = File.join(@current_directory, short_path)
38
+ File.should exist(path)
39
+ File.readlines(path).join.should_not include(content)
40
+ end
41
+
42
+ Then(/^I should see the following files$/) do |table|
43
+ table.raw.flatten.each do |path|
44
+ File.should exist(File.join(@current_directory, path))
45
+ end
46
+ end
47
+
48
+ Then(/^I should see the following in file "([^\"]*)"$/) do |short_path, table|
49
+ path = File.join(@current_directory, short_path)
50
+ File.should exist(path)
51
+ table.raw.flatten.each do |content|
52
+ File.readlines(path).join.should include(content)
53
+ end
54
+ end
55
+
56
+ Then(/^I should successfully run "([^\"]*)"$/) do |command|
57
+ system("cd #{@current_directory} && #{command}").should be_true
58
+ end
59
+
60
+ Then(/^I should see "([^\"]*)" when running "([^\"]*)"$/) do |expected_response, command|
61
+ `cd #{@current_directory} && #{command}`.should include(expected_response)
62
+ end
63
+
64
+ Then(/^I should see (\d+) records in the "([^\"]*)" table$/) do |count, table_name|
65
+ FileUtils.chdir(@current_directory)
66
+ ActiveRecord::Base.establish_connection(
67
+ :adapter => 'sqlite3',
68
+ :database => "db/test.sqlite3",
69
+ :pool => 5,
70
+ :timeout => 5000
71
+ )
72
+ sql = "SELECT COUNT(*) FROM #{table_name}"
73
+ result = ActiveRecord::Base.connection.select_rows(sql)
74
+ puts ">>> result: [#{result.flatten.first}]"
75
+ "Record Count:#{result.flatten.first}".should == "Record Count:#{count}"
76
+ end
@@ -0,0 +1,17 @@
1
+ Given(/^a new Rails app$/) do
2
+ FileUtils.rm_rf "tmp/rails_app"
3
+ FileUtils.mkdir_p("tmp")
4
+ system("rails new tmp/rails_app -T").should be_true
5
+ system("ln -s ../../../lib/generators tmp/rails_app/lib/generators").should be_true
6
+ @current_directory = File.expand_path("tmp/rails_app")
7
+ end
8
+
9
+ Given %{a new migrated Rails app} do
10
+ # Don't delete the rails app
11
+ FileUtils.mkdir_p("tmp")
12
+ system("rails new tmp/rails_app -f").should be_true
13
+ system("ln -sf ../../../lib/generators tmp/rails_app/lib/generators").should be_true
14
+ @current_directory = File.expand_path("tmp/rails_app")
15
+ When %{I run "rails g us_zipcode:models"}
16
+ Then %{I should successfully run "rake db:migrate"}
17
+ end
@@ -0,0 +1,17 @@
1
+ Given(/^a new Rails app$/) do
2
+ FileUtils.rm_rf "tmp/rails_app"
3
+ FileUtils.mkdir_p("tmp")
4
+ system("rails new tmp/rails_app -T").should be_true
5
+ system("ln -s ../../../lib/generators tmp/rails_app/lib/generators").should be_true
6
+ @current_directory = File.expand_path("tmp/rails_app")
7
+ end
8
+
9
+ Given %{a new migrated Rails app} do
10
+ # Don't delete the rails app
11
+ FileUtils.mkdir_p("tmp")
12
+ system("rails new tmp/rails_app -f").should be_true
13
+ system("ln -sf ../../../lib/generators tmp/rails_app/lib/generators").should be_true
14
+ @current_directory = File.expand_path("tmp/rails_app")
15
+ When %{I run "rails g my_zipcode_gem:models"}
16
+ Then %{I should successfully run "rake db:migrate"}
17
+ end
@@ -0,0 +1,10 @@
1
+ require 'cucumber'
2
+ require 'rspec'
3
+ require 'rails'
4
+ require 'active_record'
5
+
6
+ ENV["RAILS_ENV"] = "test"
7
+
8
+ Before do
9
+ # FileUtils.rm_rf "tmp/rails_app"
10
+ end