Sha256: 347c1d95ee6f86becd65195a63b106e4b86c6ea9a925f3d44a462a59e323dbb0
Contents?: true
Size: 1.92 KB
Versions: 2
Compression:
Stored size: 1.92 KB
Contents
module BelongsToCity def self.included(base) base.extend ClassMethods end module ClassMethods def belongs_to_city(args = {}) city_attribute = args[:as].nil? ? :city : args[:as] city_attribute_helper = (city_attribute.to_s + '_name').to_sym city_collector = city_attribute.to_s.pluralize.to_sym attr_accessor city_collector belongs_to city_attribute, :class_name => "City" #Getter and Setter Methods define_method "#{city_attribute}_name" do return read_attribute("#{city_attribute}_name") if read_attribute("#{city_attribute}_name") return "#{send(city_attribute).name}, #{send(city_attribute).state.short2}" if read_attribute(city_attribute) end define_method "#{city_attribute}_name=" do |city_name| write_attribute("#{city_attribute}_name", city_name) write_attribute(city_collector, City.find_by_full_name(city_name) || []) if read_attribute(city_collector).size == 1 send "#{city_attribute}=", read_attribute(city_collector).first else send "#{city_attribute}=", nil end end #Validation Methods if args[:required] if args[:messages] too_many_cities_message = args[:messages][:on_many_matches] no_cities_message = args[:messages][:on_no_matches] end too_many_cities_message ||="Too many cities found in your request, please be more specific" no_cities_message ||= "We couldn't find any city in your request" validate do |record| cities = record.read_attribute(city_collector) record.errors.add(city_attribute_helper, too_many_cities_message) if cities.size > 1 rescue nil record.errors.add(city_attribute_helper, no_cities_message) if (cities.nil? or cities.size == 0) end end end end end class ActiveRecord::Base include BelongsToCity end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
belongs_to_city-0.7.0 | lib/belongs_to_city.rb |
belongs_to_city-0.6.0 | lib/belongs_to_city.rb |