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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb74db932925f1909325449f10a2ac2351ef0bb3b1a010828167d72455971f95
4
- data.tar.gz: 7164ea018d3efa679e7dcb87dd99c5c5747c04786abc970a8aa6a00144d36ed1
3
+ metadata.gz: '09fa54e898f00cadade145bbad06c48b3a110d780cb7caa61f652f3b5b9f91d4'
4
+ data.tar.gz: 8f7d703998d358b7be99b5a3dec6779b816ef135cd33c434aad95bf151205c13
5
5
  SHA512:
6
- metadata.gz: 723fe0582c315422cc15b0852ad5a3ddbefcad568aa0d98d1d0a2812bc293ca25a420e9111c15925c92ac9be1f848b63f00c0d0867ec60ba83c44940d434d607
7
- data.tar.gz: f7b76dadc834f0aefca888e502c641792eb7824e864bcf63374f162d38916f9a285a34f0463af37e4a3c507bb46b9dcd4ae7ac6cf0c7765a4d5a6442650108f1
6
+ metadata.gz: b1ccca7074f5b936db1d12e164404adaee0916255f4ee0bc2d92f080d5948e7d0cd661a18feaf29895842424377992f05807a9f498244af7617fef9d0722812c
7
+ data.tar.gz: 8564a73f19b09a5a9a75e4f07e92811a90b924de039832e4642ebb5b119403cb20a5c05023004b446ea8331f30b1129747cbc87db8af0aaa75183a1e5e11f063
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
3
  /Gemfile.lock
4
+ gemfiles/*.lock
4
5
  /_yardoc/
5
6
  /coverage/
6
7
  /doc/
@@ -1,5 +1,33 @@
1
- sudo: false
2
1
  language: ruby
2
+
3
3
  rvm:
4
- - 2.4.1
5
- before_install: gem update bundler
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
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  source 'https://rubygems.org'
3
4
 
4
5
  # Specify your gem's dependencies in jb.gemspec
5
6
  gemspec
6
7
 
7
8
  # For benchmarking
8
- gem 'jbuilder'
9
- gem 'benchmark-ips'
10
9
  gem 'action_args'
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
- To prevent Jb from including null values in the output, Active Support provides `Hash#compact!` method for you:
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
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/gem_tasks"
3
4
  require "rake/testtask"
4
5
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  cd $(dirname "$0")/../test/dummy_app
4
4
 
5
- BUNDLE_GEMFILE=../../Gemfile bundle e rails r bin/bench.rb
5
+ BUNDLE_GEMFILE=../../gemfiles/benchmark.gemfile bundle e rails r bin/bench.rb
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'rake'
6
+ gem 'rails'
7
+
8
+ gem 'jbuilder'
9
+ gem 'benchmark-ips'
10
+ gem 'action_args'
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec :path => '../'
6
+
7
+ gem 'rails', '~> 4.2.0'
8
+ gem 'nokogiri', RUBY_VERSION < '2.1' ? '~> 1.6.0' : '>= 1.7'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec :path => '../'
6
+
7
+ gem 'rails', '~> 5.0.0'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec :path => '../'
6
+
7
+ gem 'rails', '~> 5.1.0'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec :path => '../'
6
+
7
+ gem 'rails', '~> 5.2.0'
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec :path => '../'
6
+
7
+ gem 'rails', '~> 6.0.0'
8
+ gem 'selenium-webdriver'
@@ -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.add_dependency 'multi_json'
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 'capybara'
28
+ spec.add_development_dependency 'action_args'
29
+ spec.add_development_dependency 'byebug'
30
30
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'rails/generators/named_base'
3
4
  require 'rails/generators/resource_helpers'
4
5
 
@@ -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
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "jb/version"
3
4
  require 'jb/railtie'
@@ -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
- require 'multi_json'
2
+ # Mokey-patches for Action View 6+
3
3
 
4
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
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
- # 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
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 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) ? MultiJson.dump(super) : super
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
@@ -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?
@@ -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
- require 'jb/action_view_monkeys'
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!
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Jb
3
- VERSION = '0.5.0'
4
+ VERSION = '0.8.0'
4
5
  end
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.5.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: 2017-12-21 00:00:00.000000000 Z
11
+ date: 2020-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: multi_json
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: :runtime
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: bundler
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.12'
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: '1.12'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
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: test-unit-rails
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: rails
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: capybara
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
- rubyforge_project:
143
- rubygems_version: 2.7.3
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: []