require "peripatetic/version" require 'peripatetic/location' require 'peripatetic/postal_code' require 'peripatetic/country' module Peripatetic def self.included(base) # base.extend(ClassMethods).relate base.extend ClassMethods base.class_eval do attr_accessible :locations_attributes #, :location_attributes has_many :locations, :as => :locationable, :class_name => "Peripatetic::Location" accepts_nested_attributes_for :locations, :reject_if => lambda { |a| a[:accessor_postal_code].blank? }, :allow_destroy => true # has_one :location, :as => :locationable, :class_name => "Peripatetic::Location" # accepts_nested_attributes_for :location, :reject_if => lambda { |a| a[:accessor_postal_code].blank? }, :allow_destroy => true end end module ClassMethods # def acts_as_peripatetic # send :include, Peripatetic # end end module ModelMethods end module HelperMethods def nested_form_builder # <%= f.fields_for poly_locations(@user, 1) do |builder| %> # <% if builder.object.new_record? %> # <%= builder.hidden_field :ip, :value => ip_address %> #
# <%= builder.label :street %>
# <%= builder.text_field :street %> #
#
# <%= builder.label :accessor_postal_code, "Postal Code" %>
# <%= builder.text_field :accessor_postal_code, :value => get_accessor_postal_code(builder.object)[:postal_code] %> #
#
# <%= builder.label :accessor_country, "Country" %>
# <%= builder.country_select :accessor_country, get_accessor_postal_code(builder.object)[:country] %> #
# <% end %> # <% end %> end def all_countries Country.select([:id, :name, :position]).order("position ASC") end def ip_address (Rails.env.development? or Rails.env.test?) ? '206.127.79.163' : (env['HTTP_X_REAL_IP'] ||= env['REMOTE_ADDR']) end def get_country if builder.object.accessor_postal_code.present? @get_country = { :ip => ip_address, :country => builder.object.accessor_country, :postal_code => builder.object.accessor_postal_code } else res = Geocoder.search(ip_address) if res.first @get_country = { :ip => ip_address, :country => res.first.country, :postal_code => res.first.postal_code } end end end def get_accessors(model) @get_accessors ||= get_accessor_postal_code(model) end def get_accessor_postal_code(model) # return unless @get_accessor_postal_code.blank? if model.postal_code.blank? res = Geocoder.search(ip_address) if res.first country = Country.select([:id, :name, :position]).find_by_name(res.first.country) if country.present? country_id = country.id else country_id = Country.select([:id, :name, :position]).find_by_name("United States").id end model.country_id = country_id @get_accessor_postal_code = { :ip => ip_address, :postal_code => res.first.postal_code } else @get_accessor_postal_code = { :ip => ip_address, :postal_code => "" } end else @get_accessor_postal_code = { :ip => ip_address, :postal_code => model.postal_code } end end def peripatetic_locations(model, amount=false) if amount == false # user.build_profile # this will work model.build_location :location else amount.times { model.locations.build } if model.new_record? :locations end end end end ActionView::Base.send :include, Peripatetic::HelperMethods # class ActiveRecord::Base # include Peripatetic # end