middleman-packager 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9a52d8287fb8999ac8b6c736562f70dc78e59cd2
4
+ data.tar.gz: c39183e5fa18da3e80173c879ed82bd33d37e038
5
+ SHA512:
6
+ metadata.gz: 1cede87adfb94840fec678b7b6e35911eada116ee6efdbc4af22499cae6a703e449f3dd26daf2268ba058bea31424e437a5aa4c84185b6ab45b93c963bc0245a
7
+ data.tar.gz: 7caf9a4d65c65a4bb25ee15984021f033a3300340307cad298f4d441b785510cc50e1f94508af3bdae68bb1446fe07824524017af0fd2efeec358cf9bd8c8510
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ # Ignore bundler lock file
2
+ /Gemfile.lock
3
+
4
+ # Ignore pkg folder
5
+ /pkg
6
+
7
+ # Ignore coverage folder
8
+ /coverage
data/Gemfile ADDED
@@ -0,0 +1,23 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "middleman-core", ">= 3.0.0"
4
+ gem "multi_json" #, "~>1.8.2"
5
+
6
+ # Specify your gem's dependencies in middleman-packager.gemspec
7
+ gemspec
8
+
9
+
10
+ group :development do
11
+ gem "rake"
12
+ gem "rdoc"
13
+ gem "yard"
14
+ end
15
+
16
+ group :test do
17
+ gem "compass"
18
+ gem "cucumber"
19
+ gem "fivemat"
20
+ gem "aruba"
21
+ gem "rspec"
22
+ gem "simplecov"
23
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Spencer Rhodes <spencer at spencer dash rhodes dot com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,98 @@
1
+ Middleman Packager
2
+ ------------------
3
+
4
+ This is a [Middleman](http://www.middlemanapp.com) extension to easily package up your build into a tgz, zip, or other file archiving mechanism.
5
+
6
+ This extension is inspired by the excellent [Middleman Deploy](https://github.com/tvaughan/middleman-deploy) extension.
7
+
8
+ ## Requirements
9
+ [Middleman](http://www.middlemanapp.com) 3.0.0+
10
+
11
+ ## Installation
12
+
13
+ Add this to your Middleman project's Gemfile
14
+
15
+ ```ruby
16
+ gem "middleman-packager"
17
+ ```
18
+ and run
19
+
20
+ ```bash
21
+ $ bundle install
22
+ ```
23
+
24
+ ## Usage
25
+ Activate the extension in your `config.rb` file:
26
+
27
+ ```ruby
28
+ activate :packager
29
+ ```
30
+
31
+ ```bash
32
+ $ middleman build [--clean]
33
+ $ middleman package [-b]
34
+ ```
35
+
36
+ _-b_ : pre-build before packaging
37
+
38
+ _Note: `pack`, `archive`, and `zip` are aliases for `package`._
39
+ ### Config examples
40
+ ###### Block config
41
+
42
+ ```ruby
43
+ \# Use zip instead of tar+gzip
44
+ activate :packager do |pack|
45
+ pack.package_mask = "build-{ts:%Y-%m-%d}.tgz"
46
+ pack.package_cmd_mask = "zip -r {to} {from}"
47
+ end
48
+ ```
49
+
50
+ ###### Inline config
51
+
52
+ ```ruby
53
+ \# Custom filename mask
54
+ activate :packager,
55
+ :package_mask => "../packages/my_project_{ts}.tgz"</code></pre>
56
+ ```
57
+
58
+ ## Options
59
+ Default options:
60
+
61
+ ###### `:package_source` _(default: [middleman build directory])_
62
+
63
+ The source file/folder of your package.
64
+
65
+ ###### `:package_mask` _(default: "build-{ts}.tgz")_
66
+
67
+ A filename mask to use as the target archive file. Accepts relative or absolute file paths, though relative is recommended!
68
+
69
+ Use `{ts[:time_format_string]}` for the generated timestamp. Optionally, you can pass a standard [Ruby Time formatting string](http://www.ruby-doc.org/core-2.0.0/Time.html#method-i-strftime) to control the timestamp output, or leave off the `:stuff` for a general timestamp.
70
+
71
+ Examples:
72
+ ```ruby
73
+ "build-{ts}.tgz" # => "build-1384121876.tgz"
74
+ "build-{ts:%Y-%m-%d}.tgz" # => "build-2013-11-10.tgz"
75
+ ```
76
+
77
+ ###### `:package_cmd_mask` _(default: "tar -zcf {to} {from}")_
78
+
79
+ The command and file sequence mask to use. This mask allows you to easily change your archiving tool if you don't want to use tar. _{to}_ is replaced with the compiled `:package_mask` value, and _{from}_ is replaced with the `:package_source` value. Just make sure you change the `:package_mask` option accordingly!
80
+
81
+ <!--
82
+ ###### `:auto_package` _(default: false)_
83
+
84
+ Should we auto-package after running a build?
85
+ _Note: This is not yet working_
86
+
87
+ ###### `:pre_build` _(default: false)_
88
+
89
+ Run a build before creating a package?
90
+ _Note: This is not yet working, though passing the `-b` parameter to the package command does work._
91
+ -->
92
+
93
+ ## ToDo
94
+
95
+ - Get `:pre_build` working
96
+ - Get `:auto_package` working
97
+ - Run this in `:build` mode rather than `:development` mode (mm-server)
98
+ - Other `:development` extensions are running unnecessarily.
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'cucumber/rake/task'
5
+
6
+ Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
7
+ t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
8
+ end
9
+
10
+ require 'rake/clean'
11
+
12
+ task :test => ["cucumber"]
13
+
14
+ task :default => :test
@@ -0,0 +1,6 @@
1
+ require "simplecov"
2
+ SimpleCov.start
3
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
4
+ require "middleman-core"
5
+ require "middleman-core/step_definitions"
6
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-packager')
@@ -0,0 +1,8 @@
1
+ require "middleman-core"
2
+
3
+ require "middleman-packager/commands"
4
+
5
+ ::Middleman::Extensions.register(:packager) do
6
+ require "middleman-packager/extension"
7
+ ::Middleman::Packager
8
+ end
@@ -0,0 +1,100 @@
1
+ require "middleman-core/cli"
2
+
3
+ require "middleman-packager/extension"
4
+ require "middleman-packager/pkg-info"
5
+
6
+ module Middleman
7
+ module Cli
8
+
9
+ # This class provides a "package" command for the middleman CLI.
10
+ class Packager < Thor
11
+ include Thor::Actions
12
+
13
+ check_unknown_options!
14
+
15
+ namespace :package
16
+
17
+ # Tell Thor to exit with a nonzero exit code on failure
18
+ def self.exit_on_failure?
19
+ true
20
+ end
21
+
22
+ desc "package [options]", Middleman::Packager::TAGLINE
23
+ method_option "build_before",
24
+ :type => :boolean,
25
+ :aliases => "-b",
26
+ :desc => "Run `middleman build` before the package step"
27
+
28
+ def package
29
+ # puts "package running"
30
+ if options.has_key? "build_before"
31
+ build_before = options.build_before
32
+ else
33
+ build_before = self.options.build_before
34
+ end
35
+ if build_before
36
+ # http://forum.middlemanapp.com/t/problem-with-the-build-task-in-an-extension
37
+ bundler = File.exist?('Gemfile')
38
+ run("#{bundler ? 'bundle exec ' : ''}middleman build") || exit(1)
39
+ end
40
+ send("package_run")
41
+ end
42
+
43
+ protected
44
+
45
+ def print_usage_and_die(message)
46
+ # raise Error, "\nERROR: " + message + "\n" + <<EOF\n EOF
47
+ raise Error, "\nERROR: " + message + "\n"
48
+ end # of print_usage_and_dir
49
+
50
+ def inst
51
+ ::Middleman::Application.server.inst
52
+ end
53
+
54
+ def opts
55
+ opts = nil
56
+
57
+ begin
58
+ opts = inst.pkgopts || {}
59
+ rescue NoMethodError
60
+ print_usage_and_die "You need to activate the #{:packager.inspect} extension in config.rb."
61
+ end
62
+
63
+ if (!opts[:package_source])
64
+ print_usage_and_die "The package extension requires you to set a source file or directory."
65
+ end
66
+
67
+ opts
68
+ end
69
+
70
+ def package_run
71
+ # http://www.ruby-doc.org/core-2.0.0/Time.html#method-i-strftime
72
+ opts = self.opts
73
+ time = Time.now()
74
+ timestamp = time.to_i
75
+ if opts[:package_mask].match(/{(ts|timestamp):.+}/)
76
+ format = (opts[:package_mask].match(/{(ts|timestamp):(?<format>.+)}/))[:format]
77
+ timestamp = time.strftime(format)
78
+ end
79
+ file_name = (opts[:package_mask]).gsub(/{(ts|timestamp):?.*}/i, "#{timestamp}")
80
+ command = (opts[:package_cmd_mask])
81
+ .gsub(/\{from\}/, "#{opts[:package_source]}")
82
+ .gsub(/\{to\}/, "#{file_name}")
83
+ run(command)
84
+ if ($?.success?)
85
+ # puts "== Your build package is: #{file_name}"
86
+ else
87
+ print_usage_and_die "There was a problem creating your build package. Please check your configuration."
88
+ end
89
+ end
90
+
91
+ end
92
+
93
+ Base.map({
94
+ "pack" => "package",
95
+ "zip" => "package",
96
+ "archive" => "package"
97
+ })
98
+
99
+ end
100
+ end
@@ -0,0 +1,48 @@
1
+ # Require core library
2
+ require "middleman-core"
3
+
4
+ # Extension namespace
5
+ module Middleman
6
+ module Packager
7
+
8
+ class PkgOptions < Struct.new(:package_source, :package_mask, :package_cmd_mask, :auto_package, :build_before); end
9
+
10
+ class << self
11
+
12
+ def pkgopts
13
+ @@pkgopts
14
+ end
15
+
16
+ def registered(app, options_hash={}, &block)
17
+ # puts "registered() running"
18
+ # Default options for the rsync method.
19
+ defaults = {
20
+ # :build_before => false,
21
+ # :auto_package => false,
22
+ :package_mask => "build-{ts:%Y-%m-%d}.tgz",
23
+ :package_cmd_mask => "tar -zcf {to} {from}",
24
+ :package_source => app.config[:build_dir]
25
+ }
26
+ # TODO: Refactor this with merge!
27
+ opts = defaults.merge(options_hash)
28
+ # opts = PkgOptions.new(options_hash)
29
+ # yield opts if block_given?
30
+
31
+ @@pkgopts = opts
32
+
33
+ app.send :include, Helpers
34
+ end
35
+
36
+ alias :included :registered
37
+
38
+ end
39
+
40
+ module Helpers
41
+ def pkgopts
42
+ ::Middleman::Packager.pkgopts
43
+ end
44
+ end
45
+
46
+
47
+ end
48
+ end
@@ -0,0 +1,7 @@
1
+ module Middleman
2
+ module Packager
3
+ PACKAGE = "middleman-packager"
4
+ VERSION = "0.1.0"
5
+ TAGLINE = "Configurable post-build archiver for Middleman builds."
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ require "middleman-packager"
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "middleman-packager/pkg-info"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = Middleman::Packager::PACKAGE
7
+ s.version = Middleman::Packager::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Spencer Rhodes"]
10
+ s.email = ["spencer at spencer dash rhodes dot com"]
11
+ s.homepage = "http://github.com/oobleck/middleman-packager"
12
+ s.summary = Middleman::Packager::TAGLINE
13
+ s.description = s.summary # Middleman::Packager::TAGLINE
14
+ s.license = "MIT"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # The version of middleman-core your extension depends on
22
+ s.add_runtime_dependency("middleman-core", [">= 3.0.0"])
23
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: middleman-packager
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Spencer Rhodes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: middleman-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
27
+ description: Configurable post-build archiver for Middleman builds.
28
+ email:
29
+ - spencer at spencer dash rhodes dot com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .gitignore
35
+ - Gemfile
36
+ - LICENSE
37
+ - README.md
38
+ - Rakefile
39
+ - features/support/env.rb
40
+ - lib/middleman-packager.rb
41
+ - lib/middleman-packager/commands.rb
42
+ - lib/middleman-packager/extension.rb
43
+ - lib/middleman-packager/pkg-info.rb
44
+ - lib/middleman_extension.rb
45
+ - middleman-packager.gemspec
46
+ homepage: http://github.com/oobleck/middleman-packager
47
+ licenses:
48
+ - MIT
49
+ metadata: {}
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubyforge_project:
66
+ rubygems_version: 2.0.5
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: Configurable post-build archiver for Middleman builds.
70
+ test_files:
71
+ - features/support/env.rb