module StubFactory

Constants

VERSION

Public Class Methods

define_helper(helper, klass) click to toggle source

Helper Handling #######

# File lib/stub_factory.rb, line 35
    def define_helper(helper, klass)
      raise HelperError, "A helper for #{helper} has already been defined" if helper_defined?(helper)
      @helpers << helper.to_sym

      Helpers.class_eval <<-STR
        def stub_#{helper}(vars: {}, methods: {})
          #{klass}.new_stub(vars: vars, methods: methods, template: :#{helper})
        end
      STR
    end
define_template(template_name) { || ... } click to toggle source

Template Handing #######

# File lib/stub_factory.rb, line 15
def define_template(template_name)
  tn = template_name.to_sym
  raise TemplateError, "Template already defined" if template_defined?(tn)
  raise TemplateError, "Templates need to be defined with a block" unless block_given?
  values = yield
  raise TemplateError, "Block must contain a Hash" unless values.kind_of?(Hash)
  @templates[tn] = values
end
helper_defined?(helper) click to toggle source
# File lib/stub_factory.rb, line 46
def helper_defined?(helper)
  @helpers.include?(helper.to_sym)
end
recursive_require(rel_paths) click to toggle source

Requiring Files #######

# File lib/stub_factory.rb, line 52
def recursive_require(rel_paths)
  rel_paths.each do |rel_path|
    require_path(rel_path)
  end
end
require_path(rel_path) click to toggle source
# File lib/stub_factory.rb, line 58
def require_path(rel_path)
  path = File.expand_path(rel_path)

  if File.exists?(path)
    require "#{path}" if File.file?(path) && path.match(/\/(stub_|template_)[^\/]*$/)
    Dir["#{path}/*"].each { |file| require_path(file) }
  end
end
template_defined?(template) click to toggle source
# File lib/stub_factory.rb, line 24
def template_defined?(template)
  return unless template
  @templates.has_key?(template.to_sym)
end
template_for(template) click to toggle source
# File lib/stub_factory.rb, line 29
def template_for(template)
  @templates[template.to_sym]
end
to_underscored_symbol(class_name) click to toggle source
# File lib/stub_factory.rb, line 111
def to_underscored_symbol(class_name)
  # Namespace::TestClass to :namespace__test_class
  res = class_name.to_s.dup
  res.gsub!(/([a-z])([A-Z])/) { "#{$1}_#{$2}" }
  res.gsub!(/::/, "__")
  res.downcase.to_sym
end

Public Instance Methods

new_stub(vars: {}, methods: {}, template: to_underscored_symbol(self.name)) click to toggle source

Public Method #######

# File lib/stub_factory.rb, line 83
def new_stub(vars: {}, methods: {}, template: to_underscored_symbol(self.name))
  obj = allocate

  if StubFactory.template_defined?(template)
    vars = StubFactory.template_for(template).merge(vars)
  end

  set_instance_variables(obj, vars)
  override_methods(obj, methods)
  obj
end

Private Instance Methods

override_methods(obj, methods) click to toggle source
# File lib/stub_factory.rb, line 103
def override_methods(obj, methods)
  methods.each do |meth, val|
    obj.send(:define_singleton_method, meth) do
      val
    end
  end
end
set_instance_variables(obj, vars) click to toggle source
# File lib/stub_factory.rb, line 97
def set_instance_variables(obj, vars)
  vars.each do |var, val|
    obj.instance_variable_set("@#{var}", val)
  end
end
to_underscored_symbol(class_name) click to toggle source
# File lib/stub_factory.rb, line 111
def to_underscored_symbol(class_name)
  # Namespace::TestClass to :namespace__test_class
  res = class_name.to_s.dup
  res.gsub!(/([a-z])([A-Z])/) { "#{$1}_#{$2}" }
  res.gsub!(/::/, "__")
  res.downcase.to_sym
end