Class | Amrita::AttrArray |
In: |
lib/amrita/node_expand.rb
lib/amrita/node.rb |
Parent: | Object |
Array of Attr s. It can hold body part for using as a model data for Node#expand. Amrita#a() method is a shortcut for Attr.new
body | [R] | If you call a() { … }, block yields to body bodyは、elementの内容になる。 |
Don‘t use AttrArray.new use a() instead
# File lib/amrita/node.rb, line 101 def initialize(*attrs, &block) @array = [] attrs.each do |a| case a when Array, AttrArray a.each do |aa| self << aa end when Hash attrs[0].each do |k, v| k = k.id2name if k.is_a?(Symbol) self << Attr.new(k, v) end else self << a end end if block_given? @body = yield else @body = Null end end
add an Attr
# File lib/amrita/node.rb, line 142 def <<(a) case a when Attr @array.each_with_index {|x, idx| if x.key == a.key @array[idx] = a return self end } @array << a when AttrArray a.each {|attr| self << attr } else raise TypeError, "must be Attr or AttrArray, not #{a.class}" end self end
含まれる属性が一致しているか。属性の順序は一致していなくても構わない。
# File lib/amrita/node.rb, line 127 def ==(x) return true if object_id == x.object_id return nil unless x.kind_of?(AttrArray) return false if size != x.size @array.each {|attr| return false if attr != x[attr.key] } true end
# File lib/amrita/node.rb, line 167 def [] key raise TypeError, "key must be a String/Symbol, but #{key.class}" if !key.is_a?(String) && !key.is_a?(Symbol) key = key.to_s @array.each do |x| return x if x.key == key end nil end
@overload [key] = aAttr
keyとaAttr.keyが同じでなければならない。
@overload [key] = aString
属性を設定
# File lib/amrita/node.rb, line 179 def []= key, val raise TypeError, "key must be a String/Symbol, but #{key.class}" if !key.is_a?(String) && !key.is_a?(Symbol) key = key.to_s if val.is_a?(Attr) raise if key != val.key else val = Attr.new key, val end self << val val end
# File lib/amrita/node_expand.rb, line 269 def amrita_expand_node(n, context) raise Amrita::ModelMisMatch(type, n.class) end
# File lib/amrita/node.rb, line 192 def delete key raise TypeError, "key must be a String/Symbol, but #{key.class}" if !key.is_a?(String) && !key.is_a?(Symbol) key = key.to_s @array.each_with_index {|x, idx| if x.key == key return @array.delete_at(idx) end } nil end