unpoly-rails 2.7.2.2 → 3.0.0.rc1
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/README.md +96 -52
- data/assets/unpoly/unpoly-bootstrap3.js +10 -8
- data/assets/unpoly/unpoly-bootstrap3.min.js +1 -1
- data/assets/unpoly/unpoly-bootstrap4.js +10 -8
- data/assets/unpoly/unpoly-bootstrap4.min.js +1 -1
- data/assets/unpoly/unpoly-bootstrap5.js +9 -7
- data/assets/unpoly/unpoly-bootstrap5.min.js +1 -1
- data/assets/unpoly/unpoly-migrate.js +448 -350
- data/assets/unpoly/unpoly-migrate.min.js +1 -1
- data/assets/unpoly/unpoly.es6.js +223 -337
- data/assets/unpoly/unpoly.es6.min.js +1 -1
- data/assets/unpoly/unpoly.js +3105 -2282
- data/assets/unpoly/unpoly.min.js +1 -1
- data/lib/unpoly/rails/change/cache.rb +14 -2
- data/lib/unpoly/rails/change/field.rb +52 -14
- data/lib/unpoly/rails/change/field_definition.rb +42 -4
- data/lib/unpoly/rails/change/layer.rb +3 -3
- data/lib/unpoly/rails/change.rb +106 -58
- data/lib/unpoly/rails/controller.rb +6 -4
- data/lib/unpoly/rails/engine.rb +1 -1
- data/lib/unpoly/rails/request_echo_headers.rb +2 -6
- data/lib/unpoly/rails/version.rb +1 -1
- data/lib/unpoly-rails.rb +0 -1
- metadata +4 -7
- data/assets/unpoly/unpoly.es5.js +0 -11181
- data/assets/unpoly/unpoly.es5.min.js +0 -1
- data/lib/unpoly/rails/util.rb +0 -25
@@ -9,11 +9,23 @@ module Unpoly
|
|
9
9
|
|
10
10
|
# TODO: Docs
|
11
11
|
def clear(pattern = '*')
|
12
|
-
|
12
|
+
ActiveSupport::Deprecation.warn("up.cache.clear is deprecated. Use up.cache.expire instead.")
|
13
|
+
expire(pattern)
|
14
|
+
end
|
15
|
+
|
16
|
+
# TODO: Docs
|
17
|
+
def expire(pattern = '*')
|
18
|
+
change.expire_cache = pattern
|
19
|
+
end
|
20
|
+
|
21
|
+
# TODO: Docs
|
22
|
+
def evict(pattern = '*')
|
23
|
+
change.evict_cache = pattern
|
13
24
|
end
|
14
25
|
|
15
26
|
def keep
|
16
|
-
|
27
|
+
ActiveSupport::Deprecation.warn("up.cache.keep is deprecated. Use up.cache.expire(false) instead.")
|
28
|
+
expire(false)
|
17
29
|
end
|
18
30
|
|
19
31
|
private
|
@@ -31,6 +31,8 @@ module Unpoly
|
|
31
31
|
raise NotImplementedError
|
32
32
|
end
|
33
33
|
|
34
|
+
##
|
35
|
+
# A string value, serialized as itself.
|
34
36
|
class String < Field
|
35
37
|
|
36
38
|
def parse(raw)
|
@@ -38,46 +40,71 @@ module Unpoly
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def stringify(value)
|
41
|
-
value.
|
43
|
+
unless value.nil?
|
44
|
+
value.to_s
|
45
|
+
end
|
42
46
|
end
|
43
47
|
|
44
48
|
end
|
45
49
|
|
46
|
-
|
50
|
+
##
|
51
|
+
# An array of strings, serialized as JSON.
|
52
|
+
class SeparatedValues < Field
|
53
|
+
|
54
|
+
def initialize(name, separator: ' ', default: nil)
|
55
|
+
super(name)
|
56
|
+
@separator = separator
|
57
|
+
@default = default
|
58
|
+
end
|
47
59
|
|
48
60
|
def parse(raw)
|
49
|
-
raw
|
61
|
+
if raw
|
62
|
+
raw.split(@separator)
|
63
|
+
elsif @default
|
64
|
+
instance_exec(&@default)
|
65
|
+
end
|
50
66
|
end
|
51
67
|
|
52
68
|
def stringify(value)
|
53
|
-
|
69
|
+
unless value.nil?
|
70
|
+
value.join(@separator)
|
71
|
+
end
|
54
72
|
end
|
55
73
|
|
56
74
|
end
|
57
75
|
|
76
|
+
##
|
77
|
+
# A date and time value, serialized as the number of seconds since the epoch.
|
58
78
|
class Time < Field
|
59
79
|
|
60
80
|
def parse(raw)
|
61
81
|
if raw.present?
|
62
82
|
::Time.at(raw.to_i)
|
63
83
|
end
|
64
|
-
|
84
|
+
end
|
65
85
|
|
66
86
|
def stringify(value)
|
67
|
-
|
87
|
+
unless value.nil?
|
68
88
|
value.to_i
|
69
89
|
end
|
70
90
|
end
|
71
91
|
|
72
92
|
end
|
73
93
|
|
94
|
+
##
|
95
|
+
# A hash of values, serialized as JSON.
|
74
96
|
class Hash < Field
|
75
97
|
|
98
|
+
def initialize(name, default: nil)
|
99
|
+
super(name)
|
100
|
+
@default = default
|
101
|
+
end
|
102
|
+
|
76
103
|
def parse(raw)
|
77
104
|
if raw.present?
|
78
|
-
result =
|
79
|
-
|
80
|
-
result =
|
105
|
+
result = ActiveSupport::JSON.decode(raw)
|
106
|
+
elsif @default
|
107
|
+
result = instance_exec(&@default)
|
81
108
|
end
|
82
109
|
|
83
110
|
if result.is_a?(::Hash)
|
@@ -88,25 +115,36 @@ module Unpoly
|
|
88
115
|
end
|
89
116
|
|
90
117
|
def stringify(value)
|
91
|
-
|
118
|
+
unless value.nil?
|
119
|
+
ActiveSupport::JSON.encode(value)
|
120
|
+
end
|
92
121
|
end
|
93
122
|
|
94
123
|
end
|
95
124
|
|
125
|
+
##
|
126
|
+
# An array of values, serialized as JSON.
|
96
127
|
class Array < Field
|
97
128
|
|
129
|
+
def initialize(name, default: nil)
|
130
|
+
super(name)
|
131
|
+
@default = default
|
132
|
+
end
|
133
|
+
|
98
134
|
def parse(raw)
|
99
135
|
if raw.present?
|
100
|
-
result =
|
101
|
-
|
102
|
-
result =
|
136
|
+
result = ActiveSupport::JSON.decode(raw)
|
137
|
+
elsif @default
|
138
|
+
result = instance_exec(&@default)
|
103
139
|
end
|
104
140
|
|
105
141
|
result
|
106
142
|
end
|
107
143
|
|
108
144
|
def stringify(value)
|
109
|
-
|
145
|
+
unless value.nil?
|
146
|
+
ActiveSupport::JSON.encode(value)
|
147
|
+
end
|
110
148
|
end
|
111
149
|
|
112
150
|
end
|
@@ -10,6 +10,26 @@ module Unpoly
|
|
10
10
|
# Rails 3.2 delegate generated invalid Ruby with `to: :class`.
|
11
11
|
delegate :fields, to: :get_class
|
12
12
|
|
13
|
+
def vary?
|
14
|
+
if @vary.nil?
|
15
|
+
@vary = true
|
16
|
+
end
|
17
|
+
|
18
|
+
@vary
|
19
|
+
end
|
20
|
+
|
21
|
+
def vary=(vary)
|
22
|
+
@vary = vary
|
23
|
+
end
|
24
|
+
|
25
|
+
def no_vary(&block)
|
26
|
+
previous_vary = vary?
|
27
|
+
self.vary = false
|
28
|
+
block.call
|
29
|
+
ensure
|
30
|
+
self.vary = previous_vary
|
31
|
+
end
|
32
|
+
|
13
33
|
private
|
14
34
|
|
15
35
|
def get_class
|
@@ -18,15 +38,32 @@ module Unpoly
|
|
18
38
|
|
19
39
|
module ClassMethods
|
20
40
|
|
21
|
-
def field(
|
22
|
-
|
41
|
+
def field(field, method: nil, response_header_name: nil, request_header_name: nil)
|
42
|
+
method ||= field.name
|
23
43
|
|
24
44
|
define_method "#{method}_field" do
|
25
45
|
field
|
26
46
|
end
|
27
47
|
|
48
|
+
define_method "#{method}_request_header_name" do
|
49
|
+
request_header_name || field.header_name
|
50
|
+
end
|
51
|
+
|
52
|
+
define_method "#{method}_request_header_accessed!" do
|
53
|
+
return unless vary?
|
54
|
+
header_name = send("#{method}_request_header_name")
|
55
|
+
earlier_varies = response.headers['Vary']&.split(/\s*,\s*/) || []
|
56
|
+
response.headers['Vary'] = (earlier_varies | [header_name]).join(', ')
|
57
|
+
end
|
58
|
+
|
59
|
+
define_method "#{method}_response_header_name" do
|
60
|
+
response_header_name || field.header_name
|
61
|
+
end
|
62
|
+
|
28
63
|
define_method "#{method}_from_request_headers" do
|
29
|
-
|
64
|
+
header_name = send("#{method}_request_header_name")
|
65
|
+
raw_value = request.headers[header_name]
|
66
|
+
send("#{method}_request_header_accessed!")
|
30
67
|
field.parse(raw_value)
|
31
68
|
end
|
32
69
|
|
@@ -61,10 +98,11 @@ module Unpoly
|
|
61
98
|
value = send(method)
|
62
99
|
stringified = field.stringify(value)
|
63
100
|
if stringified.present? # app servers don't like blank header values
|
64
|
-
header_name =
|
101
|
+
header_name = send("#{method}_response_header_name" )
|
65
102
|
response.headers[header_name] = stringified
|
66
103
|
end
|
67
104
|
end
|
105
|
+
|
68
106
|
end
|
69
107
|
|
70
108
|
end
|
@@ -40,14 +40,14 @@ module Unpoly
|
|
40
40
|
# TODO: Docs
|
41
41
|
def accept(value = nil)
|
42
42
|
overlay? or raise CannotClose, 'Cannot accept the root layer'
|
43
|
-
change.response.headers['X-Up-Accept-Layer'] =
|
43
|
+
change.response.headers['X-Up-Accept-Layer'] = value.to_json
|
44
44
|
end
|
45
45
|
|
46
46
|
##
|
47
47
|
# TODO: Docs
|
48
48
|
def dismiss(value = nil)
|
49
49
|
overlay? or raise CannotClose, 'Cannot dismiss the root layer'
|
50
|
-
change.response.headers['X-Up-Dismiss-Layer'] =
|
50
|
+
change.response.headers['X-Up-Dismiss-Layer'] = value.to_json
|
51
51
|
end
|
52
52
|
|
53
53
|
private
|
@@ -57,4 +57,4 @@ module Unpoly
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
60
|
-
end
|
60
|
+
end
|
data/lib/unpoly/rails/change.rb
CHANGED
@@ -14,18 +14,19 @@ module Unpoly
|
|
14
14
|
end
|
15
15
|
|
16
16
|
# Generate helpers to get, set and cast fields in request and response headers.
|
17
|
-
field
|
18
|
-
field
|
19
|
-
field
|
20
|
-
field :
|
21
|
-
field
|
22
|
-
field
|
23
|
-
field :context,
|
24
|
-
field :fail_context,
|
25
|
-
field :context_changes,
|
26
|
-
field :events,
|
27
|
-
field
|
28
|
-
field
|
17
|
+
field Field::String.new(:version)
|
18
|
+
field Field::String.new(:target)
|
19
|
+
field Field::String.new(:fail_target)
|
20
|
+
field Field::SeparatedValues.new(:validate_names), request_header_name: 'X-Up-Validate'
|
21
|
+
field Field::String.new(:mode)
|
22
|
+
field Field::String.new(:fail_mode)
|
23
|
+
field Field::Hash.new(:context, default: -> { {} }), method: :input_context
|
24
|
+
field Field::Hash.new(:fail_context, default: -> { {} }), method: :input_fail_context
|
25
|
+
field Field::Hash.new(:context_changes, default: -> { {} }), response_header_name: 'X-Up-Context'
|
26
|
+
field Field::Array.new(:events, default: -> { [] })
|
27
|
+
field Field::String.new(:expire_cache)
|
28
|
+
field Field::String.new(:evict_cache)
|
29
|
+
field Field::Time.new(:reload_from_time)
|
29
30
|
|
30
31
|
##
|
31
32
|
# Returns whether the current request is an
|
@@ -65,7 +66,10 @@ module Unpoly
|
|
65
66
|
end
|
66
67
|
|
67
68
|
def target_changed?
|
68
|
-
target
|
69
|
+
# The target has changed if either:
|
70
|
+
# (1) The #target= setter was called, setting @server_target
|
71
|
+
# (2) An up[target] param was set to preserve a previously changed target through a redirect.
|
72
|
+
(@server_target && @server_target != target_from_request_headers) || target_from_params
|
69
73
|
end
|
70
74
|
|
71
75
|
##
|
@@ -82,8 +86,10 @@ module Unpoly
|
|
82
86
|
test_target(target, tested_target)
|
83
87
|
end
|
84
88
|
|
85
|
-
def render_nothing(
|
86
|
-
|
89
|
+
def render_nothing(status: :no_content, deprecation: true)
|
90
|
+
if deprecation
|
91
|
+
ActiveSupport::Deprecation.warn("up.render_nothing is deprecated. Use head(:no_content) instead.")
|
92
|
+
end
|
87
93
|
self.target = ':none'
|
88
94
|
controller.head(status)
|
89
95
|
end
|
@@ -132,23 +138,29 @@ module Unpoly
|
|
132
138
|
end
|
133
139
|
|
134
140
|
##
|
135
|
-
#
|
136
|
-
#
|
137
|
-
|
138
|
-
|
141
|
+
# If the current form submission is a [validation](https://unpoly.com/input-up-validate),
|
142
|
+
# this returns the name attributes of the form fields that has triggered
|
143
|
+
# the validation.
|
144
|
+
#
|
145
|
+
# Note that multiple validating form fields may be batched into a single request.
|
146
|
+
def validate_names
|
147
|
+
validate_names_from_request
|
139
148
|
end
|
140
149
|
|
141
|
-
|
150
|
+
memoize def validate_name
|
151
|
+
if validating?
|
152
|
+
validates_names.first
|
153
|
+
end
|
154
|
+
end
|
142
155
|
|
143
156
|
##
|
144
|
-
#
|
145
|
-
#
|
146
|
-
|
147
|
-
|
148
|
-
validate_from_request
|
157
|
+
# Returns whether the current form submission should be
|
158
|
+
# [validated](https://unpoly.com/input-up-validate) (and not be saved to the database).
|
159
|
+
def validate?
|
160
|
+
validate_names.present?
|
149
161
|
end
|
150
162
|
|
151
|
-
alias
|
163
|
+
alias validating? validate?
|
152
164
|
|
153
165
|
##
|
154
166
|
# TODO: Docs
|
@@ -235,19 +247,22 @@ module Unpoly
|
|
235
247
|
end
|
236
248
|
|
237
249
|
def after_action
|
238
|
-
|
250
|
+
no_vary do
|
251
|
+
write_events_to_response_headers
|
239
252
|
|
240
|
-
|
253
|
+
write_expire_cache_to_response_headers
|
254
|
+
write_evict_cache_to_response_headers
|
241
255
|
|
242
|
-
|
243
|
-
|
244
|
-
|
256
|
+
if context_changes.present?
|
257
|
+
write_context_changes_to_response_headers
|
258
|
+
end
|
245
259
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
260
|
+
if target_changed?
|
261
|
+
# Only write the target to the response if it has changed.
|
262
|
+
# The client might have a more abstract target like :main
|
263
|
+
# that we don't want to override with an echo of the first match.
|
264
|
+
write_target_to_response_headers
|
265
|
+
end
|
251
266
|
end
|
252
267
|
end
|
253
268
|
|
@@ -291,26 +306,46 @@ module Unpoly
|
|
291
306
|
Cache.new(self)
|
292
307
|
end
|
293
308
|
|
294
|
-
def
|
309
|
+
def expire_cache
|
295
310
|
# Cache commands are outgoing only. They wouldn't be passed as a request header.
|
296
311
|
# We might however pass them as params so they can survive a redirect.
|
297
|
-
if @
|
298
|
-
|
312
|
+
if @expire_cache.nil?
|
313
|
+
expire_cache_from_params
|
299
314
|
else
|
300
|
-
@
|
315
|
+
@expire_cache
|
301
316
|
end
|
302
317
|
end
|
303
318
|
|
304
|
-
def
|
305
|
-
@
|
319
|
+
def expire_cache=(value)
|
320
|
+
@expire_cache = value
|
306
321
|
end
|
307
322
|
|
308
|
-
def
|
309
|
-
|
323
|
+
def evict_cache
|
324
|
+
# Cache commands are outgoing only. They wouldn't be passed as a request header.
|
325
|
+
# We might however pass them as params so they can survive a redirect.
|
326
|
+
if @evict_cache.nil?
|
327
|
+
evict_cache_from_params
|
328
|
+
else
|
329
|
+
@evict_cache
|
330
|
+
end
|
310
331
|
end
|
311
332
|
|
312
|
-
def
|
313
|
-
|
333
|
+
def evict_cache=(value)
|
334
|
+
@evict_cache = value
|
335
|
+
end
|
336
|
+
|
337
|
+
def reload_from_time(deprecation: true)
|
338
|
+
if deprecation
|
339
|
+
ActiveSupport::Deprecation.warn("up.reload_from_time is deprecated. Use conditional GETs instead: https://guides.rubyonrails.org/caching_with_rails.html#conditional-get-support")
|
340
|
+
end
|
341
|
+
reload_from_time_from_request || if_modified_since
|
342
|
+
end
|
343
|
+
|
344
|
+
def reload?(deprecation: true)
|
345
|
+
if deprecation
|
346
|
+
ActiveSupport::Deprecation.warn("up.reload? is deprecated. Use conditional GETs instead: https://guides.rubyonrails.org/caching_with_rails.html#conditional-get-support")
|
347
|
+
end
|
348
|
+
!!reload_from_time(deprecation: false)
|
314
349
|
end
|
315
350
|
|
316
351
|
def safe_callback(code)
|
@@ -328,6 +363,12 @@ module Unpoly
|
|
328
363
|
|
329
364
|
delegate :request, :params, :response, to: :controller
|
330
365
|
|
366
|
+
def if_modified_since
|
367
|
+
if (header = request.headers['If-Modified-Since'])
|
368
|
+
Time.httpdate(header)
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
331
372
|
def content_security_policy_nonce
|
332
373
|
controller.send(:content_security_policy_nonce)
|
333
374
|
end
|
@@ -356,18 +397,25 @@ module Unpoly
|
|
356
397
|
|
357
398
|
def fields_as_params
|
358
399
|
params = {}
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
params
|
366
|
-
params[
|
367
|
-
params[
|
368
|
-
params[
|
369
|
-
params[
|
370
|
-
|
400
|
+
|
401
|
+
# When the browser sees a redirect it will automatically resend the request headers
|
402
|
+
# from the original request. This means that headers we set on the client (X-Up-Target, X-Up-Mode, etc.)
|
403
|
+
# are automatically preserved through redirects.
|
404
|
+
#
|
405
|
+
# We still need to handle all the response headers that we set on the server.
|
406
|
+
# There are encoded as params.
|
407
|
+
params[context_changes_param_name] = serialized_context_changes # server-set header must be sent if present
|
408
|
+
params[events_param_name] = serialized_events # server-set header must be sent if present
|
409
|
+
params[expire_cache_param_name] = serialized_expire_cache # server-set header must be sent if present
|
410
|
+
params[evict_cache_param_name] = serialized_evict_cache # server-set header must be sent if present
|
411
|
+
|
412
|
+
if target_changed?
|
413
|
+
# Only write the target to the response if it has changed.
|
414
|
+
# The client might have a more abstract target like :main
|
415
|
+
# that we don't want to override with an echo of the first match.
|
416
|
+
params[target_param_name] = serialized_target
|
417
|
+
end
|
418
|
+
|
371
419
|
|
372
420
|
# Don't send empty response headers.
|
373
421
|
params = params.select { |_key, value| value.present? }
|
@@ -33,11 +33,13 @@ module Unpoly
|
|
33
33
|
##
|
34
34
|
# TODO: Docs
|
35
35
|
def redirect_to(target, *args)
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
up.no_vary do
|
37
|
+
if up?
|
38
|
+
target = url_for(target)
|
39
|
+
target = up.url_with_field_values(target)
|
40
|
+
end
|
41
|
+
super(target, *args)
|
39
42
|
end
|
40
|
-
super(target, *args)
|
41
43
|
end
|
42
44
|
|
43
45
|
::ActionController::Base.prepend(self)
|
data/lib/unpoly/rails/engine.rb
CHANGED
@@ -12,7 +12,7 @@ module Unpoly
|
|
12
12
|
spec_folder = root.join('spec')
|
13
13
|
|
14
14
|
# If a local application has referenced the local gem sources
|
15
|
-
# (e.g. `gem 'unpoly', path: '../unpoly'`) we use the local build.
|
15
|
+
# (e.g. `gem 'unpoly-rails', path: '../unpoly-rails'`) we use the local build.
|
16
16
|
# This way changes from the Webpack watcher are immediately picked
|
17
17
|
# up by the application.
|
18
18
|
is_local_gem = spec_folder.directory?
|
@@ -18,13 +18,9 @@ module Unpoly
|
|
18
18
|
end
|
19
19
|
|
20
20
|
private
|
21
|
-
|
21
|
+
|
22
22
|
def set_up_request_echo_headers
|
23
|
-
|
24
|
-
unless request_url_without_up_params == request.original_url
|
25
|
-
response.headers['X-Up-Location'] = up.request_url_without_up_params
|
26
|
-
end
|
27
|
-
|
23
|
+
response.headers['X-Up-Location'] = up.request_url_without_up_params
|
28
24
|
response.headers['X-Up-Method'] = request.method
|
29
25
|
end
|
30
26
|
|
data/lib/unpoly/rails/version.rb
CHANGED
data/lib/unpoly-rails.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'memoized'
|
2
2
|
require_relative 'unpoly/rails/version'
|
3
3
|
require_relative 'unpoly/rails/error'
|
4
|
-
require_relative 'unpoly/rails/util'
|
5
4
|
require_relative 'unpoly/rails/engine'
|
6
5
|
require_relative 'unpoly/rails/request_echo_headers'
|
7
6
|
require_relative 'unpoly/rails/request_method_cookie'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unpoly-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henning Koch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -119,8 +119,6 @@ files:
|
|
119
119
|
- assets/unpoly/unpoly-migrate.js
|
120
120
|
- assets/unpoly/unpoly-migrate.min.js
|
121
121
|
- assets/unpoly/unpoly.css
|
122
|
-
- assets/unpoly/unpoly.es5.js
|
123
|
-
- assets/unpoly/unpoly.es5.min.js
|
124
122
|
- assets/unpoly/unpoly.es6.js
|
125
123
|
- assets/unpoly/unpoly.es6.min.js
|
126
124
|
- assets/unpoly/unpoly.js
|
@@ -138,7 +136,6 @@ files:
|
|
138
136
|
- lib/unpoly/rails/error.rb
|
139
137
|
- lib/unpoly/rails/request_echo_headers.rb
|
140
138
|
- lib/unpoly/rails/request_method_cookie.rb
|
141
|
-
- lib/unpoly/rails/util.rb
|
142
139
|
- lib/unpoly/rails/version.rb
|
143
140
|
homepage: https://github.com/unpoly/unpoly-rails
|
144
141
|
licenses:
|
@@ -155,9 +152,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
152
|
version: 2.3.0
|
156
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
154
|
requirements:
|
158
|
-
- - "
|
155
|
+
- - ">"
|
159
156
|
- !ruby/object:Gem::Version
|
160
|
-
version:
|
157
|
+
version: 1.3.1
|
161
158
|
requirements: []
|
162
159
|
rubygems_version: 3.2.16
|
163
160
|
signing_key:
|