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