junior 0.0.0 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,12 +1,20 @@
1
- = Junior
1
+ Junior
2
+ ======
2
3
 
3
4
  An MVC Web Framework
4
5
 
5
- == Installation
6
+ Installation
7
+ ------------
6
8
 
7
9
  sudo gem install junior
8
10
 
9
- == Note on Patches/Pull Requests
11
+ Example App
12
+ -----------
13
+
14
+ http://github.com/eddanger/junior-app
15
+
16
+ Note on Patches/Pull Requests
17
+ -----------------------------
10
18
 
11
19
  * Fork the project.
12
20
  * Make your feature addition or bug fix.
@@ -16,6 +24,7 @@ sudo gem install junior
16
24
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
17
25
  * Send me a pull request. Bonus points for topic branches.
18
26
 
19
- == Copyright
27
+ Copyright
28
+ ---------
20
29
 
21
- Copyright (c) 2010 Michael Wood. See LICENSE for details.
30
+ Copyright (c) 2010 Michael Wood. See LICENSE for details.
data/Rakefile CHANGED
@@ -11,8 +11,8 @@ begin
11
11
  gem.homepage = 'http://github.com/eddanger/junior'
12
12
  gem.authors = ["Michael Wood"]
13
13
 
14
- gem.add_dependency 'rack', "~> 1.0.1"
15
- gem.add_dependency 'rack-mount', "~> 0.4.0"
14
+ gem.add_dependency 'rack', "~> 1.1.0"
15
+ gem.add_dependency 'usher', "~> 0.6.2"
16
16
  gem.add_dependency 'tilt', "~> 0.4.0"
17
17
 
18
18
  gem.add_development_dependency 'rspec', '~> 1.2.9'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.1.0
data/junior.gemspec CHANGED
@@ -5,21 +5,21 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{junior}
8
- s.version = "0.0.0"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Wood"]
12
- s.date = %q{2009-12-31}
12
+ s.date = %q{2010-01-05}
13
13
  s.description = %q{A Mini MVC Web Framework for Ruby built on Rack and a lot of inspiration from Sinatra}
14
14
  s.email = %q{mike@michaelwood.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README"
17
+ "README.md"
18
18
  ]
19
19
  s.files = [
20
20
  ".gitignore",
21
21
  "LICENSE",
22
- "README",
22
+ "README.md",
23
23
  "Rakefile",
24
24
  "VERSION",
25
25
  "junior.gemspec",
@@ -28,7 +28,6 @@ Gem::Specification.new do |s|
28
28
  "lib/junior/controller.rb",
29
29
  "lib/junior/dispatcher.rb",
30
30
  "lib/junior/helpers.rb",
31
- "lib/junior/request.rb",
32
31
  "lib/junior/router.rb",
33
32
  "lib/junior/support.rb",
34
33
  "spec/junior_spec.rb",
@@ -52,21 +51,21 @@ Gem::Specification.new do |s|
52
51
  s.specification_version = 3
53
52
 
54
53
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
55
- s.add_runtime_dependency(%q<rack>, ["~> 1.0.1"])
56
- s.add_runtime_dependency(%q<rack-mount>, ["~> 0.4.0"])
54
+ s.add_runtime_dependency(%q<rack>, ["~> 1.1.0"])
55
+ s.add_runtime_dependency(%q<usher>, ["~> 0.6.2"])
57
56
  s.add_runtime_dependency(%q<tilt>, ["~> 0.4.0"])
58
57
  s.add_development_dependency(%q<rspec>, ["~> 1.2.9"])
59
58
  s.add_development_dependency(%q<yard>, ["~> 0.5.2"])
60
59
  else
61
- s.add_dependency(%q<rack>, ["~> 1.0.1"])
62
- s.add_dependency(%q<rack-mount>, ["~> 0.4.0"])
60
+ s.add_dependency(%q<rack>, ["~> 1.1.0"])
61
+ s.add_dependency(%q<usher>, ["~> 0.6.2"])
63
62
  s.add_dependency(%q<tilt>, ["~> 0.4.0"])
64
63
  s.add_dependency(%q<rspec>, ["~> 1.2.9"])
65
64
  s.add_dependency(%q<yard>, ["~> 0.5.2"])
66
65
  end
67
66
  else
68
- s.add_dependency(%q<rack>, ["~> 1.0.1"])
69
- s.add_dependency(%q<rack-mount>, ["~> 0.4.0"])
67
+ s.add_dependency(%q<rack>, ["~> 1.1.0"])
68
+ s.add_dependency(%q<usher>, ["~> 0.6.2"])
70
69
  s.add_dependency(%q<tilt>, ["~> 0.4.0"])
71
70
  s.add_dependency(%q<rspec>, ["~> 1.2.9"])
72
71
  s.add_dependency(%q<yard>, ["~> 0.5.2"])
@@ -14,10 +14,11 @@ module Junior
14
14
 
15
15
  def call!(env)
16
16
  @env = env
17
- #@request = Rack::Request.new(env)
18
- @request = Junior::Request.new(env)
17
+ @request = Rack::Request.new(env)
19
18
  @response = Rack::Response.new
20
19
 
20
+ #puts env.inspect
21
+
21
22
  Dispatcher.dispatch!(self)
22
23
 
23
24
  status, header, body = @response.finish
@@ -29,20 +30,14 @@ module Junior
29
30
 
30
31
  def reset!
31
32
  @middleware = []
32
- @resources = []
33
- @routes = []
34
33
  @prototype = nil
35
34
  end
36
35
 
37
- def router
38
- Router.router(self)
39
- end
40
-
41
36
  def prototype
42
37
  @prototype ||= new
43
38
  end
44
39
 
45
- def new(*args, &bk)
40
+ def new(*args, &block)
46
41
  builder = Rack::Builder.new
47
42
 
48
43
  middleware.each { |middleware, args, block| builder.use(middleware, *args, &block) }
@@ -67,26 +62,10 @@ module Junior
67
62
  end
68
63
  end
69
64
 
70
- def resources
71
- @resources || []
72
- end
73
-
74
- def routes
75
- @routes || []
76
- end
77
-
78
65
  def use(middleware, *args, &block)
79
66
  @middleware << [ middleware, args, block ]
80
67
  end
81
68
 
82
- def resource(resource)
83
- @resources << resource
84
- end
85
-
86
- def route(path, to = {}, method = 'GET')
87
- @routes << { :path => path, :to => to, :method => method }
88
- end
89
-
90
69
  def set(option, value=self)
91
70
  if value.kind_of?(Proc)
92
71
  metadef(option, &value)
@@ -15,14 +15,17 @@ module Junior
15
15
  @resource_id = id
16
16
  end
17
17
 
18
- def render(path)
18
+ def render(path, *args)
19
+
20
+ layout_path = ( args.first && ( args.first[ :layout_path ] || args.first[ :layout_path ].nil? ) ) ? args.first[ :layout_path ] : self.class.layout_path
21
+
19
22
  begin
20
23
  template = Tilt.new(path)
21
24
 
22
25
  output = template.render(self)
23
26
 
24
- if self.class.layout_path
25
- layout_template = Tilt.new(self.class.layout_path)
27
+ if layout_path
28
+ layout_template = Tilt.new(layout_path)
26
29
  output = layout_template.render(self) { output }
27
30
  end
28
31
 
@@ -35,6 +38,10 @@ module Junior
35
38
  output
36
39
  end
37
40
 
41
+ def partial(path, *args)
42
+ render path, :layout_path => nil
43
+ end
44
+
38
45
  class << self
39
46
 
40
47
  attr_reader :layout_path
@@ -14,16 +14,22 @@ module Junior
14
14
 
15
15
  #puts app.env['rack.input'].read
16
16
 
17
- controller = app.env[ 'rack.routing_args' ][ :controller ].to_s
18
- action = app.env[ 'rack.routing_args' ][ :action ].to_s
19
- id = app.env[ 'rack.routing_args' ][ :id ].to_s
17
+ controller = app.env[ 'usher.response' ].last.destination[ :controller ].to_s
18
+
19
+ if controller[ '/' ] # a nested route
20
+ controller = controller[(controller.rindex( '/' ) + 1)..controller.length]
21
+ puts controller
22
+ end
23
+
24
+ action = app.env[ 'usher.response' ].last.destination[ :action ].to_s
25
+ id = app.env[ 'usher.params' ][ :id ].to_s
20
26
 
21
27
  controller_instance = controller.camelize.to_class.new(app, id)
22
28
 
23
29
  if controller_instance.respond_to?(action)
24
30
  controller_instance.send(action)
25
31
  else
26
- not_found('Not found')
32
+ controller_instance.not_found('Not found')
27
33
  end
28
34
  end
29
35
  end
data/lib/junior/router.rb CHANGED
@@ -2,33 +2,76 @@ module Junior
2
2
 
3
3
  class Router
4
4
 
5
+ attr_reader :app, :router
6
+
7
+ def initialize(app, router)
8
+ @app, @router = app, router
9
+ end
10
+
11
+ def call(env)
12
+ @router.call(env)
13
+ @app.call(env)
14
+ end
15
+
16
+ end
17
+ end
18
+
19
+
20
+ module Junior
21
+
22
+ class Usher
23
+
24
+ attr_reader :router
25
+
26
+ def initialize
27
+ @router = ::Usher::Interface.for(:rack, nil, :use_destinations => false)
28
+ end
29
+
5
30
  class << self
6
31
 
7
- def router( app )
8
- router = Rack::Mount::RouteSet.new do |set|
9
- app.resources.each do |resource|
10
- set.add_route app, { :path_info => %r{^/#{resource}(\.(?:<format>[a-z]+))?$}, :request_method => 'GET' }, { :controller => resource, :action => 'index' }
11
- set.add_route app, { :path_info => %r{^/#{resource}(\.(?:<format>[a-z]+))?$}, :request_method => 'POST' }, { :controller => resource, :action => 'create' }
12
- set.add_route app, { :path_info => %r{^/#{resource}/new(\.(?:<format>[a-z]+))?$}, :request_method => 'GET' }, { :controller => resource, :action => 'new' }
13
- set.add_route app, { :path_info => %r{^/#{resource}/(?:<id>[^/]+)/edit(\.(?:<format>[a-z]+))?$}, :request_method => 'GET' }, { :controller => resource, :action => 'edit' }
14
- set.add_route app, { :path_info => %r{^/#{resource}/(?:<id>[^/]+)/delete(\.(?:<format>[a-z]+))?$}, :request_method => 'GET' }, { :controller => resource, :action => 'delete' }
15
- set.add_route app, { :path_info => %r{^/#{resource}/(?:<id>[^/]+)(\.(?:<format>[a-z]+))?$}, :request_method => 'GET' }, { :controller => resource, :action => 'show' }
16
- set.add_route app, { :path_info => %r{^/#{resource}/(?:<id>[^/]+)(\.(?:<format>[a-z]+))?$}, :request_method => 'PUT' }, { :controller => resource, :action => 'update' }
17
- set.add_route app, { :path_info => %r{^/#{resource}/(?:<id>[^/]+)(\.(?:<format>[a-z]+))?$}, :request_method => 'DELETE' }, { :controller => resource, :action => 'destroy' }
18
- end
19
-
20
- app.routes.each do |route|
21
- set.add_route app, { :path_info => %r{^#{route[ :path ]}$}, :request_method => route[ :method ] }, route[ :to ]
22
- end
23
-
24
- # default
25
- #set.add_route app, { :path_info => %r{^/$} }, { :controller => app.default_controller, :action => app.default_action }
26
- #set.add_route app, { :path_info => %r{^/(?:<controller>[a-z0-9]+)(/(?:<action>[a-z0-9]+)(/(?:<id>[a-z0-9]+)(\.(?:<format>[a-z]+))?)?)?$} }, { :controller => app.default_controller, :action => app.default_action }
27
- end
28
-
29
- router
32
+ def routes( &block )
33
+ usher = self.new
34
+
35
+ usher.instance_eval( &block )
36
+
37
+ usher.router
30
38
  end
39
+ end
40
+
41
+ def resources( resource, &block )
42
+ resource = "#{@parent_resource}/:#{@parent_resource}_id/#{resource}" if @parent_resource
31
43
 
44
+ self.router.get( "/#{resource}(.:format)" ).to( :controller => resource, :action => 'index' ).name( :"#{resource}_index" )
45
+ self.router.post( "/#{resource}(.:format)" ).to( :controller => resource, :action => 'create' ).name( :"#{resource}_create" )
46
+ self.router.get( "/#{resource}/new(.:format)" ).to( :controller => resource, :action => 'new' ).name( :"#{resource}_new" )
47
+ self.router.get( "/#{resource}/:id/edit(.:format)" ).to( :controller => resource, :action => 'edit' ).name( :"#{resource}_edit" )
48
+ self.router.get( "/#{resource}/:id/delete(.:format)" ).to( :controller => resource, :action => 'delete' ).name( :"#{resource}_delete" )
49
+ self.router.get( "/#{resource}/:id(.:format)" ).to( :controller => resource, :action => 'show' ).name( :"#{resource}_show" )
50
+ self.router.put( "/#{resource}/:id(.:format)" ).to( :controller => resource, :action => 'update' ).name( :"#{resource}_update" )
51
+ self.router.delete( "/#{resource}/:id(.:format)" ).to( :controller => resource, :action => 'destroy' ).name( :"#{resource}_destroy" )
52
+
53
+ if block_given?
54
+ @parent_resource = resource
55
+ block.call
56
+ end
57
+
58
+ @parent_resource = nil
59
+ end
60
+
61
+ def get( path, route )
62
+ self.router.get( path ).to( route )
63
+ end
64
+
65
+ def put( path, route )
66
+ self.router.put( path ).to( route )
67
+ end
68
+
69
+ def post( path, route )
70
+ self.router.post( path ).to( route )
71
+ end
72
+
73
+ def delete( path, route )
74
+ self.router.delete( path ).to( route )
32
75
  end
33
76
 
34
77
  end
data/lib/junior.rb CHANGED
@@ -1,14 +1,11 @@
1
1
  module Junior
2
- VERSION = '0.0.0'
3
-
4
2
  require 'rack'
5
3
  require 'rack/builder'
6
- require 'rack/mount'
4
+ require 'usher'
7
5
  require 'tilt'
8
6
 
9
7
  require 'junior/helpers'
10
8
  require 'junior/router'
11
- require 'junior/request'
12
9
  require 'junior/dispatcher'
13
10
  require 'junior/controller'
14
11
  require 'junior/application'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: junior
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Wood
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-31 00:00:00 -08:00
12
+ date: 2010-01-05 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,17 +20,17 @@ dependencies:
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 1.0.1
23
+ version: 1.1.0
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
- name: rack-mount
26
+ name: usher
27
27
  type: :runtime
28
28
  version_requirement:
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 0.4.0
33
+ version: 0.6.2
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: tilt
@@ -70,11 +70,11 @@ extensions: []
70
70
 
71
71
  extra_rdoc_files:
72
72
  - LICENSE
73
- - README
73
+ - README.md
74
74
  files:
75
75
  - .gitignore
76
76
  - LICENSE
77
- - README
77
+ - README.md
78
78
  - Rakefile
79
79
  - VERSION
80
80
  - junior.gemspec
@@ -83,7 +83,6 @@ files:
83
83
  - lib/junior/controller.rb
84
84
  - lib/junior/dispatcher.rb
85
85
  - lib/junior/helpers.rb
86
- - lib/junior/request.rb
87
86
  - lib/junior/router.rb
88
87
  - lib/junior/support.rb
89
88
  - spec/junior_spec.rb
@@ -1,12 +0,0 @@
1
- module Junior
2
-
3
- class Request < Rack::Request
4
- # Make the methodoverride middleware work with rack 1.0.x
5
- def params
6
- self.GET.update(self.POST)
7
- rescue EOFError, Errno::ESPIPE
8
- self.GET
9
- end
10
- end
11
-
12
- end