Class: Alf::Tuple
- Inherits:
-
Object
- Object
- Alf::Tuple
- Defined in:
- lib/alf-relation/alf/tuple.rb
Constant Summary collapse
- EMPTY =
Tuple[{}].new({})
- DUM =
EMPTY
Class Method Summary collapse
Instance Method Summary collapse
- #allbut(attr_list) ⇒ Object
- #check_internal_representation! ⇒ Object
- #extend(computation) ⇒ Object
- #heading ⇒ Object
- #merge(other) ⇒ Object
- #project(attr_list) ⇒ Object
- #remap(&bl) ⇒ Object
- #rename(renaming) ⇒ Object
- #split(attr_list) ⇒ Object
- #to_attr_list ⇒ Object
- #to_hash(dup = true) ⇒ Object
- #to_json(*args, &bl) ⇒ Object
- #to_ruby_literal ⇒ Object (also: #inspect, #to_s)
Class Method Details
.heading_based_factored ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/alf-relation/alf/tuple.rb', line 19 def self.heading_based_factored heading.each do |attrname,attrtype| define_method(attrname) do |*args, &bl| return super(*args, &bl) unless args.empty? && bl.nil? reused_instance[attrname] end end self end |
Instance Method Details
#allbut(attr_list) ⇒ Object
55 56 57 |
# File 'lib/alf-relation/alf/tuple.rb', line 55 def allbut(attr_list) split(attr_list).last end |
#check_internal_representation! ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'lib/alf-relation/alf/tuple.rb', line 29 def check_internal_representation! error = lambda{|msg| raise TypeError, msg } error["Hash expected for representation"] unless reused_instance.is_a?(Hash) TypeCheck.new(heading, true).check!(reused_instance) self rescue TypeCheck::Error => ex error[ex.] end |
#extend(computation) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/alf-relation/alf/tuple.rb', line 64 def extend(computation) computation = TupleComputation.coerce(computation) scope = Support::TupleScope.new(self) computed = computation.evaluate(scope) res_heading = heading.merge(Heading.infer(computed)) Tuple[res_heading].new(reused_instance.merge(computed)) end |
#heading ⇒ Object
38 39 40 |
# File 'lib/alf-relation/alf/tuple.rb', line 38 def heading self.class.heading end |
#merge(other) ⇒ Object
77 78 79 80 |
# File 'lib/alf-relation/alf/tuple.rb', line 77 def merge(other) res = reused_instance.merge(other.to_hash) Tuple[Heading.infer(res)].new(res) end |
#project(attr_list) ⇒ Object
51 52 53 |
# File 'lib/alf-relation/alf/tuple.rb', line 51 def project(attr_list) split(attr_list).first end |
#remap(&bl) ⇒ Object
72 73 74 75 |
# File 'lib/alf-relation/alf/tuple.rb', line 72 def remap(&bl) res = reused_instance.each_with_object({}){|(k,v),n| n[k] = bl[k, v]} Tuple[Heading.infer(res)].new(res) end |
#rename(renaming) ⇒ Object
59 60 61 62 |
# File 'lib/alf-relation/alf/tuple.rb', line 59 def rename(renaming) renaming = Renaming.coerce(renaming) self.class.rename(renaming).new(renaming.rename_tuple(reused_instance)) end |
#split(attr_list) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/alf-relation/alf/tuple.rb', line 42 def split(attr_list) return [ EMPTY, self ] if attr_list.empty? left, right = {}, to_hash (heading.to_attr_list & attr_list).each do |a| left[a] = right.delete(a) end self.class.split(attr_list).zip([left, right]).map{|t,v| t.new(v) } end |
#to_attr_list ⇒ Object
90 91 92 |
# File 'lib/alf-relation/alf/tuple.rb', line 90 def to_attr_list heading.to_attr_list end |
#to_hash(dup = true) ⇒ Object
82 83 84 |
# File 'lib/alf-relation/alf/tuple.rb', line 82 def to_hash(dup = true) dup ? reused_instance.dup : reused_instance end |
#to_json(*args, &bl) ⇒ Object
86 87 88 |
# File 'lib/alf-relation/alf/tuple.rb', line 86 def to_json(*args, &bl) to_hash.to_json(*args, &bl) end |
#to_ruby_literal ⇒ Object Also known as: inspect, to_s
94 95 96 |
# File 'lib/alf-relation/alf/tuple.rb', line 94 def to_ruby_literal "Tuple(#{Support.to_ruby_literal(to_hash)})" end |