class Nukumi2::ConfigParser class Blog undef_method :taguri if method_defined? :taguri inject :registry def initialize @fields = {} end def topics(&block) @topics = [] @topictree = Topic.new(self, "") @topictree.instance_eval(&block) end def register(&block) Nukumi2::DefaultRegistry.class_eval(&block) end def self.attr_set(a) define_method(a) { |*arg| if arg.size == 1 @fields[a] = arg.first end @fields[a] } end attr_reader :topictree def [](key) @fields[key] end def method_missing(name, *value) if value.size == 1 @fields[name] = value.first end @fields[name] end def define(path, obj) @topics << [path, obj] end def get_topics @topics end end class TopicContext def initialize(parent) @parent = parent end def method_missing(name, &block) t = @parent.topics[name.to_s] = Topic.new(@parent, name.to_s) t.instance_eval(&block) end end class Topic def initialize(parent, name) @parent = parent @topic = TopicContext.new(self) @topics = {} @name = name @fields = {} if @name.empty? @parent.define "/", self else @parent.define(@name, self) end end attr_reader :topics def register end def define(name, obj) @parent.define(@name + "/" + name, obj) end def on_definition(&block) @on_def = block end def self.attr_set(a) define_method(a) { |*arg| if arg.size == 1 @fields[a] = arg.first end @fields[a] } end attr_set :title attr_set :description attr_set :view attr_set :hidden attr_set :save def any(&block) t = Topic.new(self, "*") t.instance_eval(&block) end def all(&block) t = Topic.new(self, "**") t.instance_eval(&block) end attr_reader :topic, :topics end inject :blogconfig def blog(&block) blogconfig.instance_eval(&block) blogconfig end def initialize(file) @file = file end def load self.instance_eval File.read(@file), @file end end