nyny 2.1.1 → 2.2.1

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: eefb757442e7e6fee6409340e2764aaf6f561481
4
- data.tar.gz: 43d71751f9f6563bdf36c86058b2b122e22ff528
3
+ metadata.gz: 6dd6eb95721d78c86e3bbb400a9840369d02e438
4
+ data.tar.gz: d85151c9759b13ef449ca5b37fecf4575a486a84
5
5
  SHA512:
6
- metadata.gz: a99b05e35b1e634dc51a4351d19291a41020e31a81a1a592bfc623755833008422bfa77b020fe6b9372cf94f23d3ad8afdb8b485bf8a2105edcf9c15d8372fd1
7
- data.tar.gz: c7cf0199e55dec48be37d4ef923058cc0ed25b61fc70c31bbc1683d7e1cd64633ca5066432cc7de69da3dcc357dbde973bc0de6ed4895d9644a53e57949aea52
6
+ metadata.gz: 5cd94aac928361668da4b20ee7d23609749d47d4545b7fc13a52f51fae4421c8a7a79655ec96488a90899f13b582bd6de6d9308842b7cd9b95a8f664fb3cce37
7
+ data.tar.gz: 3d6a67e6dfa7052770ac7b9199863d6d4ad2890d13a3d28be60aaf36ffba7da6fb6be157647a881a8ec1e9f2b49696f5687dac548a5135f41738e12ee77327f6
data/.gitignore CHANGED
@@ -4,6 +4,8 @@
4
4
  .config
5
5
  .yardoc
6
6
  *.sqlite3
7
+ *.sublime-project
8
+ *.sublime-workspace
7
9
  Gemfile.lock
8
10
  InstalledFiles
9
11
  _yardoc
data/README.md CHANGED
@@ -42,6 +42,7 @@ Open the browser at [http://localhost:9292](http://localhost:9292)
42
42
  - [Environment](#environment)
43
43
  - [Running](#running)
44
44
  - [Defining routes](#defining-routes)
45
+ - [Templates](#templates)
45
46
  - [Request scope](#request-scope)
46
47
  - [Filters](#filters)
47
48
  - [Middleware](#middleware)
@@ -144,7 +145,6 @@ development easier: Rack::CommonLogger and Rack::ShowExceptions.
144
145
  This will show all requests in the log, and will provide useful details
145
146
  in the case a error occurs during a request.
146
147
 
147
-
148
148
  ## Defining routes
149
149
 
150
150
  NYNY supports the following verbs for defining a route: delete, get, head,
@@ -182,6 +182,36 @@ end
182
182
  Each block that is passed to a route definition is evaluated in the context of
183
183
  a request scope. See below what methods are available there.
184
184
 
185
+ ## Templates
186
+ NYNY can render templates, all you need is to call the `render` function:
187
+ ```ruby
188
+ class App < NYNY::App
189
+ get '/' do
190
+ render 'index.erb'
191
+ end
192
+ end
193
+ ```
194
+ There are 2 ways to pass data to the template:
195
+
196
+ Via a instance variable:
197
+ ```ruby
198
+ class App < NYNY::App
199
+ get '/' do
200
+ @foo = 'bar' #access it as @foo in template
201
+ render 'index.erb'
202
+ end
203
+ end
204
+ ```
205
+
206
+ Or via a local variable:
207
+ ```ruby
208
+ class App < NYNY::App
209
+ get '/' do
210
+ render 'index.erb', :foo => 'bar' #access it as foo in template
211
+ end
212
+ end
213
+ ```
214
+
185
215
  ## Request scope
186
216
  As was said above, when you pass a block to a route definition,
187
217
  that block is evaluated in the context of a [RequestScope][2].
@@ -189,7 +219,9 @@ This means that several methods/objects available inside that block:
189
219
 
190
220
  - `request` - A `Rack::Request` object which encapsulates the request
191
221
  to that route. (see [Rack::Request documentation][3] for more info)
192
- - `response` - A `Rack::Response` object which encapsulates the response
222
+ - `response` - A `Rack::Response` object which encapsulates the response.
223
+ Additionally, NYNY's response exposes 2 more methods in addition to Rack's ones.
224
+ (see [primitives.rb][primitivesrb])
193
225
  - `params` - a hash which contains both POST body params and GET querystring params.
194
226
  - `headers` - allows you to read/add headers to the response
195
227
  (ex: `headers 'Content-Type' => 'text/html'`)
@@ -229,7 +261,7 @@ end
229
261
 
230
262
  ## Middleware
231
263
 
232
- A NYNY app is a Rack middleware, which means that it can be used inside
264
+ A NYNY app is a Rack middleware, which means that it can be used inside
233
265
  Sinatra, Rails, or any other Rack-based app:
234
266
 
235
267
  ```ruby
@@ -346,3 +378,4 @@ TBD.
346
378
  [performance]: https://github.com/alisnic/nyny/blob/master/Performance.md
347
379
  [rack-middleware]: https://github.com/rack/rack/wiki/List-of-Middleware
348
380
  [halt-definition]: https://github.com/alisnic/nyny/blob/master/lib/nyny/request_scope.rb#L36
381
+ [primitivesrb]: https://github.com/alisnic/nyny/blob/master/lib/nyny/primitives.rb
data/benchmark.rb CHANGED
@@ -93,3 +93,33 @@ end
93
93
  run_test 'Url patterns', apps do |app|
94
94
  app.get '/foo'
95
95
  end
96
+
97
+ # Plain routes
98
+ apps = build_apps do
99
+ [:get, :post, :put].each do |method|
100
+ 10.times do |i|
101
+ send(method, "/foo/#{i}") do
102
+ i
103
+ end
104
+ end
105
+ end
106
+ end
107
+ run_test 'A lot o Plain routes', apps do |app|
108
+ app.get '/foo/5'
109
+ end
110
+
111
+ #
112
+ # Pattern routes
113
+ apps = build_apps do
114
+ [:get, :post, :put].each do |method|
115
+ 10.times do |i|
116
+ send(method, "/foo/#{i}/:action") do
117
+ params[:action]
118
+ end
119
+ end
120
+ end
121
+ end
122
+ run_test 'A lot of Pattern routes', apps do |app|
123
+ app.get '/foo/5/edit'
124
+ end
125
+
data/lib/nyny.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'uri'
2
2
  require 'rack'
3
+ require 'tilt'
3
4
 
4
5
  require 'nyny/version'
5
6
  require 'nyny/primitives'
@@ -9,12 +10,13 @@ require 'nyny/middleware_chain'
9
10
  require 'nyny/app'
10
11
  require 'nyny/router'
11
12
 
12
-
13
13
  # Register core extensions
14
14
  require 'nyny/core-ext/runner'
15
+ require 'nyny/core-ext/templates'
15
16
 
16
17
  module NYNY
17
18
  App.register NYNY::Runner
19
+ App.register NYNY::Templates
18
20
 
19
21
  class EnvString < String
20
22
  [:production, :development, :test].each do |env|
@@ -0,0 +1,19 @@
1
+ module NYNY
2
+ module Templates
3
+ module Helpers
4
+ def render template, locals = {}, options = {}, &block
5
+ template_cache.fetch(template) do
6
+ Tilt.new(template, options)
7
+ end.render(self, locals, &block)
8
+ end
9
+
10
+ def template_cache
11
+ Thread.current[:template_cache] ||= Tilt::Cache.new
12
+ end
13
+ end
14
+
15
+ def self.registered app
16
+ app.helpers Helpers
17
+ end
18
+ end
19
+ end
data/lib/nyny/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module NYNY
2
- VERSION = "2.1.1"
2
+ VERSION = "2.2.1"
3
3
  end
data/nyny.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "rack"
22
+ spec.add_dependency "tilt"
22
23
  spec.add_development_dependency "bundler", "~> 1.3"
23
24
  spec.add_development_dependency "rake"
24
25
  spec.add_development_dependency "rspec"
data/spec/spec_helper.rb CHANGED
@@ -20,6 +20,10 @@ class Rack::MockRequest
20
20
  def options(uri, opts={}) request("OPTIONS", uri, opts) end
21
21
  end
22
22
 
23
+ def template name
24
+ File.join(File.dirname(__FILE__), 'views', name)
25
+ end
26
+
23
27
  def extended_modules_for kls
24
28
  (class << kls; self end).included_modules
25
29
  end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Templates do
4
+ let (:app) do
5
+ mock_app do
6
+ get '/without_layout' do
7
+ render template('index.erb')
8
+ end
9
+
10
+ get '/with_layout' do
11
+ render template('layout.erb') do
12
+ render template('index.erb')
13
+ end
14
+ end
15
+
16
+ get '/instance_var' do
17
+ @foo = 'bar'
18
+ render template('instance.erb')
19
+ end
20
+
21
+ get '/local_var' do
22
+ render template('local.erb'), :foo => 'bar'
23
+ end
24
+ end
25
+ end
26
+
27
+ it 'renders correctly without layout' do
28
+ response = app.get('/without_layout')
29
+ response.body.should == '<p>Hello!</p>'
30
+ end
31
+
32
+ it 'passes a instance variable to template' do
33
+ response = app.get('/instance_var')
34
+ response.body.should == 'bar'
35
+ end
36
+
37
+ it 'passes a local variable to template' do
38
+ response = app.get('/local_var')
39
+ response.body.should == 'bar'
40
+ end
41
+
42
+ it 'renders correctly with layout' do
43
+ response = app.get('/with_layout')
44
+
45
+ rendered = Tilt.new(template('layout.erb')).render do
46
+ Tilt.new(template('index.erb')).render
47
+ end
48
+
49
+ response.body.should == rendered
50
+ end
51
+
52
+ end
@@ -0,0 +1 @@
1
+ <p>Hello!</p>
@@ -0,0 +1 @@
1
+ <%= @foo %>
@@ -0,0 +1,7 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head></head>
4
+ <body>
5
+ <%= yield %>
6
+ </body>
7
+ </html>
@@ -0,0 +1 @@
1
+ <%= foo %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nyny
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Lisnic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-25 00:00:00.000000000 Z
11
+ date: 2013-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: tilt
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -87,6 +101,7 @@ files:
87
101
  - lib/nyny.rb
88
102
  - lib/nyny/app.rb
89
103
  - lib/nyny/core-ext/runner.rb
104
+ - lib/nyny/core-ext/templates.rb
90
105
  - lib/nyny/middleware_chain.rb
91
106
  - lib/nyny/primitives.rb
92
107
  - lib/nyny/request_scope.rb
@@ -101,6 +116,11 @@ files:
101
116
  - spec/router_spec.rb
102
117
  - spec/runner_spec.rb
103
118
  - spec/spec_helper.rb
119
+ - spec/templates_spec.rb
120
+ - spec/views/index.erb
121
+ - spec/views/instance.erb
122
+ - spec/views/layout.erb
123
+ - spec/views/local.erb
104
124
  homepage: http://alisnic.github.io/nyny/
105
125
  licenses:
106
126
  - MIT
@@ -133,3 +153,8 @@ test_files:
133
153
  - spec/router_spec.rb
134
154
  - spec/runner_spec.rb
135
155
  - spec/spec_helper.rb
156
+ - spec/templates_spec.rb
157
+ - spec/views/index.erb
158
+ - spec/views/instance.erb
159
+ - spec/views/layout.erb
160
+ - spec/views/local.erb