From 18349a0a1f065c3dee958b727b44d6ace8cc3b2f Mon Sep 17 00:00:00 2001 From: realtradam Date: Tue, 7 Feb 2023 17:28:48 -0500 Subject: first release --- lib/mruby_gem_scaffolding.rb | 125 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) (limited to 'lib/mruby_gem_scaffolding.rb') diff --git a/lib/mruby_gem_scaffolding.rb b/lib/mruby_gem_scaffolding.rb index 8dca6f3..67ffba6 100644 --- a/lib/mruby_gem_scaffolding.rb +++ b/lib/mruby_gem_scaffolding.rb @@ -1,6 +1,127 @@ require "mruby_gem_scaffolding/version" module MrubyGemScaffolding - class Error < StandardError; end - # Your code goes here... + module Utility + class << self + # from thor gem + def snake_case(str) + return str.downcase if str =~ /^[A-Z_]+$/ + str.gsub(/\B[A-Z]/, '_\&').squeeze("_") =~ /_*(.*)/ + Regexp.last_match(-1).downcase + end + + # from thor gem + def camel_case(str) + return str if str !~ /_/ && str =~ /[A-Z]+.*/ + str.split("_").map(&:capitalize).join + end + end + end + + class << self + def empty_project + { + "README.md" => '', + "mrbgem.rake" => '', + "include" => {}, + "mrblib" => {}, + "src" => {}, + "tools" => {}, + "test" => {}, + "LICENSE" => '', + } + end + + def generate(user_name:, project_name:) + result = empty_project + + result["README.md"] = + < +#include + +// defining the function to be later bound to a ruby method +static mrb_value +hello_world(mrb_state *mrb, mrb_value self) +{ + printf("Hello World"); + + return mrb_nil_value(); // return null +} + +// gem initializer +void +mrb_#{Utility.snake_case(project_name)}_gem_init(mrb_state* mrb) { + struct RClass *#{Utility.snake_case(project_name)}_class = mrb_define_module(mrb, "#{Utility.camel_case(project_name)}"); + mrb_define_class_method( + mrb, // Mruby VM state + #{Utility.snake_case(project_name)}_class, // Class we bind method to + "say_hello", // Name of method + hello_world, // Function we are binding as a method + MRB_ARGS_NONE() // How many arguments are optional/required + ); +} + +// gem finalizer +void +mrb_#{Utility.snake_case(project_name)}_gem_final(mrb_state* mrb) { + +} +MULTILINE + + result["LICENSE"] = + <