junior 0.0.0 → 0.1.0

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.
@@ -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