mojito 0.1.0 → 0.1.1

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