Skip to content

Commit

Permalink
Merge pull request #52 from alisnic/release-3.2.2
Browse files Browse the repository at this point in the history
Release 3.2.2
  • Loading branch information
alisnic committed Jan 28, 2014
2 parents df44652 + 089709b commit 15df951
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 24 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
3.2.2
- Use Journey directly from ActionDispatch, since rails/journey is obsolete
- Fix indifferent nested params
- Make helpers accessible inside namespaces
- Fix namespaces inheritance behaviour

3.2.1
- Fallback to Tilt 1.4.1 since 2.0.0 has conflicts with a lot
of gems
Expand Down
11 changes: 9 additions & 2 deletions lib/nyny/app.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,15 @@ def register *extensions
end

def namespace url, &block
app = Class.new(NYNY::App, &block)
builder.map (url) { use app }
scope = self.scope_class
parent = self.superclass

klass = Class.new parent do
self.scope_class = scope
class_eval(&block)
end

builder.map (url) { use klass }
end

def before &blk
Expand Down
5 changes: 5 additions & 0 deletions lib/nyny/primitives.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
require 'active_support/hash_with_indifferent_access'

module NYNY
class Request < Rack::Request
def params
@params ||= ActiveSupport::HashWithIndifferentAccess.new(super)
end
end

class Response < Rack::Response
Expand Down
7 changes: 4 additions & 3 deletions lib/nyny/request_scope.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ class RequestScope
extend Forwardable

attr_reader :request, :response
def_delegators :request, :params, :session
def_delegators :request, :session, :params
def_delegators :response, :headers

def initialize request
@request = request
def initialize env
@request = Request.new(env)
@request.params.merge! env['nyny.params']
@response = Response.new [], 200, {'Content-Type' => 'text/html'}
end

Expand Down
17 changes: 7 additions & 10 deletions lib/nyny/router.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
require 'journey'
require 'active_support/concern'
require 'action_dispatch/routing'
require 'action_dispatch/journey'

module NYNY
class Router
Expand All @@ -25,12 +27,13 @@ def call env
private

def prepare_for_journey route_defs
@journey = Journey::Router.new(Journey::Routes.new, {
routes = ActionDispatch::Journey::Routes.new
@journey = ActionDispatch::Journey::Router.new(routes, {
:parameters_key => 'nyny.params'
})

route_defs.each do |path, options, handler|
pat = Journey::Path::Pattern.new(path)
pat = ActionDispatch::Journey::Path::Pattern.new(path)
constraints = options.fetch(:constraints, {})
defaults = options.fetch(:defaults, {})

Expand All @@ -40,13 +43,7 @@ def prepare_for_journey route_defs

def compile handler
Proc.new do |env|
request = Request.new(env)
request.params.merge! env["nyny.params"]
request.params.default_proc = lambda do |h, k|
h.fetch(k.to_s, nil) || h.fetch(k.to_sym, nil)
end

scope = scope_class.new(request)
scope = scope_class.new(env)

response = catch (:halt) do
before_hooks.each {|h| scope.instance_eval &h }
Expand Down
2 changes: 1 addition & 1 deletion lib/nyny/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module NYNY
VERSION = "3.2.1"
VERSION = "3.2.2"
end
5 changes: 1 addition & 4 deletions nyny.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'nyny/version'

Gem::Specification.new do |spec|
spec.required_ruby_version = ">= 1.9.2"

spec.name = "nyny"
spec.version = NYNY::VERSION
spec.authors = ["Andrei Lisnic"]
Expand All @@ -20,11 +18,10 @@ Gem::Specification.new do |spec|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]

spec.add_dependency "rack", "~> 1.5.2"
spec.add_dependency "rack-contrib", "~> 1.1.0"
spec.add_dependency "tilt", "~> 1.4.1"
spec.add_dependency "better_errors", "~> 1.1.0"
spec.add_dependency "journey", "~> 1.0.4"
spec.add_dependency "actionpack", "~> 4.0.2"
spec.add_development_dependency "bundler", "~> 1.3"
spec.add_development_dependency "rake"
spec.add_development_dependency "rspec"
Expand Down
8 changes: 8 additions & 0 deletions spec/app_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,23 @@ def foo
describe 'namespace' do
let (:app) do
mock_app do
helpers do
def le_helper
:lulwut
end
end

namespace '/foo' do
get '/' do
le_helper.should == :lulwut
'bar'
end
end

namespace '/nested' do
namespace '/space' do
get '/' do
le_helper.should == :lulwut
'caramba'
end
end
Expand Down
11 changes: 11 additions & 0 deletions spec/inheritance_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@ def child_helper; :child; end
headers['child after'] = 'true'
end

namespace '/nested' do
get '/' do
parent_helper.should == :parent
end
end

get '/helpers' do
parent_helper.should == :parent
child_helper.should == :child
Expand Down Expand Up @@ -73,5 +79,10 @@ def child_helper; :child; end
parent.get('/helpers')
child.get('/helpers')
end

it 'works correctly for namespaces' do
child.get('/nested').headers['parent before'].should_not be_nil
child.get('/nested').headers['parent after'].should_not be_nil
end
end
end
8 changes: 4 additions & 4 deletions spec/request_scope_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

describe RequestScope do
let (:env) { Rack::MockRequest.env_for '/', :params => {:some => 'param'} }
let (:dummy_request) { Rack::Request.new(env) }
let (:subject) { RequestScope.new dummy_request }
let (:subject) { RequestScope.new env.merge('nyny.params' => {}) }
let (:dummy_request) { subject.request }
let (:handler) {
Proc.new {"hello"}
}
Expand All @@ -16,11 +16,11 @@
it 'params should have insensitive keys' do
app = mock_app do
get '/' do
params[:foo].should == params['foo']
params[:foo][:bar].should == params['foo']['bar']
end
end

app.get '/?foo=bar'
app.get '/', :params => {:foo => {:bar => 'baz'}}
end

describe 'cookies' do
Expand Down

0 comments on commit 15df951

Please sign in to comment.