Sha256: 8c36036ae7f93cb4eaf5b9b428baea13ada3fc95c34f83dadbac23743c3e7472
Contents?: true
Size: 1.79 KB
Versions: 2
Compression:
Stored size: 1.79 KB
Contents
module AdaptivePayments # Array that coerces all input values to a JsonModel of the given type class CoercedArray < Array attr_accessor :type # Initialize the CoercedArray for the given type # # @param [Class<JsonModel>] type # the JsonModel descendant to coerce to def self.for_type(type) raise ArgumentError, "The type in a CoercedArray must be a JsonModel" unless type <= JsonModel arr = CoercedArray.new arr.type = type arr end # Append the given value to the Array # The value may be a Hash to coerce, or a valid JsonModel # # @param [Hash, JsonModel] object # the object to append # # @return CoercedArray def push(object) object = @type.new(object) unless object.kind_of?(@type) super end alias_method :<<, :push # Concatenate another Array with this one and return the result as a new Array # All items in other will be coerced to the correct type # # @param [Array] other # another Array to concatenate with # # @return CoercedArray def +(other) raise ArgumentError, "Cannot union #{other.class} with #{self.class}<#{type}>" unless other.kind_of?(Array) result = CoercedArray.new(super(CoercedArray.for_type(type).concat(other))) result.type = type result end # Concatenate another Array with this one and modify the Array in place # # @param [Array] other # another Array to concatenate with # # @return CoercedArray def concat(other) raise ArgumentError, "Cannot append #{other.class} to #{self.class}<#{type}>" unless other.kind_of?(Array) result = CoercedArray.new(super(other.inject(CoercedArray.for_type(type)) { |ary, v| ary.push(v) })) result.type = type result end end end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
creative-pp-adaptive-1.1.1 | lib/pp-adaptive/support/coerced_array.rb |
pp-adaptive-1.0.0 | lib/pp-adaptive/support/coerced_array.rb |