jefferies_tube 1.7.9 → 1.7.10

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: 871cc47167080e2ec82b5783a0f78bf2e3db9d66ffba35e3315bd66560225bf1
4
- data.tar.gz: dd2bd0f2ca231feea95bd7bc75017a0442b21887f535b227c455e22609006827
3
+ metadata.gz: 85da8f5337be37125ab8ce2ba7ff5fdf960eff58478efdca35bab6bce17f3e51
4
+ data.tar.gz: c191c067e03789bf1da42aa0d9c765b67bf74d98ff1355d026d8083e768b9b67
5
5
  SHA512:
6
- metadata.gz: 067bc30d790bb14ad3c91eb18710e1aa20ba75276426a9ea4e2d2babfba313caae6f1571fbd7753c6a01a5f5f59dce8793ffcdbff7304e58ac69bc4627d992f7
7
- data.tar.gz: ccd1b5de8c012e557d30dbfef2891c33abc82de11f5e60a03999683b372b734748962cdfad4f3c5498f78010d8e5372bb68507cf202164c56a786dede7cc0d87
6
+ metadata.gz: 39227a9802d25099fecb25a2c26d2d34ebbaa9241686ac57df25ef96c607165e43e2facec4f1686fab631fe8196a9d12b971fe98e2c7519abdd1a580d10d5d9c
7
+ data.tar.gz: 276e73eba4df29de5cae4412aa044b00b7a581b0e7705de91de985752b21d8b7102e36a7406ff7e7d6f4d4be0e7c3a758bfee77a3db8dd724d0ec04f3908628e
data/CHANGELOG.md CHANGED
@@ -6,6 +6,13 @@ This project attempts to follow [semantic versioning](https://semver.org/)
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 1.7.10
10
+ * Bugfix: fix `ArgumentError` raised by `ErrorsController` on every rendered error page under Rails 8. `_layout`'s arity changed across Rails versions, so build its arguments from the method's actual parameters instead of hardcoding a count (supports Rails 6.1–8+).
11
+ * Declare a minimum `rails` dependency of `>= 6.1.7.9`.
12
+ * Remove dead code: the Rails 3 `before_filter` branch, the unused `html_layout` and `additional_information` methods, and a pre-Rails-6 `prompt_name` fallback.
13
+ * Remove 404 with referrer rollbar warning
14
+ * Fix JSON format 404
15
+
9
16
  ## 1.7.9
10
17
  * Configure NewRelic to ignore invalid request errors caught by InvaildRequestHandler middleware
11
18
 
@@ -1,22 +1,11 @@
1
1
  class JefferiesTube::ErrorsController < ApplicationController
2
- if Rails.version.start_with? "3"
3
- before_filter :disable_pundit
4
- skip_before_filter :verify_authenticity_token
5
- else
6
- before_action :disable_pundit
7
- skip_before_action :verify_authenticity_token
8
- end
2
+ before_action :disable_pundit
3
+ skip_before_action :verify_authenticity_token
9
4
 
10
5
  def render_404
11
- log_404
12
6
  render_error_page 404
13
7
  end
14
8
 
15
- def additional_information
16
- # TODO not implemented yet
17
- render text: "Thanks!", layout: has_app_layout?
18
- end
19
-
20
9
  private
21
10
  def render_error_page(code)
22
11
  request.format = :html unless [:html, :json, :xml].include? request.format.to_sym
@@ -32,12 +21,6 @@ class JefferiesTube::ErrorsController < ApplicationController
32
21
  end
33
22
  end
34
23
 
35
- def log_404
36
- if defined?(Rollbar) && request.referrer.present?
37
- Rollbar.warn("Got 404 with referrer", referrer: request.referrer, current_path: request.path)
38
- end
39
- end
40
-
41
24
  def disable_pundit
42
25
  if defined?(Pundit)
43
26
  skip_authorization
@@ -45,20 +28,15 @@ class JefferiesTube::ErrorsController < ApplicationController
45
28
  end
46
29
 
47
30
  def has_app_layout?
48
- if Gem::Version.new(Rails.version) >= Gem::Version.new("5")
49
- !!self.send(:_layout, [request.format.to_sym])
50
- else
51
- # boolean based on if there is a default layout for the current mime type
52
- !!self.send(:_layout)
53
- end
31
+ !!resolve_layout([request.format.to_sym])
54
32
  end
55
33
 
56
- def html_layout
57
- if Gem::Version.new(Rails.version) >= Gem::Version.new("5")
58
- self.send(:_layout, ["html"]).virtual_path
59
- else
60
- # boolean based on if there is a default layout for the current mime type
61
- "application"
62
- end
34
+ def resolve_layout(formats)
35
+ args = JefferiesTube::LayoutArgs.for(
36
+ self.method(:_layout).parameters,
37
+ lookup_context: lookup_context,
38
+ formats: formats
39
+ )
40
+ self.send(:_layout, *args)
63
41
  end
64
42
  end
@@ -0,0 +1,4 @@
1
+ {
2
+ "error": "Page not Found",
3
+ "status": 404
4
+ }
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "rake", '~> 13.0.6'
27
27
  spec.add_development_dependency "rspec", '~> 3.0'
28
28
 
29
+ spec.add_dependency 'rails', '>= 6.1.7.9'
29
30
  spec.add_dependency "bundler-audit", "~> 0.9"
30
31
  spec.add_dependency "pry", '~> 0.13'
31
32
  spec.add_dependency 'rubocop', '~> 1.26'
@@ -0,0 +1,26 @@
1
+ module JefferiesTube
2
+ # Builds the positional argument list for ActionView's private `_layout`
3
+ # method, whose signature has changed across Rails versions:
4
+ #
5
+ # * 6.1–7.x: _layout(formats, keys)
6
+ # * 8.0+: _layout(lookup_context, formats, keys)
7
+ #
8
+ # Rather than hardcode a count (which breaks on every version we did not
9
+ # anticipate), map the method's actual parameter names to the values we
10
+ # have. Unknown parameter names fall back to `formats` so a future
11
+ # signature change still receives the formats it expects.
12
+ module LayoutArgs
13
+ KNOWN = %i[lookup_context formats keys].freeze
14
+
15
+ # @param parameters [Array] the result of `method(:_layout).parameters`
16
+ # @param lookup_context the controller's lookup_context
17
+ # @param formats [Array] e.g. [:html]
18
+ # @return [Array] positional args to splat into `_layout`
19
+ def self.for(parameters, lookup_context:, formats:)
20
+ available = { lookup_context: lookup_context, formats: formats, keys: [] }
21
+ parameters.map do |_type, name|
22
+ available.fetch(name, formats)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,7 +1,7 @@
1
1
  require 'open-uri'
2
2
 
3
3
  module JefferiesTube
4
- VERSION = "1.7.9"
4
+ VERSION = "1.7.10"
5
5
 
6
6
  def self.latest_rubygems_version
7
7
  JSON.parse(URI.parse("https://rubygems.org/api/v1/versions/jefferies_tube/latest.json").read)["version"]
@@ -1,4 +1,5 @@
1
1
  require 'jefferies_tube/version'
2
+ require 'jefferies_tube/layout_args'
2
3
  require 'jefferies_tube/engine' if defined?(Rails)
3
4
 
4
5
  module JefferiesTube
@@ -21,12 +22,7 @@ module JefferiesTube
21
22
  def initialize
22
23
  if defined?(Rails)
23
24
  @environment = ::Rails.env.downcase || nil
24
- @prompt_name =
25
- if ::Rails::VERSION::MAJOR >= 6
26
- ::Rails.application.class.module_parent_name || nil
27
- else
28
- ::Rails.application.class.parent_name || nil
29
- end
25
+ @prompt_name = ::Rails.application.class.module_parent_name || nil
30
26
  else
31
27
  @environment = "development"
32
28
  @prompt_name = "JefferiesTube"
@@ -0,0 +1,43 @@
1
+ require_relative '../lib/jefferies_tube/layout_args'
2
+
3
+ RSpec.describe JefferiesTube::LayoutArgs do
4
+ let(:lookup_context) { Object.new }
5
+ let(:formats) { [:html] }
6
+
7
+ def build(parameters)
8
+ described_class.for(parameters, lookup_context: lookup_context, formats: formats)
9
+ end
10
+
11
+ context "Rails 8+ signature: _layout(lookup_context, formats, keys)" do
12
+ let(:parameters) { [[:req, :lookup_context], [:req, :formats], [:req, :keys]] }
13
+
14
+ it "returns three args in declared order" do
15
+ expect(build(parameters)).to eq([lookup_context, formats, []])
16
+ end
17
+ end
18
+
19
+ context "Rails 5.1–7 signature: _layout(formats, keys)" do
20
+ let(:parameters) { [[:req, :formats], [:req, :keys]] }
21
+
22
+ it "returns formats and keys, without lookup_context" do
23
+ expect(build(parameters)).to eq([formats, []])
24
+ end
25
+ end
26
+
27
+ context "unknown parameter name" do
28
+ let(:parameters) { [[:req, :something_new]] }
29
+
30
+ it "falls back to formats so the call still receives a sensible value" do
31
+ expect(build(parameters)).to eq([formats])
32
+ end
33
+ end
34
+
35
+ it "matches the number of arguments to the method's arity" do
36
+ [
37
+ [[:req, :lookup_context], [:req, :formats], [:req, :keys]],
38
+ [[:req, :formats], [:req, :keys]]
39
+ ].each do |params|
40
+ expect(build(params).size).to eq(params.size)
41
+ end
42
+ end
43
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jefferies_tube
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.9
4
+ version: 1.7.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Samson
@@ -79,6 +79,20 @@ dependencies:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: '3.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rails
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 6.1.7.9
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 6.1.7.9
82
96
  - !ruby/object:Gem::Dependency
83
97
  name: bundler-audit
84
98
  requirement: !ruby/object:Gem::Requirement
@@ -171,7 +185,7 @@ files:
171
185
  - app/helpers/jefferies_tube/application_helper.rb
172
186
  - app/views/errors/404.html.erb
173
187
  - app/views/errors/404.html.haml
174
- - app/views/errors/404.json.jbuilder
188
+ - app/views/errors/404.json
175
189
  - app/views/errors/404.xml
176
190
  - app/views/errors/500.haml
177
191
  - app/views/errors/500.html.erb
@@ -199,6 +213,7 @@ files:
199
213
  - lib/jefferies_tube/database_backup_adapter.rb
200
214
  - lib/jefferies_tube/engine.rb
201
215
  - lib/jefferies_tube/invalid_request_handler.rb
216
+ - lib/jefferies_tube/layout_args.rb
202
217
  - lib/jefferies_tube/postgresql_backup_adapter.rb
203
218
  - lib/jefferies_tube/rack/maintenance.rb
204
219
  - lib/jefferies_tube/railtie.rb
@@ -207,6 +222,7 @@ files:
207
222
  - lib/tasks/db.rake
208
223
  - spec/configuration_spec.rb
209
224
  - spec/database_backup_spec.rb
225
+ - spec/layout_args_spec.rb
210
226
  - spec/spec_helper.rb
211
227
  homepage: https://github.com/tenforwardconsulting/jefferies_tube/
212
228
  licenses:
@@ -226,10 +242,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
242
  - !ruby/object:Gem::Version
227
243
  version: '0'
228
244
  requirements: []
229
- rubygems_version: 4.0.8
245
+ rubygems_version: 4.0.20
230
246
  specification_version: 4
231
247
  summary: Ten Forward Consulting useful tools.
232
248
  test_files:
233
249
  - spec/configuration_spec.rb
234
250
  - spec/database_backup_spec.rb
251
+ - spec/layout_args_spec.rb
235
252
  - spec/spec_helper.rb
@@ -1,2 +0,0 @@
1
- json.error "Page not Found"
2
- json.status 404