Class: Rubyang::Database::DataTree::InteriorNode
- Inherits:
-
Node
- Object
- Node
- Rubyang::Database::DataTree::InteriorNode
show all
- Defined in:
- lib/rubyang/database/data_tree.rb
Instance Attribute Summary
Attributes inherited from Node
#children, #parent, #schema, #schema_tree
Instance Method Summary
collapse
Methods inherited from Node
#evaluate_max_elements, #evaluate_min_elements, #evaluate_musts, #evaluate_whens, #evaluate_xpath, #evaluate_xpath_axis, #evaluate_xpath_expr, #evaluate_xpath_node_test, #evaluate_xpath_path, #evaluate_xpath_predicates, #initialize, #load_merge_xml_recursive, #root, #to_json, #to_s, #to_xml, #valid?
Instance Method Details
#delete(arg) ⇒ Object
841
842
843
844
845
|
# File 'lib/rubyang/database/data_tree.rb', line 841
def delete arg
child_schema = find_child_schema @schema, arg
child_node = @children.find{ |c| c.schema == child_schema }
@children.delete child_node
end
|
#delete_same_choice_other_case(schema, arg, children) ⇒ Object
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
|
# File 'lib/rubyang/database/data_tree.rb', line 753
def delete_same_choice_other_case schema, arg, children
child_schema = nil
schema.children.each{ |c|
case c
when Rubyang::Database::SchemaTree::Choice
child_schema = delete_same_choice_other_case c, arg, children
when Rubyang::Database::SchemaTree::Case
child_schema = delete_same_choice_other_case c, arg, children
if Rubyang::Database::SchemaTree::Choice === schema
other_schema_children = schema.children.select{ |c2| c2 != c }
children.delete_if{ |c2|
other_schema_children.find{ |sc|
find_child_schema sc, c2.schema.model.arg or sc.model.arg == c2.schema.model.arg
}
}
end
else
if c.model.arg == arg
child_schema = c
if Rubyang::Database::SchemaTree::Choice === schema
other_schema_children = schema.children.select{ |c2| c2 != c }
children.delete_if{ |c2|
other_schema_children.find{ |sc|
find_child_schema sc, c2.schema.model.arg or sc.model.arg == c2.schema.model.arg
}
}
end
else
nil
end
end
}
child_schema
end
|
#edit(arg) ⇒ Object
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
|
# File 'lib/rubyang/database/data_tree.rb', line 787
def edit arg
child_schema = find_child_schema @schema, arg
delete_same_choice_other_case @schema, arg, @children
child_node = @children.find{ |c| c.schema == child_schema }
unless child_node
begin
ctx_mode = if child_schema.yang.substmt('config').any?
case child_schema.yang.substmt('config')[0].arg
when 'true'
Rubyang::Database::DataTree::Mode::CONFIG
when 'false'
Rubyang::Database::DataTree::Mode::OPER
end
else
@ctx_mode
end
case child_schema.model
when Rubyang::Model::Anyxml
child_node = Anyxml.new( self, @schema_tree, child_schema, @db_mode, ctx_mode )
when Rubyang::Model::Container
child_node = Container.new( self, @schema_tree, child_schema, @db_mode, ctx_mode )
unless child_node.evaluate_whens.value
raise "#{arg} is not valid because of 'when' conditions"
end
when Rubyang::Model::Leaf
child_node = Leaf.new( self, @schema_tree, child_schema, @db_mode, ctx_mode )
when Rubyang::Model::List
child_node = List.new( self, @schema_tree, child_schema, @db_mode, ctx_mode )
when Rubyang::Model::LeafList
child_node = LeafList.new( self, @schema_tree, child_schema, @db_mode, ctx_mode )
else
raise
end
rescue
raise ArgumentError, "#{arg} NOT match"
end
@children.push child_node
end
child_node
end
|
#edit_xpath(arg) ⇒ Object
829
830
831
832
833
834
835
836
837
838
839
840
|
# File 'lib/rubyang/database/data_tree.rb', line 829
def edit_xpath arg
xpath = Rubyang::Xpath::Parser.parse arg
candidates = self.evaluate_xpath( xpath )
case candidates.value.size
when 0
raise "no such xpath: #{arg}"
when 1
candidates.value.first
else
raise "too many match to xpath: #{arg}"
end
end
|
#find_child_schema(schema, arg) ⇒ Object
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
|
# File 'lib/rubyang/database/data_tree.rb', line 648
def find_child_schema schema, arg
schema.children.map{ |c|
case c
when Database::SchemaTree::Choice
find_child_schema c, arg
when Database::SchemaTree::Case
find_child_schema c, arg
when Database::SchemaTree::Anyxml, Database::SchemaTree::Leaf, Database::SchemaTree::LeafList
if c.model.arg == arg
if @db_mode == Database::DataTree::Mode::CONFIG && @ctx_mode == Database::DataTree::Mode::CONFIG
if c.yang.substmt('config').any? && c.yang.substmt('config')[0].arg == 'false'
nil
else
c
end
elsif @db_mode == Database::DataTree::Mode::CONFIG && @ctx_mode == Database::DataTree::Mode::OPER
nil
elsif @db_mode == Database::DataTree::Mode::OPER && @ctx_mode == Database::DataTree::Mode::CONFIG
if c.yang.substmt('config').any? && c.yang.substmt('config')[0].arg == 'false'
c
else
nil
end
elsif @db_mode == Database::DataTree::Mode::OPER && @ctx_mode == Database::DataTree::Mode::OPER
if c.yang.substmt('config').any? && c.yang.substmt('config')[0].arg == 'true'
nil
else
c
end
end
else
nil
end
else
if c.model.arg == arg
if @db_mode == Database::DataTree::Mode::CONFIG && @ctx_mode == Database::DataTree::Mode::CONFIG
c
elsif @db_mode == Database::DataTree::Mode::CONFIG && @ctx_mode == Database::DataTree::Mode::OPER
c
elsif @db_mode == Database::DataTree::Mode::OPER && @ctx_mode == Database::DataTree::Mode::CONFIG
c
elsif @db_mode == Database::DataTree::Mode::OPER && @ctx_mode == Database::DataTree::Mode::OPER
if c.yang.substmt('config').any? && c.yang.substmt('config')[0].arg == 'true'
nil
else
c
end
end
else
nil
end
end
=begin
case @db_mode
when Rubyang::Database::DataTree::Mode::CONFIG
case c
when Rubyang::Database::SchemaTree::Choice
find_child_schema c, arg
when Rubyang::Database::SchemaTree::Case
find_child_schema c, arg
when Rubyang::Database::SchemaTree::Leaf, Rubyang::Database::SchemaTree::LeafList
if c.model.arg == arg
c
else
nil
end
else
if c.model.arg == arg
if c.yang.substmt('config').any? && c.yang.substmt('config')[0].arg == 'false'
nil
else
c
end
else
nil
end
end
when Rubyang::Database::DataTree::Mode::OPER
case c
when Rubyang::Database::SchemaTree::Choice
find_child_schema c, arg
when Rubyang::Database::SchemaTree::Case
find_child_schema c, arg
when Rubyang::Database::SchemaTree::Leaf, Rubyang::Database::SchemaTree::LeafList
if c.model.arg == arg
if c.yang.substmt('config').any? && c.yang.substmt('config')[0].arg == 'false'
c
else
nil
end
else
nil
end
else
if c.model.arg == arg
c
else
nil
end
end
end
=end
}.find{ |c| c }
end
|
#to_json_recursive(_hash) ⇒ Object
641
642
643
644
645
646
647
|
# File 'lib/rubyang/database/data_tree.rb', line 641
def to_json_recursive( _hash )
hash = Hash.new
_hash[@schema.model.arg] = hash
@children.each{ |c|
c.to_json_recursive hash
}
end
|
#to_xml_recursive(_doc, current_namespace) ⇒ Object
631
632
633
634
635
636
637
638
639
640
|
# File 'lib/rubyang/database/data_tree.rb', line 631
def to_xml_recursive _doc, current_namespace
doc = _doc.add_element( @schema.model.arg )
unless @schema.namespace == current_namespace
current_namespace = @schema.namespace
doc.add_namespace current_namespace
end
@children.each{ |c|
c.to_xml_recursive doc, current_namespace
}
end
|