From b757dbe524fcb6f1604a97fef0bef946566aedde Mon Sep 17 00:00:00 2001 From: Andy Maleh Date: Tue, 2 Jun 2020 06:58:31 -0400 Subject: [PATCH 1/4] Fixed dependency on test_construct --- features/support/env.rb | 2 +- test/test_helper.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/features/support/env.rb b/features/support/env.rb index 9ba6bf0b..c888fc06 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -17,7 +17,7 @@ require 'test/unit/assertions' World(Test::Unit::Assertions) -require 'construct' +require 'test_construct' World(Construct::Helpers) def yank_task_info(content, task) diff --git a/test/test_helper.rb b/test/test_helper.rb index 10c6501f..9df88510 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 From cc0141caaa5f8788bfe7c2c1f016cce808f37376 Mon Sep 17 00:00:00 2001 From: Andy Maleh Date: Tue, 2 Jun 2020 06:58:57 -0400 Subject: [PATCH 2/4] Fixed broken test for generator constant_name --- lib/juwelier/generator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/juwelier/generator.rb b/lib/juwelier/generator.rb index 6b6a33cb..428465c9 100644 --- a/lib/juwelier/generator.rb +++ b/lib/juwelier/generator.rb @@ -154,7 +154,7 @@ def run end def constant_name - self.project_name.camel + self.project_name.underscore.camel end def extension_name From c6ad56dc7022bc4228221675a372a80a153586f8 Mon Sep 17 00:00:00 2001 From: Andy Maleh Date: Tue, 2 Jun 2020 07:02:22 -0400 Subject: [PATCH 3/4] Updated generator bundler dependency to >= 1.0 --- features/support/env.rb | 2 +- lib/juwelier/generator.rb | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/features/support/env.rb b/features/support/env.rb index c888fc06..9ba6bf0b 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -17,7 +17,7 @@ require 'test/unit/assertions' World(Test::Unit::Assertions) -require 'test_construct' +require 'construct' World(Construct::Helpers) def yank_task_info(content, task) diff --git a/lib/juwelier/generator.rb b/lib/juwelier/generator.rb index 428465c9..edb358db 100644 --- a/lib/juwelier/generator.rb +++ b/lib/juwelier/generator.rb @@ -113,7 +113,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"] @@ -154,7 +154,7 @@ def run end def constant_name - self.project_name.underscore.camel + self.project_name.snake.camel end def extension_name @@ -208,7 +208,10 @@ def create_files output_template_in_target '.gitignore' output_template_in_target 'Rakefile' - output_template_in_target 'Gemfile' if should_use_bundler + if should_use_bundler + output_template_in_target 'Gemfile' + system 'bundle install' + end output_template_in_target 'LICENSE.txt' output_template_in_target "README.#{use_readme_format}" output_template_in_target '.document' From 2bbcbc62d05f507ac2b913870ffc2562c67634b4 Mon Sep 17 00:00:00 2001 From: Andy Maleh Date: Mon, 4 Jan 2021 21:29:38 -0500 Subject: [PATCH 4/4] RVM support and rspec --init support --- .gitignore | 8 +++- Rakefile | 2 +- juwelier.gemspec | 56 ++++++++++----------------- lib/juwelier/generator.rb | 51 +++++++++++++++++++----- lib/juwelier/generator/options.rb | 4 ++ lib/juwelier/generator/rspec_mixin.rb | 2 +- lib/juwelier/templates/.ruby-gemset | 1 + lib/juwelier/templates/.ruby-version | 2 + lib/juwelier/version.rb | 4 +- test/test_helper.rb | 2 +- 10 files changed, 80 insertions(+), 52 deletions(-) create mode 100644 lib/juwelier/templates/.ruby-gemset create mode 100644 lib/juwelier/templates/.ruby-version 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 edb358db..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] @@ -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 @@ -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 @@ -208,13 +211,12 @@ def create_files output_template_in_target '.gitignore' output_template_in_target 'Rakefile' - if should_use_bundler - output_template_in_target 'Gemfile' - system 'bundle install' - end + output_template_in_target 'Gemfile' if should_use_bundler 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 @@ -300,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 9df88510..020c5f1b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -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