jb 0.5.0 → 0.8.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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +31 -3
- data/Gemfile +1 -2
- data/README.md +4 -5
- data/Rakefile +1 -0
- data/bin/benchmark.sh +1 -1
- data/gemfiles/benchmark.gemfile +10 -0
- data/gemfiles/rails_42.gemfile +8 -0
- data/gemfiles/rails_50.gemfile +7 -0
- data/gemfiles/rails_51.gemfile +7 -0
- data/gemfiles/rails_52.gemfile +7 -0
- data/gemfiles/rails_60.gemfile +8 -0
- data/gemfiles/rails_edge.gemfile +16 -0
- data/jb.gemspec +4 -4
- data/lib/generators/rails/jb_generator.rb +1 -0
- data/lib/generators/rails/scaffold_controller_generator.rb +2 -1
- data/lib/jb.rb +1 -0
- data/lib/jb/action_view_legacy_monkeys.rb +54 -0
- data/lib/jb/action_view_monkeys.rb +37 -38
- data/lib/jb/handler.rb +3 -2
- data/lib/jb/railtie.rb +21 -1
- data/lib/jb/version.rb +2 -1
- metadata +25 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09fa54e898f00cadade145bbad06c48b3a110d780cb7caa61f652f3b5b9f91d4'
|
4
|
+
data.tar.gz: 8f7d703998d358b7be99b5a3dec6779b816ef135cd33c434aad95bf151205c13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1ccca7074f5b936db1d12e164404adaee0916255f4ee0bc2d92f080d5948e7d0cd661a18feaf29895842424377992f05807a9f498244af7617fef9d0722812c
|
7
|
+
data.tar.gz: 8564a73f19b09a5a9a75e4f07e92811a90b924de039832e4642ebb5b119403cb20a5c05023004b446ea8331f30b1129747cbc87db8af0aaa75183a1e5e11f063
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,5 +1,33 @@
|
|
1
|
-
sudo: false
|
2
1
|
language: ruby
|
2
|
+
|
3
3
|
rvm:
|
4
|
-
- 2.
|
5
|
-
|
4
|
+
- 2.7.2
|
5
|
+
- 2.6.6
|
6
|
+
- 2.5.8
|
7
|
+
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/rails_60.gemfile
|
10
|
+
- gemfiles/rails_52.gemfile
|
11
|
+
- gemfiles/rails_51.gemfile
|
12
|
+
- gemfiles/rails_50.gemfile
|
13
|
+
- gemfiles/rails_42.gemfile
|
14
|
+
|
15
|
+
matrix:
|
16
|
+
exclude:
|
17
|
+
- rvm: 2.7.2
|
18
|
+
gemfile: gemfiles/rails_52.gemfile
|
19
|
+
- rvm: 2.7.2
|
20
|
+
gemfile: gemfiles/rails_51.gemfile
|
21
|
+
- rvm: 2.7.2
|
22
|
+
gemfile: gemfiles/rails_50.gemfile
|
23
|
+
- rvm: 2.7.2
|
24
|
+
gemfile: gemfiles/rails_42.gemfile
|
25
|
+
|
26
|
+
include:
|
27
|
+
- rvm: 2.7.2
|
28
|
+
gemfile: gemfiles/rails_edge.gemfile
|
29
|
+
- rvm: ruby-head
|
30
|
+
gemfile: gemfiles/rails_edge.gemfile
|
31
|
+
|
32
|
+
allow_failures:
|
33
|
+
- rvm: ruby-head
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -176,12 +176,11 @@ It's also possible to render collections of partials:
|
|
176
176
|
|
177
177
|
```ruby
|
178
178
|
render partial: 'posts/post', collection: @posts, as: :post
|
179
|
-
|
180
|
-
# or
|
181
|
-
|
182
|
-
render @post.comments
|
183
179
|
```
|
184
180
|
|
181
|
+
> NOTE: Don't use `render @post.comments` because if the collection is empty,
|
182
|
+
`render` will return `nil` instead of an empty array.
|
183
|
+
|
185
184
|
You can pass any objects into partial templates with or without `:locals` option.
|
186
185
|
|
187
186
|
```ruby
|
@@ -194,7 +193,7 @@ render 'sub_template', user: user
|
|
194
193
|
|
195
194
|
You can of course include Ruby `nil` as a Hash value if you want. That would become `null` in the JSON.
|
196
195
|
|
197
|
-
|
196
|
+
You can use `Hash#compact`/`!` method to prevent including `null` values in the output:
|
198
197
|
|
199
198
|
```ruby
|
200
199
|
{foo: nil, bar: 'bar'}.compact
|
data/Rakefile
CHANGED
data/bin/benchmark.sh
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
gemspec :path => '../'
|
6
|
+
|
7
|
+
git_source(:github) do |repo_name|
|
8
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
9
|
+
"https://github.com/#{repo_name}.git"
|
10
|
+
end
|
11
|
+
|
12
|
+
github 'rails/rails' do
|
13
|
+
gem 'rails'
|
14
|
+
end
|
15
|
+
|
16
|
+
gem 'selenium-webdriver'
|
data/jb.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
|
+
|
3
4
|
lib = File.expand_path('../lib', __FILE__)
|
4
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
6
|
require 'jb/version'
|
@@ -20,11 +21,10 @@ Gem::Specification.new do |spec|
|
|
20
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
22
|
spec.require_paths = ["lib"]
|
22
23
|
|
23
|
-
spec.
|
24
|
-
|
25
|
-
spec.add_development_dependency "bundler", "~> 1.12"
|
24
|
+
spec.add_development_dependency 'bundler'
|
26
25
|
spec.add_development_dependency 'rake'
|
27
26
|
spec.add_development_dependency 'test-unit-rails'
|
28
27
|
spec.add_development_dependency 'rails'
|
29
|
-
spec.add_development_dependency '
|
28
|
+
spec.add_development_dependency 'action_args'
|
29
|
+
spec.add_development_dependency 'byebug'
|
30
30
|
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'rails/generators'
|
3
4
|
require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'
|
4
5
|
|
5
6
|
module Rails
|
6
7
|
module Generators
|
7
8
|
class ScaffoldControllerGenerator
|
8
|
-
hook_for :jb, default: true
|
9
|
+
hook_for :jb, type: :boolean, default: true
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
data/lib/jb.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Mokey-patches for Action View 4 and 5
|
3
|
+
|
4
|
+
module Jb
|
5
|
+
module PartialRenderer
|
6
|
+
module JbTemplateDetector
|
7
|
+
# A monkey-patch to inject StrongArray module to Jb partial renderer
|
8
|
+
private def find_partial(*)
|
9
|
+
template = super
|
10
|
+
extend RenderCollectionExtension if template && (template.handler == Jb::Handler)
|
11
|
+
template
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# A horrible monkey-patch to prevent rendered collection from being converted to String
|
16
|
+
module StrongArray
|
17
|
+
def join(*)
|
18
|
+
self
|
19
|
+
end
|
20
|
+
|
21
|
+
def html_safe
|
22
|
+
self
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# A monkey-patch strengthening rendered collection
|
27
|
+
module RenderCollectionExtension
|
28
|
+
private def collection_with_template
|
29
|
+
super.extend StrongArray
|
30
|
+
end
|
31
|
+
|
32
|
+
private def collection_without_template
|
33
|
+
super.extend StrongArray
|
34
|
+
end
|
35
|
+
|
36
|
+
private def render_collection
|
37
|
+
return [] if @collection.blank?
|
38
|
+
super
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# A monkey-patch that converts non-partial result to a JSON String
|
44
|
+
module TemplateRenderer
|
45
|
+
module JSONizer
|
46
|
+
def render_template(template, *)
|
47
|
+
template.respond_to?(:handler) && (template.handler == Jb::Handler) ? super.to_json : super
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
::ActionView::PartialRenderer.prepend ::Jb::PartialRenderer::JbTemplateDetector
|
54
|
+
::ActionView::TemplateRenderer.prepend ::Jb::TemplateRenderer::JSONizer
|
@@ -1,54 +1,53 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
# Mokey-patches for Action View 6+
|
3
3
|
|
4
4
|
module Jb
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
# A horrible monkey-patch to prevent rendered collection from being converted to String
|
16
|
-
module StrongArray
|
17
|
-
def join(*)
|
18
|
-
self
|
19
|
-
end
|
20
|
-
|
21
|
-
def html_safe
|
22
|
-
self
|
5
|
+
# A monkey-patch that converts non-partial result to a JSON String
|
6
|
+
module TemplateRenderer
|
7
|
+
module JSONizer
|
8
|
+
def render_template(_view, template, *)
|
9
|
+
rendered_template = super
|
10
|
+
rendered_template.instance_variable_set :@body, rendered_template.body.to_json if template.respond_to?(:handler) && (template.handler == Jb::Handler)
|
11
|
+
rendered_template
|
23
12
|
end
|
24
13
|
end
|
14
|
+
end
|
25
15
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
private def render_collection
|
37
|
-
return [] if @collection.blank?
|
38
|
-
super
|
16
|
+
# Rails 6.1+: A monkey-patch for jb template collection result's `body` not to return a String but an Array
|
17
|
+
module CollectionRendererExtension
|
18
|
+
private def render_collection(_collection, _view, _path, template, _layout, _block)
|
19
|
+
obj = super
|
20
|
+
if template.respond_to?(:handler) && (template.handler == Jb::Handler)
|
21
|
+
if ActionView::AbstractRenderer::RenderedCollection::EmptyCollection === obj
|
22
|
+
def obj.body; []; end
|
23
|
+
else
|
24
|
+
def obj.body; @rendered_templates.map(&:body); end
|
25
|
+
end
|
39
26
|
end
|
27
|
+
obj
|
40
28
|
end
|
41
29
|
end
|
42
30
|
|
43
|
-
# A monkey-patch
|
44
|
-
module
|
45
|
-
|
46
|
-
|
47
|
-
|
31
|
+
# Rails 6.0: A monkey-patch for jb template collection result's `body` not to return a String but an Array
|
32
|
+
module PartialRendererExtension
|
33
|
+
private def render_collection(_view, template)
|
34
|
+
obj = super
|
35
|
+
if template.respond_to?(:handler) && (template.handler == Jb::Handler)
|
36
|
+
if ActionView::AbstractRenderer::RenderedCollection::EmptyCollection === obj
|
37
|
+
def obj.body; []; end
|
38
|
+
else
|
39
|
+
def obj.body; @rendered_templates.map(&:body); end
|
40
|
+
end
|
48
41
|
end
|
42
|
+
obj
|
49
43
|
end
|
50
44
|
end
|
51
45
|
end
|
52
46
|
|
53
|
-
::ActionView::PartialRenderer.prepend ::Jb::PartialRenderer::JbTemplateDetector
|
54
47
|
::ActionView::TemplateRenderer.prepend ::Jb::TemplateRenderer::JSONizer
|
48
|
+
begin
|
49
|
+
# ActionView::CollectionRenderer is a newly added class since 6.1
|
50
|
+
::ActionView::CollectionRenderer.prepend ::Jb::CollectionRendererExtension
|
51
|
+
rescue NameError
|
52
|
+
::ActionView::PartialRenderer.prepend ::Jb::PartialRendererExtension
|
53
|
+
end
|
data/lib/jb/handler.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Jb
|
3
4
|
class Handler
|
4
5
|
class_attribute :default_format
|
5
6
|
self.default_format = :json
|
6
7
|
|
7
|
-
def self.call(template)
|
8
|
-
template.source
|
8
|
+
def self.call(template, source=nil)
|
9
|
+
source || template.source
|
9
10
|
end
|
10
11
|
|
11
12
|
def self.handles_encoding?
|
data/lib/jb/railtie.rb
CHANGED
@@ -1,14 +1,34 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Jb
|
3
4
|
class Railtie < ::Rails::Railtie
|
4
5
|
initializer 'jb' do
|
5
6
|
ActiveSupport.on_load :action_view do
|
6
|
-
|
7
|
+
if Rails::VERSION::MAJOR >= 6
|
8
|
+
require 'jb/action_view_monkeys'
|
9
|
+
else
|
10
|
+
require 'jb/action_view_legacy_monkeys'
|
11
|
+
end
|
7
12
|
require 'jb/handler'
|
8
13
|
::ActionView::Template.register_template_handler :jb, Jb::Handler
|
9
14
|
end
|
10
15
|
end
|
11
16
|
|
17
|
+
if Rails::VERSION::MAJOR >= 5
|
18
|
+
module ::ActionController
|
19
|
+
module ApiRendering
|
20
|
+
include ActionView::Rendering
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
ActiveSupport.on_load :action_controller do
|
25
|
+
if self == ActionController::API
|
26
|
+
include ActionController::Helpers
|
27
|
+
include ActionController::ImplicitRender
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
12
32
|
generators do |app|
|
13
33
|
Rails::Generators.configure! app.config.generators
|
14
34
|
Rails::Generators.hidden_namespaces.uniq!
|
data/lib/jb/version.rb
CHANGED
metadata
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Matsuda
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
|
-
type: :
|
20
|
+
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
@@ -25,21 +25,21 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: test-unit-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rails
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: action_args
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: byebug
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -110,12 +110,20 @@ files:
|
|
110
110
|
- bin/benchmark.sh
|
111
111
|
- bin/console
|
112
112
|
- bin/setup
|
113
|
+
- gemfiles/benchmark.gemfile
|
114
|
+
- gemfiles/rails_42.gemfile
|
115
|
+
- gemfiles/rails_50.gemfile
|
116
|
+
- gemfiles/rails_51.gemfile
|
117
|
+
- gemfiles/rails_52.gemfile
|
118
|
+
- gemfiles/rails_60.gemfile
|
119
|
+
- gemfiles/rails_edge.gemfile
|
113
120
|
- jb.gemspec
|
114
121
|
- lib/generators/rails/jb_generator.rb
|
115
122
|
- lib/generators/rails/scaffold_controller_generator.rb
|
116
123
|
- lib/generators/rails/templates/index.json.jb
|
117
124
|
- lib/generators/rails/templates/show.json.jb
|
118
125
|
- lib/jb.rb
|
126
|
+
- lib/jb/action_view_legacy_monkeys.rb
|
119
127
|
- lib/jb/action_view_monkeys.rb
|
120
128
|
- lib/jb/handler.rb
|
121
129
|
- lib/jb/railtie.rb
|
@@ -124,7 +132,7 @@ homepage: https://github.com/amatsuda/jb
|
|
124
132
|
licenses:
|
125
133
|
- MIT
|
126
134
|
metadata: {}
|
127
|
-
post_install_message:
|
135
|
+
post_install_message:
|
128
136
|
rdoc_options: []
|
129
137
|
require_paths:
|
130
138
|
- lib
|
@@ -139,9 +147,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
147
|
- !ruby/object:Gem::Version
|
140
148
|
version: '0'
|
141
149
|
requirements: []
|
142
|
-
|
143
|
-
|
144
|
-
signing_key:
|
150
|
+
rubygems_version: 3.1.4
|
151
|
+
signing_key:
|
145
152
|
specification_version: 4
|
146
153
|
summary: Faster and simpler Jbuilder alternative
|
147
154
|
test_files: []
|