pakada 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source "http://rubygems.org"
2
+
3
+ group :pakada do
4
+ gem "pakada", :path => "."
5
+ end
6
+
7
+ group :testing do
8
+ gem "mocha"
9
+ gem "fakefs"
10
+ gem "fakefs-require"
11
+ end
12
+
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2010 Lars Gierth
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1 @@
1
+ = Drupal-like awesomeness on Ruby
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ require "bundler"
2
+ Bundler.setup(:pakada)
3
+
4
+ require "pakada/tasks"
@@ -0,0 +1,23 @@
1
+ class Pakada
2
+ class Application
3
+ class << self
4
+ attr_reader :request, :response
5
+
6
+ def call(request_env)
7
+ Pakada.hook(:reset)
8
+
9
+ request = Rack::Request.new(request_env)
10
+ response = Rack::Response.new
11
+
12
+ @request, @response = request, response
13
+ Pakada.hook(:request)
14
+
15
+ response.write("Hi, I'm Pakada!") if response.length == 0
16
+
17
+ Pakada.hook(:response)
18
+ @request, @response = nil, nil
19
+ return response.finish
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ require "pakada"
2
+
3
+ env = (ENV["RACK_ENV"] ||= "development").to_sym
4
+ Bundler.setup(:modules, :default, env)
5
+
6
+ require "config/boot" if File.exist?("config/boot.rb")
7
+ Pakada.boot(env)
@@ -0,0 +1,81 @@
1
+ class Pakada
2
+ module Module
3
+ @descendants = Dictionary.new
4
+
5
+ class << self
6
+ attr_reader :descendants
7
+
8
+ def prepare
9
+ specs = []
10
+ Gem.loaded_specs.each do |name, spec|
11
+ next unless name =~ Regexp.new("^#{gem_prefix}")
12
+ i = $LOAD_PATH.find_index(spec.load_paths.first)
13
+ specs[i] = spec
14
+ end
15
+ specs.delete(nil)
16
+
17
+ specs.reverse.each do |spec|
18
+ name = spec.name[gem_prefix.length..-1].to_sym
19
+ @descendants[name] = {
20
+ :gemspec => spec,
21
+ :klass => nil,
22
+ :path => spec.full_gem_path,
23
+ } unless @descendants[name]
24
+ end
25
+ end
26
+
27
+ def load
28
+ prepare
29
+
30
+ @descendants.each do |name, mod|
31
+ next if mod[:klass]
32
+ require(mod[:gemspec].full_gem_path + "/module")
33
+ end
34
+ end
35
+
36
+ def gem_prefix
37
+ @gem_prefix ||= "pakada" + Pakada::VERSION.split(".")[0] + "-"
38
+ end
39
+
40
+ def included(klass)
41
+ klass.class_eval { @hooks = {} }
42
+ klass.extend(ClassMethods)
43
+
44
+ name = klass.to_s.underscore.split("_")[0..-2].join("_")
45
+ @descendants[name.to_sym][:klass] = klass
46
+ end
47
+ end
48
+
49
+ def hook(name, *args)
50
+ hooks = self.class.class_eval { @hooks }
51
+ hooks[name].each {|h| instance_exec(*args, &h) } if hooks[name]
52
+ end
53
+
54
+ def version
55
+ return self.class.version
56
+ end
57
+
58
+ def path
59
+ return self.class.path
60
+ end
61
+
62
+ module ClassMethods
63
+ def hook(name, &block)
64
+ @hooks[name] ||= []
65
+ @hooks[name] << block
66
+ end
67
+
68
+ def name
69
+ return @name ||= Pakada::Module.descendants.find {|m| m[1][:klass] == self }[0]
70
+ end
71
+
72
+ def version
73
+ return Pakada::Module.descendants[name][:gemspec].version.to_s
74
+ end
75
+
76
+ def path
77
+ return Pakada::Module.descendants[name][:path]
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,8 @@
1
+ class Module
2
+
3
+ def alias_method_chain(target, feature)
4
+ alias_method("#{target}_without_#{feature}", target)
5
+ alias_method(target, "#{target}_with_#{feature}")
6
+ end
7
+
8
+ end
@@ -0,0 +1,35 @@
1
+ class String
2
+
3
+ def classify()
4
+ Extlib::Inflection.classify(self)
5
+ end
6
+
7
+ def camelize()
8
+ Extlib::Inflection.camelize(self)
9
+ end
10
+
11
+ def underscore()
12
+ Extlib::Inflection.underscore(self)
13
+ end
14
+
15
+ def humanize()
16
+ Extlib::Inflection.humanize(self)
17
+ end
18
+
19
+ def demodulize()
20
+ Extlib::Inflection.demodulize(self)
21
+ end
22
+
23
+ def tableize()
24
+ Extlib::Inflection.tableize(self)
25
+ end
26
+
27
+ def foreign_key()
28
+ Extlib::Inflection.foreign_key(self)
29
+ end
30
+
31
+ def constantize()
32
+ Extlib::Inflection.constantize(self)
33
+ end
34
+
35
+ end
@@ -0,0 +1,27 @@
1
+ class Object
2
+
3
+ module InstanceExecHelper
4
+ end
5
+
6
+ include InstanceExecHelper
7
+
8
+ # this leaks memory
9
+ # see http://eigenclass.org/hiki/bounded+space+instance_exec
10
+ def instance_exec(*args, &block)
11
+ begin
12
+ old_critical, Thread.critical = Thread.critical, true
13
+ n = 0
14
+ n += 1 while respond_to?(mname = "__instance_exec#{n}")
15
+ InstanceExecHelper.module_eval { define_method(mname, &block) }
16
+ ensure
17
+ Thread.critical = old_critical
18
+ end
19
+ begin
20
+ ret = send(mname, *args)
21
+ ensure
22
+ InstanceExecHelper.module_eval{ remove_method(mname) } rescue nil
23
+ end
24
+ return ret
25
+ end
26
+
27
+ end
@@ -0,0 +1,9 @@
1
+ require "yaml"
2
+
3
+ require "extlib/dictionary"
4
+ require "extlib/inflection"
5
+ require "extlib/string"
6
+
7
+ require "pakada/support/aliasing"
8
+ require "pakada/support/inflection"
9
+ require "pakada/support/instance_exec" if RUBY_VERSION < "1.9"
@@ -0,0 +1,22 @@
1
+ require "pakada"
2
+
3
+ dirs = []
4
+
5
+ # core's tasks
6
+ dirs << Gem.loaded_specs["pakada"].full_gem_path
7
+
8
+ # modules' tasks
9
+ ENV["RACK_ENV"] ||= "development"
10
+ Bundler.setup(:modules, :default, ENV["RACK_ENV"].to_sym)
11
+ Pakada::Module.load
12
+ Pakada::Module.descendants.each do |name, mod|
13
+ dirs << mod[:gemspec].full_gem_path
14
+ end
15
+
16
+ # project's tasks
17
+ dirs << Dir.pwd
18
+
19
+ # load the tasks
20
+ dirs.uniq.each do |dir|
21
+ Dir["#{dir}/tasks/*"].each {|f| require(f) }
22
+ end
@@ -0,0 +1,14 @@
1
+ ENV["RACK_ENV"] = "testing"
2
+ require "bundler"
3
+ Bundler.setup(:pakada, :modules, :default, ENV["RACK_ENV"].to_sym)
4
+
5
+ require "pakada"
6
+
7
+ require "test/unit"
8
+ require "pakada/test_case"
9
+ Test::Unit::TestCase.class_eval { include(Pakada::TestCase) }
10
+
11
+ require "mocha"
12
+ require "fakefs/safe"
13
+ require "fakefs/require"
14
+ require "rack"
@@ -0,0 +1,69 @@
1
+ class Pakada
2
+ module TestCase
3
+ def create_files(files)
4
+ files.each do |name, content|
5
+ File.open(name, "w") do |f|
6
+ f.write(content)
7
+ end
8
+ end
9
+ end
10
+
11
+ def stub_gemspecs(paths)
12
+ @stubbed_gemspecs ||= []
13
+ @load_path_diff ||= []
14
+
15
+ old_load_path = $LOAD_PATH.dup
16
+
17
+ paths.each do |path|
18
+ spec = eval(File.read(path))
19
+ dir = File.expand_path(File.dirname(path))
20
+
21
+ spec.stubs(:full_gem_path).returns(dir)
22
+ spec.stubs(:load_paths).returns([dir + "/lib"])
23
+ Gem.loaded_specs[spec.name] = spec
24
+ @stubbed_gemspecs << spec.name
25
+
26
+ $LOAD_PATH.unshift(spec.load_paths.first)
27
+ end
28
+
29
+ @load_path_diff += $LOAD_PATH - old_load_path
30
+ end
31
+
32
+ def revert_gemspecs()
33
+ @stubbed_gemspecs.each {|name| Gem.loaded_specs.delete(name) }
34
+ @load_path_diff.each {|path| $LOAD_PATH.delete(path) }
35
+
36
+ @stubbed_gemspecs = nil
37
+ @load_path_diff = nil
38
+ end
39
+
40
+ def self.included(klass)
41
+ klass.extend(ClassMethods)
42
+ end
43
+
44
+ module ClassMethods
45
+ def setup(&block)
46
+ define_method(:setup, &block)
47
+ end
48
+
49
+ def teardown(&block)
50
+ define_method(:teardown, &block)
51
+ end
52
+
53
+ def test(name, &block)
54
+ test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
55
+
56
+ defined = instance_method(test_name) rescue false
57
+ raise "#{test_name} is already defined in #{self}" if defined
58
+
59
+ if block_given?
60
+ define_method(test_name, &block)
61
+ else
62
+ define_method(test_name) do
63
+ flunk "No implementation provided for #{name}"
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ class Pakada
2
+ VERSION = Gem.loaded_specs["pakada"].version.to_s
3
+ end
data/lib/pakada.rb ADDED
@@ -0,0 +1,113 @@
1
+ require "rack"
2
+ require "pakada/support"
3
+
4
+ require "pakada/application"
5
+ require "pakada/module"
6
+ require "pakada/version"
7
+
8
+ class Pakada
9
+ class << self
10
+ attr_reader :modules, :middleware
11
+ attr_writer :env
12
+
13
+ def boot(env = nil)
14
+ @env = env.to_sym if env
15
+
16
+ load_middleware
17
+ load_modules if @modules.empty?
18
+
19
+ hook(:boot) unless testing?
20
+ end
21
+
22
+ def load_middleware
23
+ config = YAML.load_file("config/middleware.yml") rescue {}
24
+ @middleware = Rack::Builder.new
25
+ config[env].each do |klass|
26
+ args = []
27
+ klass, args = klass.to_a[0] if klass.is_a?(Hash)
28
+ if args.is_a?(Array)
29
+ @middleware.use(klass.constantize, *args)
30
+ else
31
+ @middleware.use(klass.constantize, args)
32
+ end
33
+ end if config[env]
34
+ end
35
+
36
+ def load_modules
37
+ Module.load
38
+ @modules = Dictionary.new
39
+ @hooks = {}
40
+ Module.descendants.each do |name, mod|
41
+ @modules[name] = mod[:klass].new
42
+ @modules[name].hook(:activate) unless testing?
43
+ end
44
+ end
45
+
46
+ def [](name)
47
+ return modules[name]
48
+ end
49
+
50
+ def []=(name, mod)
51
+ modules[name] = mod
52
+ end
53
+
54
+ def hook(name, *args)
55
+ catch(:halt) { @modules.each_value {|mod| mod.hook(name, *args) } }
56
+ end
57
+
58
+ def hook_reverse(name, *args)
59
+ catch(:halt) { @modules.reverse.each_value {|mod| mod.hook(name, *args) } }
60
+ end
61
+
62
+ def app
63
+ unless @app
64
+ @middleware.run(Application)
65
+ @app = @middleware.to_app
66
+ end
67
+ return @app
68
+ end
69
+
70
+ def request
71
+ return Application.request
72
+ end
73
+
74
+ def response
75
+ return Application.response
76
+ end
77
+
78
+ def reset
79
+ @env = nil
80
+ @middleware = Rack::Builder.new
81
+ @modules = Dictionary.new
82
+ @app = nil
83
+ end
84
+
85
+ def shutdown
86
+ hook_reverse(:shutdown) unless testing?
87
+
88
+ reset
89
+ end
90
+
91
+ def env
92
+ return @env ||= (ENV["RACK_ENV"] || :development).to_sym
93
+ end
94
+
95
+ def development?
96
+ return env == :development
97
+ end
98
+
99
+ def testing?
100
+ return env == :testing
101
+ end
102
+
103
+ def staging?
104
+ return env == :staging
105
+ end
106
+
107
+ def production?
108
+ return env == :production
109
+ end
110
+ end
111
+
112
+ reset
113
+ end
data/tasks/test.rb ADDED
@@ -0,0 +1,73 @@
1
+ require "rake/testtask"
2
+
3
+ desc " => rake test"
4
+ task " " => :default
5
+ task :default => :test
6
+
7
+ desc "Test all modules as well as Pakada's core"
8
+ task :test do
9
+ Rake::Task["test:*"].execute
10
+ end
11
+
12
+ namespace :test do
13
+ desc "Test the module 'my_module'"
14
+ task :"my_module"
15
+
16
+ desc "Test the modules 'my_module' and 'another_module' as well as Pakada's core"
17
+ task :"my_module+another_module+core"
18
+ end
19
+
20
+ rule /^test(:.+)?$/ do |t|
21
+ arg = (t.name || "*").split(":").last
22
+ modules = []
23
+
24
+ if arg == "*"
25
+ modules << "core"
26
+ modules += Pakada::Module.descendants.keys
27
+ else
28
+ modules = arg.split("+")
29
+ end
30
+
31
+ modules.each do |mod|
32
+ puts "-----"
33
+ puts "Testing #{mod}"
34
+
35
+ runner = "rake/rake_test_loader.rb"
36
+ $LOAD_PATH.each do |p|
37
+ path = File.join p, runner
38
+ if File.exist? path
39
+ runner = path
40
+ break
41
+ end
42
+ end
43
+
44
+ dir = File.expand_path(if mod == "core"
45
+ File.dirname(__FILE__) + "/.."
46
+ else
47
+ Pakada::Module.descendants[mod.to_sym][:path] rescue raise("Unknown module: #{mod}")
48
+ end)
49
+ files = FileList[dir + "/test/**/*_test.rb"]
50
+
51
+ opts = []
52
+ opts << "-rubygems"
53
+ opts << "-C#{dir}"
54
+ opts << "-I#{Gem.loaded_specs["pakada"].full_gem_path}/lib"
55
+
56
+ ["_", "PWD", "GEM_PATH", "GEM_HOME"].each {|k| ENV.delete(k) }
57
+ ENV["BUNDLE_GEMFILE"] = if File.exist?(dir + "/Gemfile")
58
+ dir + "/Gemfile"
59
+ else
60
+ File.expand_path("Gemfile")
61
+ end
62
+
63
+ begin
64
+ cmd = FileUtils::RUBY + " " + [
65
+ opts.join(" "),
66
+ runner,
67
+ files.map{|f| %("#{f}") }.join(" "),
68
+ ].join(" ")
69
+ system(cmd)
70
+ rescue
71
+ end
72
+ end
73
+ end
data/test/files.rb ADDED
@@ -0,0 +1,60 @@
1
+ FILES = {
2
+
3
+ "config/middleware.yml" => <<-CODE,
4
+ :testing:
5
+ - Rack::ShowExceptions
6
+ - Rack::Static:
7
+ :urls:
8
+ - /images
9
+ :root: public
10
+ CODE
11
+
12
+ "modules/foo/pakada0-foo.gemspec" => <<-CODE,
13
+ Gem::Specification.new do |s|
14
+ s.name = "pakada0-foo"
15
+ s.version = "0.1.0dev"
16
+ s.platform = Gem::Platform::RUBY
17
+ s.authors = ["Lars Gierth"]
18
+ s.email = ["lgierth@entwickler.com"]
19
+ s.homepage = "http://github.com/lgierth/pakada"
20
+ s.summary = "nothing"
21
+
22
+ s.add_dependency "pakada"
23
+
24
+ s.files = ["module.rb"]
25
+ s.require_path = "lib"
26
+
27
+ s.required_rubygems_version = ">= 1.3.6"
28
+ end
29
+ CODE
30
+ "modules/foo/module.rb" => <<-CODE,
31
+ class FooModule
32
+ include Pakada::Module
33
+ end
34
+ CODE
35
+
36
+ "modules/bar/pakada0-bar.gemspec" => <<-CODE,
37
+ Gem::Specification.new do |s|
38
+ s.name = "pakada0-bar"
39
+ s.version = "0.1.0dev"
40
+ s.platform = Gem::Platform::RUBY
41
+ s.authors = ["Lars Gierth"]
42
+ s.email = ["lgierth@entwickler.com"]
43
+ s.homepage = "http://github.com/lgierth/pakada"
44
+ s.summary = "nothing"
45
+
46
+ s.add_dependency "pakada"
47
+
48
+ s.files = ["module.rb"]
49
+ s.require_path = "lib"
50
+
51
+ s.required_rubygems_version = ">= 1.3.6"
52
+ end
53
+ CODE
54
+ "modules/bar/module.rb" => <<-CODE,
55
+ class BarModule
56
+ include Pakada::Module
57
+ end
58
+ CODE
59
+
60
+ }
data/test/helper.rb ADDED
@@ -0,0 +1 @@
1
+ require "pakada/test"
@@ -0,0 +1,81 @@
1
+ require "test/helper"
2
+ require "test/files"
3
+
4
+ class ModuleTest < Test::Unit::TestCase
5
+ setup do
6
+ FakeFS.activate!
7
+ FakeFS::Require.activate!({
8
+ :fallback => true,
9
+ :load => true,
10
+ :autoload => true,
11
+ })
12
+ create_files(FILES)
13
+
14
+ stub_gemspecs([
15
+ "modules/foo/pakada0-foo.gemspec",
16
+ "modules/bar/pakada0-bar.gemspec",
17
+ ])
18
+ end
19
+
20
+ teardown do
21
+ revert_gemspecs
22
+ Mocha::Mockery.instance.teardown
23
+
24
+ Pakada.shutdown
25
+
26
+ FakeFS::FileSystem.clear
27
+ FakeFS::Require.deactivate!
28
+ FakeFS.deactivate!
29
+ end
30
+
31
+ test "prepares modules" do
32
+ Pakada::Module.prepare
33
+ modules = Pakada::Module.descendants
34
+
35
+ assert_equal 2, modules.length
36
+ assert_equal File.expand_path("modules/foo"), modules[:foo][:path]
37
+ assert_equal "pakada0-foo", modules[:foo][:gemspec].name
38
+ end
39
+
40
+ test "loads modules" do
41
+ Pakada::Module.load
42
+ modules = Pakada::Module.descendants
43
+
44
+ assert_equal 2, modules.length
45
+ assert_equal FooModule, modules[:foo][:klass]
46
+ end
47
+
48
+ test "has hooks" do
49
+ Pakada::Module.load
50
+
51
+ FooModule.class_eval do
52
+ hook :asd do
53
+ end
54
+ end
55
+
56
+ assert(FooModule.class_eval { @hooks[:asd] })
57
+ assert_equal 1, FooModule.class_eval { @hooks[:asd].length }
58
+ end
59
+
60
+ test "executes hooks" do
61
+ Pakada.boot
62
+
63
+ FooModule.class_eval do
64
+ hook :something do |state|
65
+ state.called = true
66
+ end
67
+ end
68
+
69
+ state = Struct.new(:called).new
70
+ Pakada.hook :something, state
71
+
72
+ assert state.called
73
+ end
74
+
75
+ test "has a version" do
76
+ Pakada.boot
77
+
78
+ version = Gem.loaded_specs["pakada0-foo"].version.to_s
79
+ assert_equal version, Pakada[:foo].version
80
+ end
81
+ end
@@ -0,0 +1,80 @@
1
+ require "test/helper"
2
+ require "test/files"
3
+
4
+ class PakadaTest < Test::Unit::TestCase
5
+ setup do
6
+ FakeFS.activate!
7
+ FakeFS::Require.activate!({
8
+ :fallback => true,
9
+ :load => true,
10
+ :autoload => true,
11
+ })
12
+ create_files(FILES)
13
+
14
+ stub_gemspecs([
15
+ "modules/foo/pakada0-foo.gemspec",
16
+ "modules/bar/pakada0-bar.gemspec",
17
+ ])
18
+ end
19
+
20
+ teardown do
21
+ revert_gemspecs
22
+ Mocha::Mockery.instance.teardown
23
+
24
+ Pakada.shutdown
25
+
26
+ FakeFS::FileSystem.clear
27
+ FakeFS::Require.deactivate!
28
+ FakeFS.deactivate!
29
+ end
30
+
31
+ test "maintains a Rack middleware stack" do
32
+ Rack::Builder.any_instance.expects(:use).with(Rack::ShowExceptions)
33
+ Rack::Builder.any_instance.expects(:use).with(Rack::Static, {
34
+ :urls => ["/images"],
35
+ :root => "public",
36
+ })
37
+ Pakada.boot
38
+ end
39
+
40
+ test "executes modules' hooks" do
41
+ Pakada.boot
42
+ Pakada[:foo].class.class_eval do
43
+ hook(:foobar) do
44
+ end
45
+ end
46
+
47
+ Pakada[:foo].expects(:hook).once.with(:foobar, 123)
48
+ Pakada.hook(:foobar, 123)
49
+ end
50
+
51
+ test "cancels the execution of a hook when it catches :halt" do
52
+ Pakada.boot
53
+ Pakada[:foo].class.class_eval do
54
+ hook(:foobar) do |state|
55
+ throw :halt
56
+ state.after_throw = true
57
+ end
58
+ end
59
+
60
+ state = Struct.new(:after_throw).new
61
+ Pakada.hook(:foobar, state)
62
+
63
+ assert !state.after_throw
64
+ end
65
+
66
+ test "provides a Rack application end-point" do
67
+ Rack::Builder.any_instance.expects(:run).with(Pakada::Application)
68
+
69
+ Pakada.boot
70
+ assert_equal Rack::ShowExceptions, Pakada.app.class
71
+ end
72
+
73
+ test "prints a greeting when the response would be empty" do
74
+ Pakada.boot
75
+ Pakada.stubs(:hook)
76
+
77
+ resp = Pakada.app.call("PATH_INFO" => "/")
78
+ assert_equal "Hi, I'm Pakada!", resp[2].body.to_s
79
+ end
80
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pakada
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 0
10
+ version: 0.0.0
11
+ platform: ruby
12
+ authors:
13
+ - Lars Gierth
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-12-19 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: bundler
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: extlib
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: rack
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: mocha
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :development
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: fakefs
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ type: :development
90
+ version_requirements: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: fakefs-require
93
+ prerelease: false
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ type: :development
104
+ version_requirements: *id006
105
+ description:
106
+ email:
107
+ - lgierth@entwickler.com
108
+ executables: []
109
+
110
+ extensions: []
111
+
112
+ extra_rdoc_files: []
113
+
114
+ files:
115
+ - lib/pakada/version.rb
116
+ - lib/pakada/support.rb
117
+ - lib/pakada/boot.rb
118
+ - lib/pakada/tasks.rb
119
+ - lib/pakada/test.rb
120
+ - lib/pakada/test_case.rb
121
+ - lib/pakada/application.rb
122
+ - lib/pakada/module.rb
123
+ - lib/pakada/support/aliasing.rb
124
+ - lib/pakada/support/instance_exec.rb
125
+ - lib/pakada/support/inflection.rb
126
+ - lib/pakada.rb
127
+ - tasks/test.rb
128
+ - test/pakada_test.rb
129
+ - test/files.rb
130
+ - test/module_test.rb
131
+ - test/helper.rb
132
+ - Gemfile
133
+ - LICENSE
134
+ - Rakefile
135
+ - README.rdoc
136
+ has_rdoc: true
137
+ homepage: http://github.com/lgierth/pakada
138
+ licenses: []
139
+
140
+ post_install_message:
141
+ rdoc_options: []
142
+
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ hash: 23
160
+ segments:
161
+ - 1
162
+ - 3
163
+ - 6
164
+ version: 1.3.6
165
+ requirements: []
166
+
167
+ rubyforge_project:
168
+ rubygems_version: 1.3.7
169
+ signing_key:
170
+ specification_version: 3
171
+ summary: Drupal-like awesomeness on Ruby
172
+ test_files: []
173
+