app/models/retailer.rb in spree_retailers-0.40.0.1 vs app/models/retailer.rb in spree_retailers-0.40.0.2
- old
+ new
@@ -1,25 +1,82 @@
class Retailer < ActiveRecord::Base
validates_presence_of :name, :address, :city, :state, :zipcode
+ validates :email, :email => true, :allow_blank => true
+ validates_numericality_of :latitude, :longitude, :allow_blank => true
+
+ before_validation :geocode, :if => :geocode?
+
+
+ has_attached_file :logo,
+ :styles => { :mini => '48x48>', :thumb => '120x100#', :large => '450x400#' },
+ :default_style => :thumb,
+ :url => "/assets/retailers/:id/:style/:basename.:extension",
+ :path => ":rails_root/public/assets/retailers/:id/:style/:basename.:extension"
+
+
[:address2, :phone, :email].each do |property|
define_method "has_#{property.to_s}?" do
val = self.send property
!(val.nil? || val.empty?)
end
end
def has_url?
- (self.url.nil? || self.url.empty?) && self.url != "http://"
+ !(self.url.nil? || self.url.empty? || self.url == "http://")
end
+ def has_logo?
+ !self.logo_file_name.blank?
+ end
def url=(value)
- val = value.strip.downcase
+ val = value.to_s.strip.downcase
if val.match(/^http(s)?:\/\//) == nil
val = "http://" + val
end
write_attribute :url, val
end
+
+ def full_address
+ "#{address} #{address2} #{city}, #{state} #{zipcode}"
+ end
+
+ def geocode?
+ (new_record? || changed?) && !address.blank?
+ end
+
+ def geocoded?
+ geokit_success && !(latitude.nil? || longitude.nil?)
+ end
+
+ private
+
+ def geocode
+ geo = Geokit::Geocoders::MultiGeocoder.geocode(full_address)
+ if geo.success
+ self.attributes = {
+ :address => geo.street_address,
+ :city => geo.city,
+ :state => geo.state,
+ :zipcode => geo.zip,
+ :latitude => geo.lat,
+ :longitude => geo.lng,
+ :geokit_provider => geo.provider,
+ :geokit_precision => geo.precision,
+ :geokit_accuracy => geo.accuracy,
+ :geokit_success => true
+ }
+ else
+ self.attributes = {
+ :latitude => nil,
+ :longitude => nil,
+ :geokit_provider => nil,
+ :geokit_precision => nil,
+ :geokit_accuracy => nil,
+ :geokit_success => false
+ }
+ end
+ end
end