Sha256: ecd115e0085641c6c26ee10b10223e13f533965c705d1faff7db1c4522d9ffec

Contents?: true

Size: 1.67 KB

Versions: 5

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

module Avo
  module Fields
    class LocationField < BaseField
      attr_reader :stored_as

      def initialize(id, **args, &block)
        hide_on :index

        super(id, **args, &block)

        @stored_as = args[:stored_as].present? ? args[:stored_as] : nil # You can pass it an array of db columns [:latitude, :longitude]
      end

      def value_as_array?
        stored_as.is_a?(Array) && stored_as.count == 2
      end

      def as_lat_long_field_id(get)
        if get == :lat
          "#{id}[#{stored_as.first}]"
        elsif get == :long
          "#{id}[#{stored_as.last}]"
        end
      end

      def as_lat_long_placeholder(get)
        if get == :lat
          "Enter #{stored_as.first}"
        elsif get == :long
          "Enter #{stored_as.last}"
        end
      end

      def as_lat_long_value(get)
        if get == :lat
          record.send(stored_as.first)
        elsif get == :long
          record.send(stored_as.last)
        end
      end

      def fill_field(record, key, value, params)
        if value_as_array?
          latitude_field, longitude_field = stored_as
          record.send("#{latitude_field}=", value[latitude_field])
          record.send("#{longitude_field}=", value[longitude_field])
          record
        else
          super(record, key, value.split(","), params)
        end
      end

      def to_permitted_param
        if value_as_array?
          [:"#{id}", "#{id}": {}]
        else
          super
        end
      end

      def value_present?
        return value.first.present? && value.second.present? if value.is_a?(Array) && value.count == 2

        value.present?
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
avo-3.0.0.pre8 lib/avo/fields/location_field.rb
avo-3.0.0.pre7 lib/avo/fields/location_field.rb
avo-3.0.0.pre5 lib/avo/fields/location_field.rb
avo-3.0.0.pre6 lib/avo/fields/location_field.rb
avo-3.0.0.pre4 lib/avo/fields/location_field.rb