Sha256: 8895b374e1ca5f4d445719d98b7601155b1dea2caadf0fd9a14a0640d675337b

Contents?: true

Size: 1.69 KB

Versions: 12

Compression:

Stored size: 1.69 KB

Contents

require 'active_support'

class LHS::Proxy
  module Accessors
    extend ActiveSupport::Concern

    # Keywords that would not be forwarded via method missing
    # FIXME: Extend the set of keywords
    BLACKLISTED_KEYWORDS = %w(new proxy_association)

    private

    def set(name, value)
      key = name.to_s.gsub(/=$/, '')
      _data._raw[key.to_sym] = value
    end

    def get(name, *args)
      name = args.first if name == :[]
      value = _data._raw[name.to_s]
      if value.nil? && _data._raw.present?
        value = _data._raw[name.to_sym]
        value = _data._raw[name.to_s.classify.to_sym] if value.nil?
      end

      return access_item(value) if value.is_a?(Hash)
      return access_collection(value) if value.is_a?(Array)
      convert(value)
    end

    def convert(value)
      return value unless value.is_a?(String)
      if date_time?(value)
        Time.zone.parse(value)
      elsif date?(value)
        Date.parse(value)
      else
        value
      end
    end

    def access_item(value)
      record = LHS::Record.for_url(value[:href]) if value[:href]
      data = LHS::Data.new(value, _data)
      if record
        record.new(data)
      else
        data
      end
    end

    def access_collection(value)
      data = LHS::Data.new(value, _data)
      collection = LHS::Collection.new(data)
      LHS::Data.new(collection, _data)
    end

    def date?(value)
      value[date_time_regex, :date].presence
    end

    def time?(value)
      value[date_time_regex, :time].presence
    end

    def date_time?(value)
      date?(value) && time?(value)
    end

    def date_time_regex
      /(?<date>\d{4}-\d{2}-\d{2})?(?<time>T\d{2}:\d{2}:\d{2}(\.\d*.\d{2}:\d{2})*)?/
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
lhs-10.1.0 lib/lhs/concerns/proxy/accessors.rb
lhs-10.0.0 lib/lhs/concerns/proxy/accessors.rb
lhs-9.1.1 lib/lhs/concerns/proxy/accessors.rb
lhs-9.1.0 lib/lhs/concerns/proxy/accessors.rb
lhs-9.0.4 lib/lhs/concerns/proxy/accessors.rb
lhs-9.0.3 lib/lhs/concerns/proxy/accessors.rb
lhs-9.0.2 lib/lhs/concerns/proxy/accessors.rb
lhs-9.0.1 lib/lhs/concerns/proxy/accessors.rb
lhs-9.0.0 lib/lhs/concerns/proxy/accessors.rb
lhs-8.0.0 lib/lhs/concerns/proxy/accessors.rb
lhs-7.4.1 lib/lhs/concerns/proxy/accessors.rb
lhs-7.4.0 lib/lhs/concerns/proxy/accessors.rb