nyny 2.1.1 → 2.2.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.
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