class Jackal::Utils::Spec::Generator
Test files generator
Constants
- GEMFILE_LINES
Lines required within Gemfile
- TEST_CONFIG_DIR
Test configuration directory path
- TEST_DIR
Test directory path
Public Class Methods
new(*_)
click to toggle source
Create new instance
@return [self]
Calls superclass method
# File lib/jackal/utils/spec/generator.rb, line 25 def initialize(*_) super @orig_service_name = options[:service_name].downcase @service_name = Bogo::Utility.snake(@orig_service_name) @service_class_name = Bogo::Utility.camel(@service_name) @module_name = options[:module_name].downcase @module_class_name = Bogo::Utility.camel(@module_name) @callback_type = 'jackal' @supervisor_name = "jackal_#{@service_name}_input" end
Public Instance Methods
config_file_content()
click to toggle source
Configuration file content
@return [String]
# File lib/jackal/utils/spec/generator.rb, line 78 def config_file_content <<-TEXT Configuration.new do jackal do require ["carnivore-actor", "jackal-#{@orig_service_name}"] mail do config do end sources do input { type 'actor' } output { type 'spec' } end callbacks ['Jackal::#{@service_class_name}::#{@module_class_name}'] end end end TEXT end
execute!()
click to toggle source
Generate test files
@return [TrueClass]
# File lib/jackal/utils/spec/generator.rb, line 42 def execute! ui.info 'Generating jackal test files' # ensure dependencies are present in Gemfile run_action 'Update Gemfile contents' do update_gemfile nil end run_action 'Create testing directory structure' do # Create test directory structure [TEST_DIR, TEST_CONFIG_DIR].each do |dir| FileUtils.mkdir_p(dir) end nil end run_action 'Write test configuration file' do conf_path = File.join(Dir.pwd, TEST_CONFIG_DIR, "#{@module_name}.rb") write_file(conf_path, config_file_content) nil end run_action 'Write default test spec file' do spec_path = File.join(Dir.pwd, TEST_DIR, "#{@service_name}_spec.rb") write_file(spec_path, spec_file_content) nil end ui.info 'Jackal test file generation complete!' true end
spec_file_content()
click to toggle source
Spec
file content
@return [String]
# File lib/jackal/utils/spec/generator.rb, line 103 def spec_file_content <<TEXT require '#{@callback_type}-#{@orig_service_name}' require 'pry' # To stub out an api call for your callback class #{callback_class}::#{@service_class_name}::#{@module_class_name} attr_accessor :test_payload #def api_call(args) # test_payload.set(:args, args) #end end describe #{callback_class}::#{@service_class_name}::#{@module_class_name} do before do @runner = run_setup(:#{@module_name}) track_execution(#{callback_class}::#{@service_class_name}::#{@module_class_name}) end after do @runner.terminate end let(:actor) { Carnivore::Supervisor.supervisor[:#{@supervisor_name}] } it 'executes with empty payload' do result = transmit_and_wait(actor, payload) (!!result).must_equal true callback_executed?(result).must_equal true end private # payload to send for callback execution def payload Jackal::Utils.new_payload(:test, Smash.new) end end TEXT end
Private Instance Methods
callback_class()
click to toggle source
@return [String] callback class name
# File lib/jackal/utils/spec/generator.rb, line 150 def callback_class @callback_class ||= Bogo::Utility.camel(@callback_type) end
update_gemfile()
click to toggle source
Update the contents of the Gemfile with required items
@return [TrueClass]
# File lib/jackal/utils/spec/generator.rb, line 157 def update_gemfile raise Errno::ENOENT.new('Gemfile (ensure file exists)') unless File.exists?('Gemfile') gemfile = File.read('Gemfile') lines = GEMFILE_LINES.select{ |l| !gemfile[l] } # only append items not already present unless(lines.empty?) File.open('Gemfile', 'a') do |f| f << "\n" lines.each { |l| f << (l + "\n") } end end true end
write_file(path, content)
click to toggle source
Write file content to given path if file does not already exist
@param path [String] path to write @param content [String] file content @return [Integer] number of bytes written
# File lib/jackal/utils/spec/generator.rb, line 177 def write_file(path, content) raise Errno::EEXIST.new(path) if File.exists?(path) File.write(path, content) end