From 0be82d371e8bdb0bf6aa999882a37ab822f4869f Mon Sep 17 00:00:00 2001 From: Thomas Reynolds Date: Wed, 2 May 2012 15:59:36 -0700 Subject: [PATCH] new extension cli --- middleman-core/features/cli_extension.feature | 13 +++++ .../{cli.feature => cli_init.feature} | 0 middleman-core/lib/middleman-core/cli.rb | 2 + .../lib/middleman-core/cli/extension.rb | 36 ++++++++++++++ .../templates/extension/Gemfile | 4 ++ .../templates/extension/Rakefile | 12 +++++ .../extension/features/support/env.rb | 4 ++ .../templates/extension/gemspec | 24 +++++++++ .../templates/extension/lib/lib.rb | 49 +++++++++++++++++++ .../extension/lib/middleman_extension.rb | 1 + 10 files changed, 145 insertions(+) create mode 100644 middleman-core/features/cli_extension.feature rename middleman-core/features/{cli.feature => cli_init.feature} (100%) create mode 100644 middleman-core/lib/middleman-core/cli/extension.rb create mode 100644 middleman-core/lib/middleman-core/templates/extension/Gemfile create mode 100644 middleman-core/lib/middleman-core/templates/extension/Rakefile create mode 100644 middleman-core/lib/middleman-core/templates/extension/features/support/env.rb create mode 100644 middleman-core/lib/middleman-core/templates/extension/gemspec create mode 100644 middleman-core/lib/middleman-core/templates/extension/lib/lib.rb create mode 100644 middleman-core/lib/middleman-core/templates/extension/lib/middleman_extension.rb diff --git a/middleman-core/features/cli_extension.feature b/middleman-core/features/cli_extension.feature new file mode 100644 index 00000000..f648e3f2 --- /dev/null +++ b/middleman-core/features/cli_extension.feature @@ -0,0 +1,13 @@ +Feature: Middleman New Extension CLI + + Scenario: Create a new extension scaffold + Given I run `middleman extension my-extension-library` + Then the exit status should be 0 + When I cd to "my-extension-library" + Then the following files should exist: + | Gemfile | + | Rakefile | + | my-extension-library.gemspec | + | features/support/env.rb | + | lib/middleman_extension.rb | + | lib/my-extension-library.rb | diff --git a/middleman-core/features/cli.feature b/middleman-core/features/cli_init.feature similarity index 100% rename from middleman-core/features/cli.feature rename to middleman-core/features/cli_init.feature diff --git a/middleman-core/lib/middleman-core/cli.rb b/middleman-core/lib/middleman-core/cli.rb index 50a70942..f0439a64 100644 --- a/middleman-core/lib/middleman-core/cli.rb +++ b/middleman-core/lib/middleman-core/cli.rb @@ -8,6 +8,7 @@ module Middleman::Cli module Cli autoload :Build, "middleman-core/cli/build" autoload :Init, "middleman-core/cli/init" + autoload :Extension, "middleman-core/cli/extension" autoload :Server, "middleman-core/cli/server" end @@ -73,5 +74,6 @@ end # Include the core CLI items require "middleman-core/cli/init" +require "middleman-core/cli/extension" require "middleman-core/cli/server" require "middleman-core/cli/build" \ No newline at end of file diff --git a/middleman-core/lib/middleman-core/cli/extension.rb b/middleman-core/lib/middleman-core/cli/extension.rb new file mode 100644 index 00000000..4e2efc1d --- /dev/null +++ b/middleman-core/lib/middleman-core/cli/extension.rb @@ -0,0 +1,36 @@ +# CLI Module +module Middleman::Cli + + # A thor task for creating new projects + class Extension < Thor + include Thor::Actions + + check_unknown_options! + + namespace :extension + + # Required path for the new project to be generated + argument :name, :type => :string + + desc "extension NAME [options]", "Create Middleman extension scaffold NAME" + + # The extension task + # @param [String] name + def extension + template "Rakefile", File.join(name, "Rakefile") + template "gemspec", File.join(name, "#{name}.gemspec") + template "Gemfile", File.join(name, "Gemfile") + template "lib/middleman_extension.rb", File.join(name, "lib", "middleman_extension.rb") + template "lib/lib.rb", File.join(name, "lib", "#{name}.rb") + template "features/support/env.rb", File.join(name, "features", "support", "env.rb") + empty_directory File.join(name, "fixtures") + end + + # Template files are relative to this file + # @return [String] + def self.source_root + File.join(File.dirname(__FILE__), "..", "templates", "extension") + end + + end +end diff --git a/middleman-core/lib/middleman-core/templates/extension/Gemfile b/middleman-core/lib/middleman-core/templates/extension/Gemfile new file mode 100644 index 00000000..7081b154 --- /dev/null +++ b/middleman-core/lib/middleman-core/templates/extension/Gemfile @@ -0,0 +1,4 @@ +source :rubygems + +# Specify your gem's dependencies in <%= name %>.gemspec +gemspec \ No newline at end of file diff --git a/middleman-core/lib/middleman-core/templates/extension/Rakefile b/middleman-core/lib/middleman-core/templates/extension/Rakefile new file mode 100644 index 00000000..e683baf3 --- /dev/null +++ b/middleman-core/lib/middleman-core/templates/extension/Rakefile @@ -0,0 +1,12 @@ +require 'bundler' +Bundler::GemHelper.install_tasks + +require 'cucumber/rake/task' + +Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t| + t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}" +end + +require 'rake/clean' + +task :test => ["cucumber"] \ No newline at end of file diff --git a/middleman-core/lib/middleman-core/templates/extension/features/support/env.rb b/middleman-core/lib/middleman-core/templates/extension/features/support/env.rb new file mode 100644 index 00000000..71eeb29d --- /dev/null +++ b/middleman-core/lib/middleman-core/templates/extension/features/support/env.rb @@ -0,0 +1,4 @@ +PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__))) +require "middleman-core" +require "middleman-core/step_definitions" +require File.join(PROJECT_ROOT_PATH, 'lib', '<%= name %>') \ No newline at end of file diff --git a/middleman-core/lib/middleman-core/templates/extension/gemspec b/middleman-core/lib/middleman-core/templates/extension/gemspec new file mode 100644 index 00000000..f0a27cb9 --- /dev/null +++ b/middleman-core/lib/middleman-core/templates/extension/gemspec @@ -0,0 +1,24 @@ +# -*- encoding: utf-8 -*- +$:.push File.expand_path("../lib", __FILE__) + +Gem::Specification.new do |s| + s.name = "<%= name %>" + s.version = "0.0.1" + s.platform = Gem::Platform::RUBY + # s.authors = ["Your Name"] + # s.email = ["email@example.com"] + # s.homepage = "http://example.com" + # s.summary = %q{A short summary of your extension} + # s.description = %q{A longer description of your extension} + + s.files = `git ls-files`.split("\n") + s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") + s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } + s.require_paths = ["lib"] + + # The version of middleman-core your extension depends on + s.add_runtime_dependency("middleman-core", [">= 3.0.0.beta.2"]) + + # Additional dependencies + # s.add_runtime_dependency("gem-name", "gem-version") +end diff --git a/middleman-core/lib/middleman-core/templates/extension/lib/lib.rb b/middleman-core/lib/middleman-core/templates/extension/lib/lib.rb new file mode 100644 index 00000000..c0d2ad00 --- /dev/null +++ b/middleman-core/lib/middleman-core/templates/extension/lib/lib.rb @@ -0,0 +1,49 @@ +# Require core library +require "middleman-core" + +# Extension namespace +module MyExtension + class << self + + # Called when user `activate`s your extension + def registered(app, options={}) + # Setup extension-specific config + app.set :config_variable, false + + # Include class methods + # app.extend ClassMethods + + # Include instance methods + # app.send :include, InstanceMethods + + app.after_configuration do + # Do something + + # config_variable is now either the default or the user's + # setting from config.rb + end + end + alias :included :registered + end + + # module ClassMethods + # def a_class_method + # end + # end + + # module InstanceMethods + # def an_instance_method + # end + # end + +end + + +# Register extensions which can be activated +# Make sure we have the version of Middleman we expect +# ::Middleman::Extensions.register(:extension_name, ">= 3.0.0.beta.2") do +# +# # Return the extension module +# ::MyExtension +# +# end \ No newline at end of file diff --git a/middleman-core/lib/middleman-core/templates/extension/lib/middleman_extension.rb b/middleman-core/lib/middleman-core/templates/extension/lib/middleman_extension.rb new file mode 100644 index 00000000..9db31d18 --- /dev/null +++ b/middleman-core/lib/middleman-core/templates/extension/lib/middleman_extension.rb @@ -0,0 +1 @@ +require "<%= name %>" \ No newline at end of file