cuba 3.1.1 → 3.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b881a2c6bb3396ac4515bea4b2a9745933f071b2
4
- data.tar.gz: dad770ec883f93c34cd0f0bb55a0fb5f8a782096
3
+ metadata.gz: 9fc1228862c8a441f9246f55475c5794761605b8
4
+ data.tar.gz: e5ddde6ab8c8e56c15910551eca0e49960b29c31
5
5
  SHA512:
6
- metadata.gz: 16ff53505523c87084f283005ad9819e06d87676d08663ebe430c15924beb7265a55c88328a7b71dd04fb3c13af5035b590e620319c3752b8da7515aa054d9d4
7
- data.tar.gz: 5e1ef15fa6595a48050e3fbdf1fbd71cba9615a509631a5724445bb20bd37e6f5b1b9eb40d8295c0474c8e533a22f3bf14387a7443e4440133fbe97a917beaf1
6
+ metadata.gz: 8eb9986361bbdbee4d60ed75167870d37bbd16b38aa676a73cc3c5e0f0831c3c4654464f192d015cfd1a0b796858e4389087206e4fb72fa81ef57c1d79f630e8
7
+ data.tar.gz: f7e6ab58e6517f5768e2773bafcc4a2d8f0d01462be4c443079085b3142813c21eaaebf65cad9c096eb2513e60ca091cc041d3f00c9697aea85ec05879265dc1
data/.gems ADDED
@@ -0,0 +1,4 @@
1
+ cutest -v 1.2.1
2
+ rack -v 1.5.2
3
+ tilt -v 2.0.1
4
+ rack-test -v 0.6.2
@@ -0,0 +1,2 @@
1
+ /pkg
2
+ webrat.log
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 3.2.0
2
+
3
+ * Return 404 when status is not explicitly set and body is empty.
4
+
1
5
  3.1.1
2
6
 
3
7
  * Add support for custom default layouts.
data/README.md CHANGED
@@ -30,6 +30,16 @@ It integrates many templates via [Tilt][tilt], and testing via
30
30
  [capybara]: http://github.com/jnicklas/capybara
31
31
  [rack-test]: https://github.com/brynary/rack-test
32
32
 
33
+ Guide
34
+ -----
35
+
36
+ There's a book called [The Guide to Cuba][guide] that explains how
37
+ to build web applications by following a minimalistic approach. It
38
+ is recommended reading for anyone trying to learn the basics of
39
+ Cuba and other related tools.
40
+
41
+ [guide]: http://theguidetocuba.io
42
+
33
43
  Installation
34
44
  ------------
35
45
 
@@ -162,8 +172,8 @@ Cuba.define do
162
172
  res.write "#{user}:#{pass}" #=> "foo:baz"
163
173
  end
164
174
 
165
- # If the params `user` and `pass` are not provided, this block will
166
- # get executed.
175
+ # If the params `user` and `pass` are not provided, this
176
+ # block will get executed.
167
177
  on true do
168
178
  res.write "You need to provide user and pass!"
169
179
  end
@@ -175,50 +185,10 @@ end
175
185
  Status codes
176
186
  ------------
177
187
 
178
- As soon as an `on` block is executed, the status code for the
179
- response is changed to 200. The default status code is 404, and it
180
- is returned if no `on` block succeeds inside a Cuba app.
181
-
182
- As this behavior can be tricky, let's look at some examples:
183
-
184
- ``` ruby
185
- Cuba.define do
186
- on get do
187
- on "hello" do
188
- res.write "hello world"
189
- end
190
- end
191
- end
192
-
193
- # Requests:
194
- #
195
- # GET / # 200, ""
196
- # GET /hello # 200, "hello world"
197
- # GET /hello/world # 200, "hello world"
198
- ```
199
-
200
- As you can see, as soon as `on get` matched, the status code was
201
- changed to 200. If you expected some of those requests to return a
202
- 404 status code, you may be surprised by this behavior.
203
-
204
- In the following example, as both arguments to `on` must match,
205
- the requests to `/` return 404.
206
-
207
- ``` ruby
208
- Cuba.define do
209
- on get, "hello" do
210
- res.write "hello world"
211
- end
212
- end
213
-
214
- # Requests:
215
- #
216
- # GET / # 404, ""
217
- # GET /hello # 200, "hello world"
218
- # GET /hello/world # 200, "hello world"
219
- ```
188
+ If you don't assign a status code and you don't write to the `res`
189
+ object, the status will be set as `404`.
220
190
 
221
- Another way is to add a default block:
191
+ For example:
222
192
 
223
193
  ``` ruby
224
194
  Cuba.define do
@@ -226,79 +196,46 @@ Cuba.define do
226
196
  on "hello" do
227
197
  res.write "hello world"
228
198
  end
229
-
230
- on default do
231
- res.status = 404
232
- end
233
- end
234
- end
235
-
236
- # Requests:
237
- #
238
- # GET / # 404, ""
239
- # GET /hello # 200, "hello world"
240
- # GET /hello/world # 200, "hello world"
241
- ```
242
-
243
- Yet another way is to mount an application with routes that don't
244
- match the request:
245
-
246
- ``` ruby
247
- SomeApp = Cuba.new do
248
- on "bye" do
249
- res.write "bye!"
250
- end
251
- end
252
-
253
- Cuba.define do
254
- on get do
255
- run SomeApp
256
199
  end
257
200
  end
258
201
 
259
202
  # Requests:
260
203
  #
261
- # GET / # 404, ""
262
- # GET /hello # 404, ""
263
- # GET /hello/world # 404, ""
204
+ # GET / # 404
205
+ # GET /hello # 200
206
+ # GET /hello/world # 200
264
207
  ```
265
208
 
266
- As Cuba encourages the composition of applications, this last
267
- example is a very common pattern.
209
+ As you can see, as soon as something was written to the response,
210
+ the status code was changed to 200.
268
211
 
269
- You can also change the status code at any point inside the define
270
- block. That way you can change the default status, as shown in the
271
- following example:
212
+ If you want to match just "hello", but not "hello/world", you can do
213
+ as follows:
272
214
 
273
215
  ``` ruby
274
216
  Cuba.define do
275
- res.status = 404
276
-
277
217
  on get do
278
218
  on "hello" do
279
- res.status = 200
280
- res.write "hello world"
219
+ on root do
220
+ res.write "hello world"
221
+ end
281
222
  end
282
223
  end
283
224
  end
284
225
 
285
226
  # Requests:
286
227
  #
287
- # GET / # 404, ""
288
- # GET /hello # 200, "hello world"
289
- # GET /hello/world # 200, "hello world"
228
+ # GET / # 404
229
+ # GET /hello # 200
230
+ # GET /hello/world # 404
290
231
  ```
291
232
 
292
- If you really want to return 404 for everything under "hello", you
293
- can match the end of line:
233
+ You can also use a regular expression to match the end of line:
294
234
 
295
235
  ``` ruby
296
236
  Cuba.define do
297
- res.status = 404
298
-
299
237
  on get do
300
238
  on /hello\/?\z/ do
301
- res.status = 200
302
239
  res.write "hello world"
303
240
  end
304
241
  end
@@ -306,9 +243,9 @@ end
306
243
 
307
244
  # Requests:
308
245
  #
309
- # GET / # 404, ""
310
- # GET /hello # 200, "hello world"
311
- # GET /hello/world # 404, ""
246
+ # GET / # 404
247
+ # GET /hello # 200
248
+ # GET /hello/world # 404
312
249
  ```
313
250
 
314
251
  This last example is not a common usage pattern. It's here only to
@@ -326,11 +263,8 @@ end
326
263
  Cuba.plugin TerminalMatcher
327
264
 
328
265
  Cuba.define do
329
- res.status = 404
330
-
331
266
  on get do
332
267
  on terminal("hello") do
333
- res.status = 200
334
268
  res.write "hello world"
335
269
  end
336
270
  end
@@ -532,46 +466,69 @@ Feel free to store whatever you find convenient.
532
466
  Rendering
533
467
  ---------
534
468
 
535
- Cuba ships with a plugin that provides helpers for rendering templates. It uses
536
- [Tilt][tilt], a gem that interfaces with many template engines.
469
+ Cuba includes a plugin called `Cuba::Render` that provides a couple of helper
470
+ methods for rendering templates. This plugin uses [Tilt][tilt], which serves as
471
+ an interface to a bunch of different Ruby template engines (ERB, Haml, Sass,
472
+ CoffeeScript, etc.), so you can use the template engine of your choice.
537
473
 
538
- ``` ruby
474
+ To set up `Cuba::Render`, do:
475
+
476
+ ```ruby
477
+ require "cuba"
539
478
  require "cuba/render"
479
+ require "erb"
480
+
481
+ Cuba.plugin(Cuba::Render)
482
+ ```
483
+
484
+ This example use ERB, a template engine that comes with Ruby. If you want to
485
+ use another template engine, one [supported by Tilt][templates], you need to
486
+ install the required gem and change the `template_engine` setting as shown
487
+ below.
540
488
 
541
- Cuba.plugin Cuba::Render
489
+ ```ruby
490
+ Cuba.settings[:render][:template_engine] = "haml"
491
+ ```
542
492
 
493
+ The plugin provides three helper methods for rendering templates: `partial`,
494
+ `view` and `render`.
495
+
496
+ ```ruby
543
497
  Cuba.define do
544
- on default do
498
+ on "about" do
499
+ # `partial` renders a template called `about.erb` without a layout.
500
+ res.write partial("about")
501
+ end
545
502
 
546
- # Within the partial, you will have access to the local variable `content`,
547
- # that will hold the value "hello, world".
548
- res.write render("home.haml", content: "hello, world")
503
+ on "home" do
504
+ # Opposed to `partial`, `view` renders the same template
505
+ # within a layout called `layout.erb`.
506
+ res.write view("about")
507
+ end
508
+
509
+ on "contact" do
510
+ # `render` is a shortcut to `res.write view(...)`
511
+ render("contact")
549
512
  end
550
513
  end
551
514
  ```
552
515
 
553
- Note that in order to use this plugin you need to have [Tilt][tilt] installed, along
554
- with the templating engines you want to use.
516
+ By default, `Cuba::Render` assumes that all templates are placed in a folder
517
+ named `views` and that they use the proper extension for the chosen template
518
+ engine. Also for the `view` and `render` methods, it assumes that the layout
519
+ template is called `layout`.
555
520
 
556
- You can also configure the template engine in the app's settings,
557
- and that will allow you to skip the file extension when rendering a
558
- file:
559
-
560
- ``` ruby
561
- require "cuba/render"
521
+ The defaults can be changed through the `Cuba.settings` method:
562
522
 
563
- Cuba.plugin Cuba::Render
564
- Cuba.settings[:render][:template_engine] = "slim"
523
+ ```ruby
524
+ Cuba.settings[:render][:template_engine] = "haml"
525
+ Cuba.settings[:render][:views] = "./views/admin/"
526
+ Cuba.settings[:render][:layout] = "admin"
527
+ ```
565
528
 
566
- Cuba.define do
567
- on default do
529
+ NOTE: Cuba doesn't ship with Tilt. You need to install it (`gem install tilt`).
568
530
 
569
- # Now we can use the `view` helper, which guesses the file
570
- # extension based on the configured template_engine.
571
- res.write view("home", content: "hello, world")
572
- end
573
- end
574
- ```
531
+ [templates]: https://github.com/rtomayko/tilt/blob/master/docs/TEMPLATES.md
575
532
 
576
533
  Plugins
577
534
  -------
@@ -638,3 +595,26 @@ Cuba.set(:foo, "bar")
638
595
  assert_equal "bar", Cuba.get(:foo)
639
596
  assert_equal "bar", Cuba.settings[:foo]
640
597
  ```
598
+
599
+ Contributing
600
+ ------------
601
+
602
+ A good first step is to meet us on IRC and discuss ideas. If that's
603
+ not possible, you can create an issue explaning the proposed change
604
+ and a use case. We pay a lot of attention to use cases, because our
605
+ goal is to keep the code base simple. In many cases, the result of
606
+ a conversation will be the creation of another tool, instead of the
607
+ modification of Cuba itself.
608
+
609
+ If you want to test Cuba, you may want to use a gemset to isolate
610
+ the requirements. We recommend the use of tools like [dep][dep] and
611
+ [gs][gs], but you can use similar tools like [gst][gst] or [bs][bs].
612
+
613
+ The required gems for testing and development are listed in the
614
+ `.gems` file. If you are using [dep][dep], you can create a gemset
615
+ and run `dep install`.
616
+
617
+ [dep]: http://cyx.github.io/dep/
618
+ [gs]: http://soveran.github.io/gs/
619
+ [gst]: https://github.com/tonchis/gst
620
+ [bs]: https://github.com/educabilia/bs
@@ -1,21 +1,14 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cuba"
3
- s.version = "3.1.1"
3
+ s.version = "3.2.0"
4
4
  s.summary = "Microframework for web applications."
5
5
  s.description = "Cuba is a microframework for web applications."
6
6
  s.authors = ["Michel Martens"]
7
7
  s.email = ["michel@soveran.com"]
8
- s.homepage = "http://github.com/soveran/cuba"
8
+ s.homepage = "https://github.com/soveran/cuba"
9
+ s.license = "MIT"
9
10
 
10
- s.files = Dir[
11
- "LICENSE",
12
- "CHANGELOG",
13
- "README.md",
14
- "Rakefile",
15
- "lib/**/*.rb",
16
- "*.gemspec",
17
- "test/*.*"
18
- ]
11
+ s.files = `git ls-files`.split("\n")
19
12
 
20
13
  s.add_dependency "rack"
21
14
  s.add_development_dependency "cutest"
@@ -0,0 +1,18 @@
1
+ require "../lib/cuba"
2
+ require "cuba/contrib"
3
+
4
+ Cuba.plugin Cuba::Mote
5
+
6
+ ITEMS = ("A".."Z").to_a
7
+
8
+ Cuba.define do
9
+ def mote_vars(content)
10
+ { content: content }
11
+ end
12
+
13
+ on default do
14
+ res.write view("home", list: ITEMS)
15
+ end
16
+ end
17
+
18
+ run Cuba
@@ -0,0 +1,17 @@
1
+ require "benchmark"
2
+ require "rack"
3
+
4
+ Benchmark.bmbm do |x|
5
+
6
+ x.report "Rack::HeaderHash" do
7
+ 1000.times do
8
+ Rack::Utils::HeaderHash.new("Content-Type" => "text/html")
9
+ end
10
+ end
11
+
12
+ x.report "Hash" do
13
+ 1000.times do
14
+ { "Content-Type" => "text/html" }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ require "../lib/cuba"
2
+ require "cuba/contrib"
3
+
4
+ Cuba.plugin Cuba::Mote
5
+
6
+ ITEMS = ("A".."Z").to_a
7
+
8
+ Cuba.send :remove_const, :Response
9
+ Cuba::Response = Rack::Response
10
+
11
+ Cuba.define do
12
+ def mote_vars(content)
13
+ { content: content }
14
+ end
15
+
16
+ on default do
17
+ res.write view("home", list: ITEMS)
18
+ end
19
+ end
20
+
21
+ run Cuba
@@ -0,0 +1,7 @@
1
+ This is the body
2
+
3
+ <ul>
4
+ % list.each do |e|
5
+ <li>{{ e }}</li>
6
+ % end
7
+ </ul>
@@ -0,0 +1,11 @@
1
+ <html>
2
+ <head>
3
+ <meta charset="utf-8">
4
+
5
+ <title>Home</title>
6
+ </head>
7
+
8
+ <body>
9
+ {{ content }}
10
+ </body>
11
+ </html>
@@ -5,9 +5,10 @@ class Cuba
5
5
  class Response
6
6
  attr_accessor :status
7
7
 
8
+ attr :body
8
9
  attr :headers
9
10
 
10
- def initialize(status = 200,
11
+ def initialize(status = nil,
11
12
  headers = { "Content-Type" => "text/html; charset=utf-8" })
12
13
 
13
14
  @status = status
@@ -180,7 +181,15 @@ class Cuba
180
181
  # are carried out by #consume.
181
182
  yield(*captures)
182
183
 
183
- halt res.finish
184
+ if res.status.nil?
185
+ if res.body.empty?
186
+ res.status = 404
187
+ else
188
+ res.status = 200
189
+ end
190
+ end
191
+
192
+ halt(res.finish)
184
193
  end
185
194
  end
186
195
 
@@ -12,49 +12,51 @@ class Cuba
12
12
  }
13
13
  end
14
14
 
15
- def view(template, locals = {}, layout = settings[:render][:layout])
16
- partial(layout, { content: partial(template, locals) }.merge(locals))
15
+ def render(template, locals = {}, layout = settings[:render][:layout])
16
+ res.write(view(template, locals, layout))
17
17
  end
18
18
 
19
- def template_path(template)
20
- "%s/%s.%s" % [
21
- settings[:render][:views],
22
- template,
23
- settings[:render][:template_engine]
24
- ]
19
+ def view(template, locals = {}, layout = settings[:render][:layout])
20
+ partial(layout, locals.merge(content: partial(template, locals)))
25
21
  end
26
22
 
27
23
  def partial(template, locals = {})
28
- render(template_path(template), locals, settings[:render][:options])
24
+ _render(template_path(template), locals, settings[:render][:options])
25
+ end
26
+
27
+ def template_path(template)
28
+ dir = settings[:render][:views]
29
+ ext = settings[:render][:template_engine]
30
+
31
+ return File.join(dir, "#{ template }.#{ ext }")
29
32
  end
30
33
 
31
- # Render any type of template file supported by Tilt.
34
+ # @private Renders any type of template file supported by Tilt.
32
35
  #
33
36
  # @example
34
37
  #
35
38
  # # Renders home, and is assumed to be HAML.
36
- # render("home.haml")
39
+ # _render("home.haml")
37
40
  #
38
41
  # # Renders with some local variables
39
- # render("home.haml", site_name: "My Site")
42
+ # _render("home.haml", site_name: "My Site")
40
43
  #
41
44
  # # Renders with HAML options
42
- # render("home.haml", {}, ugly: true, format: :html5)
45
+ # _render("home.haml", {}, ugly: true, format: :html5)
43
46
  #
44
47
  # # Renders in layout
45
- # render("layout.haml") { render("home.haml") }
48
+ # _render("layout.haml") { _render("home.haml") }
46
49
  #
47
- def render(template, locals = {}, options = {}, &block)
50
+ def _render(template, locals = {}, options = {}, &block)
48
51
  _cache.fetch(template) {
49
52
  Tilt.new(template, 1, options.merge(outvar: '@_output'))
50
53
  }.render(self, locals, &block)
51
54
  end
52
55
 
53
- # @private Used internally by #render to cache the
56
+ # @private Used internally by #_render to cache the
54
57
  # Tilt templates.
55
58
  def _cache
56
59
  Thread.current[:_cache] ||= Tilt::Cache.new
57
60
  end
58
- private :_cache
59
61
  end
60
62
  end
@@ -0,0 +1,4 @@
1
+ .PHONY: test
2
+
3
+ test:
4
+ cutest ./test/*.rb
@@ -77,7 +77,7 @@ test "reset and use" do
77
77
 
78
78
  status, headers, resp = Cuba.call(env)
79
79
 
80
- assert 200 == status
80
+ assert_equal 200, status
81
81
  assert "text/html; charset=utf-8" == headers["Content-Type"]
82
82
  assert_response resp, ["2nd Default"]
83
83
 
data/test/on.rb CHANGED
@@ -95,3 +95,63 @@ test "reverts a half-met matcher" do
95
95
  assert_equal "/post", env["PATH_INFO"]
96
96
  assert_equal "/", env["SCRIPT_NAME"]
97
97
  end
98
+
99
+ test "responds 404 if conditions are not met" do
100
+ Cuba.define do
101
+ on root do
102
+ res.write("Should be unmet")
103
+ end
104
+ end
105
+
106
+ env = { "PATH_INFO" => "/notexists", "SCRIPT_NAME" => "/" }
107
+ status, _, body = Cuba.call(env)
108
+
109
+ assert_equal 404, status
110
+ assert body.empty?
111
+ end
112
+
113
+ test "responds 404 if nested conditions are not met" do
114
+ Cuba.define do
115
+ on get do
116
+ on root do
117
+ res.write("Should be unmet")
118
+ end
119
+ end
120
+
121
+ on default do
122
+ res.write("Should be unmet")
123
+ end
124
+ end
125
+
126
+ env = {
127
+ "REQUEST_METHOD" => "GET",
128
+ "PATH_INFO" => "/notexists",
129
+ "SCRIPT_NAME" => "/"
130
+ }
131
+
132
+ status, _, body = Cuba.call(env)
133
+
134
+ assert_equal 404, status
135
+ assert body.empty?
136
+ end
137
+
138
+ test "responds 200 even with an empty body if status is set" do
139
+ Cuba.define do
140
+ on get do
141
+ on root do
142
+ res.status = 200
143
+ end
144
+ end
145
+ end
146
+
147
+ env = {
148
+ "REQUEST_METHOD" => "GET",
149
+ "PATH_INFO" => "/",
150
+ "SCRIPT_NAME" => "/"
151
+ }
152
+
153
+ status, _, body = Cuba.call(env)
154
+
155
+ assert_equal 200, status
156
+ assert body.empty?
157
+ end
@@ -28,6 +28,10 @@ scope do
28
28
  on "about" do
29
29
  res.write partial("about", title: "About Cuba")
30
30
  end
31
+
32
+ on "render" do
33
+ render("about", title: "About Cuba")
34
+ end
31
35
  end
32
36
  end
33
37
 
@@ -43,6 +47,12 @@ scope do
43
47
  assert_response body, ["<title>Cuba: Home</title>\n<h1>Home</h1>\n<p>Hello Agent Smith</p>\n"]
44
48
  end
45
49
 
50
+ test "render" do
51
+ _, _, body = Cuba.call({ "PATH_INFO" => "/render", "SCRIPT_NAME" => "/" })
52
+
53
+ assert_response body, ["<title>Cuba: About Cuba</title>\n<h1>About Cuba</h1>\n"]
54
+ end
55
+
46
56
  test "partial with str as engine" do
47
57
  Cuba.settings[:render][:template_engine] = "str"
48
58
 
@@ -87,22 +97,6 @@ test "caching behavior" do
87
97
  assert_equal 1, Thread.current[:_cache].instance_variable_get(:@cache).size
88
98
  end
89
99
 
90
- test "simple layout support" do
91
- Cuba.plugin Cuba::Render
92
-
93
- Cuba.define do
94
- on true do
95
- res.write render("test/views/layout-yield.erb") {
96
- render("test/views/content-yield.erb")
97
- }
98
- end
99
- end
100
-
101
- _, _, resp = Cuba.call({})
102
-
103
- assert_response resp, ["Header\nThis is the actual content.\nFooter\n"]
104
- end
105
-
106
100
  test "overrides layout" do
107
101
  Cuba.plugin Cuba::Render
108
102
  Cuba.settings[:render][:views] = "./test/views"
@@ -0,0 +1 @@
1
+ <h1><%= title %></h1>
@@ -0,0 +1 @@
1
+ <h1>#{title}</h1>
@@ -0,0 +1 @@
1
+ This is the actual content.
@@ -0,0 +1 @@
1
+ <h1>Abs Path</h1>
@@ -0,0 +1 @@
1
+ <h1>{{ foo }}</h1>
@@ -0,0 +1,2 @@
1
+ <h1>Home</h1>
2
+ <p>Hello <%= name %></p>
@@ -0,0 +1 @@
1
+ <h1>Home</h1>
@@ -0,0 +1,2 @@
1
+ <h1>Home</h1>
2
+ <p>Hello #{name}</p>
@@ -0,0 +1,2 @@
1
+ <title>Alternative Layout: <%= title %></title>
2
+ <%= content %>
@@ -0,0 +1,3 @@
1
+ Header
2
+ <%= yield %>
3
+ Footer
@@ -0,0 +1,2 @@
1
+ <title>Cuba: <%= title %></title>
2
+ <%= content %>
@@ -0,0 +1,2 @@
1
+ <title>{{title}}</title>
2
+ {{ content }}
@@ -0,0 +1,2 @@
1
+ <title>Cuba: #{ title }</title>
2
+ #{ content }
@@ -0,0 +1 @@
1
+ Displaying {{ i }}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuba
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michel Martens
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-09 00:00:00.000000000 Z
11
+ date: 2014-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -73,15 +73,22 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
- - LICENSE
76
+ - .gems
77
+ - .gitignore
77
78
  - CHANGELOG
79
+ - LICENSE
78
80
  - README.md
79
- - Rakefile
81
+ - cuba.gemspec
82
+ - examples/config.ru
83
+ - examples/measure.rb
84
+ - examples/rack-response.ru
85
+ - examples/views/home.mote
86
+ - examples/views/layout.mote
87
+ - lib/cuba.rb
80
88
  - lib/cuba/capybara.rb
81
89
  - lib/cuba/render.rb
82
90
  - lib/cuba/test.rb
83
- - lib/cuba.rb
84
- - cuba.gemspec
91
+ - makefile
85
92
  - test/accept.rb
86
93
  - test/captures.rb
87
94
  - test/composition.rb
@@ -105,8 +112,23 @@ files:
105
112
  - test/segment.rb
106
113
  - test/session.rb
107
114
  - test/settings.rb
108
- homepage: http://github.com/soveran/cuba
109
- licenses: []
115
+ - test/views/about.erb
116
+ - test/views/about.str
117
+ - test/views/content-yield.erb
118
+ - test/views/custom/abs_path.mote
119
+ - test/views/frag.mote
120
+ - test/views/home.erb
121
+ - test/views/home.mote
122
+ - test/views/home.str
123
+ - test/views/layout-alternative.erb
124
+ - test/views/layout-yield.erb
125
+ - test/views/layout.erb
126
+ - test/views/layout.mote
127
+ - test/views/layout.str
128
+ - test/views/test.erb
129
+ homepage: https://github.com/soveran/cuba
130
+ licenses:
131
+ - MIT
110
132
  metadata: {}
111
133
  post_install_message:
112
134
  rdoc_options: []
data/Rakefile DELETED
@@ -1,7 +0,0 @@
1
- task :test do
2
- require "cutest"
3
-
4
- Cutest.run(Dir["test/*.rb"])
5
- end
6
-
7
- task :default => :test