Sha256: 55d022fb0f167f365783364703be59998d97f3f7b2b7d84f4264a97fcd3db465

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

module OData4
  module Properties
    # Defines the Collection OData4 type.
    class Collection < OData4::Property
      # Overriding default constructor to avoid converting
      # value to string.
      # TODO: Make this the default for all property types?
      def initialize(name, value, options = {})
        super(name, value, options)
        self.value = value
      end

      def value
        if @value.nil?
          nil
        else
          @value.map(&:value)
        end
      end

      def value=(value)
        if value.nil? && allows_nil?
          @value = nil
        elsif value.respond_to?(:map)
          @value = value.map.with_index do |element, index|
            type_class.new("#{name}[#{index}]", element)
          end
        else
          validation_error 'Value must be an array'
        end
      end

      def url_value
        '[' + @value.map(&:url_value).join(',') + ']'
      end

      def type
        "Collection(#{value_type})"
      end

      def value_type
        options[:value_type] || 'Edm.String'
      end

      def type_class
        OData4::PropertyRegistry[value_type]
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
odata4-0.9.1 lib/odata4/properties/collection.rb
odata4-0.9.0 lib/odata4/properties/collection.rb
odata4-0.8.2 lib/odata4/properties/collection.rb
odata4-0.8.1 lib/odata4/properties/collection.rb