mojito 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.textile CHANGED
@@ -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 is Cuba-born (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!
6
6
 
7
7
  h2. Installing
8
8
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/lib/mojito.rb CHANGED
@@ -46,6 +46,11 @@ module Mojito
46
46
  end
47
47
  end
48
48
 
49
+ def self.mode
50
+ (ENV['RACK_ENV'] || :development).to_sym
51
+ end
52
+
53
+
49
54
  ALL_HELPERS = [Mojito::Matchers, Mojito::Rendering, Mojito::Helpers::ExceptionHandling, Mojito::Helpers::Shortcuts, Mojito::Base]
50
55
 
51
56
  end
data/lib/mojito/base.rb CHANGED
@@ -55,6 +55,7 @@ module Mojito
55
55
  instance_exec *params, &block
56
56
  ensure
57
57
  @__env = env_backup
58
+ request.instance_exec { @env = env_backup }
58
59
  end
59
60
 
60
61
  ##
@@ -50,13 +50,13 @@ module Mojito
50
50
  def __handle_error(exception)
51
51
  if handler = case exception
52
52
  when MojitoException
53
+ response.status = exception.status
53
54
  self.class.error_handlers[exception.status]
54
55
  when Exception
55
56
  self.class.error_handlers[exception.class]
56
57
  end
57
58
  instance_exec &handler
58
59
  end
59
- puts "Exception: #{exception.inspect}"
60
60
  raise exception
61
61
  end
62
62
 
@@ -2,15 +2,22 @@
2
2
 
3
3
  module Mojito::Matchers
4
4
 
5
+ require 'mojito/matchers/environment'
5
6
  require 'mojito/matchers/methods'
6
7
  require 'mojito/matchers/path'
8
+ require 'mojito/matchers/url_scheme'
7
9
  require 'mojito/matchers/virtual_host'
8
10
 
11
+ include Environment
9
12
  include Methods
10
13
  include Path
14
+ include UrlScheme
11
15
  include VirtualHost
12
16
 
17
+ extend Environment
18
+ extend Methods
13
19
  extend Path
20
+ extend UrlScheme
14
21
  extend VirtualHost
15
22
 
16
23
  end
@@ -0,0 +1,13 @@
1
+ # encoding: UTF-8
2
+
3
+ module Mojito::Matchers
4
+
5
+ module Environment
6
+
7
+ def MODE(mode)
8
+ proc { Mojito.mode == mode.to_sym }
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -6,7 +6,7 @@ module Mojito::Matchers
6
6
 
7
7
  def PATH(pattern)
8
8
  consume_path = proc do |pattern|
9
- if match = env['PATH_INFO'].match(%r<\A/#{pattern}(?=/|\z)>)
9
+ if match = env['PATH_INFO'].match(%r<\A/*#{pattern}(?=/|\z)>)
10
10
  env['SCRIPT_NAME'] = match.to_s
11
11
  env['PATH_INFO'] = match.post_match
12
12
  request.locals.update match.names.inject({}) {|hash, name| hash[name.to_sym] = match[name] ; hash }
@@ -23,7 +23,7 @@ module Mojito::Matchers
23
23
  when Regexp
24
24
  pattern
25
25
  end
26
- instance_exec p, &consume_path
26
+ instance_exec p, &consume_path
27
27
  else
28
28
  false
29
29
  end
@@ -0,0 +1,13 @@
1
+ # encoding: UTF-8
2
+
3
+ module Mojito::Matchers
4
+
5
+ module Session
6
+
7
+ def SESSION(name)
8
+ proc { request.session.include? name.to_s }
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+
3
+ module Mojito::Matchers
4
+
5
+ module UrlScheme
6
+
7
+ def SCHEME(scheme)
8
+ proc do
9
+ case scheme
10
+ when :https, :secure
11
+ request.scheme === 'https'
12
+ when :http, nil
13
+ request.scheme === 'http'
14
+ else
15
+ request.scheme === scheme.to_s
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -7,11 +7,13 @@ module Mojito::Rendering
7
7
  require 'mojito/rendering/delegation'
8
8
  require 'mojito/rendering/file'
9
9
  require 'mojito/rendering/status_codes'
10
+ require 'mojito/rendering/templates'
10
11
 
11
12
  include Content
12
13
  include ContentTypes
13
14
  include Delegation
14
15
  include File
15
16
  include StatusCodes
17
+ include Templates
16
18
 
17
19
  end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+
3
+ module Mojito::Rendering
4
+
5
+ module Templates
6
+ require 'tilt'
7
+ require 'where'
8
+ require 'mime/types'
9
+
10
+ def template(*args, &block)
11
+ locals = Hash === args.last ? args.pop : self.locals
12
+ template = if args.size == 2
13
+ Tilt[args.first].new { args.last }
14
+ elsif args.size == 1
15
+ file = Where.cdir(1) + args.first
16
+ if %r{\.(?<extension>\w+)\.\w+$} =~ file.to_s
17
+ response['Content-Type'] = MIME::Types.type_for(extension)
18
+ end
19
+ Tilt[file.to_s].new file.to_s
20
+ end
21
+ response.write template.render(self, locals, &block)
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Matchers::Methods do
8
+
9
+ subject do
10
+ Mojito.application Mojito::Matchers::Methods do
11
+ on GET() do write 'get' ; halt! end
12
+ on POST() do write 'post' ; halt! end
13
+ on HEAD() do write 'head' ; halt! end
14
+ on PUT() do write 'put' ; halt! end
15
+ on DELETE() do write 'delete' ; halt! end
16
+ on METHOD(:options) do write 'options' ; halt! end
17
+ end.mock_request
18
+ end
19
+
20
+ it { subject.get('/').body.should == 'get' }
21
+ it { subject.post('/').body.should == 'post' }
22
+ it { subject.head('/').body.should == 'head' }
23
+ it { subject.put('/').body.should == 'put' }
24
+ it { subject.delete('/').body.should == 'delete' }
25
+ it { subject.request('OPTIONS', '/').body.should == 'options' }
26
+
27
+ end
@@ -0,0 +1,74 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Matchers::Path do
8
+
9
+ subject { Mojito.application.new Rack::MockRequest.env_for('http://localhost/hello/world/rest') }
10
+
11
+ it do
12
+ subject.send(:__match?, Mojito::M::PATH('hello'))
13
+ subject.captures.should be_empty
14
+ subject.locals.should be_empty
15
+ subject.path_info.should == '/world/rest'
16
+ end
17
+
18
+ it do
19
+ subject.send(:__match?, 'hello')
20
+ subject.captures.should be_empty
21
+ subject.locals.should be_empty
22
+ subject.path_info.should == '/world/rest'
23
+ end
24
+
25
+ it do
26
+ subject.send(:__match?, Mojito::M::PATH('hello/:name'))
27
+ subject.request.captures.should == ['world']
28
+ subject.request.locals.should == { 'name' => 'world' }
29
+ subject.request.path_info.should == '/rest'
30
+ end
31
+
32
+ it do
33
+ subject.send(:__match?, 'hello/:name')
34
+ subject.request.captures.should == ['world']
35
+ subject.request.locals.should == { 'name' => 'world' }
36
+ subject.request.path_info.should == '/rest'
37
+ end
38
+
39
+ it do
40
+ subject.send(:__match?, Mojito::M::PATH(%r{hello/(?<name>[^/]+)}))
41
+ subject.request.captures.should == ['world']
42
+ subject.request.locals.should == { 'name' => 'world' }
43
+ subject.request.path_info.should == '/rest'
44
+ end
45
+
46
+ it do
47
+ subject.send(:__match?, %r{hello/(?<name>[^/]+)})
48
+ subject.request.captures.should == ['world']
49
+ subject.request.locals.should == { 'name' => 'world' }
50
+ subject.request.path_info.should == '/rest'
51
+ end
52
+
53
+ context do
54
+ subject do
55
+ Mojito.base_application Mojito::M::Path, Mojito::R::Content do
56
+ on PATH('hello/:name') do
57
+ on PATH('another/:name') do
58
+ write request.locals[:name]
59
+ halt!
60
+ end
61
+ write request.locals[:name]
62
+ halt!
63
+ end
64
+ end.mock_request
65
+ end
66
+
67
+ it { subject.get('/hello/Fred').status.should == 200 }
68
+ it { subject.get('/hello/Fred').body.should == 'Fred' }
69
+ it { subject.get('/hello/Fred/another/Barney').status.should == 200 }
70
+ it { subject.get('/hello/Fred/another/Barney').body.should == 'Barney' }
71
+
72
+ end
73
+
74
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Matchers::UrlScheme do
8
+
9
+ subject do
10
+ Mojito.application Mojito::Matchers::UrlScheme do
11
+ on SCHEME(:http) do write 'insecure' ; halt! end
12
+ on SCHEME(:https) do write 'secure' ; halt! end
13
+ end.mock_request
14
+ end
15
+
16
+ it { subject.get('http://localhost/').body.should == 'insecure' }
17
+ it { subject.get('http://localhost:7777/').body.should == 'insecure' }
18
+ it { subject.get('https://localhost:80/').body.should == 'secure' }
19
+ it { subject.get('https://localhost/').body.should == 'secure' }
20
+ it { subject.get('otherprotocol://test/').status.should == 404 }
21
+
22
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Matchers::VirtualHost do
8
+
9
+ subject do
10
+ Mojito.application Mojito::Matchers::VirtualHost do
11
+ on HOST('localhost') do write 'localhost' ; halt! end
12
+ on HOST('test:8080') do write 'test' ; halt! end
13
+ end.mock_request
14
+ end
15
+
16
+ it { subject.get('http://localhost:4444/').body.should == 'localhost' }
17
+ it { subject.get('http://localhost/').body.should == 'localhost' }
18
+ it { subject.get('http://localhost:80/').body.should == 'localhost' }
19
+ it { subject.get('http://test:8080/').body.should == 'test' }
20
+ it { subject.get('http://test/').status.should == 404 }
21
+
22
+ end
@@ -3,111 +3,3 @@ require 'simplecov' and SimpleCov.start do
3
3
  add_filter "spec/"
4
4
  end
5
5
  require 'mojito'
6
-
7
- describe Mojito::Matchers::Methods do
8
-
9
- subject do
10
- Mojito.application Mojito::Matchers::Methods do
11
- on GET() do write 'get' ; halt! end
12
- on POST() do write 'post' ; halt! end
13
- on HEAD() do write 'head' ; halt! end
14
- on PUT() do write 'put' ; halt! end
15
- on DELETE() do write 'delete' ; halt! end
16
- on METHOD(:options) do write 'options' ; halt! end
17
- end.mock_request
18
- end
19
-
20
- it { subject.get('/').body.should == 'get' }
21
- it { subject.post('/').body.should == 'post' }
22
- it { subject.head('/').body.should == 'head' }
23
- it { subject.put('/').body.should == 'put' }
24
- it { subject.delete('/').body.should == 'delete' }
25
- it { subject.request('OPTIONS', '/').body.should == 'options' }
26
-
27
- end
28
-
29
- describe Mojito::Matchers::Path do
30
-
31
- subject { Mojito.application.new Rack::MockRequest.env_for('http://localhost/hello/world/rest') }
32
-
33
- it do
34
- subject.send(:__match?, Mojito::M::PATH('hello'))
35
- subject.captures.should be_empty
36
- subject.locals.should be_empty
37
- subject.path_info.should == '/world/rest'
38
- end
39
-
40
- it do
41
- subject.send(:__match?, 'hello')
42
- subject.captures.should be_empty
43
- subject.locals.should be_empty
44
- subject.path_info.should == '/world/rest'
45
- end
46
-
47
- it do
48
- subject.send(:__match?, Mojito::M::PATH('hello/:name'))
49
- subject.request.captures.should == ['world']
50
- subject.request.locals.should == { 'name' => 'world' }
51
- subject.request.path_info.should == '/rest'
52
- end
53
-
54
- it do
55
- subject.send(:__match?, 'hello/:name')
56
- subject.request.captures.should == ['world']
57
- subject.request.locals.should == { 'name' => 'world' }
58
- subject.request.path_info.should == '/rest'
59
- end
60
-
61
- it do
62
- subject.send(:__match?, Mojito::M::PATH(%r{hello/(?<name>[^/]+)}))
63
- subject.request.captures.should == ['world']
64
- subject.request.locals.should == { 'name' => 'world' }
65
- subject.request.path_info.should == '/rest'
66
- end
67
-
68
- it do
69
- subject.send(:__match?, %r{hello/(?<name>[^/]+)})
70
- subject.request.captures.should == ['world']
71
- subject.request.locals.should == { 'name' => 'world' }
72
- subject.request.path_info.should == '/rest'
73
- end
74
-
75
- context do
76
- subject do
77
- Mojito.base_application Mojito::M::Path, Mojito::R::Content do
78
- on PATH('hello/:name') do
79
- on PATH('another/:name') do
80
- write request.locals[:name]
81
- halt!
82
- end
83
- write request.locals[:name]
84
- halt!
85
- end
86
- end.mock_request
87
- end
88
-
89
- it { subject.get('/hello/Fred').status.should == 200 }
90
- it { subject.get('/hello/Fred').body.should == 'Fred' }
91
- it { subject.get('/hello/Fred/another/Barney').status.should == 200 }
92
- it { subject.get('/hello/Fred/another/Barney').body.should == 'Barney' }
93
-
94
- end
95
-
96
- end
97
-
98
- describe Mojito::Matchers::VirtualHost do
99
-
100
- subject do
101
- Mojito.application Mojito::Matchers::VirtualHost do
102
- on HOST('localhost') do write 'localhost' ; halt! end
103
- on HOST('test:8080') do write 'test' ; halt! end
104
- end.mock_request
105
- end
106
-
107
- it { subject.get('http://localhost:4444/').body.should == 'localhost' }
108
- it { subject.get('http://localhost/').body.should == 'localhost' }
109
- it { subject.get('http://localhost:80/').body.should == 'localhost' }
110
- it { subject.get('http://test:8080/').body.should == 'test' }
111
- it { subject.get('http://test/').status.should == 404 }
112
-
113
- end
@@ -0,0 +1,17 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Rendering::Content do
8
+
9
+ subject do
10
+ Mojito.base_application Mojito::Rendering::Content do
11
+ on do write 'test content' ; halt! end
12
+ end.mock_request
13
+ end
14
+
15
+ it { subject.get('/').body.should == 'test content' }
16
+
17
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Rendering::Delegation do
8
+
9
+ subject do
10
+ sub_app = Mojito.base_application Mojito::R::Content, Mojito::R::Delegation do
11
+ on true do write 'sub-application' ; halt! end
12
+ end
13
+ Mojito.base_application Mojito::Rendering::Content, Mojito::Rendering::Delegation do
14
+ on true do run! sub_app end
15
+ end.mock_request
16
+ end
17
+
18
+ it { subject.get('/').status.should == 200 }
19
+ it { subject.get('/').body.should == 'sub-application' }
20
+
21
+ context do
22
+
23
+ subject do
24
+ sub_app = Mojito.base_application Mojito::R::Content, Mojito::R::Delegation, Mojito::H::Shortcuts do
25
+ on true do write("#{path_info} #{captures.first}") ; halt! end
26
+ end
27
+ Mojito.base_application Mojito::M::Path, Mojito::R::Content, Mojito::R::Delegation do
28
+ on PATH('hello/:name') do run! sub_app end
29
+ end.mock_request
30
+ end
31
+
32
+ it { subject.get('/hello/world/rest').status.should == 200 }
33
+ it { subject.get('/hello/world/rest').body.should == '/rest world' }
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Rendering::File do
8
+
9
+ subject do
10
+ Mojito.base_application Mojito::Rendering::File do
11
+ file! __FILE__
12
+ end.mock_request
13
+ end
14
+
15
+ it { subject.get('/').status.should == 200 }
16
+ it { subject.get('/').headers.should include('Content-Type') }
17
+ it { subject.get('/').headers['Content-Type'].should == 'application/x-ruby' }
18
+ it { subject.get('/').headers.should include('Content-Length') }
19
+ it { subject.get('/').headers['Content-Length'].should == ::File.size(__FILE__).to_s }
20
+ it { subject.get('/').headers.should include('Last-Modified') }
21
+ it { subject.get('/').headers['Last-Modified'].should == ::File.mtime(__FILE__).rfc2822 }
22
+ it { subject.get('/').body.should == ::File.read(__FILE__) }
23
+
24
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Rendering::StatusCodes do
8
+
9
+ subject do
10
+ Mojito.base_application Mojito::Matchers::Path, Mojito::Rendering::StatusCodes do
11
+ on 'ok' do ok! end
12
+ on 'not_found' do not_found! end
13
+ on 'internal_server_error' do internal_server_error! end
14
+ on 'unavailable' do unavailable! end
15
+ on 'redirect' do redirect! '/test' end
16
+ end.mock_request
17
+ end
18
+
19
+ it { subject.get('/ok').status.should == 200 }
20
+ it { subject.get('/not_found').status.should == 404 }
21
+ it { subject.get('/internal_server_error').status.should == 500 }
22
+ it { subject.get('/unavailable').status.should == 503 }
23
+ it { subject.get('/redirect').status.should == 302 }
24
+ it { subject.get('/redirect').headers['Location'].should == '/test' }
25
+
26
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+ require 'simplecov' and SimpleCov.start do
3
+ add_filter "spec/"
4
+ end
5
+ require 'mojito'
6
+
7
+ describe Mojito::Rendering::Templates do
8
+
9
+ context 'inline templates' do
10
+ subject do
11
+ Mojito.base_application Mojito::Rendering::Templates do
12
+ template :erb, 'before <%= var %> <%= yield %> after', :var => 'middle' do 'inside the block' end
13
+ halt!
14
+ end.mock_request
15
+ end
16
+
17
+ it { subject.get('/').status.should == 200 }
18
+ it { subject.get('/').body.should == 'before middle inside the block after' }
19
+
20
+ end
21
+
22
+ context 'file templates' do
23
+ subject do
24
+ Mojito.base_application Mojito::Rendering::Templates do
25
+ template 'test.html.erb', :var => 'middle' do 'inside the block' end
26
+ halt!
27
+ end.mock_request
28
+ end
29
+
30
+ it { subject.get('/').status.should == 200 }
31
+ it { subject.get('/').body.should == 'HTML file with a variable middle and a yield inside the block' }
32
+ it { subject.get('/').headers.should include('Content-Type') }
33
+ it { subject.get('/').headers['Content-Type'].should == 'text/html' }
34
+
35
+ end
36
+
37
+ end
@@ -3,87 +3,3 @@ require 'simplecov' and SimpleCov.start do
3
3
  add_filter "spec/"
4
4
  end
5
5
  require 'mojito'
6
-
7
- describe Mojito::Rendering::Content do
8
-
9
- subject do
10
- Mojito.base_application Mojito::Rendering::Content do
11
- on do write 'test content' ; halt! end
12
- end.mock_request
13
- end
14
-
15
- it { subject.get('/').body.should == 'test content' }
16
-
17
- end
18
-
19
- describe Mojito::Rendering::StatusCodes do
20
-
21
- subject do
22
- Mojito.base_application Mojito::Matchers::Path, Mojito::Rendering::StatusCodes do
23
- on 'ok' do ok! end
24
- on 'not_found' do not_found! end
25
- on 'internal_server_error' do internal_server_error! end
26
- on 'unavailable' do unavailable! end
27
- on 'redirect' do redirect! '/test' end
28
- end.mock_request
29
- end
30
-
31
- it { subject.get('/ok').status.should == 200 }
32
- it { subject.get('/not_found').status.should == 404 }
33
- it { subject.get('/internal_server_error').status.should == 500 }
34
- it { subject.get('/unavailable').status.should == 503 }
35
- it { subject.get('/redirect').status.should == 302 }
36
- it { subject.get('/redirect').headers['Location'].should == '/test' }
37
-
38
- end
39
-
40
- describe Mojito::Rendering::Delegation do
41
-
42
- subject do
43
- sub_app = Mojito.base_application Mojito::R::Content, Mojito::R::Delegation do
44
- on true do write 'sub-application' ; halt! end
45
- end
46
- Mojito.base_application Mojito::Rendering::Content, Mojito::Rendering::Delegation do
47
- on true do run! sub_app end
48
- end.mock_request
49
- end
50
-
51
- it { subject.get('/').status.should == 200 }
52
- it { subject.get('/').body.should == 'sub-application' }
53
-
54
- context do
55
-
56
- subject do
57
- sub_app = Mojito.base_application Mojito::R::Content, Mojito::R::Delegation, Mojito::H::Shortcuts do
58
- on true do write("#{path_info} #{captures.first}") ; halt! end
59
- end
60
- Mojito.base_application Mojito::M::Path, Mojito::R::Content, Mojito::R::Delegation do
61
- on PATH('hello/:name') do run! sub_app end
62
- end.mock_request
63
- end
64
-
65
- it { subject.get('/hello/world/rest').status.should == 200 }
66
- it { subject.get('/hello/world/rest').body.should == '/rest world' }
67
-
68
- end
69
-
70
- end
71
-
72
- describe Mojito::Rendering::File do
73
-
74
- subject do
75
- Mojito.base_application Mojito::Rendering::File do
76
- file! __FILE__
77
- end.mock_request
78
- end
79
-
80
- it { subject.get('/').status.should == 200 }
81
- it { subject.get('/').headers.should include('Content-Type') }
82
- it { subject.get('/').headers['Content-Type'].should == 'application/x-ruby' }
83
- it { subject.get('/').headers.should include('Content-Length') }
84
- it { subject.get('/').headers['Content-Length'].should == ::File.size(__FILE__).to_s }
85
- it { subject.get('/').headers.should include('Last-Modified') }
86
- it { subject.get('/').headers['Last-Modified'].should == ::File.mtime(__FILE__).rfc2822 }
87
- it { subject.get('/').body.should == ::File.read(__FILE__) }
88
-
89
- 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.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-17 00:00:00.000000000 Z
12
+ date: 2012-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &20131580 !ruby/object:Gem::Requirement
16
+ requirement: &19113520 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.4.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *20131580
24
+ version_requirements: *19113520
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mime-types
27
- requirement: &20130100 !ruby/object:Gem::Requirement
27
+ requirement: &19113040 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.18'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *20130100
35
+ version_requirements: *19113040
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: tilt
38
- requirement: &20129340 !ruby/object:Gem::Requirement
38
+ requirement: &19112500 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.3.3
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *20129340
46
+ version_requirements: *19112500
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: extlib
49
- requirement: &20128340 !ruby/object:Gem::Requirement
49
+ requirement: &19111980 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,21 @@ dependencies:
54
54
  version: 0.9.15
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *20128340
57
+ version_requirements: *19111980
58
+ - !ruby/object:Gem::Dependency
59
+ name: where-am-i
60
+ requirement: &19111420 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.0.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *19111420
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: rspec
60
- requirement: &20152720 !ruby/object:Gem::Requirement
71
+ requirement: &19110940 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ~>
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: 2.8.0
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *20152720
79
+ version_requirements: *19110940
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: rdoc
71
- requirement: &20151740 !ruby/object:Gem::Requirement
82
+ requirement: &19110400 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ~>
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: '3.12'
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *20151740
90
+ version_requirements: *19110400
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: bundler
82
- requirement: &20150340 !ruby/object:Gem::Requirement
93
+ requirement: &19109880 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ~>
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: 1.0.0
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *20150340
101
+ version_requirements: *19109880
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: jeweler
93
- requirement: &20149300 !ruby/object:Gem::Requirement
104
+ requirement: &19208400 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ~>
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: 1.8.3
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *20149300
112
+ version_requirements: *19208400
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: rcov
104
- requirement: &20148580 !ruby/object:Gem::Requirement
115
+ requirement: &19207820 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,7 +120,7 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *20148580
123
+ version_requirements: *19207820
113
124
  description: A simple yet powerful webframework largely inspired by Rum and Cuba
114
125
  email: dev@trense.info
115
126
  executables: []
@@ -126,8 +137,11 @@ files:
126
137
  - lib/mojito/helpers/exception_handling.rb
127
138
  - lib/mojito/helpers/shortcuts.rb
128
139
  - lib/mojito/matchers.rb
140
+ - lib/mojito/matchers/environment.rb
129
141
  - lib/mojito/matchers/methods.rb
130
142
  - lib/mojito/matchers/path.rb
143
+ - lib/mojito/matchers/session.rb
144
+ - lib/mojito/matchers/url_scheme.rb
131
145
  - lib/mojito/matchers/virtual_host.rb
132
146
  - lib/mojito/rendering.rb
133
147
  - lib/mojito/rendering/content.rb
@@ -135,10 +149,21 @@ files:
135
149
  - lib/mojito/rendering/delegation.rb
136
150
  - lib/mojito/rendering/file.rb
137
151
  - lib/mojito/rendering/status_codes.rb
152
+ - lib/mojito/rendering/templates.rb
138
153
  - lib/mojito/request_extensions.rb
139
154
  - lib/mojito/utils/status_codes.rb
140
155
  - spec/mojito/helpers_spec.rb
156
+ - spec/mojito/matchers/methods_spec.rb
157
+ - spec/mojito/matchers/path_spec.rb
158
+ - spec/mojito/matchers/session_spec.rb
159
+ - spec/mojito/matchers/url_scheme_spec.rb
160
+ - spec/mojito/matchers/virtual_host_spec.rb
141
161
  - spec/mojito/matchers_spec.rb
162
+ - spec/mojito/rendering/content_spec.rb
163
+ - spec/mojito/rendering/delegation_spec.rb
164
+ - spec/mojito/rendering/file_spec.rb
165
+ - spec/mojito/rendering/status_codes_spec.rb
166
+ - spec/mojito/rendering/templates_spec.rb
142
167
  - spec/mojito/rendering_spec.rb
143
168
  - spec/mojito/request_extensions_spec.rb
144
169
  - spec/mojito_spec.rb