jb 0.5.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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: []