Sha256: 71bd9422340f9cc1813fe770da4429b787eaf066a42794583df03c98d592c2f0

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

#
# 把文本转化成对象的Build模式
#
#
class LineBuilder
	attr_accessor :data,:index,:object
	def initialize(data,index=0)
		@data = data
		@index = index
		@object = nil
		@is_parse = false
	end
	def parse
		@is_parse = true
		return nil if is_over?
		begin
			next unless in?
			process_line 
		end until (  out? || is_over?)
		self
	end
	# 行处理函数,必须被重写
	def process_line
		line = @data[@index]
		@object = line
	end
	# 进入条件,默认直接进入
	def in?
		true
	end
	# 退出条件,默认为读完本行直接退出,重写要设置@index的新值
	def out?
		@index += 1
	end
	# 是否数据结构
	def is_over?
		@index >= @data.size
	end
	def get_next
		return nil if is_over?
		return self.class.new(@data,@index).parse
	end
	# 得出剩下的
	def rest
		return [] if is_over?
		next_b = get_next
		return [next_b] + ( next_b.is_over? ? [] : next_b.rest)
	end
	# 找出全部的
	def find_all
		return [] if is_over? && @object == nil
		parse unless @is_parse
		[self] + rest
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
git-hack-0.0.3 lib/core_ext/line_builder.rb