Sha256: bb869ae32422795c621bc74e0623a56747f2e5b6795f6610f75680d9b11a2759
Contents?: true
Size: 1.25 KB
Versions: 1
Compression:
Stored size: 1.25 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 = {lng_meth => output[0], lat_meth => output[1]} unless options[:return_array] 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_lng_lat end self[field.name]=arg arg = [nil,nil] if arg.nil? 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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mongoid_spacial-0.2.13 | lib/mongoid_spacial/field_option.rb |