cuba 2.2.1 → 3.0.0.rc1

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.
@@ -0,0 +1,10 @@
1
+ 3.0.0.rc1
2
+
3
+ * Remove Cuba.build. Use subclassing instead.
4
+ * Remove warnings.
5
+ * Remove redefinition of Rack::Response#redirect.
6
+ * Integrate Cuba.plugin and Cuba.settings.
7
+ * Remove Cuba::VERSION.
8
+ * Rename _call to call! (inspired from Sinatra).
9
+ * Fix a memory leak with the caching used in Tilt.
10
+ * Adding syntax highlighting to the README Code blocks
@@ -30,40 +30,43 @@ Usage
30
30
 
31
31
  Here's a simple application:
32
32
 
33
- # cat hello_world.rb
34
- require "cuba"
33
+ ``` ruby
34
+ # cat hello_world.rb
35
+ require "cuba"
35
36
 
36
- Cuba.use Rack::Session::Cookie
37
+ Cuba.use Rack::Session::Cookie
37
38
 
38
- Cuba.define do
39
- on get do
40
- on "hello" do
41
- res.write "Hello world!"
42
- end
43
-
44
- on true do
45
- res.redirect "/hello"
46
- end
47
- end
39
+ Cuba.define do
40
+ on get do
41
+ on "hello" do
42
+ res.write "Hello world!"
48
43
  end
49
44
 
50
- # cat hello_world_test.rb
51
- require "cuba/test"
45
+ on true do
46
+ res.redirect "/hello"
47
+ end
48
+ end
49
+ end
52
50
 
53
- scope do
54
- test "Homepage" do
55
- visit "/"
51
+ # cat hello_world_test.rb
52
+ require "cuba/test"
56
53
 
57
- assert has_content?("Hello world!")
58
- end
59
- end
54
+ scope do
55
+ test "Homepage" do
56
+ visit "/"
57
+ assert has_content?("Hello world!")
58
+ end
59
+ end
60
+ ```
60
61
 
61
62
  To run it, you can create a `config.ru` file:
62
63
 
63
- # cat config.ru
64
- require "hello_world"
64
+ ``` ruby
65
+ # cat config.ru
66
+ require "./hello_world"
65
67
 
66
- run Cuba
68
+ run Cuba
69
+ ```
67
70
 
68
71
  You can now run `rackup` and enjoy what you have just created.
69
72
 
@@ -72,77 +75,80 @@ Matchers
72
75
 
73
76
  Here's an example showcasing how different matchers work:
74
77
 
75
- require "cuba"
78
+ ``` ruby
79
+ require "cuba"
76
80
 
77
- Cuba.use Rack::Session::Cookie
81
+ Cuba.use Rack::Session::Cookie
78
82
 
79
- Cuba.define do
83
+ Cuba.define do
80
84
 
81
- # only GET requests
82
- on get do
85
+ # only GET requests
86
+ on get do
83
87
 
84
- # /
85
- on "" do
86
- res.write "Home"
87
- end
88
+ # /
89
+ on "" do
90
+ res.write "Home"
91
+ end
88
92
 
89
- # /about
90
- on "about" do
91
- res.write "About"
92
- end
93
+ # /about
94
+ on "about" do
95
+ res.write "About"
96
+ end
97
+
98
+ # /styles/basic.css
99
+ on "styles", extension("css") do |file|
100
+ res.write "Filename: #{file}" #=> "Filename: basic"
101
+ end
102
+
103
+ # /post/2011/02/16/hello
104
+ on "post/:y/:m/:d/:slug" do |y, m, d, slug|
105
+ res.write "#{y}-#{m}-#{d} #{slug}" #=> "2011-02-16 hello"
106
+ end
93
107
 
94
- # /styles/basic.css
95
- on "styles", extension("css") do |file|
96
- res.write "Filename: #{file}" #=> "Filename: basic"
97
- end
108
+ # /username/foobar
109
+ on "username/:username" do |username|
98
110
 
99
- # /post/2011/02/16/hello
100
- on "post/:y/:m/:d/:slug" do |y, m, d, slug|
101
- res.write "#{y}-#{m}-#{d} #{slug}" #=> "2011-02-16 hello"
102
- end
111
+ user = User.find_by_username(username) # username == "foobar"
103
112
 
104
- # /username/foobar
105
- on "username/:username" do |username|
113
+ # /username/foobar/posts
114
+ on "posts" do
106
115
 
107
- user = User.find_by_username(username) # username == "foobar"
116
+ # You can access `user` here, because the `on` blocks
117
+ # are closures.
118
+ res.write "Total Posts: #{user.posts.size}" #=> "Total Posts: 6"
119
+ end
108
120
 
109
- # /username/foobar/posts
110
- on "posts" do
121
+ # /username/foobar/following
122
+ on "following" do
123
+ res.write user.following.size #=> "1301"
124
+ end
125
+ end
111
126
 
112
- # You can access `user` here, because the `on` blocks
113
- # are closures.
114
- res.write "Total Posts: #{user.posts.size}" #=> "Total Posts: 6"
115
- end
127
+ # /search?q=barbaz
128
+ on "search", param("q") do |query|
129
+ res.write "Searched for #{query}" #=> "Searched for barbaz"
130
+ end
131
+ end
116
132
 
117
- # /username/foobar/following
118
- on "following" do
119
- res.write user.following.size #=> "1301"
120
- end
121
- end
133
+ # only POST requests
134
+ on post do
135
+ on "login"
122
136
 
123
- # /search?q=barbaz
124
- on "search", param("q") do |query|
125
- res.write "Searched for #{query}" #=> "Searched for barbaz"
126
- end
137
+ # POST /login, user: foo, pass: baz
138
+ on param("user"), param("pass") do |user, pass|
139
+ res.write "#{user}:#{pass}" #=> "foo:baz"
127
140
  end
128
141
 
129
- # only POST requests
130
- on post do
131
- on "login"
132
-
133
- # POST /login, user: foo, pass: baz
134
- on param("user"), param("pass") do |user, pass|
135
- res.write "#{user}:#{pass}" #=> "foo:baz"
136
- end
137
-
138
- # If the params `user` and `pass` are not provided, this block will
139
- # get executed.
140
- on true do
141
- res.write "You need to provide user and pass!"
142
- end
143
- end
142
+ # If the params `user` and `pass` are not provided, this block will
143
+ # get executed.
144
+ on true do
145
+ res.write "You need to provide user and pass!"
144
146
  end
145
147
  end
148
+ end
149
+ end
150
+ ```
151
+
146
152
 
147
153
  HTTP Verbs
148
154
  ----------
@@ -156,11 +162,13 @@ and inspect the environment via the `env` object, and check for example if
156
162
 
157
163
  What follows is an example of different ways of saying the same thing:
158
164
 
159
- on env["REQUEST_METHOD"] == "GET", "api" do ... end
165
+ ``` ruby
166
+ on env["REQUEST_METHOD"] == "GET", "api" do ... end
160
167
 
161
- on req.get?, "api" do ... end
168
+ on req.get?, "api" do ... end
162
169
 
163
- on get, "api" do ... end
170
+ on get, "api" do ... end
171
+ ```
164
172
 
165
173
  Actually, `get` is syntax sugar for `req.get?`, which in turn is syntax sugar
166
174
  for `env["REQUEST_METHOD"] == "GET"`.
@@ -198,21 +206,23 @@ Composition
198
206
 
199
207
  You can mount a Cuba app, along with middlewares, inside another Cuba app:
200
208
 
201
- API = Cuba.build
209
+ ``` ruby
210
+ class API < Cuba; end
202
211
 
203
- API.use SomeMiddleware
212
+ API.use SomeMiddleware
204
213
 
205
- API.define do
206
- on param("url") do |url|
207
- ...
208
- end
209
- end
214
+ API.define do
215
+ on param("url") do |url|
216
+ ...
217
+ end
218
+ end
210
219
 
211
- Cuba.define do
212
- on "api" do
213
- run API
214
- end
215
- end
220
+ Cuba.define do
221
+ on "api" do
222
+ run API
223
+ end
224
+ end
225
+ ```
216
226
 
217
227
  Testing
218
228
  -------
@@ -222,16 +232,18 @@ Given that Cuba is essentially Rack, it is very easy to test with `Webrat` or
222
232
  and [Capybara][capybara], and if you want to use the same for your tests it is
223
233
  as easy as requiring `cuba/test`:
224
234
 
225
- require "cuba/test"
226
- require "your/app"
235
+ ``` ruby
236
+ require "cuba/test"
237
+ require "your/app"
227
238
 
228
- scope do
229
- test "Homepage" do
230
- visit "/"
239
+ scope do
240
+ test "Homepage" do
241
+ visit "/"
231
242
 
232
- assert has_content?("Hello world!")
233
- end
234
- end
243
+ assert has_content?("Hello world!")
244
+ end
245
+ end
246
+ ```
235
247
 
236
248
  To read more about testing, check the documentation for [Cutest][cutest] and
237
249
  [Capybara][capybara].
@@ -239,4 +251,6 @@ To read more about testing, check the documentation for [Cutest][cutest] and
239
251
  Installation
240
252
  ------------
241
253
 
242
- $ gem install cuba
254
+ ``` ruby
255
+ $ gem install cuba
256
+ ```
@@ -1,8 +1,6 @@
1
- require "./lib/cuba/version"
2
-
3
1
  Gem::Specification.new do |s|
4
2
  s.name = "cuba"
5
- s.version = Cuba::VERSION
3
+ s.version = "3.0.0.rc1"
6
4
  s.summary = "Microframework for web applications."
7
5
  s.description = "Cuba is a microframework for web applications."
8
6
  s.authors = ["Michel Martens"]
@@ -11,6 +9,7 @@ Gem::Specification.new do |s|
11
9
 
12
10
  s.files = Dir[
13
11
  "LICENSE",
12
+ "CHANGELOG",
14
13
  "README.markdown",
15
14
  "Rakefile",
16
15
  "lib/**/*.rb",
@@ -1,17 +1,4 @@
1
1
  require "rack"
2
- require "tilt"
3
- require "cuba/version"
4
-
5
- class Rack::Response
6
- # 301 Moved Permanently
7
- # 302 Found
8
- # 303 See Other
9
- # 307 Temporary Redirect
10
- def redirect(target, status = 302)
11
- self.status = status
12
- self["Location"] = target
13
- end
14
- end
15
2
 
16
3
  class Cuba
17
4
  class RedefinitionError < StandardError
@@ -19,6 +6,10 @@ class Cuba
19
6
 
20
7
  @@methods = []
21
8
 
9
+ class << self
10
+ undef method_added
11
+ end
12
+
22
13
  def self.method_added(meth)
23
14
  @@methods << meth
24
15
  end
@@ -40,10 +31,6 @@ class Cuba
40
31
  app.run new(&block)
41
32
  end
42
33
 
43
- def self.build
44
- Class.new(self)
45
- end
46
-
47
34
  def self.prototype
48
35
  @prototype ||= app.to_app
49
36
  end
@@ -52,6 +39,21 @@ class Cuba
52
39
  prototype.call(env)
53
40
  end
54
41
 
42
+ def self.plugin(mixin)
43
+ include mixin
44
+ extend mixin::ClassMethods if defined?(mixin::ClassMethods)
45
+
46
+ mixin.setup(self) if mixin.respond_to?(:setup)
47
+ end
48
+
49
+ def self.settings
50
+ @settings ||= {}
51
+ end
52
+
53
+ def self.inherited(child)
54
+ child.settings.replace(settings)
55
+ end
56
+
55
57
  attr :env
56
58
  attr :req
57
59
  attr :res
@@ -62,11 +64,15 @@ class Cuba
62
64
  @captures = []
63
65
  end
64
66
 
67
+ def settings
68
+ self.class.settings
69
+ end
70
+
65
71
  def call(env)
66
- dup._call(env)
72
+ dup.call!(env)
67
73
  end
68
74
 
69
- def _call(env)
75
+ def call!(env)
70
76
  @env = env
71
77
  @req = Rack::Request.new(env)
72
78
  @res = Rack::Response.new
@@ -86,33 +92,10 @@ class Cuba
86
92
  end
87
93
  end
88
94
 
89
- # @private Used internally by #render to cache the
90
- # Tilt templates.
91
- def _cache
92
- Thread.current[:_cache] ||= Tilt::Cache.new
93
- end
94
- private :_cache
95
-
96
- # Render any type of template file supported by Tilt.
97
- #
98
- # @example
99
- #
100
- # # Renders home, and is assumed to be HAML.
101
- # render("home.haml")
102
- #
103
- # # Renders with some local variables
104
- # render("home.haml", site_name: "My Site")
105
- #
106
- # # Renders with HAML options
107
- # render("home.haml", {}, ugly: true, format: :html5)
108
- #
109
- # # Renders in layout
110
- # render("layout.haml") { render("home.haml") }
111
- #
112
- def render(template, locals = {}, options = {}, &block)
113
- _cache.fetch(template, locals) {
114
- Tilt.new(template, 1, options)
115
- }.render(self, locals, &block)
95
+ def session
96
+ env["rack.session"] || raise(RuntimeError,
97
+ "You're missing a session handler. You can get started " +
98
+ "by adding Cuba.use Rack::Session::Cookie")
116
99
  end
117
100
 
118
101
  # The heart of the path / verb / any condition matching.
@@ -155,7 +138,7 @@ class Cuba
155
138
  # The captures we yield here were generated and assembled
156
139
  # by evaluating each of the `arg`s above. Most of these
157
140
  # are carried out by #consume.
158
- yield *captures
141
+ yield(*captures)
159
142
 
160
143
  halt res.finish
161
144
  end
@@ -169,7 +152,7 @@ class Cuba
169
152
  yield
170
153
 
171
154
  ensure
172
- env["SCRIPT_NAME"], env["PATH_INFO"] = script, path unless @matched
155
+ env["SCRIPT_NAME"], env["PATH_INFO"] = script, path
173
156
  end
174
157
  private :try
175
158
 
@@ -292,6 +275,10 @@ class Cuba
292
275
  throw :halt, response
293
276
  end
294
277
 
278
+ class << self
279
+ undef method_added
280
+ end
281
+
295
282
  # In order to prevent people from overriding the standard Cuba
296
283
  # methods like `get`, `put`, etc, we add this as a safety measure.
297
284
  def self.method_added(meth)
@@ -0,0 +1,25 @@
1
+ class Cuba
2
+ module Settings
3
+ def settings
4
+ self.class
5
+ end
6
+
7
+ module ClassMethods
8
+ def set(key, value)
9
+ metaclass.send :attr_writer, key
10
+ metaclass.module_eval %{
11
+ def #{key}
12
+ @#{key} ||= #{value.inspect}
13
+ end
14
+ }
15
+
16
+ send :"#{key}=", value
17
+ end
18
+
19
+ private
20
+ def metaclass
21
+ class << self; self; end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -26,8 +26,6 @@ test "tests don't fail when you don't specify an accept type" do
26
26
  end
27
27
  end
28
28
 
29
- env = { "SCRIPT_NAME" => "/", "PATH_INFO" => "/post" }
30
-
31
29
  _, _, resp = Cuba.call({})
32
30
 
33
31
  assert_equal ["Default action"], resp.body
@@ -2,3 +2,10 @@ $:.unshift(File.expand_path("../lib", File.dirname(__FILE__)))
2
2
  require "cuba"
3
3
 
4
4
  prepare { Cuba.reset! }
5
+
6
+ def assert_response(body, expected)
7
+ arr = []
8
+ body.each { |line| arr << line }
9
+
10
+ assert_equal arr, expected
11
+ end
@@ -33,10 +33,10 @@ end
33
33
 
34
34
  test "regex nesting" do |env|
35
35
  Cuba.define do
36
- on /u\/(\w+)/ do |uid|
36
+ on(/u\/(\w+)/) do |uid|
37
37
  res.write uid
38
38
 
39
- on /posts\/(\d+)/ do |id|
39
+ on(/posts\/(\d+)/) do |id|
40
40
  res.write id
41
41
  end
42
42
  end
@@ -51,10 +51,10 @@ end
51
51
 
52
52
  test "regex nesting colon param style" do |env|
53
53
  Cuba.define do
54
- on /u:(\w+)/ do |uid|
54
+ on(/u:(\w+)/) do |uid|
55
55
  res.write uid
56
56
 
57
- on /posts:(\d+)/ do |id|
57
+ on(/posts:(\d+)/) do |id|
58
58
  res.write id
59
59
  end
60
60
  end
@@ -83,4 +83,4 @@ test "symbol matching" do |env|
83
83
  _, _, resp = Cuba.call(env)
84
84
 
85
85
  assert_equal ["jdoe", "123"], resp.body
86
- end
86
+ end
@@ -13,13 +13,15 @@ class Shrimp
13
13
  end
14
14
 
15
15
  test do
16
- API = Cuba.build
17
- API.use Shrimp
18
- API.define do
19
- on "v1/test" do
20
- res.write "OK"
21
- res.write "1"
22
- res.write "2"
16
+ class API < Cuba
17
+ use Shrimp
18
+
19
+ define do
20
+ on "v1/test" do
21
+ res.write "OK"
22
+ res.write "1"
23
+ res.write "2"
24
+ end
23
25
  end
24
26
  end
25
27
 
@@ -38,4 +40,4 @@ test do
38
40
  end
39
41
 
40
42
  assert_equal ["2", "1", "OK"], arr
41
- end
43
+ end
@@ -22,7 +22,7 @@ end
22
22
  test "paths and decimals" do |env|
23
23
  Cuba.define do
24
24
  on "about" do
25
- on /(\d+)/ do |one|
25
+ on(/(\d+)/) do |one|
26
26
  res.write one
27
27
  end
28
28
  end
@@ -33,4 +33,4 @@ test "paths and decimals" do |env|
33
33
  _, _, resp = Cuba.call(env)
34
34
 
35
35
  assert_equal [], resp.body
36
- end
36
+ end
@@ -0,0 +1,68 @@
1
+ require_relative "helper"
2
+
3
+ scope do
4
+ module Helper
5
+ def clean(str)
6
+ str.strip
7
+ end
8
+ end
9
+
10
+ test do
11
+ Cuba.plugin Helper
12
+
13
+ Cuba.define do
14
+ on default do
15
+ res.write clean " foo "
16
+ end
17
+ end
18
+
19
+ _, _, body = Cuba.call({})
20
+
21
+ assert_response body, ["foo"]
22
+ end
23
+ end
24
+
25
+ scope do
26
+ module Number
27
+ def num
28
+ 1
29
+ end
30
+ end
31
+
32
+ module Plugin
33
+ def self.setup(app)
34
+ app.plugin Number
35
+ end
36
+
37
+ def bar
38
+ "baz"
39
+ end
40
+
41
+ module ClassMethods
42
+ def foo
43
+ "bar"
44
+ end
45
+ end
46
+ end
47
+
48
+ setup do
49
+ Cuba.plugin Plugin
50
+
51
+ Cuba.define do
52
+ on default do
53
+ res.write bar
54
+ res.write num
55
+ end
56
+ end
57
+ end
58
+
59
+ test do
60
+ assert_equal "bar", Cuba.foo
61
+ end
62
+
63
+ test do
64
+ _, _, body = Cuba.call({})
65
+
66
+ assert_response body, ["baz", "1"]
67
+ end
68
+ end
@@ -0,0 +1,21 @@
1
+ require_relative "helper"
2
+
3
+ test do
4
+ Cuba.define do
5
+ on default do
6
+ begin
7
+ session
8
+ rescue Exception => e
9
+ res.write e.message
10
+ end
11
+ end
12
+ end
13
+
14
+ _, _, body = Cuba.call({})
15
+
16
+ body.each do |e|
17
+ assert e =~ /Cuba.use Rack::Session::Cookie/
18
+ end
19
+ end
20
+
21
+
@@ -0,0 +1,39 @@
1
+ require File.expand_path("helper", File.dirname(__FILE__))
2
+
3
+ test "settings is an empty hash by default" do
4
+ assert Cuba.settings.kind_of?(Hash)
5
+ assert Cuba.settings.empty?
6
+ end
7
+
8
+ test "is inheritable and allows overriding" do
9
+ Cuba.settings[:foo] = "bar"
10
+
11
+ class Admin < Cuba; end
12
+
13
+ assert_equal "bar", Admin.settings[:foo]
14
+
15
+ Admin.settings[:foo] = "baz"
16
+
17
+ assert_equal "bar", Cuba.settings[:foo]
18
+ assert_equal "baz", Admin.settings[:foo]
19
+ end
20
+
21
+ test do
22
+ Cuba.settings[:hello] = "Hello World"
23
+
24
+ Cuba.define do
25
+ on default do
26
+ res.write settings[:hello]
27
+ end
28
+ end
29
+
30
+ _, _, resp = Cuba.call({ "PATH_INFO" => "/", "SCRIPT_NAME" => ""})
31
+
32
+ body = []
33
+
34
+ resp.each do |line|
35
+ body << line
36
+ end
37
+
38
+ assert_equal ["Hello World"], body
39
+ end
metadata CHANGED
@@ -1,20 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuba
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
5
- prerelease:
4
+ version: 3.0.0.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Michel Martens
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-24 00:00:00.000000000 -03:00
13
- default_executable:
12
+ date: 2012-02-15 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rack
17
- requirement: &2157863520 !ruby/object:Gem::Requirement
16
+ requirement: &2160204820 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,10 @@ dependencies:
22
21
  version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *2157863520
24
+ version_requirements: *2160204820
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: tilt
28
- requirement: &2157863100 !ruby/object:Gem::Requirement
27
+ requirement: &2160203660 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
@@ -33,10 +32,10 @@ dependencies:
33
32
  version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *2157863100
35
+ version_requirements: *2160203660
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: cutest
39
- requirement: &2157862680 !ruby/object:Gem::Requirement
38
+ requirement: &2160218800 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ! '>='
@@ -44,10 +43,10 @@ dependencies:
44
43
  version: '0'
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *2157862680
46
+ version_requirements: *2160218800
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: capybara
50
- requirement: &2157862260 !ruby/object:Gem::Requirement
49
+ requirement: &2160218280 !ruby/object:Gem::Requirement
51
50
  none: false
52
51
  requirements:
53
52
  - - ! '>='
@@ -55,7 +54,7 @@ dependencies:
55
54
  version: '0'
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *2157862260
57
+ version_requirements: *2160218280
59
58
  description: Cuba is a microframework for web applications.
60
59
  email:
61
60
  - michel@soveran.com
@@ -64,10 +63,11 @@ extensions: []
64
63
  extra_rdoc_files: []
65
64
  files:
66
65
  - LICENSE
66
+ - CHANGELOG
67
67
  - README.markdown
68
68
  - Rakefile
69
+ - lib/cuba/settings.rb
69
70
  - lib/cuba/test.rb
70
- - lib/cuba/version.rb
71
71
  - lib/cuba.rb
72
72
  - cuba.gemspec
73
73
  - test/accept.rb
@@ -77,18 +77,19 @@ files:
77
77
  - test/helper.rb
78
78
  - test/host.rb
79
79
  - test/integration.rb
80
- - test/layout.rb
81
80
  - test/match.rb
82
81
  - test/middleware.rb
83
82
  - test/number.rb
84
83
  - test/on.rb
85
84
  - test/param.rb
86
85
  - test/path.rb
86
+ - test/plugin.rb
87
87
  - test/redefinition.rb
88
88
  - test/root.rb
89
89
  - test/run.rb
90
90
  - test/segment.rb
91
- has_rdoc: true
91
+ - test/session.rb
92
+ - test/settings.rb
92
93
  homepage: http://github.com/soveran/cuba
93
94
  licenses: []
94
95
  post_install_message:
@@ -104,12 +105,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
105
  required_rubygems_version: !ruby/object:Gem::Requirement
105
106
  none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - ! '>'
108
109
  - !ruby/object:Gem::Version
109
- version: '0'
110
+ version: 1.3.1
110
111
  requirements: []
111
112
  rubyforge_project:
112
- rubygems_version: 1.6.2
113
+ rubygems_version: 1.8.10
113
114
  signing_key:
114
115
  specification_version: 3
115
116
  summary: Microframework for web applications.
@@ -1,3 +0,0 @@
1
- class Cuba
2
- VERSION = "2.2.1"
3
- end
@@ -1,15 +0,0 @@
1
- require File.expand_path("helper", File.dirname(__FILE__))
2
-
3
- test "simple layout support" do
4
- Cuba.define do
5
- on true do
6
- res.write render("test/fixtures/layout.erb") {
7
- render("test/fixtures/content.erb")
8
- }
9
- end
10
- end
11
-
12
- _, _, resp = Cuba.call({})
13
-
14
- assert_equal ["alfa beta\n\n"], resp.body
15
- end