Module: Mongokit::Address::ClassMethods

Includes:
Options::Store
Defined in:
lib/mongokit/address.rb

Overview

Example

class User
  include Mongoid::Document

  mongokit :address
  has_address

  # OR
  # has_address(except: [:latitude, :longitude])
  # has_address(replace: {address_1: :street_1, address_2: :street_2})
end

user = User.create({
  address_1:   'Studio 103',
  address_2:   'The Business Centre',
  street:      '61 Wellfield Road',
  city:        'Roath',
  state:       'Cardiff',
  postal_code: 'CF24 3DG',
  country:     'England'
})

user.full_address # Studio 103, The Business Centre, 61 Wellfield Road, Roath, Cardiff, CF24 3DG, England

Constant Summary collapse

ADDRESS_FIELDS =
{
  address_1:   String,
  address_2:   String,
  street:      String,
  city:        String,
  state:       String,
  postal_code: String,
  country:     String,
  latitude:    Float,
  longitude:   Float
}.freeze

Instance Method Summary collapse

Methods included from Options::Store

#mk_options

Instance Method Details

#address_fieldsObject



68
69
70
# File 'lib/mongokit/address.rb', line 68

def address_fields
  mk_options.get(:address_fields)
end

#full_address(obj, options = nil) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/mongokit/address.rb', line 72

def full_address(obj, options = nil)
  fields = mk_options.get(:full_address_fields)

  if options
    if options[:only]
      fields = options[:only]
    elsif options[:except]
      fields = fields - options[:except]
    end
  end

  fields.map{|f| obj[f]}.compact.join(', ')
end

#has_address(options = {}) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/mongokit/address.rb', line 45

def has_address(options = {})
  fields = ADDRESS_FIELDS.dup

  if options[:add]
    if options[:add].is_a?(Array)
      options[:add] = options[:add].inject({}){|r, f| r[f] = String; r}
    else
      fields.merge!(options[:add])
    end
  end

  fields = Options.process(fields, options)

  fields.each do |name, type|
    field name, type: type
  end

  mk_options.tap do |o|
    o.put(:address_fields, fields.keys)
    o.put(:full_address_fields, fields.reject{|f, _| f == :latitude || f == :longitude }.keys)
  end
end