diff --git a/exe/light b/exe/light new file mode 100755 index 0000000..2090f11 --- /dev/null +++ b/exe/light @@ -0,0 +1,7 @@ +#!/usr/bin/env ruby + +$LOAD_PATH.unshift(File.expand_path("../lib", __dir__)) + +require 'light/cli' + +Light::CLI.start(ARGV) \ No newline at end of file diff --git a/lib/light/cli.rb b/lib/light/cli.rb new file mode 100644 index 0000000..07c0d3c --- /dev/null +++ b/lib/light/cli.rb @@ -0,0 +1,23 @@ +require 'thor' +require 'fileutils' + +module Light + class CLI < Thor + desc "generate NAME", "Generates a new service file with the given NAME" + def generate(name) + # TODO: can let the user decide their preferred directory + dir = "app/services" + path = File.join(Dir.pwd, "#{dir}/#{name}_service.rb") + FileUtils.mkdir_p(File.dirname(path)) + + content = <<~RUBY + class #{name.capitalize}Service < Light::Services::Base + # Nothing to put here yet + end + RUBY + + File.write(path, content) + puts "✅ Generated: #{path}" + end + end +end diff --git a/spec/light/cli_spec.rb b/spec/light/cli_spec.rb new file mode 100644 index 0000000..34553c0 --- /dev/null +++ b/spec/light/cli_spec.rb @@ -0,0 +1,19 @@ +# spec/light/cli_spec.rb +require "spec_helper" +require "fileutils" +require 'light/cli' + +RSpec.describe Light::CLI do + let(:filename) { "app/services/application_service.rb" } + + after(:each) do + FileUtils.rm_f(filename) + end + + it "generates the correct service file via CLI" do + Light::CLI.start(["generate", "application"]) + + expect(File).to exist(filename) + expect(File.read(filename)).to include("class ApplicationService") + end +end \ No newline at end of file