Module: Olc::ClassMethods
- Defined in:
- lib/rails/olc.rb
Constant Summary collapse
- OLC_OPTIONS =
Default Olc options
{ field: 'open_location_code', latitude: 'latitude', longitude: 'longitude', code_length: 10 }
Instance Method Summary collapse
-
#has_olc(options = {}) ⇒ Object
Define before_save callback to generate olc code.
Instance Method Details
#has_olc(options = {}) ⇒ Object
Define before_save callback to generate olc code.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rails/olc.rb', line 33 def has_olc( = {}) = OLC_OPTIONS.merge() if defined?(Mongoid) field [:field], type: String end before_save do |obj| lat_field = [:latitude] lng_field = [:longitude] changed_attrs = obj.changed_attributes if changed_attrs.key?(lat_field) || changed_attrs.key?(lng_field) if obj[lat_field] && obj[lng_field] obj[[:field]] = obj.olc_encode([:code_length]) else obj[[:field]] = nil end end end class_eval " def olc_encode(code_length = nil)\n OpenLocationCode.encode(\#{options[:latitude]}, \#{options[:longitude]}, code_length)\n end\n\n def olc_decode\n OpenLocationCode.decode(\#{options[:field]})\n end\n RUBY\nend\n", __FILE__, __LINE__ + 1 |