class SpecMe
Constants
- Config
- VERSION
Attributes
ast[RW]
config[RW]
file[RW]
Public Class Methods
new()
click to toggle source
# File lib/spec_me.rb, line 15 def initialize self.config = SpecMe::Config end
Public Instance Methods
ast_to_spec()
click to toggle source
# File lib/spec_me.rb, line 19 def ast_to_spec Renderer.new( config ).render ast, count: 1, file_name: @base_file_name end
generate_spec()
click to toggle source
# File lib/spec_me.rb, line 23 def generate_spec return if ast.empty? @base_file_name = File .basename( file ) .sub( %r{\..*\z}, "" ) @output_file = File.join config.spec_me_root, "#{@base_file_name}_spec.rb" File.open( @output_file, "w" ) do | f | f.puts ast_to_spec end end
parse(lines)
click to toggle source
# File lib/spec_me.rb, line 35 def parse lines self.ast = [] @state = :outside lines.each do | line | state_machine line.chomp end # post_parse end
parse_line(line)
click to toggle source
# File lib/spec_me.rb, line 44 def parse_line line case line when config.code_comment [:comment, Regexp.last_match[1]] when config.equality_xp [:equality_xp] + Regexp.last_match[1..2].map(&:strip) else [:ruby, line.strip] end end
post_parse()
click to toggle source
# File lib/spec_me.rb, line 55 def post_parse # No need to create specs if there are no expectations end
run(args)
click to toggle source
# File lib/spec_me.rb, line 7 def run args file = args.shift or raise ArgumentError, "Missing file name" raise ArgumentError, "Input file `#{file}' missing or not readable" unless File.readable? file self.file = file parse File.readlines( file ) generate_spec end
Private Instance Methods
add_block_to_ast()
click to toggle source
# File lib/spec_me.rb, line 60 def add_block_to_ast self.ast << [] end
clean_last_node()
click to toggle source
# File lib/spec_me.rb, line 64 def clean_last_node ast.pop unless ast.last.any?{ |node| %r{_xp\z} === node.first } end
state_machine(line)
click to toggle source
# File lib/spec_me.rb, line 68 def state_machine line case @state when :outside # update_config_from line if config.instruction_line === line return unless config.start_code_block === line @state = :inside add_block_to_ast when :inside if config.end_code_block === line @state = :outside clean_last_node else ast.last << parse_line( line ) end end end