class Snippr::SegmentParser
Constants
- SEGMENT_MARKER
Public Class Methods
new(raw_content)
click to toggle source
# File lib/snippr/segment_parser.rb, line 6 def initialize(raw_content) @raw_content = insert_dummy_filter(clean_up(raw_content.clone)) end
Public Instance Methods
content()
click to toggle source
# File lib/snippr/segment_parser.rb, line 10 def content @content ||= @raw_content.scan(/[=✄]{4}$\n?(.*?)\n?(?:\z|[=✄]{4})/m)[find_active_segment][0] end
Private Instance Methods
camel_case(str)
click to toggle source
# File lib/snippr/segment_parser.rb, line 33 def camel_case(str) return str if str !~ /_/ && str =~ /[A-Z]+.*/ str.split('_').map{|e| e.capitalize}.join end
clean_up(content)
click to toggle source
# File lib/snippr/segment_parser.rb, line 45 def clean_up(content) content.gsub("\r","") end
extract_filters()
click to toggle source
# File lib/snippr/segment_parser.rb, line 29 def extract_filters @raw_content.scan(/^[=✄]{4}\s(.*?):\s(.*?)\s[=✄]{4}$/).map {|filter| { :name => filter[0], :value => filter[1] } } end
filters()
click to toggle source
# File lib/snippr/segment_parser.rb, line 16 def filters @filters ||= extract_filters end
find_active_segment()
click to toggle source
# File lib/snippr/segment_parser.rb, line 20 def find_active_segment active_segment = 0 filters.each_with_index do |filter, filter_index| filter_class = Snippr::SegmentFilter::Base.filters.detect {|c| c.name == "Snippr::SegmentFilter::#{camel_case(filter[:name])}" } active_segment = filter_index and break if filter_class && filter_class.new(filter[:value]).active? end active_segment end
insert_dummy_filter(content)
click to toggle source
# File lib/snippr/segment_parser.rb, line 38 def insert_dummy_filter(content) if content !~ /\A#{SEGMENT_MARKER}$/ content.prepend("==== dummy: filter ====\n") end content end