coaster 1.4.27 → 1.4.28

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: 699b48f34e6fe0f6e074df56c65e5cd18d5ca595cfe596ba7ff492831bb190ae
4
- data.tar.gz: 861070c41dbce9001c50643d524865c2649096b5c055a92622deb5bef0e9829e
3
+ metadata.gz: e53b6e577599120b7264569f9164e783b61563cd90255c55fc4608554c78d001
4
+ data.tar.gz: f7f410d4712a9ebfc57a44ebd1bd239471ec04222e25e79964b180a35ab14178
5
5
  SHA512:
6
- metadata.gz: 2c347b8f321edd084f688773876ffdd4c0eca9f2b5cd9e9ab9d8d8121bafb7a81a5ce794d4c8fb4b157306072064d388c7bac6e1d811537164488e182ed5030a
7
- data.tar.gz: c5a7550f1c3f34dd257e83e4a546006896eac6d9890cb92250b25dc6b07451b86b54bca4e279493391406323a587db093e6c37f96a23af9e910ccd1e0cb1243d
6
+ metadata.gz: 2a16047f7c323c9baca6b71b13b410d3fb26639951457d6ab71c756e9dc3bac613fb0bc19afb352ce9613924b6283cc9f4d6da206355a76791af7a354b411c1b
7
+ data.tar.gz: 3a5806e48fdc46c314d60cb4e2926561e7ef2e31a642c2e0eb52cf34fbb6507bc012b6b4b0949232d9b7c1fcf72abf60dc6fc29dbfc5befe954c8ba832488c9d
data/bin/bundle ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'bundle' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "rubygems"
12
+
13
+ m = Module.new do
14
+ module_function
15
+
16
+ def invoked_as_script?
17
+ File.expand_path($0) == File.expand_path(__FILE__)
18
+ end
19
+
20
+ def env_var_version
21
+ ENV["BUNDLER_VERSION"]
22
+ end
23
+
24
+ def cli_arg_version
25
+ return unless invoked_as_script? # don't want to hijack other binstubs
26
+ return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
27
+ bundler_version = nil
28
+ update_index = nil
29
+ ARGV.each_with_index do |a, i|
30
+ if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
31
+ bundler_version = a
32
+ end
33
+ next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
34
+ bundler_version = $1
35
+ update_index = i
36
+ end
37
+ bundler_version
38
+ end
39
+
40
+ def gemfile
41
+ gemfile = ENV["BUNDLE_GEMFILE"]
42
+ return gemfile if gemfile && !gemfile.empty?
43
+
44
+ File.expand_path("../Gemfile", __dir__)
45
+ end
46
+
47
+ def lockfile
48
+ lockfile =
49
+ case File.basename(gemfile)
50
+ when "gems.rb" then gemfile.sub(/\.rb$/, gemfile)
51
+ else "#{gemfile}.lock"
52
+ end
53
+ File.expand_path(lockfile)
54
+ end
55
+
56
+ def lockfile_version
57
+ return unless File.file?(lockfile)
58
+ lockfile_contents = File.read(lockfile)
59
+ return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
60
+ Regexp.last_match(1)
61
+ end
62
+
63
+ def bundler_requirement
64
+ @bundler_requirement ||=
65
+ env_var_version || cli_arg_version ||
66
+ bundler_requirement_for(lockfile_version)
67
+ end
68
+
69
+ def bundler_requirement_for(version)
70
+ return "#{Gem::Requirement.default}.a" unless version
71
+
72
+ bundler_gem_version = Gem::Version.new(version)
73
+
74
+ requirement = bundler_gem_version.approximate_recommendation
75
+
76
+ return requirement unless Gem.rubygems_version < Gem::Version.new("2.7.0")
77
+
78
+ requirement += ".a" if bundler_gem_version.prerelease?
79
+
80
+ requirement
81
+ end
82
+
83
+ def load_bundler!
84
+ ENV["BUNDLE_GEMFILE"] ||= gemfile
85
+
86
+ activate_bundler
87
+ end
88
+
89
+ def activate_bundler
90
+ gem_error = activation_error_handling do
91
+ gem "bundler", bundler_requirement
92
+ end
93
+ return if gem_error.nil?
94
+ require_error = activation_error_handling do
95
+ require "bundler/version"
96
+ end
97
+ return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
98
+ warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
99
+ exit 42
100
+ end
101
+
102
+ def activation_error_handling
103
+ yield
104
+ nil
105
+ rescue StandardError, LoadError => e
106
+ e
107
+ end
108
+ end
109
+
110
+ m.load_bundler!
111
+
112
+ if m.invoked_as_script?
113
+ load Gem.bin_path("bundler", "bundle")
114
+ end
@@ -8,4 +8,15 @@ class Array
8
8
  true
9
9
  end
10
10
  end
11
+
12
+ def deep_key_count(**options)
13
+ sum do |v|
14
+ case v
15
+ when Hash, Array
16
+ v.deep_key_count
17
+ else
18
+ 1
19
+ end
20
+ end
21
+ end
11
22
  end
@@ -0,0 +1,18 @@
1
+ class Hash
2
+ def deep_key_count(**options)
3
+ keys.size + values.sum do |v|
4
+ case v
5
+ when Hash
6
+ v.deep_key_count(**options)
7
+ when Array
8
+ if options[:array_is_element]
9
+ 0
10
+ else
11
+ v.deep_key_count(**options)
12
+ end
13
+ else
14
+ 0
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,6 @@
1
1
  require_relative 'core_ext/require_more'
2
2
  require_relative 'core_ext/array'
3
+ require_relative 'core_ext/hash'
3
4
  require_relative 'core_ext/time'
4
5
  require_relative 'core_ext/date'
5
6
  require_relative 'core_ext/month'
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionView
4
+ class Template
5
+ class Error < ActionViewError
6
+ # @return [Integer]
7
+ def http_status
8
+ cause.respond_to?(:http_status) ? cause.http_status : super
9
+ end
10
+ end
11
+ end
12
+ end
@@ -2,3 +2,6 @@ require 'coaster/rails_ext/active_support/backtrace_cleaner'
2
2
  ActiveSupport.on_load(:active_record, yield: true) do
3
3
  require 'coaster/rails_ext/active_record/errors'
4
4
  end
5
+ ActiveSupport.on_load(:action_view, yield: true) do
6
+ require "coaster/rails_ext/action_view/template/error"
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Coaster
2
- VERSION = '1.4.27'
2
+ VERSION = '1.4.28'
3
3
  end
@@ -2,7 +2,7 @@ require 'coaster/serialized_properties'
2
2
  require 'coaster/safe_yaml_serializer'
3
3
 
4
4
  class User < ActiveRecord::Base
5
- serialize :data, Coaster::SafeYamlSerializer
5
+ serialize :data, coder: Coaster::SafeYamlSerializer
6
6
  extend Coaster::SerializedProperties
7
7
  serialized_column :data
8
8
  serialized_property :data, :appendix, default: {}
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "minitest/autorun"
4
+ require "test_helper"
5
+ require "action_view"
6
+ require "coaster/rails_ext/action_view/template/error"
7
+
8
+ module Coaster
9
+ class BadRequest < StandardError
10
+ def self.http_status = 400
11
+ end
12
+
13
+ class TestActionView < Minitest::Test
14
+ def test_http_status
15
+ begin
16
+ raise BadRequest
17
+ rescue BadRequest => e
18
+ template = ActionView::Template.new("Hello, World!", "test", ActionView::Template::Handlers::Raw, locals: [])
19
+ err = ActionView::Template::Error.new(template)
20
+
21
+ assert_equal err.cause, e
22
+ assert_equal err.http_status, e.http_status
23
+ assert_equal err.http_status, 400
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+ require 'minitest/autorun'
3
+
4
+ module Coaster
5
+ class TestDeepKeyCount < Minitest::Test
6
+ def test_deep_key_count
7
+ assert_equal 0, {}.deep_key_count
8
+ assert_equal 1, {a: 1}.deep_key_count
9
+ assert_equal 2, {a: {b: 1}}.deep_key_count
10
+ assert_equal 3, {a: {b: 1, c: 2}}.deep_key_count
11
+ assert_equal 6, {a: {b: 1, c: 2, d: [1, 2]}}.deep_key_count
12
+
13
+ assert_equal 0, [].deep_key_count
14
+ assert_equal 1, [1].deep_key_count
15
+ assert_equal 2, [1, 2].deep_key_count
16
+ assert_equal 2, [1, {b: 2}].deep_key_count
17
+ assert_equal 3, [1, {b: 2}, 3].deep_key_count
18
+ assert_equal 4, [1, {b: 2}, 3, {c: 4}].deep_key_count
19
+ assert_equal 5, [1, {b: 2}, 3, [{c: 4}, 5]].deep_key_count
20
+ end
21
+
22
+ def test_deep_key_count_array_is_element
23
+ assert_equal 1, {a: [1, 2]}.deep_key_count(array_is_element: true)
24
+ assert_equal 1, {a: [1, {b: 2}]}.deep_key_count(array_is_element: true)
25
+
26
+ assert_equal 2, [1, 2].deep_key_count(array_is_element: true)
27
+ assert_equal 2, [1, {b: 2}].deep_key_count(array_is_element: true)
28
+ assert_equal 3, [1, {b: 2, c: [1, 2]}].deep_key_count(array_is_element: true)
29
+
30
+ assert_equal 3, [1, {b: 2}, 3].deep_key_count(array_is_element: true)
31
+ assert_equal 3, [1, {b: 2}, [3, 4]].deep_key_count(array_is_element: true)
32
+ end
33
+ end
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.27
4
+ version: 1.4.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - buzz jung
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-20 00:00:00.000000000 Z
11
+ date: 2025-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -188,12 +188,14 @@ files:
188
188
  - LICENSE
189
189
  - README.md
190
190
  - Rakefile
191
+ - bin/bundle
191
192
  - bin/coaster
192
193
  - lib/coaster.rb
193
194
  - lib/coaster/cmd_options.rb
194
195
  - lib/coaster/core_ext.rb
195
196
  - lib/coaster/core_ext/array.rb
196
197
  - lib/coaster/core_ext/date.rb
198
+ - lib/coaster/core_ext/hash.rb
197
199
  - lib/coaster/core_ext/month.rb
198
200
  - lib/coaster/core_ext/object_translation.rb
199
201
  - lib/coaster/core_ext/require_more.rb
@@ -207,6 +209,7 @@ files:
207
209
  - lib/coaster/git/options.rb
208
210
  - lib/coaster/git/repository.rb
209
211
  - lib/coaster/rails_ext.rb
212
+ - lib/coaster/rails_ext/action_view/template/error.rb
210
213
  - lib/coaster/rails_ext/active_record/errors.rb
211
214
  - lib/coaster/rails_ext/active_support/backtrace_cleaner.rb
212
215
  - lib/coaster/safe_yaml_serializer.rb
@@ -216,8 +219,10 @@ files:
216
219
  - test/locales/en.yml
217
220
  - test/support/models.rb
218
221
  - test/support/schema.rb
222
+ - test/test_action_view.rb
219
223
  - test/test_backtrace.rb
220
224
  - test/test_date.rb
225
+ - test/test_deep_key_count.rb
221
226
  - test/test_git.rb
222
227
  - test/test_git_options.rb
223
228
  - test/test_git_repository.rb
@@ -257,8 +262,10 @@ test_files:
257
262
  - test/locales/en.yml
258
263
  - test/support/models.rb
259
264
  - test/support/schema.rb
265
+ - test/test_action_view.rb
260
266
  - test/test_backtrace.rb
261
267
  - test/test_date.rb
268
+ - test/test_deep_key_count.rb
262
269
  - test/test_git.rb
263
270
  - test/test_git_options.rb
264
271
  - test/test_git_repository.rb