kazoo 0.0.2 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/Manifest CHANGED
@@ -2,6 +2,15 @@ MIT-License
2
2
  Manifest
3
3
  Rakefile
4
4
  lib/kazoo.rb
5
+ lib/kazoo/accessors.rb
5
6
  lib/kazoo/router.rb
7
+ lib/kazoo/router/context.rb
8
+ lib/kazoo/router/route.rb
6
9
  lib/kazoo/sinatra.rb
10
+ lib/kazoo/support.rb
7
11
  readme.markdown
12
+ spec/router/context_spec.rb
13
+ spec/router/route_spec.rb
14
+ spec/router_spec.rb
15
+ spec/spec.opts
16
+ spec/spec_helper.rb
data/Rakefile CHANGED
@@ -2,11 +2,19 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('kazoo', '0.0.2') do |p|
6
- p.description = "Make your Ruby Rack apps act like one"
5
+ require 'rspec'
6
+ require 'rspec/core/rake_task'
7
+
8
+ Echoe.new('kazoo', '0.0.5') do |p|
9
+ p.description = "A moduler framework to facilitate the development of content management systems"
7
10
  p.url = "http://rubykazoo.com"
8
11
  p.author = "Jeremy Nicoll"
9
12
  p.email = "jnicoll @nspam@ accentuate.me"
10
13
  p.ignore_pattern = ['*.kpf', "tmp/*", "script/*"]
11
14
  p.development_dependencies = []
12
- end
15
+ end
16
+
17
+
18
+ desc "Run all specs"
19
+ RSpec::Core::RakeTask.new(:spec)
20
+ task :default => :spec
data/kazoo.gemspec CHANGED
@@ -2,23 +2,23 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{kazoo}
5
- s.version = "0.0.2"
5
+ s.version = "0.0.5"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Jeremy Nicoll"]
9
9
  s.cert_chain = ["/Users/eltiare/keys/gem-public_cert.pem"]
10
- s.date = %q{2011-01-28}
11
- s.description = %q{Make your Ruby Rack apps act like one}
10
+ s.date = %q{2011-02-16}
11
+ s.description = %q{A moduler framework to facilitate the development of content management systems}
12
12
  s.email = %q{jnicoll @nspam@ accentuate.me}
13
- s.extra_rdoc_files = ["lib/kazoo.rb", "lib/kazoo/router.rb", "lib/kazoo/sinatra.rb"]
14
- s.files = ["MIT-License", "Manifest", "Rakefile", "lib/kazoo.rb", "lib/kazoo/router.rb", "lib/kazoo/sinatra.rb", "readme.markdown", "kazoo.gemspec"]
13
+ s.extra_rdoc_files = ["lib/kazoo.rb", "lib/kazoo/accessors.rb", "lib/kazoo/router.rb", "lib/kazoo/router/context.rb", "lib/kazoo/router/route.rb", "lib/kazoo/sinatra.rb", "lib/kazoo/support.rb"]
14
+ s.files = ["MIT-License", "Manifest", "Rakefile", "lib/kazoo.rb", "lib/kazoo/accessors.rb", "lib/kazoo/router.rb", "lib/kazoo/router/context.rb", "lib/kazoo/router/route.rb", "lib/kazoo/sinatra.rb", "lib/kazoo/support.rb", "readme.markdown", "spec/router/context_spec.rb", "spec/router/route_spec.rb", "spec/router_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "kazoo.gemspec"]
15
15
  s.homepage = %q{http://rubykazoo.com}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Kazoo", "--main", "readme.markdown"]
17
17
  s.require_paths = ["lib"]
18
18
  s.rubyforge_project = %q{kazoo}
19
- s.rubygems_version = %q{1.4.2}
19
+ s.rubygems_version = %q{1.5.0}
20
20
  s.signing_key = %q{/Users/eltiare/keys/gem-private_key.pem}
21
- s.summary = %q{Make your Ruby Rack apps act like one}
21
+ s.summary = %q{A moduler framework to facilitate the development of content management systems}
22
22
 
23
23
  if s.respond_to? :specification_version then
24
24
  s.specification_version = 3
data/lib/kazoo.rb CHANGED
@@ -1,4 +1,12 @@
1
+ $LOAD_PATH.push(File.dirname(__FILE__))
2
+
3
+ require 'cgi'
4
+
1
5
  module Kazoo; end
2
6
 
3
- base_path = File.dirname(__FILE__)
4
- #Dir["#{base_path}/kazoo/*.rb"].each { |library| require library }
7
+ require "kazoo/support"
8
+ require "kazoo/accessors"
9
+
10
+ require 'kazoo/router/route'
11
+ require 'kazoo/router/context'
12
+ require "kazoo/router"
@@ -0,0 +1,9 @@
1
+ module Kazoo
2
+
3
+ def self.admin_router(&blk)
4
+ @_admin_router ||= Kazoo::Router.new
5
+ @_admin_router.map(&blk) if block_given?
6
+ @_admin_router
7
+ end
8
+
9
+ end
data/lib/kazoo/router.rb CHANGED
@@ -1,37 +1,55 @@
1
1
  class Kazoo::Router
2
2
 
3
3
  def self.map(&blk)
4
- instance = new
5
- instance.instance_eval(&blk)
6
- instance
4
+ new.map(&blk)
7
5
  end
8
6
 
9
- def initialize
10
- @routes = []
7
+ def map(&blk)
8
+ @context ||= Context.new(self)
9
+ @context.instance_eval(&blk)
10
+ self
11
11
  end
12
12
 
13
- def match(path, options = {})
14
- raise "You must match a route to an app using :to" unless options[:to] && options[:to].respond_to?(:call)
15
- if path.is_a?(Regexp)
16
- @routes << [ path, options[:to] ]
17
- elsif path.is_a?(String)
18
- @routes << [ Regexp.new("^#{path}"), options[:to] ]
19
- end
13
+ def routes
14
+ @routes ||= []
15
+ end
16
+
17
+ def named_routes
18
+ @named_routes ||= {}
20
19
  end
21
20
 
22
21
  def error_handler(app)
23
22
  @error_handler = app
24
23
  end
25
24
 
25
+ def general_handler(app)
26
+ @general_handler = app
27
+ end
28
+
29
+ def kenv
30
+ @env['kazoo'] ||= {}
31
+ end
32
+
26
33
  def call(env)
34
+ @env = env
27
35
  @routes.each do |route|
28
- if matches = route[0].match(env['REQUEST_PATH'])
29
- env['HTTP_PREFIX'] = matches[0]
30
- env['PATH_INFO'] = env['PATH_INFO'].sub(route[0], '')
36
+ env['PATH_INFO'] = "#{env["PATH_INFO"]}/" unless %r'/$'.match(env['PATH_INFO'])
37
+ params = route.extract_params(env['PATH_INFO'])
38
+
39
+ if params && route.app
40
+ kenv['params'] ||= {}
41
+ kenv['params'].merge!(params)
42
+
43
+ match = route.to_regexp.match(env['PATH_INFO'])[0]
44
+ kenv['path_prefix'] = kenv['path_prefix'] ? File.join(kenv['path_prefix'], match) : match
45
+
46
+ env['PATH_INFO'] = env['PATH_INFO'].sub(match, '')
31
47
  env['PATH_INFO'] = "/#{env['PATH_INFO']}" unless env['PATH_INFO'].match(%r'^/')
32
- response = route[1].call(env)
33
- return response if response[1]['X-Cascade'] != 'pass'
48
+
49
+ response = route.app.call(env)
50
+ return response unless response[1]['X-Cascade'] == 'pass'
34
51
  end
52
+
35
53
  end
36
54
 
37
55
  # If no routes found
@@ -0,0 +1,46 @@
1
+ class Kazoo::Router
2
+
3
+ class Context
4
+
5
+ def initialize(router, opts = {})
6
+ @router = router
7
+ @opts = opts
8
+ end
9
+
10
+ def match(path, opts)
11
+ opts = @opts.merge(opts)
12
+ name = extract_name(opts)
13
+ route = Route.new(path, opts)
14
+ @router.named_routes[name] = route if name
15
+ @router.routes << route
16
+ route
17
+ end
18
+
19
+ def context(opts = {})
20
+ opts = opts.dup
21
+
22
+ if @opts[:path_prefix] && opts[:path_prefix]
23
+ opts[:path_prefix] = File.join(@opts[:path_prefix], opts[:path_prefix])
24
+ end
25
+
26
+ if @opts[:name_prefix] && opts[:name_prefix]
27
+ opts[:name_prefix] = @opts[:name_prefix] + '_' + opts[:name_prefix]
28
+ end
29
+
30
+ c = self.class.new(@router, opts)
31
+ yield c
32
+ c
33
+
34
+ end
35
+
36
+ def extract_name(opts)
37
+
38
+ end
39
+
40
+ def error_handler(app)
41
+ @router.error_handler(app)
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,110 @@
1
+ class Kazoo::Router
2
+
3
+ class Route
4
+
5
+ def initialize(path, opts = {})
6
+
7
+ @named_params = []
8
+ @opts = opts
9
+
10
+ # Extract & delete the special options
11
+ @app = opts.delete(:to)
12
+
13
+ @path_prefix = opts.delete(:path_prefix)
14
+ @regex_prefix = opts.delete(:regex_prefix)
15
+ opts.delete(:name_prefix)
16
+
17
+ # Parse the path
18
+ if path.is_a?(String)
19
+
20
+ path = File.join(@path_prefix, path) if @path_prefix
21
+
22
+ @passed_string = path
23
+
24
+ @parts = path.split('/')
25
+ @parts.shift if @parts[0].nil?
26
+
27
+ regexp_parts = @parts.map { |part|
28
+ # extracts the names of the path
29
+ if matches = part.match(/^:([a-z]+[a-z0-9_]*)$/i)
30
+ @named_params << matches[1].downcase
31
+ "([^\/]+)"
32
+ elsif part
33
+ part
34
+ else
35
+ raise ArgumentError, 'Paths may not have blank parts'
36
+ end
37
+ }
38
+ final_path = regexp_parts.join('/')
39
+ elsif path.is_a?(Regexp)
40
+ final_path = path.inspect
41
+ final_path.gsub!(/(^\^)|(\$$)/, '') # Remove anchors
42
+ final_path = File.join(@regex_prefix, file_path) if @regex_prefix
43
+ else
44
+ raise ArgumentError, "Invalid type passed to a route: #{path.class.name}. Must be either a string or regexp."
45
+ end
46
+
47
+ final_path = "/#{final_path}" unless final_path.match(%r"^\/")
48
+ final_path = "#{final_path}/" unless final_path.match(%r"\/$")
49
+ @matcher = Regexp.new("^#{final_path}")
50
+ end
51
+
52
+ def to_s
53
+ @passed_string || @matcher.inspect
54
+ end
55
+
56
+ def to_regexp
57
+ @matcher
58
+ end
59
+
60
+ def app
61
+ @app
62
+ end
63
+
64
+ def named_params
65
+ @named_params
66
+ end
67
+
68
+ def extract_params(path)
69
+ if matches = @matcher.match(path)
70
+ obj = @opts.dup
71
+ named_params.each_with_index { |np, i| obj[np] = matches[i + 1] }
72
+ obj
73
+ end
74
+ end
75
+
76
+ def path(opts = {})
77
+
78
+ opts = @opts.merge(opts)
79
+
80
+ raise "Path cannot be generated from a Regexp" unless @passed_string
81
+
82
+ unused_params = @named_params - opts.keys.map { |key| key.to_s }
83
+ raise ArgumentError, "You must supply the following params: #{unused_params.inspect}" if unused_params.size > 0
84
+
85
+ str = @passed_string.dup
86
+
87
+ extra_keys = []
88
+
89
+ opts.keys.each { |key|
90
+ if test = str.sub!(%r"(\:|\*)#{key}", opts[key].to_s)
91
+ raise ArgumentError, "#{key} requires a value" if opts[key].nil?
92
+ else
93
+ extra_keys << key
94
+ end
95
+ }
96
+
97
+ if extra_keys.size > 0
98
+ pstring = extra_keys.map { |key|
99
+ "#{CGI.escape(key.to_s)}=#{CGI.escape(opts[key].to_s)}" unless opts[key].nil?
100
+ }.compact.join('&')
101
+ "#{str}?#{pstring}"
102
+ else
103
+ str
104
+ end#if
105
+
106
+ end#def
107
+
108
+ end#class
109
+
110
+ end
data/lib/kazoo/sinatra.rb CHANGED
@@ -2,6 +2,34 @@ require 'sinatra/base'
2
2
 
3
3
  class Kazoo::Sinatra < Sinatra::Base
4
4
 
5
+ enable :sessions
6
+
7
+ before do
8
+ params.merge!(kenv['params']) if kenv['params']
9
+ end
10
+
11
+ def ksession
12
+ session['kazoo'] ||= {}
13
+ end
14
+
15
+ def kenv
16
+ @request.env['kazoo'] ||= {}
17
+ end
18
+
19
+ def current_user=(user)
20
+ if user
21
+ ksession['user_id'] = user.id
22
+ ksession['user_class'] = user.class.name
23
+ else
24
+ ksession['user_class'] = ksession['user_id'] = nil
25
+ end
26
+ user
27
+ end
28
+
29
+ def current_user
30
+ @_kcu ||= Kernal.const_get(k).find(ksession['user_id']) if ksession['user_id']
31
+ end
32
+
5
33
  def render(engine, data, options = {}, *args)
6
34
 
7
35
  if !options[:views] && data.is_a?(Symbol) && !data.to_s.match('/')
@@ -45,27 +73,30 @@ class Kazoo::Sinatra < Sinatra::Base
45
73
  self.class.paths
46
74
  end
47
75
 
48
- def url(name, opts = {})
49
- n = name.to_sym
50
- raise ArgumentError, "Invalid url name: #{name}" unless paths[n]
51
-
52
- url_path = paths[n].split('/').map { |part|
53
- next unless part.is_a?(String)
54
- if matches = part.match(/^:([a-z_]+)$/i)
55
- matched = matches[1].downcase
56
- opts[matched] || opts[matched.to_sym] || params[matched] || raise("You need to pass '#{matched}' to generate URL")
57
- else
58
- part
59
- end
60
- }.join('/')
76
+ def url(name = '', opts = {})
77
+ if name.is_a?(Symbol)
78
+ raise ArgumentError, "Invalid url name: #{name}" unless paths[name]
61
79
 
62
- # Check for prefix
63
- full_path = request.env['HTTP_PREFIX'] ? File.join(request.env['HTTP_PREFIX'], url_path) : url_path
64
-
65
- format = opts[:format] || opts['format']
66
- full_path << ".#{format}" if format
67
-
68
- full_path
80
+ url_path = paths[name].split('/').map { |part|
81
+ next unless part.is_a?(String)
82
+ if matches = part.match(/^:([a-z_]+)$/i)
83
+ matched = matches[1].downcase
84
+ opts[matched] || opts[matched.to_sym] || params[matched] || raise("You need to pass '#{matched}' to generate URL")
85
+ else
86
+ part
87
+ end
88
+ }.join('/')
89
+
90
+ # Check for prefix
91
+ full_path = kenv['HTTP_PREFIX'] ? File.join(kenv['HTTP_PREFIX'], url_path) : url_path
92
+
93
+ format = opts[:format] || opts['format']
94
+ full_path << ".#{format}" if format
95
+
96
+ full_path
97
+ else
98
+ kenv['HTTP_PREFIX'] ? File.join(kenv['HTTP_PREFIX'], name) : name
99
+ end
69
100
  end
70
101
 
71
102
  private
@@ -0,0 +1,40 @@
1
+ module Kazoo::Support
2
+
3
+
4
+ def load_files(files)
5
+ excepted_inits = []
6
+ files.sort.each do |init|
7
+ begin
8
+ require init
9
+ rescue => e
10
+ excepted_inits.push([init, {e => 0}])
11
+ end
12
+ end
13
+
14
+ # Go through the ones that might have dependencies on other inits.
15
+ max_error_size = excepted_inits.size * 4
16
+
17
+ while excepted_inits.size > 0
18
+
19
+ begin
20
+ excepted_init = excepted_inits.pop
21
+ require excepted_init[0]
22
+ rescue => e
23
+ c = e.class
24
+ excepted_init[1][c] ||= 0
25
+
26
+ if excepted_init[1][c] > max_error_size
27
+ raise
28
+ else
29
+ excepted_init[1][c] += 1
30
+ excepted_inits.unshift(excepted_init)
31
+ end#if
32
+
33
+ end#begin
34
+
35
+ end#while
36
+
37
+ end#def
38
+
39
+
40
+ end#module
data/readme.markdown CHANGED
@@ -1,15 +1,14 @@
1
1
  Kazoo
2
2
  =====
3
3
 
4
- Kazoo is a Ruby library that aims to make your Rack applications behave like one. So far, it's very minimal with a simple router and some methods added to Sinatra to make it easier to have multiple Sinatra apps act more cohesively. Please note the current version on this: 0.0.1. This is nowhere near finished! It is on rubygems.org so that you can install it by running:
4
+ Kazoo is a Ruby framework to faciliate modular content management applications. So far, it's a router and some methods added to Sinatra to make it easier to have multiple Sinatra apps act more cohesively. Please note the current version on this: 0.0.4, so please be aware that it is not production ready yet. Kazoo is on rubygems.org so that you can install it by running:
5
5
 
6
6
  gem install kazoo
7
7
 
8
- The Kazoo router takes string paths and matches them to apps with no bells or whistles (yet). This is how you use it in a config.ru file:
8
+ The Kazoo router takes paths and matches them to apps. This is how you use it in a config.ru file:
9
9
 
10
10
  require 'rubygems'
11
11
  require 'kazoo'
12
- require 'kazoo/router'
13
12
 
14
13
  # Omitted code that pulls in Sinatra apps...
15
14
 
@@ -57,4 +56,4 @@ In order to facilitate the fact that apps can be mounted at different paths, url
57
56
  <p>This is the generated URL for this page: <%= url(:show, :id => @feed.id) %></p>
58
57
 
59
58
 
60
- If you run into any problems or have suggestions, feel free to send a ticket to /dev/null. Or you can submit one at https://github.com/eltiare/kazoo/issues, your choice.
59
+ If you run into any problems or have suggestions please submit a ticket at https://github.com/eltiare/kazoo/issues
@@ -0,0 +1,6 @@
1
+ require File.join(File.dirname(__FILE__), '../spec_helper')
2
+
3
+ describe Kazoo::Router::Context do
4
+
5
+
6
+ end
@@ -0,0 +1,39 @@
1
+ require File.join(File.dirname(__FILE__), '../spec_helper')
2
+
3
+ describe Kazoo::Router::Route do
4
+
5
+ before(:each) do
6
+ @route = Kazoo::Router::Route.new('/your/:relative/is/:adjective')
7
+ @route2 = Kazoo::Router::Route.new('/testing')
8
+ end
9
+
10
+ it "extracts the variables from a path" do
11
+ @route.named_params.should eq(['relative', 'adjective'])
12
+ end
13
+
14
+ it "generates a path with variables" do
15
+ @route.path(:relative => 'mom', :adjective => 'huge').should eq(
16
+ '/your/mom/is/huge'
17
+ )
18
+ end
19
+
20
+ it "generates a path with extranous variables" do
21
+ @route.path(:relative => 'mom', :adjective => 'huge', :laughs => 1, :true => 'yes').should eq(
22
+ '/your/mom/is/huge?laughs=1&true=yes'
23
+ )
24
+ end
25
+
26
+ it "throws an error if a required var is left out" do
27
+ lambda { @route.path(:relative => 'mom') }.should raise_error(ArgumentError, /adjective/)
28
+ end
29
+
30
+ it "properly forms a matching regexp" do
31
+ @route2.to_regexp.inspect.should eq('/^\/testing\//')
32
+ @route.to_regexp.inspect.should eq('/^\/your\/([^\/]+)\/is\/([^\/]+)\//')
33
+ end
34
+
35
+ it "doesn't match similar segments" do
36
+ @route2.extract_params('/testing_and_stuff').should eq(nil)
37
+ end
38
+
39
+ end
@@ -0,0 +1,38 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+
4
+ describe Kazoo::Router do
5
+
6
+ before :each do
7
+ @proper_response = [200, {'Content-Type' => 'text/plain'}, 'Yay!']
8
+ @proper_response2 = [200, {'Content-Type' => 'text/plain'}, 'Response2']
9
+ @not_found_response = [404, {"X-Cascade"=>"pass", "Content-Type"=>"text/plain"}, "The requested URI is not found"]
10
+
11
+ handler = lambda { @proper_response }
12
+ handler2 = lambda { @proper_response2 }
13
+
14
+ @router = Kazoo::Router.map do
15
+ match '/something/:id', :to => handler
16
+ match '/something', :to => handler
17
+ match '/something_else', :to => handler2
18
+ end
19
+
20
+ end
21
+
22
+ it "routes to the proper handler" do
23
+ @router.call({ 'PATH_INFO' => '/something' }).should eq(@proper_response)
24
+ @router.call({ 'PATH_INFO' => '/something/else'}).should eq(@proper_response)
25
+ end
26
+
27
+ it "sets the kazoo params" do
28
+ env = { 'PATH_INFO' => '/something/123' }
29
+ @router.call(env)
30
+ env['kazoo']['params'].should eq({'id' => '123'})
31
+ end
32
+
33
+ it "matches later routes properly" do
34
+ env = { 'PATH_INFO' => '/something_else/testing_blah' }
35
+ @router.call(env).should eq(@proper_response2)
36
+ end
37
+
38
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ profile
4
+ --timeout
5
+ 20
6
+ --diff
@@ -0,0 +1,7 @@
1
+ unless defined? SPEC_DIR
2
+ SPEC_DIR = File.dirname(__FILE__)
3
+ lib_path = File.expand_path("#{SPEC_DIR}/../lib")
4
+ $LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
5
+
6
+ require 'kazoo'
7
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kazoo
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jeremy Nicoll
@@ -36,11 +36,11 @@ cert_chain:
36
36
  ZVeyFF4suKZEIEKi
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2011-01-28 00:00:00 -07:00
39
+ date: 2011-02-16 00:00:00 -07:00
40
40
  default_executable:
41
41
  dependencies: []
42
42
 
43
- description: Make your Ruby Rack apps act like one
43
+ description: A moduler framework to facilitate the development of content management systems
44
44
  email: jnicoll @nspam@ accentuate.me
45
45
  executables: []
46
46
 
@@ -48,16 +48,29 @@ extensions: []
48
48
 
49
49
  extra_rdoc_files:
50
50
  - lib/kazoo.rb
51
+ - lib/kazoo/accessors.rb
51
52
  - lib/kazoo/router.rb
53
+ - lib/kazoo/router/context.rb
54
+ - lib/kazoo/router/route.rb
52
55
  - lib/kazoo/sinatra.rb
56
+ - lib/kazoo/support.rb
53
57
  files:
54
58
  - MIT-License
55
59
  - Manifest
56
60
  - Rakefile
57
61
  - lib/kazoo.rb
62
+ - lib/kazoo/accessors.rb
58
63
  - lib/kazoo/router.rb
64
+ - lib/kazoo/router/context.rb
65
+ - lib/kazoo/router/route.rb
59
66
  - lib/kazoo/sinatra.rb
67
+ - lib/kazoo/support.rb
60
68
  - readme.markdown
69
+ - spec/router/context_spec.rb
70
+ - spec/router/route_spec.rb
71
+ - spec/router_spec.rb
72
+ - spec/spec.opts
73
+ - spec/spec_helper.rb
61
74
  - kazoo.gemspec
62
75
  has_rdoc: true
63
76
  homepage: http://rubykazoo.com
@@ -95,9 +108,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
108
  requirements: []
96
109
 
97
110
  rubyforge_project: kazoo
98
- rubygems_version: 1.4.2
111
+ rubygems_version: 1.5.0
99
112
  signing_key:
100
113
  specification_version: 3
101
- summary: Make your Ruby Rack apps act like one
114
+ summary: A moduler framework to facilitate the development of content management systems
102
115
  test_files: []
103
116
 
metadata.gz.sig CHANGED
Binary file