tilt-jbuilder 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- - jruby-19mode
4
+ - 2.0.0
5
+ - ruby-head
6
+ - jruby-19mode
7
+ - jruby-head
data/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # tilt-jbuilder [![endorse](http://api.coderwall.com/anthonator/endorsecount.png)](http://coderwall.com/anthonator)
2
+
3
+ Adds support for rendering Jbuilder templates using Tilt.
4
+
5
+ [![Build Status](https://secure.travis-ci.org/anthonator/tilt-jbuilder.png)](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
@@ -0,0 +1,10 @@
1
+ require "tilt/jbuilder"
2
+
3
+ module Sinatra
4
+ module Templates
5
+ def jbuilder(template, options={}, locals={})
6
+ render :jbuilder, template, options, locals
7
+ end
8
+ end
9
+ end
10
+
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(Jbuilder.new)
56
+ return @_tilt_data.call(klass.new(scope))
25
57
  else
26
58
  eval @_tilt_data, binding
27
59
  end
28
60
  else
29
- Jbuilder.encode do |json|
61
+ klass.encode(scope) do |json|
30
62
  if @_tilt_data.kind_of? Proc
31
- return @_tilt_data.call(Jbuilder.new)
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
@@ -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,3 @@
1
+ json.author "Anthony"
2
+ json.is_admin admin?
3
+ json.last_name @last_name
@@ -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"
@@ -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.3.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.3.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: 2012-09-27 00:00:00.000000000 Z
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: 1.8.24
142
+ rubygems_version: 2.0.2
123
143
  signing_key:
124
- specification_version: 3
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