cuba 3.1.1 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
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