Sha256: 3574bb69c6e57d244ed194c88bac300c81b4d21c6fc8362b49b0c17f51c4400c
Contents?: true
Size: 1.33 KB
Versions: 2
Compression:
Stored size: 1.33 KB
Contents
module Finitio # # Helper class for tuple and relation attributes. # # An attribute is simply a `(name: AttrName, type: Type)` pair, where the # type is a Finitio type. # class Attribute def initialize(name, type) unless name.is_a?(Symbol) raise ArgumentError, "Symbol expected for attribute name, got `#{name}`" end unless type.is_a?(Type) raise ArgumentError, "Type expected for attribute domain, got `#{type}`" end @name, @type = name, type end attr_reader :name, :type # Fetch the attribute on `arg`, which is expected to be a Hash object. # # This method allows working with ruby hashes having either Symbols or # Strings as keys. It ensures that no Symbol is created by the rest of the # code, since this would provide a DoS attack vector under MRI. # def fetch_on(arg, &bl) unless arg.respond_to?(:fetch) raise ArgumentError, "Object responding to `fetch` expected" end arg.fetch(name) do arg.fetch(name.to_s, &bl) end end def to_name "#{name}: #{type}" end def ==(other) return nil unless other.is_a?(Attribute) name==other.name and type==other.type end alias :eql? :== def hash name.hash ^ type.hash end end # class Attribute end # module Finitio
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
finitio-0.4.1 | lib/finitio/support/attribute.rb |
finitio-0.4.0 | lib/finitio/support/attribute.rb |