Sha256: 03134afc915cef7dc22d420aee3803763ee0391c565b301827ea34ee0a319855

Contents?: true

Size: 1.26 KB

Versions: 2

Compression:

Stored size: 1.26 KB

Contents

require 'ostruct'
# Field changes to Fields from mongoid 2.0 to mongoid 2.1
field = (defined?(Mongoid::Field)) ? Mongoid::Field : Mongoid::Fields

field.option :spacial do |model,field,options|
  options = {} unless options.kind_of?(Hash)
  lat_meth = options[:lat] || "lat"
  lng_meth = options[:lng] || "lng"
  model.class_eval do
    self.spacial_fields ||= []
    self.spacial_fields << field.name.to_sym if self.spacial_fields.kind_of? Array

    define_method "distance_from_#{field.name}" do |*args|
      self.distance_from(field.name, *args)
    end

    define_method field.name do
      output = self[field.name] || [nil,nil]
      output = (options[:return_array]) ? lng_lat_a : {lng_meth => output[0], lat_meth => output[1]}
      return options[:class].new(output) if options[:class]
      output
    end

    define_method "#{field.name}=" do |arg|
      if arg.kind_of?(Hash) && arg[lng_meth] && arg[lat_meth]
        arg = [arg[lng_meth], arg[lat_meth]]
      elsif arg.respond_to?(:to_lng_lat)
        arg = arg.to_lat_lng if arg.respond_to?(:to_lat_lng)
      end
      self[field.name]=arg
      return arg[0..1] if options[:return_array]
      return h = {lng_meth => arg[0], lat_meth => arg[1]} if options[:class].blank?
      options[:class].new(h)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mongoid_spacial-0.1.1 lib/mongoid_spacial/field_option.rb
mongoid_spacial-0.1.0 lib/mongoid_spacial/field_option.rb