module Axiom::Types::Encodable

Add encoding constraints to a type

Private Class Methods

extended(descendant) click to toggle source

Hook called when module is extended

Add encoding DSL method to descendant and set the default to UTF-8.

@param [Class<Axiom::Types::Type>] descendant

@return [undefined]

@api private

Calls superclass method
# File lib/axiom/types/encodable.rb, line 22
def self.extended(descendant)
  super
  descendant.accept_options :encoding
  descendant.encoding Encoding::UTF_8
end

Public Instance Methods

finalize() click to toggle source

Finalize by setting up a primitive constraint

@return [Axiom::Types::Encodable]

@api private

Calls superclass method
# File lib/axiom/types/encodable.rb, line 35
def finalize
  return self if frozen?
  ascii_compatible? ? use_ascii_compatible_encoding : use_encoding
  super
end

Private Instance Methods

ascii_compatible?() click to toggle source

Test if the encoding is ascii compatible

@return [Boolean]

@api private

# File lib/axiom/types/encodable.rb, line 48
def ascii_compatible?
  encoding.ascii_compatible?
end
use_ascii_compatible_encoding() click to toggle source

Add constraint for the ascii compatible encoding

@return [undefined]

@api private

# File lib/axiom/types/encodable.rb, line 57
def use_ascii_compatible_encoding
  constraint do |object|
    object.encoding.equal?(encoding) || object.to_s.ascii_only?
  end
end
use_encoding() click to toggle source

Add constraint for the encoding

@return [undefined]

@api private

# File lib/axiom/types/encodable.rb, line 68
def use_encoding
  constraint { |object| object.encoding.equal?(encoding) }
end