lib/peripatetic.rb in peripatetic-0.0.1 vs lib/peripatetic.rb in peripatetic-0.0.2
- old
+ new
@@ -1,6 +1,113 @@
require "peripatetic/version"
require 'peripatetic/location'
+require 'peripatetic/postal_code'
+require 'peripatetic/country'
module Peripatetic
- # Your code goes here...
+ 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 %>
+ # <div class="field">
+ # <%= builder.label :street %><br />
+ # <%= builder.text_field :street %>
+ # </div>
+ # <div class="field">
+ # <%= builder.label :accessor_postal_code, "Postal Code" %><br />
+ # <%= builder.text_field :accessor_postal_code, :value => get_accessor_postal_code(builder.object)[:postal_code] %>
+ # </div>
+ # <div class="field">
+ # <%= builder.label :accessor_country, "Country" %><br />
+ # <%= builder.country_select :accessor_country, get_accessor_postal_code(builder.object)[:country] %>
+ # </div>
+ # <% 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