generators/integration_generator.rb
require "thor/group"
class IntegrationGenerator < Thor::Group
include Thor::Actions
argument :name
class_option :destroy, :type => :boolean, :desc => "Destroys rather than generates the gateway"
source_root File.expand_path("..", __FILE__)
def initialize(*args)
super
rescue Thor::InvocationError
at_exit{print self.class.help(shell)}
raise
end
def generate
template "templates/integration.rb", "#{lib}.rb"
template "templates/module_test.rb", "#{test_dir}/integrations/#{identifier}_module_test.rb"
template "templates/helper_test.rb", "#{test_dir}/integrations/#{identifier}_helper_test.rb"
template "templates/notification_test.rb", "#{test_dir}/integrations/#{identifier}_notification_test.rb"
end
protected
def template(source, dest)
if options[:destroy]
remove_file dest
else
super
end
end
def identifier
@identifier ||= class_name.gsub(%r{([A-Z])}){|m| "_#{$1.downcase}"}.sub(%r{^_}, "")
end
def class_name
@class_name ||= name.gsub(%r{(^[a-z])|_([a-zA-Z])}){|m| ($1||$2).upcase}
end
def lib
"lib/offsite_payments/integrations/#{identifier}"
end
def test_dir
"test/unit/integrations"
end
end