mojito 0.2.4 → 0.2.5

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.
@@ -2,7 +2,7 @@ h1. mojito - Next level Ruby webframework
2
2
 
3
3
  p. Mojito is a lean and simple webframework.
4
4
 
5
- p. As the name implies mojito derives from cuba (https://github.com/soveran/cuba). Many thanks to Michel and his cuba project for giving me some major insights on web-application-simplicity!
5
+ p. As the name implies mojito derives from cuba (https://github.com/soveran/cuba). Many thanks to Michel and his cuba project for giving me some major insights on web-application-simplicity! See also https://github.com/mtrense/mojito-examples for more examples.
6
6
 
7
7
  h2. Installing
8
8
 
@@ -38,19 +38,17 @@ p. This starts a http-server on port 9292. Now try to call your handler with cur
38
38
  bc. $ curl http://localhost:9292/hello/Fred
39
39
  Hello Fred! How are you?
40
40
 
41
- p. Please be aware that although this way is easy to start with it tends to get messy very quick if your project becomes more complex, so please read on...
42
-
43
41
  h2. Controllers
44
42
 
45
- The method call @Mojito::Controllers.runtime_controller@ actually created a new controller class. Every controller inherits from @Mojito::Base@ which contains a minimal set of methods that all controllers must have in common. Controller classes are actually Rack-Applications, so they must provide a (class-)method @call(env)@. The common sequence of processing a request includes:
43
+ Controllers are the common building blocks of Mojito Applications. For each successful request at least one controller is instantiated. The call to @controller :runtime@ actually defines the calling class as runtime controller and includes the corresponding module - Mojito::Controllers::Runtime in this case. For a specific class one can choose from many controller types, each of which is specialized to a specific use-case.
44
+
45
+ Controller classes are actually Rack-Applications, so they must provide a (class-)method @call(env)@. The common sequence of processing a request includes:
46
46
 
47
47
  * @call(env)@ is called from the surrounding application/the framework
48
- * a new instance of the controller-class is instantiated and filled with the given environment
48
+ * a new instance of the controller-class is instantiated and configured with the given environment
49
49
  * a kind of dispatch method (@__dispatch@ for build-in controllers) is called to do the actual work
50
50
 
51
- This ensures that the controller instance which handles a specific request is used solely for that request, so that any instance variables created during request-processing stay request-local. At the same time this keeps application stacking and nesting as simple as @call@-ing the next application
52
-
53
-
51
+ This ensures that the controller instance which handles a specific request is used solely for that request, so that any instance variables created during request-processing stay request-local. At the same time this keeps application stacking and nesting as simple as @call@-ing the next application.
54
52
 
55
53
  h2. Structure of a real-world application
56
54
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.2.5
@@ -42,6 +42,8 @@ module Mojito
42
42
 
43
43
  def controller(name, options = {})
44
44
  mod = Mojito::Controllers.const_get name.to_s.camel_case.to_sym
45
+ [*options[:rendering]].each {|r| rendering r }
46
+ [*options[:helpers]].each {|h| helper h }
45
47
  include mod
46
48
  end
47
49
 
@@ -55,7 +57,7 @@ module Mojito
55
57
  when :all
56
58
  Mojito::Rendering
57
59
  else
58
- Mojito::Controllers.const_get name.to_s.camel_case.to_sym
60
+ Mojito::Rendering.const_get name.to_s.camel_case.to_sym
59
61
  end
60
62
  include mod
61
63
  end
@@ -10,13 +10,14 @@ module Mojito
10
10
  type.extend ClassMethods
11
11
  end
12
12
 
13
- def initialize(request)
13
+ def initialize(request, options = {})
14
14
  @__request = case request
15
15
  when Rack::Request
16
16
  request.dup
17
17
  when Hash, Mash
18
18
  Rack::Request.new(request.dup)
19
19
  end
20
+ @options = options
20
21
  self.env['MOJITO/CONTEXT_PATH'] = self.env['SCRIPT_NAME']
21
22
  end
22
23
 
@@ -1,10 +1,10 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Mojito::Controllers
4
+ require 'mojito/controllers/entities'
4
5
  require 'mojito/controllers/method'
5
6
  require 'mojito/controllers/runtime'
6
7
  require 'mojito/controllers/sinatra'
7
8
 
8
9
 
9
-
10
10
  end
@@ -0,0 +1,42 @@
1
+ # encoding: UTF-8
2
+
3
+ module Mojito::Controllers
4
+
5
+ module Entities
6
+
7
+ def self.included(type)
8
+ type.extend ClassMethods
9
+ end
10
+
11
+ def __dispatch
12
+
13
+ [404, { 'Content-Type' => 'application/octet-stream' }, []]
14
+ end
15
+
16
+ module ClassMethods
17
+
18
+ def types
19
+ @types ||= {}
20
+ end
21
+
22
+ def type(t, &block)
23
+ tc = TypeConfiguration.new t
24
+ tc.instance_exec &block if block
25
+ types[t] = tc
26
+ end
27
+
28
+ end
29
+
30
+ class TypeConfiguration
31
+
32
+ def initialize(type)
33
+ @type = type
34
+ end
35
+
36
+
37
+
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -6,6 +6,7 @@ module Mojito::Rendering
6
6
  require 'mojito/rendering/content_types'
7
7
  require 'mojito/rendering/delegation'
8
8
  require 'mojito/rendering/file'
9
+ require 'mojito/rendering/markup'
9
10
  require 'mojito/rendering/status_codes'
10
11
  require 'mojito/rendering/templates'
11
12
 
@@ -15,6 +16,7 @@ module Mojito::Rendering
15
16
  include ContentTypes
16
17
  include Delegation
17
18
  include File
19
+ include Markup
18
20
  include StatusCodes
19
21
  include Templates
20
22
  end
@@ -0,0 +1,14 @@
1
+ # encoding: UTF-8
2
+
3
+ module Mojito::Rendering
4
+
5
+ module Markup
6
+ require 'json_builder'
7
+
8
+ def generate_json(&block)
9
+ JSONBuilder::Compiler.generate &block
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -4,24 +4,13 @@ module Mojito::Rendering
4
4
 
5
5
  module StatusCodes
6
6
 
7
- def ok!
8
- response.status = 200
9
- halt!
10
- end
11
-
12
- def not_found!
13
- response.status = 404
14
- halt!
15
- end
16
-
17
- def internal_server_error!
18
- response.status = 500
19
- halt!
20
- end
21
-
22
- def unavailable!
23
- response.status = 503
24
- halt!
7
+ %W[ok not_found unauthorized internal_server_error service_unavailable].each do |status|
8
+ eval <<-EVAL
9
+ def #{status}!
10
+ response.status = #{Mojito::STATUS[status.to_sym].code}
11
+ halt!
12
+ end
13
+ EVAL
25
14
  end
26
15
 
27
16
  def redirect(target, status = 302)
@@ -13,7 +13,7 @@ describe Mojito::Rendering::StatusCodes do
13
13
  on 'ok' do ok! end
14
14
  on 'not_found' do not_found! end
15
15
  on 'internal_server_error' do internal_server_error! end
16
- on 'unavailable' do unavailable! end
16
+ on 'service_unavailable' do service_unavailable! end
17
17
  on 'redirect' do redirect! '/test' end
18
18
  end.mock_request
19
19
  end
@@ -21,9 +21,7 @@ describe Mojito::Rendering::StatusCodes do
21
21
  it { subject.get('/ok').status.should == 200 }
22
22
  it { subject.get('/not_found').status.should == 404 }
23
23
  it { subject.get('/internal_server_error').status.should == 500 }
24
- it { subject.get('/unavailable').status.should == 503 }
24
+ it { subject.get('/service_unavailable').status.should == 503 }
25
25
  it { subject.get('/redirect').should respond_with(302, 'Location' => '/test') }
26
- # it { subject.get('/redirect').status.should == 302 }
27
- # it { subject.get('/redirect').headers['Location'].should == '/test' }
28
26
 
29
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mojito
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-24 00:00:00.000000000 Z
12
+ date: 2012-09-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -75,6 +75,22 @@ dependencies:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
77
  version: 0.9.15
78
+ - !ruby/object:Gem::Dependency
79
+ name: json_builder
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 3.1.7
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 3.1.7
78
94
  - !ruby/object:Gem::Dependency
79
95
  name: where-am-i
80
96
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +200,7 @@ files:
184
200
  - lib/mojito.rb
185
201
  - lib/mojito/base.rb
186
202
  - lib/mojito/controllers.rb
203
+ - lib/mojito/controllers/entities.rb
187
204
  - lib/mojito/controllers/method.rb
188
205
  - lib/mojito/controllers/runtime.rb
189
206
  - lib/mojito/controllers/runtime/environment.rb
@@ -201,6 +218,7 @@ files:
201
218
  - lib/mojito/rendering/content_types.rb
202
219
  - lib/mojito/rendering/delegation.rb
203
220
  - lib/mojito/rendering/file.rb
221
+ - lib/mojito/rendering/markup.rb
204
222
  - lib/mojito/rendering/status_codes.rb
205
223
  - lib/mojito/rendering/templates.rb
206
224
  - lib/mojito/request_extensions.rb