class RSpec::Scaffold::Generator

Attributes

file[R]

Class

generate a rspec file based on existing code

Public Class Methods

new(file) click to toggle source
Calls superclass method
# File lib/rspec/scaffold/generator.rb, line 10
def initialize(file)
  @file = file
  super Ryan.new(file)
end

Public Instance Methods

const() click to toggle source
# File lib/rspec/scaffold/generator.rb, line 15
def const
  @const ||= name.split('::').inject(Kernel) { |k, part| k.const_get part }
end
perform() click to toggle source
# File lib/rspec/scaffold/generator.rb, line 19
def perform
  indent = (' ' * 2)
  second_indent = indent * 2
  lines = [%Q(require "#{Scaffold.helper_file}"), %Q(), %Q(describe #{const} do)]
  if class?
    initialization_args.each do |arg|
      lines << %Q(#{indent}let(:#{arg.to_s.sub(/^[&*]/, '')}) {})
    end
    lines << %Q()
    lines << %Q(#{indent}subject { described_class.new #{initialization_args.join(', ')} })
  elsif module?
    lines << %Q(#{indent}subject { Class.new { include #{const} }.new })
  end
  lines << %Q()
  funcs.reject(&:private?).each do |func|
    lines << %Q(#{indent}describe "#{func.class? ? '.' : '#'}#{func.name}" do)
    func.assignments.each do |assignment|
      lines << %Q(#{second_indent}it "#{assignment}" do) << %Q(#{second_indent}end)
    end
    lines << %Q() if func.conditions.any? and func.assignments.any?
    func.conditions.each do |condition|
      lines.concat ConditionExhibit.new(condition, second_indent).render
    end
    lines << %Q(#{indent}end) << %Q()
  end
  lines << %Q(end) << %Q()
  lines
end