merb-freezer 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +20 -0
- data/README +4 -0
- data/Rakefile +46 -0
- data/TODO +0 -0
- data/bin/frozen-merb +59 -0
- data/lib/merb-freezer.rb +21 -0
- data/lib/merb-freezer/freezer.rb +76 -0
- data/lib/merb-freezer/freezer_mode.rb +85 -0
- data/lib/merb-freezer/merbtasks.rb +21 -0
- data/spec/merb-freezer_spec.rb +67 -0
- data/spec/spec_helper.rb +3 -0
- metadata +65 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008 Matt Aimonetti
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
|
4
|
+
PLUGIN = "merb-freezer"
|
5
|
+
NAME = "merb-freezer"
|
6
|
+
VERSION = "0.9.3"
|
7
|
+
AUTHOR = "Matt Aimonetti"
|
8
|
+
EMAIL = "mattaimonetti@gmail.com"
|
9
|
+
HOMEPAGE = "http://www.merbivore.com"
|
10
|
+
SUMMARY = "Merb plugin that let's you freeze Merb"
|
11
|
+
|
12
|
+
spec = Gem::Specification.new do |s|
|
13
|
+
s.name = NAME
|
14
|
+
s.version = VERSION
|
15
|
+
s.platform = Gem::Platform::RUBY
|
16
|
+
s.has_rdoc = true
|
17
|
+
s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
|
18
|
+
s.summary = SUMMARY
|
19
|
+
s.description = s.summary
|
20
|
+
s.author = AUTHOR
|
21
|
+
s.email = EMAIL
|
22
|
+
s.homepage = HOMEPAGE
|
23
|
+
s.require_path = 'lib'
|
24
|
+
s.bindir = "bin"
|
25
|
+
s.executables = %w( frozen-merb )
|
26
|
+
s.autorequire = PLUGIN
|
27
|
+
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec}/**/*")
|
28
|
+
end
|
29
|
+
|
30
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
31
|
+
pkg.gem_spec = spec
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "install merb-freezer"
|
35
|
+
task :install => [:package] do
|
36
|
+
sh %{sudo gem install pkg/#{NAME}-#{VERSION} --no-update-sources}
|
37
|
+
end
|
38
|
+
|
39
|
+
namespace :jruby do
|
40
|
+
|
41
|
+
desc "Run :package and install the resulting .gem with jruby"
|
42
|
+
task :install => :package do
|
43
|
+
sh %{#{SUDO} jruby -S gem install pkg/#{NAME}-#{Merb::VERSION}.gem --no-rdoc --no-ri}
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/TODO
ADDED
File without changes
|
data/bin/frozen-merb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
root = nil
|
4
|
+
%w[-m --merb-root].detect { |o| root = ARGV.index(o) }
|
5
|
+
__DIR__ = root ? ARGV[root+1] : Dir.getwd
|
6
|
+
framework = File.join(__DIR__,"framework")
|
7
|
+
|
8
|
+
# load merb from the framework folder
|
9
|
+
if File.directory?(framework)
|
10
|
+
puts "Running from frozen framework"
|
11
|
+
core = File.join(framework,"merb-core")
|
12
|
+
if File.directory?(core)
|
13
|
+
puts "using merb-core from #{core}"
|
14
|
+
$:.unshift File.join(core,"lib")
|
15
|
+
end
|
16
|
+
more = File.join(framework,"merb-more")
|
17
|
+
if File.directory?(more)
|
18
|
+
Dir.new(more).select {|d| d =~ /merb-/}.each do |d|
|
19
|
+
$:.unshift File.join(more,d,'lib')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
plugins = File.join(framework,"merb-plugins")
|
23
|
+
if File.directory?(plugins)
|
24
|
+
Dir.new(plugins).select {|d| d =~ /merb_/}.each do |d|
|
25
|
+
$:.unshift File.join(plugins,d,'lib')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
require "merb-core/core_ext/kernel"
|
29
|
+
require "merb-core/core_ext/rubygems"
|
30
|
+
else
|
31
|
+
# load from the gems folder
|
32
|
+
gem = Dir["./gems/gems/merb-core-*"].last
|
33
|
+
if gem
|
34
|
+
require gem + "/lib/merb-core/core_ext/kernel"
|
35
|
+
require gem + "/lib/merb-core/core_ext/rubygems"
|
36
|
+
|
37
|
+
Gem.clear_paths
|
38
|
+
Gem.path.unshift(__DIR__+"/gems")
|
39
|
+
else
|
40
|
+
puts "Can't run frozen Merb from framework/ and/or gems/ please freeze Merb"
|
41
|
+
puts "Merb will try to start using the system gems"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# load submodule gems
|
46
|
+
gem_submodules_dir = File.join(__DIR__,"gems/submodules")
|
47
|
+
if File.directory?(gem_submodules_dir)
|
48
|
+
Dir["#{gem_submodules_dir}/*"].each do |dir|
|
49
|
+
$:.unshift File.join(dir,"lib")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
require 'merb-core'
|
54
|
+
unless %w[-a --adapter -i --irb-console -r --script-runner].any? { |o| ARGV.index(o) }
|
55
|
+
ARGV.push *%w[-a mongrel]
|
56
|
+
end
|
57
|
+
|
58
|
+
Merb.frozen! if (File.directory?(framework) || gem)
|
59
|
+
Merb.start
|
data/lib/merb-freezer.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'merb-freezer/freezer'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
# make sure we're running inside Merb
|
5
|
+
if defined?(Merb::Plugins)
|
6
|
+
|
7
|
+
# Merb gives you a Merb::Plugins.config hash...feel free to put your stuff in your piece of it
|
8
|
+
Merb::Plugins.config[:merb_freezer] = {
|
9
|
+
:merb_best_framework_ever => true
|
10
|
+
}
|
11
|
+
|
12
|
+
Merb::BootLoader.before_app_loads do
|
13
|
+
# require code that must be loaded before the application
|
14
|
+
end
|
15
|
+
|
16
|
+
Merb::BootLoader.after_app_loads do
|
17
|
+
# code that can be required after the application loads
|
18
|
+
end
|
19
|
+
|
20
|
+
Merb::Plugins.add_rakefiles "merb-freezer/merbtasks"
|
21
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/freezer_mode'
|
2
|
+
|
3
|
+
class Freezer
|
4
|
+
include FreezerMode
|
5
|
+
|
6
|
+
attr_reader :mode, :component, :update
|
7
|
+
attr_accessor :freezer_dir
|
8
|
+
|
9
|
+
@@components =
|
10
|
+
{
|
11
|
+
"core" => "git://github.com/wycats/merb-core.git",
|
12
|
+
"more" => "git://github.com/wycats/merb-more.git",
|
13
|
+
"plugins" => "git://github.com/wycats/merb-plugins.git"
|
14
|
+
}
|
15
|
+
|
16
|
+
@@framework_dir = File.join(Dir.pwd, "framework")
|
17
|
+
@@gems_dir = File.join(Dir.pwd, "gems")
|
18
|
+
|
19
|
+
# Returns the components to freeze
|
20
|
+
# a class variable is used so we could decide to add a setter and support custom components
|
21
|
+
def self.components
|
22
|
+
@@components
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.framework_dir
|
26
|
+
@@framework_dir
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.gems_dir
|
30
|
+
@@gems_dir
|
31
|
+
end
|
32
|
+
|
33
|
+
# Freezes a component
|
34
|
+
#
|
35
|
+
# ==== Parameters
|
36
|
+
# component<String>::
|
37
|
+
# The component to freeze, it needs to be defined in @@components
|
38
|
+
# update<Boolean>:: An optional value to tell the freezer to update the previously frozen or not, this will default to false
|
39
|
+
# mode<String>:: An optional value to tell the freezer what freezer mode to use (submodules or rubygems), this will default to submodules
|
40
|
+
#
|
41
|
+
def self.freeze(component, update, mode)
|
42
|
+
new(component, update, mode).freeze
|
43
|
+
end
|
44
|
+
|
45
|
+
# Initializes a Freeze instance
|
46
|
+
#
|
47
|
+
# ==== Parameters
|
48
|
+
# component<String>::
|
49
|
+
# The component to freeze, it needs to be defined in @@components
|
50
|
+
# update<Boolean>:: An optional value to tell the freezer to update the previously frozen or not, this will default to false
|
51
|
+
# mode<String>:: An optional value to tell the freezer what freezer mode to use (submodules or rubygems), this will default to submodules
|
52
|
+
#
|
53
|
+
def initialize(component, update=false, mode=nil)
|
54
|
+
@component = Freezer.components.keys.include?(component) ? "merb-" + component : component
|
55
|
+
@update = update
|
56
|
+
if (mode.nil? && framework_component?) || component.match(/^git:\/\//) || mode == 'submodules'
|
57
|
+
@mode = 'submodules'
|
58
|
+
else
|
59
|
+
@mode = 'rubygems'
|
60
|
+
end
|
61
|
+
@freezer_dir = framework_component? ? Freezer.framework_dir : Freezer.gems_dir
|
62
|
+
end
|
63
|
+
|
64
|
+
# Calls the freezer mode on the component
|
65
|
+
def freeze
|
66
|
+
puts "Ice, Ice Baby!"
|
67
|
+
puts "freezing mode: #{@mode}"
|
68
|
+
send "#{@mode}_freeze"
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns true if the gem is part of the Merb components
|
72
|
+
def framework_component?
|
73
|
+
Freezer.components.keys.include?(@component.gsub("merb-", ""))
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'find'
|
2
|
+
module FreezerMode
|
3
|
+
|
4
|
+
def sudo
|
5
|
+
windows = (PLATFORM =~ /win32|cygwin/) rescue nil
|
6
|
+
sudo = windows ? "" : "sudo"
|
7
|
+
end
|
8
|
+
|
9
|
+
def gitmodules
|
10
|
+
File.join(Dir.pwd, ".gitmodules")
|
11
|
+
end
|
12
|
+
|
13
|
+
# Uses the Git submodules to freeze a component
|
14
|
+
#
|
15
|
+
def submodules_freeze
|
16
|
+
# Ensure that required git commands are available
|
17
|
+
%w(git-pull git-submodule).each do |bin|
|
18
|
+
next if in_path?(bin)
|
19
|
+
$stderr.puts "ERROR: #{bin} must be avaible in PATH - you might want to freeze using MODE=rubygems"
|
20
|
+
exit 1
|
21
|
+
end
|
22
|
+
|
23
|
+
# Create directory to receive the frozen components
|
24
|
+
create_freezer_dir(freezer_dir)
|
25
|
+
|
26
|
+
if managed?(@component)
|
27
|
+
puts "#{@component} seems to be already managed by git-submodule."
|
28
|
+
if @update
|
29
|
+
puts "Trying to update #{@component} ..."
|
30
|
+
`cd #{freezer_dir}/#{@component} && git-pull`
|
31
|
+
else
|
32
|
+
puts "you might want to call this rake task using UPDATE=true if you wish to update the frozen gems using this task"
|
33
|
+
end
|
34
|
+
else
|
35
|
+
puts "Creating submodule for #{@component} ..."
|
36
|
+
if framework_component?
|
37
|
+
`cd #{Dir.pwd} & git-submodule --quiet add #{Freezer.components[@component.gsub("merb-", '')]} #{File.basename(freezer_dir)}/#{@component}`
|
38
|
+
else
|
39
|
+
`cd #{Dir.pwd} & git-submodule --quiet add #{@component} gems/submodules/#{@component.match(/.*\/(.*)\..{3}$/)[1]}`
|
40
|
+
end
|
41
|
+
if $?.success?
|
42
|
+
`git-submodule init`
|
43
|
+
else
|
44
|
+
# Should this instead be a raise?
|
45
|
+
$stderr.puts("ERROR: unable to create submodule for #{@component} - you might want to freeze using MODE=rubygems")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Uses rubygems to freeze the components locally
|
51
|
+
#
|
52
|
+
def rubygems_freeze
|
53
|
+
create_freezer_dir(freezer_dir)
|
54
|
+
action = update ? 'update' : 'install'
|
55
|
+
puts "#{action} #{@component} and dependencies from rubygems"
|
56
|
+
`#{sudo} gem #{action} #{@component} --no-rdoc --no-ri -i #{framework_component? ? 'framework' : 'gems'}`
|
57
|
+
end
|
58
|
+
|
59
|
+
def create_freezer_dir(path)
|
60
|
+
unless File.directory?(path)
|
61
|
+
puts "Creating freezer directory ..."
|
62
|
+
FileUtils.mkdir_p(path)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
protected
|
67
|
+
|
68
|
+
# returns true if submodules are used
|
69
|
+
def in_submodule?(component)
|
70
|
+
return false unless File.exists?(gitmodules)
|
71
|
+
# File.read(gitmodules) =~ %r![submodule "#{freezer_dir}/#{component}"]!
|
72
|
+
File.read(gitmodules).match(%r!#{freezer_dir}/#{component}!)
|
73
|
+
end
|
74
|
+
|
75
|
+
# returns true if the component is in a submodule
|
76
|
+
def managed?(component)
|
77
|
+
File.directory?(File.join(freezer_dir, component)) || in_submodule?(component)
|
78
|
+
end
|
79
|
+
|
80
|
+
def in_path?(bin)
|
81
|
+
`which #{bin}`
|
82
|
+
!$?.nil? && $?.success?
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../merb-freezer"
|
2
|
+
|
3
|
+
task :freeze => Freezer.components.keys.map { |component| "freeze:#{component}" }
|
4
|
+
namespace :freeze do
|
5
|
+
Freezer.components.each do |component, git_repository|
|
6
|
+
desc "Freeze merb-#{component} from #{git_repository} or rubygems - use UPDATE=true to update a frozen component. By default this task uses git submodules. To freeze the latest gems versions use MODE=rubygems"
|
7
|
+
task component do
|
8
|
+
Freezer.freeze(component, ENV["UPDATE"], ENV["MODE"])
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :freeze do
|
14
|
+
|
15
|
+
desc "freeze a gem locally. Usage: rake freeze:gem GEM=git://github.com/myobie/merb_paginate.git "
|
16
|
+
task :gem do
|
17
|
+
raise "Please specify the gem you want to freeze using GEM=git://github.com/myobie/merb_paginate.git or GEM=merbful_authentication" unless ENV["GEM"]
|
18
|
+
Freezer.freeze(ENV["GEM"], ENV["UPDATE"], ENV["MODE"])
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "merb-freezer" do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
FileUtils.rm_rf('framework')
|
7
|
+
FileUtils.rm_rf('gems')
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
FileUtils.rm_rf('framework')
|
12
|
+
FileUtils.rm_rf('gems')
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have a reference to all the git repos" do
|
16
|
+
Freezer.components.should be_an_instance_of(Hash)
|
17
|
+
component_repos = Freezer.components
|
18
|
+
["core", "more", "plugins"].each do |component|
|
19
|
+
component_repos[component].should match(/git:\/\/.+/)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should have a reference to the framework dir" do
|
24
|
+
Freezer.framework_dir.should_not be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should have a reference to the gems dir" do
|
28
|
+
Freezer.gems_dir.should_not be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should have a reference to the component freezing dir" do
|
32
|
+
mr_freeze = Freezer.new('core')
|
33
|
+
mr_freeze.freezer_dir.should == Freezer.framework_dir
|
34
|
+
|
35
|
+
mrs_freeze = Freezer.new('matt-mojo')
|
36
|
+
mrs_freeze.freezer_dir.should == Freezer.gems_dir
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should be able to freeze a component using rubygems" do
|
40
|
+
mr_freeze = Freezer.new('core', nil, 'rubygems')
|
41
|
+
mr_freeze.mode.should == 'rubygems'
|
42
|
+
mr_freeze.freeze
|
43
|
+
File.exists?('framework').should be_true
|
44
|
+
File.exists?('framework/gems').should be_true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should be able to freeze a component using submodules" do
|
48
|
+
mr_freeze = Freezer.new('core')
|
49
|
+
mr_freeze.framework_component?.should be_true
|
50
|
+
mr_freeze.mode.should == 'submodules'
|
51
|
+
# can't be tested since it needs to run from the toplevel of the working tree and I don't want to mess up the rest of the gems by accident
|
52
|
+
# mr_freeze.freeze.should_not raise_error
|
53
|
+
# File.exists?('framework/merb-core').should be_true
|
54
|
+
# File.exists?('.gitmodules').should be_true
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should be able to freeze a a non merb component gem using rubygems" do
|
58
|
+
mr_freeze = Freezer.new('googlecharts')
|
59
|
+
mr_freeze.framework_component?.should be_false
|
60
|
+
mr_freeze.component.should == 'googlecharts'
|
61
|
+
mr_freeze.mode.should == 'rubygems'
|
62
|
+
mr_freeze.freeze
|
63
|
+
File.exists?('gems').should be_true
|
64
|
+
File.exists?('gems/gems/googlecharts-1.1.0').should be_true
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: merb-freezer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Aimonetti
|
8
|
+
autorequire: merb-freezer
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-05-04 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Merb plugin that let's you freeze Merb
|
17
|
+
email: mattaimonetti@gmail.com
|
18
|
+
executables:
|
19
|
+
- frozen-merb
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- LICENSE
|
25
|
+
- TODO
|
26
|
+
files:
|
27
|
+
- LICENSE
|
28
|
+
- README
|
29
|
+
- Rakefile
|
30
|
+
- TODO
|
31
|
+
- lib/merb-freezer
|
32
|
+
- lib/merb-freezer/freezer.rb
|
33
|
+
- lib/merb-freezer/freezer_mode.rb
|
34
|
+
- lib/merb-freezer/merbtasks.rb
|
35
|
+
- lib/merb-freezer.rb
|
36
|
+
- spec/merb-freezer_spec.rb
|
37
|
+
- spec/spec_helper.rb
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://www.merbivore.com
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
56
|
+
version:
|
57
|
+
requirements: []
|
58
|
+
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 1.0.1
|
61
|
+
signing_key:
|
62
|
+
specification_version: 2
|
63
|
+
summary: Merb plugin that let's you freeze Merb
|
64
|
+
test_files: []
|
65
|
+
|