tilt-jbuilder 0.3.0 → 0.4.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 +7 -0
- data/.travis.yml +4 -1
- data/README.md +51 -0
- data/lib/sinatra/jbuilder.rb +10 -0
- data/lib/tilt/jbuilder.rb +37 -12
- data/spec/sinatra_integration_spec.rb +72 -0
- data/spec/tilt-jbuilder_spec.rb +5 -0
- data/spec/views/_hello.jbuilder +3 -0
- data/spec/views/_partial_with_helper_method.jbuilder +1 -0
- data/spec/views/_partial_with_instance_variable.jbuilder +1 -0
- data/spec/views/_partial_with_local_variable.jbuilder +1 -0
- data/spec/views/hello.jbuilder +1 -0
- data/tilt-jbuilder.gemspec +3 -1
- metadata +57 -31
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 00e24cf46f2b348806b82a5b80db198a1d8971e5
|
4
|
+
data.tar.gz: 42c17a0504854084781501c9fb4e94a1536e3fb0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 34922151c7a3712d67ac1e60da326dcab754727ec5730e10f953f7336a9880c2efd3141c84d05972244e509a0221c595771c1c76b5b3be7a5f3dae8f6c37359b
|
7
|
+
data.tar.gz: 31eea542ca37c304be935ead939fd32b6866baf50a87c771deb101e6af4f58f805d0bfb7bd621612f10b7769a2818f717d33c5f7a137dae290d87d6a3f3bcbf1
|
data/.travis.yml
CHANGED
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# tilt-jbuilder [](http://coderwall.com/anthonator)
|
2
|
+
|
3
|
+
Adds support for rendering Jbuilder templates using Tilt.
|
4
|
+
|
5
|
+
[](http://travis-ci.org/anthonator/tilt-jbuilder)
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
gem 'tilt-jbuilder'
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install tilt-jbuilder
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
require 'tilt/jbuilder.rb'
|
25
|
+
|
26
|
+
template = Tilt::JbuilderTemplate.new("templates/awesomeness.json.jbuilder")
|
27
|
+
teplate.render
|
28
|
+
|
29
|
+
# With locals
|
30
|
+
template = Tilt::JbuilderTemplate.new { "json.author name" }
|
31
|
+
template.render(nil, :name => 'Anthony')
|
32
|
+
|
33
|
+
# With scope
|
34
|
+
template = Tilt::JbuilderTemplate.new { "json.author @name" }
|
35
|
+
scope = Object.new
|
36
|
+
scope.instance_variable_set :@name, 'Anthony'
|
37
|
+
template.render(scope)
|
38
|
+
|
39
|
+
# Block style
|
40
|
+
template = Tilt::JbuilderTemplate.new do |t|
|
41
|
+
lambda { |json| json.author 'Anthony'; json.target! }
|
42
|
+
end
|
43
|
+
template.render
|
44
|
+
```
|
45
|
+
|
46
|
+
## Contributing
|
47
|
+
1. Fork it
|
48
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
49
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
50
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
51
|
+
5. Create new Pull Request
|
data/lib/tilt/jbuilder.rb
CHANGED
@@ -1,6 +1,37 @@
|
|
1
1
|
require 'jbuilder'
|
2
2
|
|
3
3
|
module Tilt
|
4
|
+
class Jbuilder < ::Jbuilder
|
5
|
+
def initialize(scope, *args, &block)
|
6
|
+
@scope = scope
|
7
|
+
super(*args, &block)
|
8
|
+
end
|
9
|
+
|
10
|
+
def partial!(options, locals = {})
|
11
|
+
locals.merge! :json => self
|
12
|
+
view_path = @scope.instance_variable_get('@_jbuilder_view_path')
|
13
|
+
template = ::Tilt::JbuilderTemplate.new(fetch_partial_path(options.to_s, view_path), nil, view_path: view_path)
|
14
|
+
template.render(@scope, locals)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def fetch_partial_path(file, view_path)
|
19
|
+
view_path ||=
|
20
|
+
if defined?(::Sinatra) && @scope.respond_to?(:settings)
|
21
|
+
@scope.settings.views
|
22
|
+
else
|
23
|
+
::Dir.pwd
|
24
|
+
end
|
25
|
+
::Dir[::File.join(view_path, partialized(file) + ".{*.,}jbuilder")].first
|
26
|
+
end
|
27
|
+
|
28
|
+
def partialized(path)
|
29
|
+
partial_file = path.split("/")
|
30
|
+
partial_file[-1] = "_#{partial_file[-1]}" unless partial_file[-1].start_with?("_")
|
31
|
+
partial_file.join("/")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
4
35
|
class JbuilderTemplate < Template
|
5
36
|
self.default_mime_type = 'application/json'
|
6
37
|
|
@@ -18,17 +49,18 @@ module Tilt
|
|
18
49
|
scope ||= Object.new
|
19
50
|
context = scope.instance_eval { binding }
|
20
51
|
set_locals(locals, scope, context)
|
52
|
+
klass = ::Tilt::Jbuilder
|
21
53
|
eval %{
|
22
54
|
if defined? json
|
23
55
|
if @_tilt_data.kind_of? Proc
|
24
|
-
return @_tilt_data.call(
|
56
|
+
return @_tilt_data.call(klass.new(scope))
|
25
57
|
else
|
26
58
|
eval @_tilt_data, binding
|
27
59
|
end
|
28
60
|
else
|
29
|
-
|
61
|
+
klass.encode(scope) do |json|
|
30
62
|
if @_tilt_data.kind_of? Proc
|
31
|
-
return @_tilt_data.call(
|
63
|
+
return @_tilt_data.call(klass.new(scope))
|
32
64
|
else
|
33
65
|
eval @_tilt_data, binding
|
34
66
|
end
|
@@ -39,6 +71,8 @@ module Tilt
|
|
39
71
|
|
40
72
|
private
|
41
73
|
def set_locals(locals, scope, context)
|
74
|
+
view_path = options.delete(:view_path)
|
75
|
+
scope.send(:instance_variable_set, '@_jbuilder_view_path', view_path)
|
42
76
|
scope.send(:instance_variable_set, '@_jbuilder_locals', locals)
|
43
77
|
scope.send(:instance_variable_set, '@_tilt_data', data)
|
44
78
|
set_locals = locals.keys.map { |k| "#{k} = @_jbuilder_locals[#{k.inspect}]" }.join("\n")
|
@@ -48,12 +82,3 @@ module Tilt
|
|
48
82
|
|
49
83
|
register Tilt::JbuilderTemplate, 'jbuilder'
|
50
84
|
end
|
51
|
-
|
52
|
-
class Jbuilder
|
53
|
-
def partial!(options, locals = {})
|
54
|
-
path = ::Pathname.new(options)
|
55
|
-
locals.merge! :json => self
|
56
|
-
template = ::Tilt::JbuilderTemplate.new("#{path.dirname.to_s}/_#{path.basename}.json.jbuilder")
|
57
|
-
template.render(nil, locals)
|
58
|
-
end
|
59
|
-
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require "tilt"
|
2
|
+
require "tilt/jbuilder"
|
3
|
+
require "sinatra/jbuilder"
|
4
|
+
|
5
|
+
require "rack/test"
|
6
|
+
require "sinatra/base"
|
7
|
+
|
8
|
+
ENV['RACK_ENV'] ||= "test"
|
9
|
+
Sinatra::Base.set :environment, :test
|
10
|
+
|
11
|
+
module SinatraIntegrationTestMethods
|
12
|
+
def jbuilder_app(&block)
|
13
|
+
@app = Sinatra.new(Sinatra::Base) do
|
14
|
+
set :views, File.dirname(__FILE__) + "/views"
|
15
|
+
helpers do
|
16
|
+
def admin?; false end
|
17
|
+
end
|
18
|
+
get("/", &block)
|
19
|
+
end
|
20
|
+
get "/"
|
21
|
+
end
|
22
|
+
|
23
|
+
def app
|
24
|
+
Rack::Lint.new(@app)
|
25
|
+
end
|
26
|
+
|
27
|
+
def body
|
28
|
+
last_response.body.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
RSpec.configure do |config|
|
33
|
+
config.include Rack::Test::Methods
|
34
|
+
config.include SinatraIntegrationTestMethods
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "Sinatra Integration" do
|
38
|
+
it "renders inline jbuilder strings" do
|
39
|
+
jbuilder_app { jbuilder "json.author 'Anthony'" }
|
40
|
+
body.should == "{\"author\":\"Anthony\"}"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "renders .jbuilder files in views path" do
|
44
|
+
jbuilder_app { jbuilder :hello }
|
45
|
+
body.should == "{\"author\":\"Anthony\"}"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "renders instance variables" do
|
49
|
+
jbuilder_app { @last_name = "Smith"; jbuilder "json.last_name @last_name" }
|
50
|
+
body.should == "{\"last_name\":\"Smith\"}"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "renders helper methods" do
|
54
|
+
jbuilder_app { jbuilder "json.is_admin admin?" }
|
55
|
+
body.should == "{\"is_admin\":false}"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "renders partials with local variables" do
|
59
|
+
jbuilder_app { jbuilder "json.partial! :partial_with_local_variable, last_name: \"Smith\"" }
|
60
|
+
body.should == "{\"last_name\":\"Smith\"}"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "renders partials with instance variables" do
|
64
|
+
jbuilder_app { @last_name = "Smith"; jbuilder "json.partial! :partial_with_instance_variable" }
|
65
|
+
body.should == "{\"last_name\":\"Smith\"}"
|
66
|
+
end
|
67
|
+
|
68
|
+
it "renders partials with helper methods" do
|
69
|
+
jbuilder_app { jbuilder "json.partial! :partial_with_helper_method" }
|
70
|
+
body.should == "{\"is_admin\":false}"
|
71
|
+
end
|
72
|
+
end
|
data/spec/tilt-jbuilder_spec.rb
CHANGED
@@ -39,4 +39,9 @@ describe Tilt::JbuilderTemplate do
|
|
39
39
|
template = Tilt::JbuilderTemplate.new { "json.partial! 'spec/partial', last_name: 'Smith'" }
|
40
40
|
"{\"last_name\":\"Smith\"}".should == template.render
|
41
41
|
end
|
42
|
+
|
43
|
+
it "should evaluate partials with view_path" do
|
44
|
+
template = Tilt::JbuilderTemplate.new(nil, nil, view_path: 'spec') { "json.partial! '/partial', last_name: 'Smith'" }
|
45
|
+
"{\"last_name\":\"Smith\"}".should == template.render
|
46
|
+
end
|
42
47
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
json.is_admin admin?
|
@@ -0,0 +1 @@
|
|
1
|
+
json.last_name @last_name
|
@@ -0,0 +1 @@
|
|
1
|
+
json.last_name last_name
|
@@ -0,0 +1 @@
|
|
1
|
+
json.author "Anthony"
|
data/tilt-jbuilder.gemspec
CHANGED
@@ -10,11 +10,13 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.add_dependency 'jbuilder'
|
11
11
|
gem.add_development_dependency 'rake'
|
12
12
|
gem.add_development_dependency 'rspec'
|
13
|
+
gem.add_development_dependency 'rack-test'
|
14
|
+
gem.add_development_dependency 'sinatra'
|
13
15
|
|
14
16
|
gem.files = `git ls-files`.split($\)
|
15
17
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
19
|
gem.name = "tilt-jbuilder"
|
18
20
|
gem.require_paths = ["lib"]
|
19
|
-
gem.version = '0.
|
21
|
+
gem.version = '0.4.0'
|
20
22
|
end
|
metadata
CHANGED
@@ -1,78 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tilt-jbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Anthony Smith
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-03-11 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: tilt
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: jbuilder
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rake
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rspec
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack-test
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sinatra
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
76
95
|
- !ruby/object:Gem::Version
|
77
96
|
version: '0'
|
78
97
|
description: Jbuilder support for Tilt
|
@@ -87,42 +106,49 @@ files:
|
|
87
106
|
- .travis.yml
|
88
107
|
- Gemfile
|
89
108
|
- LICENSE
|
109
|
+
- README.md
|
90
110
|
- README.rdoc
|
91
111
|
- Rakefile
|
112
|
+
- lib/sinatra/jbuilder.rb
|
92
113
|
- lib/tilt/jbuilder.rb
|
93
114
|
- spec/_partial.json.jbuilder
|
115
|
+
- spec/sinatra_integration_spec.rb
|
94
116
|
- spec/tilt-jbuilder_spec.rb
|
117
|
+
- spec/views/_hello.jbuilder
|
118
|
+
- spec/views/_partial_with_helper_method.jbuilder
|
119
|
+
- spec/views/_partial_with_instance_variable.jbuilder
|
120
|
+
- spec/views/_partial_with_local_variable.jbuilder
|
121
|
+
- spec/views/hello.jbuilder
|
95
122
|
- tilt-jbuilder.gemspec
|
96
123
|
homepage: https://github.com/anthonator/tilt-jbuilder
|
97
124
|
licenses: []
|
125
|
+
metadata: {}
|
98
126
|
post_install_message:
|
99
127
|
rdoc_options: []
|
100
128
|
require_paths:
|
101
129
|
- lib
|
102
130
|
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
131
|
requirements:
|
105
|
-
- -
|
132
|
+
- - '>='
|
106
133
|
- !ruby/object:Gem::Version
|
107
134
|
version: '0'
|
108
|
-
segments:
|
109
|
-
- 0
|
110
|
-
hash: 1083047209817213749
|
111
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
-
none: false
|
113
136
|
requirements:
|
114
|
-
- -
|
137
|
+
- - '>='
|
115
138
|
- !ruby/object:Gem::Version
|
116
139
|
version: '0'
|
117
|
-
segments:
|
118
|
-
- 0
|
119
|
-
hash: 1083047209817213749
|
120
140
|
requirements: []
|
121
141
|
rubyforge_project:
|
122
|
-
rubygems_version:
|
142
|
+
rubygems_version: 2.0.2
|
123
143
|
signing_key:
|
124
|
-
specification_version:
|
144
|
+
specification_version: 4
|
125
145
|
summary: Adds support for rendering Jbuilder templates in Tilt.
|
126
146
|
test_files:
|
127
147
|
- spec/_partial.json.jbuilder
|
148
|
+
- spec/sinatra_integration_spec.rb
|
128
149
|
- spec/tilt-jbuilder_spec.rb
|
150
|
+
- spec/views/_hello.jbuilder
|
151
|
+
- spec/views/_partial_with_helper_method.jbuilder
|
152
|
+
- spec/views/_partial_with_instance_variable.jbuilder
|
153
|
+
- spec/views/_partial_with_local_variable.jbuilder
|
154
|
+
- spec/views/hello.jbuilder
|