我正在尝试为自学目的构建一个简单的小模板解析器。
我如何构建“模块化”的东西并在其中共享数据?数据不需要从外部访问,它只是内部数据。这是我所拥有的:
# template_parser.rb
module TemplateParser
attr_accessor :html
attr_accessor :test_value
class Base
def initialize(html)
@html = html
@test_value = "foo"
end
def parse!
@html.css('a').each do |node|
::TemplateParser::Tag:ATag.substitute! node
end
end
end
end
# template_parser/tag/a_tag.rb
module TemplateParser
module Tag
class ATag
def self.substitute!(node)
# I want to access +test_value+ from +TemplateParser+
node = @test_value # => nil
end
end
end
end
根据 Phrogz 的评论进行编辑,
我目前正在考虑类似的事情:
p = TemplateParser.new(html, *args) # or TemplateParser::Base.new(html, *args)
p.append_css(file_or_string)
parsed_html = p.parse!
不应该有太多暴露的方法,因为解析器应该解决非一般问题并且不可移植。至少在这个早期阶段不会。我试图从 Nokogiri 那里窥探一下结构。