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