Sha256: ace6a59abdc21114f0584e84bf7a68348f5aa92e6d29f3e626a53e0b3cd7208d

Contents?: true

Size: 1.15 KB

Versions: 8

Compression:

Stored size: 1.15 KB

Contents

require 'hashie'
require 'time'
require 'date'

module Duracloud
  #
  # Encapsulates Duracloud "properties" which are transmitted via HTTP headers.
  #
  class Properties < Hashie::Mash

    PREFIX = "x-dura-meta-".freeze

    # Is the property name valid?
    # @param prop [String] the property name
    # @return [Boolean]
    def self.property?(prop)
      prop.to_s.start_with?(PREFIX)
    end

    def initialize(source = nil, default = nil, &block)
      source.select! { |k, v| property?(k) } if source
      super
    end

    def property?(prop)
      self.class.property?(prop)
    end

    # @api private
    def convert_value(value, _ = nil)
      case value
      when Array
        convert_array(value)
      when Time
        value.utc.iso8601
      when DateTime
        convert_value(value.to_time)
      else
        force_ascii(value.to_s)
      end
    end

    private

    def convert_array(value)
      value.uniq!
      if value.length > 1
        value.map { |v| convert_value(v) }
      else
        convert_value(value.first)
      end
    end

    def force_ascii(str)
      str.ascii_only? ? str : str.force_encoding("US-ASCII")
    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
duracloud-client-0.10.2 lib/duracloud/properties.rb
duracloud-client-0.10.1 lib/duracloud/properties.rb
duracloud-client-0.10.0 lib/duracloud/properties.rb
duracloud-client-0.9.1 lib/duracloud/properties.rb
duracloud-client-0.9.0 lib/duracloud/properties.rb
duracloud-client-0.8.0 lib/duracloud/properties.rb
duracloud-client-0.7.2 lib/duracloud/properties.rb
duracloud-client-0.7.1 lib/duracloud/properties.rb