diff --git a/.gitignore b/.gitignore index ce177c64..c3ecb266 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,11 @@ test/jeweler/version_tmp test/version_tmp tmp -# rbenv settings -.ruby-version +# rvm/rbenv settings +/.ruby-version +/.ruby-gemset Gemfile.lock + +# Gladiator (Glimmer Editor) +.gladiator diff --git a/Rakefile b/Rakefile index 5f10104b..23b2d65a 100644 --- a/Rakefile +++ b/Rakefile @@ -30,7 +30,7 @@ Juwelier::Tasks.new do |gem| gem.license = "MIT" gem.authors = ["Fred Mitchell", "Josh Nichols", "Yusuke Murata"] gem.email = ["fred.mitchell@gmx.de", "fred.mitchell@gmx.com", "info@muratayusuke.com"] - gem.files.include %w(lib/juwelier/templates/.document lib/juwelier/templates/.gitignore) + gem.files.include %w(lib/juwelier/templates/.document lib/juwelier/templates/.gitignore lib/juwelier/templates/.ruby-version lib/juwelier/templates/.ruby-gemset) # dependencies defined in Gemfile end diff --git a/juwelier.gemspec b/juwelier.gemspec index 64f73d69..7ed8951d 100644 --- a/juwelier.gemspec +++ b/juwelier.gemspec @@ -11,7 +11,7 @@ Gem::Specification.new do |s| s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= s.require_paths = ["lib".freeze] s.authors = ["Fred Mitchell".freeze, "Josh Nichols".freeze, "Yusuke Murata".freeze] - s.date = "2018-01-18" + s.date = "2021-01-05" s.description = "Simple and opinionated helper for creating Rubygem projects on GitHub".freeze s.email = ["fred.mitchell@gmx.de".freeze, "fred.mitchell@gmx.com".freeze, "info@muratayusuke.com".freeze] s.executables = ["juwelier".freeze] @@ -94,6 +94,8 @@ Gem::Specification.new do |s| "lib/juwelier/tasks.rb", "lib/juwelier/templates/.document", "lib/juwelier/templates/.gitignore", + "lib/juwelier/templates/.ruby-gemset", + "lib/juwelier/templates/.ruby-version", "lib/juwelier/templates/.semver", "lib/juwelier/templates/Gemfile", "lib/juwelier/templates/LICENSE.txt", @@ -200,45 +202,29 @@ Gem::Specification.new do |s| s.homepage = "http://github.com/flajann2/juwelier".freeze s.licenses = ["MIT".freeze] s.required_ruby_version = Gem::Requirement.new(">= 2.2.2".freeze) - s.rubygems_version = "2.7.3".freeze + s.rubygems_version = "3.1.4".freeze s.summary = "Powerful and Opinionated tool for creating and managing RubyGem projects".freeze if s.respond_to? :specification_version then s.specification_version = 4 + end - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, [">= 0"]) - s.add_runtime_dependency(%q.freeze, ["~> 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - else - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, ["~> 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - end + if s.respond_to? :add_runtime_dependency then + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, [">= 0"]) + s.add_runtime_dependency(%q.freeze, ["~> 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, [">= 0"]) else s.add_dependency(%q.freeze, [">= 0"]) s.add_dependency(%q.freeze, [">= 0"]) diff --git a/lib/juwelier/generator.rb b/lib/juwelier/generator.rb index 6b6a33cb..510484f7 100644 --- a/lib/juwelier/generator.rb +++ b/lib/juwelier/generator.rb @@ -24,12 +24,12 @@ class NoGitHubRepoNameGiven < StandardError class NoGitHubUser < StandardError end class GitInitFailed < StandardError - end + end class GitRepoCreationFailed < StandardError end # Generator for creating a juwelier-enabled project - class Generator + class Generator require 'juwelier/generator/options' require 'juwelier/generator/application' @@ -50,14 +50,15 @@ class Generator attr_accessor :target_dir, :user_name, :user_email, :summary, :homepage, :description, :project_name, :github_username, - :repo, :should_create_remote_repo, + :repo, :should_create_remote_repo, :testing_framework, :documentation_framework, :should_use_cucumber, :should_use_bundler, :should_use_semver, :should_setup_rubyforge, :should_use_reek, :should_use_roodi, + :should_use_rvm, :should_be_rusty, :should_use_pry, :development_dependencies, :production_dependencies, :options, :require_ruby_version, :should_create_bin, - :git_remote, :use_readme_format, :should_use_pry, - :should_be_rusty + :git_remote, :use_readme_format + def initialize(options = {}) self.options = options @@ -104,6 +105,7 @@ def initialize(options = {}) self.should_use_roodi = options[:use_roodi] self.should_setup_rubyforge = options[:rubyforge] self.should_use_bundler = options[:use_bundler] + self.should_use_rvm = options[:use_rvm] self.should_use_semver = options[:use_semver] self.require_ruby_version = options[:use_required_version] self.should_create_bin = options[:create_bin] @@ -113,7 +115,7 @@ def initialize(options = {}) development_dependencies << ["cucumber", ">= 0"] if should_use_cucumber - development_dependencies << ["bundler", "~> 1.0"] + development_dependencies << ["bundler", ">= 1.0"] development_dependencies << ["juwelier", "~> #{Juwelier::Version::STRING}"] development_dependencies << ["simplecov", ">= 0"] @@ -145,6 +147,7 @@ def initialize(options = {}) def run create_files + configure_project create_version_control $stdout.puts "Juwelier has prepared your gem in #{target_dir}" if should_create_remote_repo @@ -154,7 +157,7 @@ def run end def constant_name - self.project_name.camel + self.project_name.snake.camel end def extension_name @@ -173,7 +176,7 @@ def file_name_prefix end def lib_dir ; 'lib' ; end - def bin_dir ; 'bin' ; end + def bin_dir ; 'bin' ; end def rust_dir ; 'rust' ; end def rust_src_dir ; rust_dir + '/src' ; end @@ -212,6 +215,8 @@ def create_files output_template_in_target 'LICENSE.txt' output_template_in_target "README.#{use_readme_format}" output_template_in_target '.document' + output_template_in_target '.ruby-version' unless should_use_rvm == false + output_template_in_target '.ruby-gemset' if should_use_rvm mkdir_in_target lib_dir unless should_be_rusty @@ -297,6 +302,35 @@ def touch_in_target(destination) $stdout.puts "\tcreate\t#{destination}" end + def configure_project + FileUtils.cd target_dir do + execute_command "bundle install" if should_use_bundler + execute_command "rspec --init" if testing_framework == :rspec + end + end + + # RVM function taken from https://rvm.io/workflow/scripting#scripting + RVM_FUNCTION = <<~SHELL_SCRIPT + # Load RVM into a shell session *as a function* + if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then + # First try to load from a user install + source "$HOME/.rvm/scripts/rvm" + elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then + # Then try to load from a root install + source "/usr/local/rvm/scripts/rvm" + fi + SHELL_SCRIPT + + def execute_command(command) + # check if not false because nil (default) should not count as false in this case + if should_use_rvm != false + rvm_command = "bash -c '#{RVM_FUNCTION}\ncd .\n#{command}'" + system rvm_command + else + system command + end + end + def create_version_control Dir.chdir(target_dir) do begin diff --git a/lib/juwelier/generator/options.rb b/lib/juwelier/generator/options.rb index 7d3b37a9..b89157c4 100644 --- a/lib/juwelier/generator/options.rb +++ b/lib/juwelier/generator/options.rb @@ -69,6 +69,10 @@ def initialize(args) self[:use_bundler] = v end + o.on('--[no-]rvm', 'use RVM (Ruby enVironment Manager) for managing rubies/gemsets') do |v| + self[:use_rvm] = v + end + o.on('--[no-]semver', 'use semver for managining gem version') do |v| self[:use_semver] = v end diff --git a/lib/juwelier/generator/rspec_mixin.rb b/lib/juwelier/generator/rspec_mixin.rb index 01d62c06..79c17cdb 100644 --- a/lib/juwelier/generator/rspec_mixin.rb +++ b/lib/juwelier/generator/rspec_mixin.rb @@ -2,7 +2,7 @@ class Juwelier class Generator module RspecMixin def self.extended(generator) - generator.development_dependencies << ["rspec", "~> 3.5.0"] + generator.development_dependencies << ["rspec", ">= 3.5.0"] end def default_task diff --git a/lib/juwelier/templates/.ruby-gemset b/lib/juwelier/templates/.ruby-gemset new file mode 100644 index 00000000..debf1042 --- /dev/null +++ b/lib/juwelier/templates/.ruby-gemset @@ -0,0 +1 @@ +<%= project_name %> diff --git a/lib/juwelier/templates/.ruby-version b/lib/juwelier/templates/.ruby-version new file mode 100644 index 00000000..5ca6a3b5 --- /dev/null +++ b/lib/juwelier/templates/.ruby-version @@ -0,0 +1,2 @@ +<%= ENV['rvm_ruby_string'] %> + diff --git a/lib/juwelier/version.rb b/lib/juwelier/version.rb index f63f6476..b538798a 100644 --- a/lib/juwelier/version.rb +++ b/lib/juwelier/version.rb @@ -1,8 +1,8 @@ class Juwelier module Version MAJOR = 2 - MINOR = 1 - PATCH = 0 + MINOR = 4 + PATCH = 9 BUILD = nil STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.') diff --git a/test/test_helper.rb b/test/test_helper.rb index 10c6501f..020c5f1b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -18,7 +18,7 @@ require 'rake' require 'shoulda' #require 'redgreen' -require 'construct' +require 'test_construct' require 'git' require 'time' @@ -39,7 +39,7 @@ def initialize end class Test::Unit::TestCase - include Construct::Helpers + include TestConstruct::Helpers def tmp_dir TMP_DIR @@ -117,7 +117,7 @@ def self.rubyforge_command_context(description, &block) if @command.respond_to? :repo @repo = Object.new - @command.repo = @repo + @command.repo = @repo end end