belongs_to_city 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ pkg
2
+ doc
3
+ Manifest
4
+ poc
5
+ poc/.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Innku
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,120 @@
1
+ h1. Belongs to city
2
+
3
+ p. Rails gem that eases the relation between your existing models and a City -> State -> Country type of database.
4
+
5
+ p. It is thought primarily to be used in a city autocomplete feature and includes the functionality to get started with the jquery autocomplete plugin.
6
+
7
+ ***************************************************************************
8
+
9
+ h2. Install
10
+
11
+ bc. gem install belongs_to_city
12
+
13
+ ***************************************************************************
14
+
15
+ h2. Generate the city Structure
16
+
17
+ p. First of all you need to generate the structure that includes the City, State and Country in your application.
18
+
19
+ p. You can do this with the following command
20
+
21
+ bc. script/generate belongs_to_city
22
+
23
+ p. This will generate 3 basic things. A migration file that creates the previously mentioned tables, the 3 models and the cities controller (Since you will be accesing this for the autocomplete functionality). Also it will generate the routes to access this last controller.
24
+
25
+ p. Also You can optionally give the arguments of the things you need for your application. with the following options
26
+
27
+ * tables - Generates the migration
28
+ * models - Generates the models
29
+ * controller - Generates the controller and the resource route
30
+
31
+ p. So the previous line of code is *equivalent* to:
32
+
33
+ bc. script/generate belongs_to_city tables models controller
34
+
35
+ p. *OPTIONS*
36
+
37
+ p. Optionally you can provide the following options that will further help you to generate the database and start on the autocomplete feature
38
+
39
+ p. *--include-seed* will create a rake task to seed your City based database using .csv files. For this to work you need to have your csv files stored in db/csv folder and the files should have the following format.
40
+
41
+ *countries.csv*
42
+
43
+ |*name*|
44
+ |Mexico|
45
+ |USA|
46
+
47
+ *states.csv*
48
+
49
+ |*country_id*|*name*|*abbr*|*short*|*short2*|
50
+ |1|Nuevo Leon|N.L.|NL|NLE|
51
+ |1|Jalisco|Jal.|JA|JAL|
52
+
53
+ *cities.csv*
54
+
55
+ |*state_id*|*name*|*city_name*|
56
+ |1|Monterey|Monterrey|
57
+ |2|Guadalajara|Guadalajara|
58
+
59
+ p. All that matters is that the header is present in the csv files, the order can change if you wish.
60
+
61
+ p. *--jq-autocomplete* This will generate the view ready to be used in the jq-autocomplete plugin and print out the code to be pasted in the application.js file.
62
+
63
+ p. The following command generates everything including the jq view file:
64
+
65
+ bc. script/generate belongs_to_city --include-seed --jq-autocomplete
66
+
67
+ ***************************************************************************
68
+
69
+ h2. Use the City structure in your models
70
+
71
+ p. To use the city structure in your models, *include an integer city_id* column in the model you want to use it and paste the following code into the model.
72
+
73
+ bc. belongs_to_city
74
+
75
+ p. This gives you the attribute *city_name*. Each time you assign a value to this attribute, the gem will look for a city that matches the string in a 'city, state' format.
76
+
77
+ p. For example, with the given data on the csv example tables, the city monterrey would be assigned to a model given the following strings:
78
+
79
+ * Monterrey, Nuevo Leon
80
+ * Monterrey, NL
81
+ * Monterrey
82
+ * Monte
83
+
84
+ p. After the assignation, you would get a city model instance when you called _model.city_
85
+
86
+ h3. Use the City in many attributes
87
+
88
+ p. If you have a model that needs more than one relation to a city, you could also pull it off like the following example.
89
+
90
+ p. Say you have a *Travel* model that has an *origin* and a *destination*, both related to a city. First of all you need to add an *origin_id* and a *destination_id* to the Model and then use this code into the model.
91
+
92
+ bc. belongs_to_city :as => :origin
93
+
94
+ bc. belongs_to_city :as => :destination
95
+
96
+ p. The code works the same way as previously stated, but instead of a _city_name_ attribute you would have the *origin_name* and *destination_name* attributes.
97
+
98
+ h3. Validate the presence of the City
99
+
100
+ p. If your using the autocomplete to find the city, you can validate that you have a city in the following way:
101
+
102
+ bc. belongs_to_city :as => :origin, :required => true
103
+
104
+ p. This gives you the ability to handle errors more appropriately like in the following way.
105
+
106
+ bc. belongs_to_city :as => :origin, :required => true, :messages => {:on_many_matches => 'We found many cities with your request, please be more specific!, :on_no_matches => 'We didnt find any city with the data you provided'}
107
+
108
+
109
+ ***************************************************************************
110
+
111
+ h2. TODO
112
+
113
+ * Generators for relation migration in the database
114
+ * Puts Jquery code to paste in application.js
115
+ * Tests
116
+
117
+ ***************************************************************************
118
+ h2. Copyright
119
+
120
+ Copyright (c) 2010 Innku. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gemspec|
7
+ gemspec.name = "belongs_to_city"
8
+ gemspec.summary = "Eases integrating a city database structure with any model in rails"
9
+ gemspec.description = "Creates the basic structure to enable City structure integration with any model and eases autocomplete search"
10
+ gemspec.email = "adrian@innku.com"
11
+ gemspec.homepage = "http://github.com/adriancuadros/belongs_to_city"
12
+ gemspec.authors = ["Adrian Cuadros"]
13
+ gemspec.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
+ gemspec.add_development_dependency "searchlogic"
15
+ gemspec.add_development_dependency "fastercsv"
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler not available. Install it with: gem install jeweler"
20
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.6.0
@@ -0,0 +1,66 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{belongs_to_city}
8
+ s.version = "0.6.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Adrian Cuadros"]
12
+ s.date = %q{2010-05-21}
13
+ s.description = %q{Creates the basic structure to enable City structure integration with any model and eases autocomplete search}
14
+ s.email = %q{adrian@innku.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.textile"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "LICENSE",
22
+ "README.textile",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "belongs_to_city.gemspec",
26
+ "generators/belongs_to_city/USAGE",
27
+ "generators/belongs_to_city/belongs_to_city_generator.rb",
28
+ "generators/belongs_to_city/lib/insert_routes.rb",
29
+ "generators/belongs_to_city/templates/belongs_to_city_tasks.rake",
30
+ "generators/belongs_to_city/templates/cities.csv",
31
+ "generators/belongs_to_city/templates/controllers/cities_controller.rb",
32
+ "generators/belongs_to_city/templates/countries.csv",
33
+ "generators/belongs_to_city/templates/migrate/create_belongs_to_city_tables.rb",
34
+ "generators/belongs_to_city/templates/models/city.rb",
35
+ "generators/belongs_to_city/templates/models/country.rb",
36
+ "generators/belongs_to_city/templates/models/state.rb",
37
+ "generators/belongs_to_city/templates/states.csv",
38
+ "generators/belongs_to_city/templates/views/index.js.erb",
39
+ "lib/belongs_to_city.rb"
40
+ ]
41
+ s.homepage = %q{http://github.com/adriancuadros/belongs_to_city}
42
+ s.rdoc_options = ["--charset=UTF-8"]
43
+ s.require_paths = ["lib"]
44
+ s.rubygems_version = %q{1.3.6}
45
+ s.summary = %q{Eases integrating a city database structure with any model in rails}
46
+
47
+ if s.respond_to? :specification_version then
48
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
49
+ s.specification_version = 3
50
+
51
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
52
+ s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
53
+ s.add_development_dependency(%q<searchlogic>, [">= 0"])
54
+ s.add_development_dependency(%q<fastercsv>, [">= 0"])
55
+ else
56
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
57
+ s.add_dependency(%q<searchlogic>, [">= 0"])
58
+ s.add_dependency(%q<fastercsv>, [">= 0"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
62
+ s.add_dependency(%q<searchlogic>, [">= 0"])
63
+ s.add_dependency(%q<fastercsv>, [">= 0"])
64
+ end
65
+ end
66
+
@@ -0,0 +1,48 @@
1
+ Description:
2
+ This command will generate all the tables, models, controllers, views
3
+ and seeds needed to get started with the city autocomplete functionality.
4
+
5
+ Usage:
6
+ The default option for the generate command will create
7
+ all the files. You can optionally give the arguments of
8
+ the things you need for your application.
9
+
10
+ - tables : Will generate the migration files
11
+ - models : Will generate the models
12
+ - controller : Will generate the controller
13
+
14
+ Optionally you can include the rake task to seed your database
15
+
16
+ --include-seeds
17
+
18
+ This option will include the following rake task
19
+
20
+ rake db:seed:cities
21
+
22
+ It will generate 3 csv files (country, state, city) that you can populate
23
+ to seed your database.
24
+
25
+ Also you con optionally include the option that eases jq autocomplete
26
+
27
+ --jq-autocomplete
28
+
29
+ With these option a view is generated with the standard used for the autocomplete
30
+
31
+ If you would like to use any other plugin other than the specified, it is
32
+ recommended you format the data according to your needs.
33
+
34
+ Examples:
35
+ script/generate belongs_to_city
36
+
37
+ Will generate migration, models, controller, view and seed files
38
+
39
+ script/generate belongs_to_city models controller
40
+
41
+ Will generate models, controller and view
42
+
43
+ script/generate migration model seed
44
+ Will generate migration, models and seed
45
+ This option is recommended when you don't
46
+ want to use the jquery autocomplete plugin
47
+
48
+
@@ -0,0 +1,67 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/lib/insert_routes.rb")
2
+
3
+ class BelongsToCityGenerator < Rails::Generator::Base
4
+ attr_accessor :models, :controller, :tables, :seed
5
+
6
+ def initialize(runtime_args, runtime_options = {})
7
+ super
8
+ usage if (!@args.empty? and (['tables', 'models', 'controller', 'seed'] - @args).size == 4)
9
+ end
10
+
11
+ def manifest
12
+ record do |m|
13
+
14
+ if @args.empty? or @args.include?('tables')
15
+ m.migration_template "migrate/create_belongs_to_city_tables.rb", "db/migrate", :migration_file_name => "create_belongs_to_city_tables"
16
+ end
17
+ if @args.empty? or @args.include?('models')
18
+ m.template "models/country.rb", "app/models/country.rb"
19
+ m.template "models/state.rb", "app/models/state.rb"
20
+ m.template "models/city.rb", "app/models/city.rb"
21
+ end
22
+ if @args.empty? or @args.include?('controller')
23
+ m.template "controllers/cities_controller.rb", "app/controllers/cities_controller.rb"
24
+ m.route_resource(:cities)
25
+ end
26
+
27
+ if options[:jq_autocomplete]
28
+ m.directory "app/views/cities"
29
+ m.file "views/index.js.erb", "app/views/cities/index.js.erb"
30
+ end
31
+
32
+ if options[:include_seeds]
33
+ m.directory "db/csv"
34
+ m.file "countries.csv", "db/csv/countries.csv"
35
+ m.file "states.csv", "db/csv/states.csv"
36
+ m.file "cities.csv", "db/csv/cities.csv"
37
+ m.file 'belongs_to_city_tasks.rake', 'lib/tasks/belongs_to_city_tasks.rake'
38
+ end
39
+
40
+ include_in_environment
41
+
42
+ end
43
+ end
44
+
45
+ protected
46
+
47
+ def banner
48
+ <<-EOS
49
+ "#{$0}"
50
+ EOS
51
+ end
52
+
53
+ def include_in_environment
54
+ puts "****IMPORTANT****"
55
+ puts "Please include the following lines in your config/environment.rb file"
56
+ puts " config.gem 'searchlogic'"
57
+ puts " config.gem 'belongs_to_city'"
58
+ end
59
+
60
+ def add_options!(opt)
61
+ opt.separator ''
62
+ opt.separator 'Options:'
63
+ opt.on('--include-seeds', "Include seed template files on db/csv") { |v| options[:include_seeds] = true }
64
+ opt.on('--jq-autocomplete', "Include jquery autocomplete prepared view") { |v| options[:jq_autocomplete] = true }
65
+ end
66
+
67
+ end
@@ -0,0 +1,54 @@
1
+ Rails::Generator::Commands::Create.class_eval do
2
+ def route_resource(*resources)
3
+ resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
4
+ sentinel = 'ActionController::Routing::Routes.draw do |map|'
5
+
6
+ logger.route "map.resource #{resource_list}"
7
+ unless options[:pretend]
8
+ gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
9
+ "#{match}\n map.resource #{resource_list}\n"
10
+ end
11
+ end
12
+ end
13
+
14
+ def route_name(name, path, route_options = {})
15
+ sentinel = 'ActionController::Routing::Routes.draw do |map|'
16
+
17
+ logger.route "map.#{name} '#{path}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
18
+ unless options[:pretend]
19
+ gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
20
+ "#{match}\n map.#{name} '#{path}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ Rails::Generator::Commands::Destroy.class_eval do
27
+ def route_resource(*resources)
28
+ resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
29
+ look_for = "\n map.resource #{resource_list}\n"
30
+ logger.route "map.resource #{resource_list}"
31
+ unless options[:pretend]
32
+ gsub_file 'config/routes.rb', /(#{look_for})/mi, ''
33
+ end
34
+ end
35
+
36
+ def route_name(name, path, route_options = {})
37
+ look_for = "\n map.#{name} '#{path}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
38
+ logger.route "map.#{name} '#{path}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
39
+ unless options[:pretend]
40
+ gsub_file 'config/routes.rb', /(#{look_for})/mi, ''
41
+ end
42
+ end
43
+ end
44
+
45
+ Rails::Generator::Commands::List.class_eval do
46
+ def route_resource(*resources)
47
+ resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
48
+ logger.route "map.resource #{resource_list}"
49
+ end
50
+
51
+ def route_name(name, path, options = {})
52
+ logger.route "map.#{name} '#{path}', :controller => '{options[:controller]}', :action => '#{options[:action]}'"
53
+ end
54
+ end
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require 'fastercsv'
3
+
4
+ namespace :db do
5
+ namespace :seed do
6
+ task :cities => :environment do
7
+
8
+ puts 'Creating countries...'
9
+ FasterCSV.foreach('db/csv/countries.csv', :headers => :first_row) do |country|
10
+ Country.create(:name => country['name'])
11
+ end
12
+ puts 'done'
13
+
14
+ puts 'Creating States'
15
+ FasterCSV.foreach('db/csv/states.csv', :headers => :first_row) do |state|
16
+ State.create(:country_id => state['country_id'], :name => state['name'], :abbr => state['abbr'], :short => state['short'], :short2 => state['short2'])
17
+ end
18
+ puts 'done'
19
+
20
+ puts 'Creating Cities'
21
+ FasterCSV.foreach('db/csv/cities.csv', :headers => :first_row) do |city|
22
+ City.create(:state_id => city['state_id'], :name => city['name'], :city_name => city['city_name'])
23
+ end
24
+ puts 'Done'
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,2 @@
1
+ state_id,name,city_name
2
+ 1,Monterrey,Monterrey
@@ -0,0 +1,8 @@
1
+ class CitiesController < ApplicationController
2
+ def index
3
+ @cities = City.city_name_or_name_like(params[:q])
4
+ respond_to do |format|
5
+ format.js { }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ name
2
+ Mexico
@@ -0,0 +1,37 @@
1
+ class CreateBelongsToCityTables < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :countries do |t|
4
+ t.string :name
5
+ end
6
+ add_index :countries, :name
7
+
8
+ create_table :states do |t|
9
+ t.integer :country_id
10
+ t.string :name
11
+ t.string :abbr
12
+ t.string :short
13
+ t.string :short2
14
+ end
15
+ add_index :states, :country_id
16
+ add_index :states, :name
17
+ add_index :states, :abbr
18
+ add_index :states, :short
19
+ add_index :states, :short2
20
+
21
+ create_table :cities do |t|
22
+ t.integer :state_id
23
+ t.string :name
24
+ t.string :city_name
25
+ end
26
+ add_index :cities, :name
27
+ add_index :cities, :city_name
28
+ add_index :cities, :state_id
29
+ end
30
+
31
+ def self.down
32
+ drop_table :countries
33
+ drop_table :states
34
+ drop_table :cities
35
+ end
36
+
37
+ end
@@ -0,0 +1,15 @@
1
+ class City < ActiveRecord::Base
2
+ belongs_to :state
3
+
4
+ def self.find_by_full_name(full_name)
5
+ unless full_name.blank?
6
+ city_name, state_name = full_name.split(",")
7
+ @cities = City.name_like(city_name.strip)
8
+ @cities = @cities.state_name_or_state_abbr_like(state_name.strip) if state_name
9
+ @cities
10
+ else
11
+ []
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,2 @@
1
+ class Country < ActiveRecord::Base
2
+ end
@@ -0,0 +1,3 @@
1
+ class State < ActiveRecord::Base
2
+ belongs_to :country
3
+ end
@@ -0,0 +1,2 @@
1
+ country_id,name,abbr,short,short2
2
+ 1,Nuevo Leon,NLE,NL,Nle.
@@ -0,0 +1,3 @@
1
+ <% @cities.each do |city| %>
2
+ <%= city.name %>| <%= city.state.name %> | <%= city.state.country.name %>
3
+ <% end %>
@@ -0,0 +1,56 @@
1
+ module BelongsToCity
2
+
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+
9
+ def belongs_to_city(args = {})
10
+ city_attribute = args[:as].nil? ? :city : args[:as]
11
+ city_attribute_helper = (city_attribute.to_s + '_name').to_sym
12
+ city_collector = city_attribute.to_s.pluralize.to_sym
13
+
14
+ attr_accessor city_collector
15
+ belongs_to city_attribute, :class_name => "City"
16
+
17
+ #Getter and Setter Methods
18
+ define_method "#{city_attribute}_name" do
19
+ return read_attribute("#{city_attribute}_name") if read_attribute("#{city_attribute}_name")
20
+ return "#{send(city_attribute).name}, #{send(city_attribute).state.short2}" if read_attribute(city_attribute)
21
+ end
22
+
23
+ define_method "#{city_attribute}_name=" do |city_name|
24
+ write_attribute("#{city_attribute}_name", city_name)
25
+ write_attribute(city_collector, City.find_by_full_name(city_name) || [])
26
+ if read_attribute(city_collector).size == 1
27
+ send "#{city_attribute}=", read_attribute(city_collector).first
28
+ else
29
+ send "#{city_attribute}=", nil
30
+ end
31
+ end
32
+
33
+ #Validation Methods
34
+ if args[:required]
35
+ if args[:messages]
36
+ too_many_cities_message = args[:messages][:on_many_matches]
37
+ no_cities_message = args[:messages][:on_no_matches]
38
+ end
39
+ too_many_cities_message ||="Too many cities found in your request, please be more specific"
40
+ no_cities_message ||= "We couldn't find any city in your request"
41
+ validate do |record|
42
+ cities = record.read_attribute(city_collector)
43
+ record.errors.add(city_attribute_helper, too_many_cities_message) if cities.size > 1 rescue nil
44
+ record.errors.add(city_attribute_helper, no_cities_message) if (cities.nil? or cities.size == 0)
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+
54
+ class ActiveRecord::Base
55
+ include BelongsToCity
56
+ end
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: belongs_to_city
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 6
8
+ - 0
9
+ version: 0.6.0
10
+ platform: ruby
11
+ authors:
12
+ - Adrian Cuadros
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-05-21 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: thoughtbot-shoulda
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :development
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: searchlogic
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :development
43
+ version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: fastercsv
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :development
55
+ version_requirements: *id003
56
+ description: Creates the basic structure to enable City structure integration with any model and eases autocomplete search
57
+ email: adrian@innku.com
58
+ executables: []
59
+
60
+ extensions: []
61
+
62
+ extra_rdoc_files:
63
+ - LICENSE
64
+ - README.textile
65
+ files:
66
+ - .gitignore
67
+ - LICENSE
68
+ - README.textile
69
+ - Rakefile
70
+ - VERSION
71
+ - belongs_to_city.gemspec
72
+ - generators/belongs_to_city/USAGE
73
+ - generators/belongs_to_city/belongs_to_city_generator.rb
74
+ - generators/belongs_to_city/lib/insert_routes.rb
75
+ - generators/belongs_to_city/templates/belongs_to_city_tasks.rake
76
+ - generators/belongs_to_city/templates/cities.csv
77
+ - generators/belongs_to_city/templates/controllers/cities_controller.rb
78
+ - generators/belongs_to_city/templates/countries.csv
79
+ - generators/belongs_to_city/templates/migrate/create_belongs_to_city_tables.rb
80
+ - generators/belongs_to_city/templates/models/city.rb
81
+ - generators/belongs_to_city/templates/models/country.rb
82
+ - generators/belongs_to_city/templates/models/state.rb
83
+ - generators/belongs_to_city/templates/states.csv
84
+ - generators/belongs_to_city/templates/views/index.js.erb
85
+ - lib/belongs_to_city.rb
86
+ has_rdoc: true
87
+ homepage: http://github.com/adriancuadros/belongs_to_city
88
+ licenses: []
89
+
90
+ post_install_message:
91
+ rdoc_options:
92
+ - --charset=UTF-8
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ segments:
107
+ - 0
108
+ version: "0"
109
+ requirements: []
110
+
111
+ rubyforge_project:
112
+ rubygems_version: 1.3.6
113
+ signing_key:
114
+ specification_version: 3
115
+ summary: Eases integrating a city database structure with any model in rails
116
+ test_files: []
117
+