=    Cls.     

== 

      ClsRuby  
  Hash,    <,>.  Ruby
       
    :
  root = ClsRuby::TagNoValue.new :name => 'root', :mandatory => true
 :name  :mandatory      Hash
  ClsRuby::TagNoValue.

    Hash   
    . ,  ClsRuby::TagNoValue
   ClsRuby::Tag ,    , 
  :once.

    Hash       
 . -,      
:
  class MyTag < ClsRuby::Tag
    def initialize( params = { :mandatory = true } )
      super( params )
      ...
    end
  end
  ,     MyTag    ,
      Hash   {:mandatory=>true}.

-,        
 :
  class MyTag < ClsRuby::Tag
    def initialize( params = {} )
      super( { :name => 'root', :mandatory => false }.merge( params ) )
      ...
    end
  end
  ,       :name  :mandatory, 
      .  
      params,   
      .

      
ClsRuby::Tag#child_tag, Tag#mandatory_child_tag  Tag#default_tag_params.
     ,      
  Hash,        
.

===    

   Hash#merge     :
  def initialize( params )
    super( { :name => 'root' }.merge( params ) )
    ...
  end
   ClsRuby::Tag#default_tag_params,  
   :
  class MyTag < ClsRuby::Tag
    default_tag_params :name => 'root'
    ...
  end

     ClsRuby::Tag#default_tag_params 
,        :
  :include: docs/fragments/inherit_tag_params.rb
   :
  {:name=>"root", :mandatory=>true, :once=>true}

==  

 ClsRuby::Tag      :
[_name_]  ;
[_mandatory_]  / ;
[_owner_]    .    ,  
            tag_add   .

    -  (,    
ClsRuby::TagScalar),         
  :value.

      (, :format
 ClsRuby::TagScalar  :once  ClsRuby::TagNoValue).  , 
        
 .


==    

        ClsRuby::Tag, 
       ( 
default_tag_params).        
    ClsRuby::Tag#tag_params, ..  
  Hash    .

===     

   ,        , 
       
  . ,     :value
 ,     :
  def initialize( params = {} )
    super( params )

    value = params.fetch( :value )
    if value
      ... # 
    end
  end
   ,      , 
     .   
  tag_params:
  def initialize( params = {} )
    super( params )

    value = tag_params.fetch( :value )
    if value
      ... # 
    end
  end
,   ,   Tag#tag_handle_opt_param:
  def initialize( params )
    super( params )

    tag_handle_opt_param( :value ) do |v|
      ...
      tag_make_defined
    end
  end

# vim:ts=2:sts=2:sw=2:expandtab:ft=txt:tw=78

