markbates-warp_drive 0.1.0.20090831153601
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 +21 -0
- data/README +3 -0
- data/bin/install_warp_drive +40 -0
- data/bin/warpify +27 -0
- data/lib/tasks/compile.rake +22 -0
- data/lib/warp_drive/boot/method_list.rb +42 -0
- data/lib/warp_drive/boot/migration_override.rb +14 -0
- data/lib/warp_drive/boot/procs.rb +32 -0
- data/lib/warp_drive/boot/rails_init.rb +11 -0
- data/lib/warp_drive/boot/workers.rb +119 -0
- data/lib/warp_drive/boot.rb +13 -0
- data/lib/warp_drive/configure.rb +11 -0
- data/lib/warp_drive/path.rb +45 -0
- data/lib/warp_drive/tasks.rb +4 -0
- data/lib/warp_drive/templates/Rakefile.template +12 -0
- data/lib/warp_drive/templates/lib/%=app%/boot.rb.template +2 -0
- data/lib/warp_drive/templates/lib/%=app%/tasks.rb.template +12 -0
- data/lib/warp_drive/templates/lib/%=app%.rb.template +5 -0
- data/lib/warp_drive/warp_drive_gem_generator.rb +53 -0
- data/lib/warp_drive.rb +23 -0
- metadata +94 -0
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2009 markbates
|
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
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
# adds a warp drive to a rails project
|
4
|
+
|
5
|
+
warp_drive_name = ARGV[0]
|
6
|
+
|
7
|
+
if warp_drive_name.nil?
|
8
|
+
puts "You must specify the name of a warp drive you want to install!"
|
9
|
+
exit(1)
|
10
|
+
end
|
11
|
+
|
12
|
+
rake_file_path = File.join(FileUtils.pwd, 'Rakefile')
|
13
|
+
rake_file = File.read(rake_file_path)
|
14
|
+
env_file_path = File.join(FileUtils.pwd, 'config', 'environment.rb')
|
15
|
+
env_file = File.read(env_file_path)
|
16
|
+
|
17
|
+
if rake_file.match(/require 'warp_drive\/tasks'/) && env_file.match(/require '#{warp_drive_name}\/boot'/)
|
18
|
+
puts 'We have already installed this Warp Drive, so there is nothing to do.'
|
19
|
+
else
|
20
|
+
print 'Please hold while we install your Warp Drive...'
|
21
|
+
|
22
|
+
File.open(rake_file_path, 'a') do |f|
|
23
|
+
f.puts %{
|
24
|
+
begin
|
25
|
+
require '#{warp_drive_name}/tasks'
|
26
|
+
rescue Exception => e
|
27
|
+
puts e.message
|
28
|
+
end
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
File.open(env_file_path, 'w') do |f|
|
33
|
+
f.puts env_file.gsub(%{require File.join(File.dirname(__FILE__), 'boot')}, %{
|
34
|
+
require File.join(File.dirname(__FILE__), 'boot')
|
35
|
+
require '#{warp_drive_name}/boot'
|
36
|
+
})
|
37
|
+
end
|
38
|
+
|
39
|
+
puts 'completed!'
|
40
|
+
end
|
data/bin/warpify
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
# turns a rails project into a warp drive
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
rake_file_path = File.join(FileUtils.pwd, 'Rakefile')
|
7
|
+
rake_file = File.read(rake_file_path)
|
8
|
+
|
9
|
+
unless rake_file.match(/require 'warp_drive\/tasks'/)
|
10
|
+
print 'Please hold we are converting your application to a Warp Drive...'
|
11
|
+
File.open(rake_file_path, 'a') do |f|
|
12
|
+
f.puts %{
|
13
|
+
require 'warp_drive/tasks'
|
14
|
+
|
15
|
+
WarpDrive.configure do |config|
|
16
|
+
# Define your gem spec settings here:
|
17
|
+
config.gem.version = "0.0.1"
|
18
|
+
|
19
|
+
# Add your gem dependencies here:
|
20
|
+
config.dependencies = {'warp_drive' => '>=0.1.0'}
|
21
|
+
end
|
22
|
+
}
|
23
|
+
end
|
24
|
+
puts 'completed!'
|
25
|
+
else
|
26
|
+
puts 'Your application is already a Warp Drive, so there is nothing to do.'
|
27
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :warp_drive do
|
2
|
+
|
3
|
+
task :compile do
|
4
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'warp_drive', 'warp_drive_gem_generator'))
|
5
|
+
require path
|
6
|
+
$genosaurus_output_directory = File.join(pwd, 'tmp', File.basename(pwd))
|
7
|
+
FileUtils.rm_rf($genosaurus_output_directory, :verbose => false)
|
8
|
+
WarpDriveGemGenerator.run('APP' => File.basename(pwd), 'OUT_DIR' => File.join(pwd, 'tmp', File.basename(pwd)))
|
9
|
+
|
10
|
+
sh "cd #{$genosaurus_output_directory}; rake package"
|
11
|
+
FileUtils.rm_rf($genosaurus_output_directory, :verbose => false)
|
12
|
+
# FileUtils.rm_rf(File.join(pwd, 'pkg'), :verbose => true)
|
13
|
+
# mv File.join($genosaurus_output_directory, 'pkg'), File.join(pwd, 'pkg')
|
14
|
+
end
|
15
|
+
|
16
|
+
task :install => :compile do
|
17
|
+
Dir[File.join($genosaurus_output_directory, 'pkg', '*.gem')].each do |g|
|
18
|
+
sh "gem install #{g}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module WarpDrive
|
2
|
+
|
3
|
+
RAILS_INIT_METHODS = %w{
|
4
|
+
install_gem_spec_stubs
|
5
|
+
set_load_path
|
6
|
+
require_frameworks
|
7
|
+
set_autoload_paths
|
8
|
+
add_plugin_load_paths
|
9
|
+
load_environment
|
10
|
+
preload_frameworks
|
11
|
+
initialize_encoding
|
12
|
+
initialize_database
|
13
|
+
initialize_cache
|
14
|
+
initialize_framework_caches
|
15
|
+
initialize_logger
|
16
|
+
initialize_framework_logging
|
17
|
+
initialize_dependency_mechanism
|
18
|
+
initialize_whiny_nils
|
19
|
+
initialize_time_zone
|
20
|
+
initialize_i18n
|
21
|
+
initialize_framework_settings
|
22
|
+
initialize_framework_views
|
23
|
+
initialize_metal
|
24
|
+
add_support_load_paths
|
25
|
+
check_for_unbuilt_gems
|
26
|
+
load_plugins
|
27
|
+
add_gem_load_paths
|
28
|
+
load_gems
|
29
|
+
check_gem_dependencies
|
30
|
+
gems_dependencies_loaded
|
31
|
+
load_application_initializers
|
32
|
+
after_initialize
|
33
|
+
initialize_database_middleware
|
34
|
+
prepare_dispatcher
|
35
|
+
initialize_routing
|
36
|
+
load_observers
|
37
|
+
load_view_paths
|
38
|
+
load_application_classes
|
39
|
+
disable_dependency_loading
|
40
|
+
}
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
class Migrator
|
3
|
+
|
4
|
+
migs = []
|
5
|
+
migs << ActiveRecord::Migrator.new(:up, WarpDrive::Path.db.migrate).migrations
|
6
|
+
migs << ActiveRecord::Migrator.new(:up, File.join(RAILS_ROOT, 'db', 'migrate')).migrations
|
7
|
+
migs.flatten!
|
8
|
+
|
9
|
+
define_method('migrations') do
|
10
|
+
return migs
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module WarpDrive
|
2
|
+
module Procs
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def load_plugins
|
7
|
+
Proc.new do
|
8
|
+
@plugin_loader = nil
|
9
|
+
WarpDrive.load_plugins
|
10
|
+
plugin_loader.add_plugin_load_paths
|
11
|
+
load_plugins_without_warp_drive
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize_dependency_mechanism
|
16
|
+
Proc.new do
|
17
|
+
initialize_dependency_mechanism_without_warp_drive
|
18
|
+
WarpDrive.initialize_dependency_mechanism
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def method_missing(meth, *args)
|
23
|
+
Proc.new do
|
24
|
+
WarpDrive.send(meth)
|
25
|
+
send("#{meth}_without_warp_drive")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end # Procs
|
32
|
+
end # WarpDrive
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Rails
|
2
|
+
class Initializer
|
3
|
+
|
4
|
+
WarpDrive::RAILS_INIT_METHODS.each do |meth|
|
5
|
+
alias_method "#{meth}_without_warp_drive", meth
|
6
|
+
define_method("#{meth}_with_warp_drive", WarpDrive::Procs.send(meth))
|
7
|
+
alias_method meth, "#{meth}_with_warp_drive"
|
8
|
+
end
|
9
|
+
|
10
|
+
end # Initializer
|
11
|
+
end # Rails
|
@@ -0,0 +1,119 @@
|
|
1
|
+
module WarpDrive
|
2
|
+
extend self
|
3
|
+
# --- RAILS --- #
|
4
|
+
def load_plugins
|
5
|
+
Rails.configuration.plugin_paths << WarpDrive::Path.vendor.plugins.to_s
|
6
|
+
end
|
7
|
+
|
8
|
+
def set_load_path
|
9
|
+
Rails.configuration.load_paths = [Rails.configuration.load_paths,
|
10
|
+
WarpDrive::Path.lib.to_s,
|
11
|
+
WarpDrive::Path.app.to_s,
|
12
|
+
WarpDrive::Path.app.models.to_s,
|
13
|
+
WarpDrive::Path.app.controllers.to_s,
|
14
|
+
WarpDrive::Path.app.helpers.to_s].flatten
|
15
|
+
end
|
16
|
+
|
17
|
+
def load_gems
|
18
|
+
begin
|
19
|
+
require('gemtronics')
|
20
|
+
|
21
|
+
sr_gem_path = WarpDrive::Path.config.gemtronics.rb
|
22
|
+
Gemtronics.load(sr_gem_path) if File.exists?(sr_gem_path)
|
23
|
+
|
24
|
+
local_path = File.join(RAILS_ROOT, 'config', 'gemtronics.rb')
|
25
|
+
Gemtronics.load(local_path) if File.exists?(local_path)
|
26
|
+
Gemtronics.require_gems(RAILS_ENV, :verbose => false)
|
27
|
+
rescue Exception => e
|
28
|
+
puts "Problems loading Gemtronics: #{e.message}"
|
29
|
+
puts "This probably means you aren't using Gemtronics."
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize_routing
|
35
|
+
ActionController::Routing::Routes.add_configuration_file(WarpDrive::Path.config.routes.rb.to_s)
|
36
|
+
end
|
37
|
+
|
38
|
+
def load_view_paths
|
39
|
+
ActionController::Base.view_paths = [ActionController::Base.view_paths,
|
40
|
+
WarpDrive::Path.app.views.to_s].flatten
|
41
|
+
ActionMailer::Base.view_paths = ActionController::Base.view_paths
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize_dependency_mechanism
|
45
|
+
ActiveSupport::Dependencies.class_eval do
|
46
|
+
class << self
|
47
|
+
alias_method :require_or_load_without_warp_drive, :require_or_load
|
48
|
+
|
49
|
+
def require_or_load_with_warp_drive(file_name, const_path = nil)
|
50
|
+
sr_file_name = file_name.gsub(RAILS_ROOT, WarpDrive::ROOT)
|
51
|
+
require_or_load_without_warp_drive(sr_file_name, const_path) if File.exists?(sr_file_name)
|
52
|
+
require_or_load_without_warp_drive(file_name, const_path)
|
53
|
+
end
|
54
|
+
|
55
|
+
alias_method :require_or_load, :require_or_load_with_warp_drive
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def initialize_database
|
61
|
+
Rails.configuration.instance_eval do
|
62
|
+
def database_configuration
|
63
|
+
require 'erb'
|
64
|
+
db_opts = {}
|
65
|
+
|
66
|
+
[WarpDrive::Path.config.database.yml.to_s,
|
67
|
+
File.join(RAILS_ROOT, 'config', 'database.yml')].each do |yml_path|
|
68
|
+
db_opts.recursive_merge!(YAML::load(ERB.new(File.read(yml_path)).result)) if File.exists?(yml_path)
|
69
|
+
end
|
70
|
+
|
71
|
+
db_opts
|
72
|
+
end # database_configuration
|
73
|
+
end # Rails.configuration.instance_eval
|
74
|
+
end
|
75
|
+
|
76
|
+
def load_application_initializers
|
77
|
+
Dir[File.join(WarpDrive::Path.config.initializers.to_s, '**', '*.rb')].sort.each do |initializer|
|
78
|
+
initializer = File.expand_path(initializer)
|
79
|
+
load(initializer)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def initialize_database_middleware
|
84
|
+
require File.join(File.dirname(__FILE__), 'migration_override')
|
85
|
+
end
|
86
|
+
|
87
|
+
# --- Non-RAILS --- #
|
88
|
+
|
89
|
+
def load_rake_tasks
|
90
|
+
require 'rake'
|
91
|
+
Dir.glob(File.join(WarpDrive::Path.lib.tasks.to_s, '**', '*.*')).sort.each do |task|
|
92
|
+
load File.expand_path(task) unless task.match(/\/private\//)
|
93
|
+
end
|
94
|
+
Dir.glob(File.join(WarpDrive::Path.vendor.plugins.to_s, '*')).sort.each do |plugin|
|
95
|
+
Dir.glob(File.join(plugin, 'tasks', '**', '*.*')).sort.each do |task|
|
96
|
+
load File.expand_path(task) unless task.match(/\/private\//)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def load_assets
|
102
|
+
Dir.glob(File.join(WarpDrive::ROOT, 'public', '**', 'warp_drive', '**', '*.*')).sort.each do |f|
|
103
|
+
f.match(/public\/(.*warp_drive)/)
|
104
|
+
base_path = $1
|
105
|
+
rails_path = File.join(RAILS_ROOT, 'public', base_path)
|
106
|
+
FileUtils.rm_rf(rails_path, :verbose => false) if File.exists?(rails_path)
|
107
|
+
f.match(/(^.+public\/.*warp_drive)/)
|
108
|
+
begin
|
109
|
+
FileUtils.ln_sf($1, rails_path)
|
110
|
+
rescue Exception => e
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def method_missing(sym, *args)
|
116
|
+
# puts "Tried to call WarpDrive.#{sym} but it doesn't exist!"
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'warp_drive')
|
2
|
+
|
3
|
+
unless defined?(WARP_DRIVE_INITIALIZED)
|
4
|
+
|
5
|
+
wd_path = File.join(File.dirname(__FILE__), 'boot')
|
6
|
+
|
7
|
+
[:workers, :method_list, :procs, :rails_init].each do |file|
|
8
|
+
require File.join(wd_path, file.to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
WarpDrive.load_assets
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module WarpDrive
|
2
|
+
class Path
|
3
|
+
|
4
|
+
attr_accessor :parent
|
5
|
+
attr_accessor :path
|
6
|
+
|
7
|
+
def initialize(parent, path)
|
8
|
+
self.parent = parent
|
9
|
+
self.path = path.to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(sym, *args)
|
13
|
+
if sym == :rb || sym == :yml
|
14
|
+
return self.to_s + ".#{sym}"
|
15
|
+
else
|
16
|
+
WarpDrive::Path.new(self, sym)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
paths = [self.path]
|
22
|
+
par = self.parent
|
23
|
+
until par.nil?
|
24
|
+
paths << par.path
|
25
|
+
par = par.parent
|
26
|
+
end
|
27
|
+
paths << File.join(WarpDrive::ROOT)
|
28
|
+
path = File.expand_path(File.join(paths.reverse))
|
29
|
+
return path
|
30
|
+
end
|
31
|
+
|
32
|
+
def /(other)
|
33
|
+
File.expand_path(File.join(self.to_s, other.to_s))
|
34
|
+
end
|
35
|
+
|
36
|
+
class << self
|
37
|
+
|
38
|
+
def method_missing(sym, *args)
|
39
|
+
WarpDrive::Path.new(nil, sym)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end # Path
|
45
|
+
end # WarpDrive
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'gemstub'
|
3
|
+
|
4
|
+
Gemstub.gem_spec do |s|
|
5
|
+
<% configatron.warp_drive.gem.configatron_keys.each do |key| -%>
|
6
|
+
s.<%= key %> = "<%= configatron.warp_drive.gem.retrieve(key) %>"
|
7
|
+
<% end %>
|
8
|
+
<% configatron.warp_drive.dependencies.each do |name, version| -%>
|
9
|
+
s.add_dependency('<%= name %>', '<%= version %>')
|
10
|
+
<% end %>
|
11
|
+
s.files = FileList['lib/**/*.*', 'bin/**/*.*']
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '<%= app %>'))
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
Dir.glob(File.join(WarpDrive::Path.lib.tasks.to_s, '**', '*.*')).sort.each do |task|
|
5
|
+
load File.expand_path(task) unless task.match(/\/private\//)
|
6
|
+
end
|
7
|
+
|
8
|
+
Dir.glob(File.join(WarpDrive::Path.vendor.plugins.to_s, '*')).sort.each do |plugin|
|
9
|
+
Dir.glob(File.join(plugin, 'tasks', '**', '*.*')).sort.each do |task|
|
10
|
+
load File.expand_path(task) unless task.match(/\/private\//)
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
class WarpDriveGemGenerator < Genosaurus
|
2
|
+
require_param :app
|
3
|
+
require_param :out_dir
|
4
|
+
|
5
|
+
def before_generate
|
6
|
+
copy_major_directories
|
7
|
+
remove_private_rake_tasks
|
8
|
+
remove_private_assets
|
9
|
+
remove_private_configs
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def copy_major_directories
|
14
|
+
%w{app config lib public vendor}.each do |dir|
|
15
|
+
Dir[File.join(pwd, dir, '**', '*.*')].each do |f|
|
16
|
+
self.copy(f, f.gsub(pwd, 'lib'))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
%w{db}.each do |dir|
|
21
|
+
Dir[File.join(pwd, dir, '**', '*.rb')].each do |f|
|
22
|
+
self.copy(f, f.gsub(pwd, 'lib'))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def remove_private_rake_tasks
|
28
|
+
Dir[File.join(out_lib_dir, 'lib', 'tasks', '**', 'private')].each do |f|
|
29
|
+
rm_rf(f, :verbose => false)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def remove_private_assets
|
34
|
+
pub_path = File.join(out_lib_dir, 'public')
|
35
|
+
Dir[File.join(pub_path, '**', '*.*')].each do |f|
|
36
|
+
tpath = f.gsub(pub_path, '')
|
37
|
+
unless tpath.match(/\/warp_drive\//)
|
38
|
+
rm(f, :verbose => false)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def remove_private_configs
|
44
|
+
%w{boot.rb environment.rb}.each do |f|
|
45
|
+
rm(File.join(out_lib_dir, 'config', f), :verbose => false)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def out_lib_dir
|
50
|
+
File.join(self.out_dir, 'lib')
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
data/lib/warp_drive.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class Hash # :nodoc:
|
2
|
+
|
3
|
+
def recursive_merge!(other) # :nodoc:
|
4
|
+
other.each do |key, value|
|
5
|
+
myval = self[key]
|
6
|
+
if value.is_a?(Hash) && myval.is_a?(Hash)
|
7
|
+
myval.recursive_merge!(value)
|
8
|
+
else
|
9
|
+
self[key] = value
|
10
|
+
end
|
11
|
+
end
|
12
|
+
self
|
13
|
+
end # recursive_merge!
|
14
|
+
|
15
|
+
end # Hash
|
16
|
+
|
17
|
+
|
18
|
+
require 'configatron'
|
19
|
+
require 'genosaurus'
|
20
|
+
|
21
|
+
path = File.join(File.dirname(__FILE__), 'warp_drive')
|
22
|
+
require File.join(path, 'configure.rb')
|
23
|
+
require File.join(path, 'path.rb')
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: markbates-warp_drive
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.20090831153601
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- markbates
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-08-31 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: configatron
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: genosaurus
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: Screw Rails Engines! Why not install a Warp Drive! Completely bundle up an ENTIRE Rails application into a gem, then load it into another application! It's that easy!
|
36
|
+
email: mark@markbates.com
|
37
|
+
executables:
|
38
|
+
- warpify
|
39
|
+
- install_warp_drive
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files:
|
43
|
+
- README
|
44
|
+
- LICENSE
|
45
|
+
files:
|
46
|
+
- lib/tasks/compile.rake
|
47
|
+
- lib/warp_drive/boot/method_list.rb
|
48
|
+
- lib/warp_drive/boot/migration_override.rb
|
49
|
+
- lib/warp_drive/boot/procs.rb
|
50
|
+
- lib/warp_drive/boot/rails_init.rb
|
51
|
+
- lib/warp_drive/boot/workers.rb
|
52
|
+
- lib/warp_drive/boot.rb
|
53
|
+
- lib/warp_drive/configure.rb
|
54
|
+
- lib/warp_drive/path.rb
|
55
|
+
- lib/warp_drive/tasks.rb
|
56
|
+
- lib/warp_drive/templates/lib/%=app%/boot.rb.template
|
57
|
+
- lib/warp_drive/templates/lib/%=app%/tasks.rb.template
|
58
|
+
- lib/warp_drive/templates/lib/%=app%.rb.template
|
59
|
+
- lib/warp_drive/templates/Rakefile.template
|
60
|
+
- lib/warp_drive/warp_drive_gem_generator.rb
|
61
|
+
- lib/warp_drive.rb
|
62
|
+
- README
|
63
|
+
- LICENSE
|
64
|
+
- bin/warpify
|
65
|
+
- bin/install_warp_drive
|
66
|
+
has_rdoc: false
|
67
|
+
homepage: http://www.metabates.com
|
68
|
+
licenses:
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
79
|
+
version:
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: "0"
|
85
|
+
version:
|
86
|
+
requirements: []
|
87
|
+
|
88
|
+
rubyforge_project: magrathea
|
89
|
+
rubygems_version: 1.3.5
|
90
|
+
signing_key:
|
91
|
+
specification_version: 3
|
92
|
+
summary: warp_drive
|
93
|
+
test_files: []
|
94
|
+
|