actionpack 3.2.19 → 3.2.22.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/CHANGELOG.md +5 -0
- data/lib/abstract_controller/rendering.rb +3 -3
- data/lib/action_controller/metal/http_authentication.rb +6 -1
- data/lib/action_dispatch/http/mime_type.rb +16 -2
- data/lib/action_dispatch/middleware/session/cache_store.rb +3 -3
- data/lib/action_dispatch/middleware/static.rb +23 -3
- data/lib/action_pack/version.rb +2 -2
- data/lib/action_view/helpers/rendering_helper.rb +2 -0
- data/lib/action_view/helpers/tag_helper.rb +12 -5
- data/lib/action_view/lookup_context.rb +4 -0
- data/lib/action_view/path_set.rb +19 -7
- data/lib/action_view/renderer/abstract_renderer.rb +1 -1
- data/lib/action_view/renderer/renderer.rb +7 -0
- data/lib/action_view/renderer/template_renderer.rb +3 -2
- data/lib/action_view/template/resolver.rb +33 -7
- data/lib/action_view/test_case.rb +1 -0
- data/lib/action_view/testing/resolvers.rb +2 -3
- metadata +151 -191
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b2589906c64cd869c852384400c0faaa3ce38781
|
4
|
+
data.tar.gz: 791a03c38208269ba110b4d5afaa77b3144894b6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ac4faea0a3986fbaa9644ec86c74bab96478b4b75786901f0d9142f563ada0d0efdf56e3c094af894eb7542fedfb7c88eaa93fa04fdb37be981c7e9267a65875
|
7
|
+
data.tar.gz: ef93100f309d422d5d4542e73dd02a7087cd4f0fc3b37e48d01fc9d0deedbc282550cf81780489d707ad2902e559f3a65711ca03c25b03ad2fce7ab28b5e5186
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "abstract_controller/base"
|
2
2
|
require "action_view"
|
3
3
|
require "active_support/core_ext/object/instance_variables"
|
4
|
+
require "active_support/hash_with_indifferent_access"
|
4
5
|
|
5
6
|
module AbstractController
|
6
7
|
class DoubleRenderError < Error
|
@@ -138,7 +139,7 @@ module AbstractController
|
|
138
139
|
end
|
139
140
|
|
140
141
|
# Normalize args by converting render "foo" to render :action => "foo" and
|
141
|
-
# render "foo/bar" to render :
|
142
|
+
# render "foo/bar" to render :app_template_file => "foo/bar".
|
142
143
|
# :api: plugin
|
143
144
|
def _normalize_args(action=nil, options={})
|
144
145
|
case action
|
@@ -147,12 +148,11 @@ module AbstractController
|
|
147
148
|
options = action
|
148
149
|
when String, Symbol
|
149
150
|
action = action.to_s
|
150
|
-
key = action.include?(?/) ? :
|
151
|
+
key = action.include?(?/) ? :app_template_file : :action
|
151
152
|
options[key] = action
|
152
153
|
else
|
153
154
|
options[:partial] = action
|
154
155
|
end
|
155
|
-
|
156
156
|
options
|
157
157
|
end
|
158
158
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'active_support/base64'
|
2
2
|
require 'active_support/core_ext/object/blank'
|
3
|
+
require 'active_support/security_utils'
|
3
4
|
|
4
5
|
module ActionController
|
5
6
|
module HttpAuthentication
|
@@ -111,7 +112,11 @@ module ActionController
|
|
111
112
|
def http_basic_authenticate_with(options = {})
|
112
113
|
before_filter(options.except(:name, :password, :realm)) do
|
113
114
|
authenticate_or_request_with_http_basic(options[:realm] || "Application") do |name, password|
|
114
|
-
|
115
|
+
# This comparison uses & so that it doesn't short circuit and
|
116
|
+
# uses `variable_size_secure_compare` so that length information
|
117
|
+
# isn't leaked.
|
118
|
+
ActiveSupport::SecurityUtils.variable_size_secure_compare(name, options[:name]) &
|
119
|
+
ActiveSupport::SecurityUtils.variable_size_secure_compare(password, options[:password])
|
115
120
|
end
|
116
121
|
end
|
117
122
|
end
|
@@ -22,7 +22,7 @@ module Mime
|
|
22
22
|
|
23
23
|
SET = Mimes.new
|
24
24
|
EXTENSION_LOOKUP = {}
|
25
|
-
LOOKUP =
|
25
|
+
LOOKUP = {}
|
26
26
|
|
27
27
|
def self.[](type)
|
28
28
|
return type if type.is_a?(Type)
|
@@ -85,7 +85,7 @@ module Mime
|
|
85
85
|
Q_SEPARATOR_REGEXP = /;\s*q=/
|
86
86
|
|
87
87
|
def lookup(string)
|
88
|
-
LOOKUP[string]
|
88
|
+
LOOKUP[string] || Type.new(string)
|
89
89
|
end
|
90
90
|
|
91
91
|
def lookup_by_extension(extension)
|
@@ -204,9 +204,12 @@ module Mime
|
|
204
204
|
end
|
205
205
|
end
|
206
206
|
|
207
|
+
attr_reader :hash
|
208
|
+
|
207
209
|
def initialize(string, symbol = nil, synonyms = [])
|
208
210
|
@symbol, @synonyms = symbol, synonyms
|
209
211
|
@string = string
|
212
|
+
@hash = [@string, @synonyms, @symbol].hash
|
210
213
|
end
|
211
214
|
|
212
215
|
def to_s
|
@@ -240,6 +243,13 @@ module Mime
|
|
240
243
|
end
|
241
244
|
end
|
242
245
|
|
246
|
+
def eql?(other)
|
247
|
+
super || (self.class == other.class &&
|
248
|
+
@string == other.string &&
|
249
|
+
@synonyms == other.synonyms &&
|
250
|
+
@symbol == other.symbol)
|
251
|
+
end
|
252
|
+
|
243
253
|
def =~(mime_type)
|
244
254
|
return false if mime_type.blank?
|
245
255
|
regexp = Regexp.new(Regexp.quote(mime_type.to_s))
|
@@ -262,6 +272,10 @@ module Mime
|
|
262
272
|
super || method.to_s =~ /(\w+)\?$/
|
263
273
|
end
|
264
274
|
|
275
|
+
protected
|
276
|
+
|
277
|
+
attr_reader :string, :synonyms
|
278
|
+
|
265
279
|
private
|
266
280
|
def method_missing(method, *args)
|
267
281
|
if method.to_s =~ /(\w+)\?$/
|
@@ -16,9 +16,9 @@ module ActionDispatch
|
|
16
16
|
|
17
17
|
# Get a session from the cache.
|
18
18
|
def get_session(env, sid)
|
19
|
-
sid
|
20
|
-
|
21
|
-
|
19
|
+
unless sid and session = @cache.read(cache_key(sid))
|
20
|
+
sid, session = generate_sid, {}
|
21
|
+
end
|
22
22
|
[sid, session]
|
23
23
|
end
|
24
24
|
|
@@ -12,11 +12,11 @@ module ActionDispatch
|
|
12
12
|
def match?(path)
|
13
13
|
path = path.dup
|
14
14
|
|
15
|
-
full_path = path.empty? ? @root : File.join(@root, escape_glob_chars(unescape_path(path)))
|
15
|
+
full_path = path.empty? ? @root : File.join(@root, escape_glob_chars(clean_path_info(unescape_path(path))))
|
16
16
|
paths = "#{full_path}#{ext}"
|
17
17
|
|
18
18
|
matches = Dir[paths]
|
19
|
-
match = matches.detect { |m| File.file?(m) }
|
19
|
+
match = matches.detect { |m| File.file?(m) && File.readable?(m) }
|
20
20
|
if match
|
21
21
|
match.sub!(@compiled_root, '')
|
22
22
|
::Rack::Utils.escape(match)
|
@@ -40,7 +40,27 @@ module ActionDispatch
|
|
40
40
|
|
41
41
|
def escape_glob_chars(path)
|
42
42
|
path.force_encoding('binary') if path.respond_to? :force_encoding
|
43
|
-
path.gsub(/[*?{}\[\]]/, "\\\\\\&")
|
43
|
+
path.gsub(/[*?{}\[\]\\]/, "\\\\\\&")
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
PATH_SEPS = Regexp.union(*[::File::SEPARATOR, ::File::ALT_SEPARATOR].compact)
|
49
|
+
|
50
|
+
def clean_path_info(path_info)
|
51
|
+
path_info.force_encoding('binary') if path_info.respond_to? :force_encoding
|
52
|
+
parts = path_info.split PATH_SEPS
|
53
|
+
|
54
|
+
clean = []
|
55
|
+
|
56
|
+
parts.each do |part|
|
57
|
+
next if part.empty? || part == '.'
|
58
|
+
part == '..' ? clean.pop : clean << part
|
59
|
+
end
|
60
|
+
|
61
|
+
clean.unshift '/' if parts.empty? || parts.first.empty?
|
62
|
+
|
63
|
+
::File.join(*clean)
|
44
64
|
end
|
45
65
|
end
|
46
66
|
|
data/lib/action_pack/version.rb
CHANGED
@@ -10,6 +10,7 @@ module ActionView
|
|
10
10
|
module TagHelper
|
11
11
|
extend ActiveSupport::Concern
|
12
12
|
include CaptureHelper
|
13
|
+
include OutputSafetyHelper
|
13
14
|
|
14
15
|
BOOLEAN_ATTRIBUTES = %w(disabled readonly multiple checked autobuffer
|
15
16
|
autoplay controls loop selected hidden scoped async
|
@@ -141,20 +142,26 @@ module ActionView
|
|
141
142
|
unless v.is_a?(String) || v.is_a?(Symbol) || v.is_a?(BigDecimal)
|
142
143
|
v = v.to_json
|
143
144
|
end
|
144
|
-
|
145
|
-
attrs << %(data-#{k.to_s.dasherize}="#{v}")
|
145
|
+
attrs << tag_option("data-#{k.to_s.dasherize}", v, escape)
|
146
146
|
end
|
147
147
|
elsif BOOLEAN_ATTRIBUTES.include?(key)
|
148
148
|
attrs << %(#{key}="#{key}") if value
|
149
149
|
elsif !value.nil?
|
150
|
-
|
151
|
-
final_value = ERB::Util.html_escape(final_value) if escape
|
152
|
-
attrs << %(#{key}="#{final_value}")
|
150
|
+
attrs << tag_option(key, value, escape)
|
153
151
|
end
|
154
152
|
end
|
155
153
|
" #{attrs.sort * ' '}".html_safe unless attrs.empty?
|
156
154
|
end
|
157
155
|
end
|
156
|
+
|
157
|
+
def tag_option(key, value, escape)
|
158
|
+
if value.is_a?(Array)
|
159
|
+
value = escape ? safe_join(value, " ") : value.join(" ")
|
160
|
+
else
|
161
|
+
value = escape ? ERB::Util.html_escape(value) : value.to_s
|
162
|
+
end
|
163
|
+
%(#{key}="#{value.gsub(/"/, '"'.freeze)}")
|
164
|
+
end
|
158
165
|
end
|
159
166
|
end
|
160
167
|
end
|
@@ -127,6 +127,10 @@ module ActionView
|
|
127
127
|
@view_paths.find_all(*args_for_lookup(name, prefixes, partial, keys, options))
|
128
128
|
end
|
129
129
|
|
130
|
+
def find_file(name, prefixes = [], partial = false, keys = [], options = {})
|
131
|
+
@view_paths.find_file(*args_for_lookup(name, prefixes, partial, keys, options))
|
132
|
+
end
|
133
|
+
|
130
134
|
def exists?(name, prefixes = [], partial = false, keys = [], options = {})
|
131
135
|
@view_paths.exists?(*args_for_lookup(name, prefixes, partial, keys, options))
|
132
136
|
end
|
data/lib/action_view/path_set.rb
CHANGED
@@ -58,23 +58,35 @@ module ActionView #:nodoc:
|
|
58
58
|
find_all(*args).first || raise(MissingTemplate.new(self, *args))
|
59
59
|
end
|
60
60
|
|
61
|
+
def find_file(path, prefixes = [], *args)
|
62
|
+
_find_all(path, prefixes, args, true).first || raise(MissingTemplate.new(self, path, prefixes, *args))
|
63
|
+
end
|
64
|
+
|
61
65
|
def find_all(path, prefixes = [], *args)
|
66
|
+
_find_all path, prefixes, args, false
|
67
|
+
end
|
68
|
+
|
69
|
+
def exists?(path, prefixes, *args)
|
70
|
+
find_all(path, prefixes, *args).any?
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def _find_all(path, prefixes, args, outside_app)
|
62
76
|
prefixes = [prefixes] if String === prefixes
|
63
77
|
prefixes.each do |prefix|
|
64
78
|
paths.each do |resolver|
|
65
|
-
|
79
|
+
if outside_app
|
80
|
+
templates = resolver.find_all_anywhere(path, prefix, *args)
|
81
|
+
else
|
82
|
+
templates = resolver.find_all(path, prefix, *args)
|
83
|
+
end
|
66
84
|
return templates unless templates.empty?
|
67
85
|
end
|
68
86
|
end
|
69
87
|
[]
|
70
88
|
end
|
71
89
|
|
72
|
-
def exists?(path, prefixes, *args)
|
73
|
-
find_all(path, prefixes, *args).any?
|
74
|
-
end
|
75
|
-
|
76
|
-
private
|
77
|
-
|
78
90
|
def typecast(paths)
|
79
91
|
paths.map do |path|
|
80
92
|
case path
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ActionView
|
2
2
|
class AbstractRenderer #:nodoc:
|
3
|
-
delegate :find_template, :template_exists?, :with_fallbacks, :update_details,
|
3
|
+
delegate :find_template, :find_file, :template_exists?, :with_fallbacks, :update_details,
|
4
4
|
:with_layout_format, :formats, :to => :@lookup_context
|
5
5
|
|
6
6
|
def initialize(lookup_context)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support/hash_with_indifferent_access'
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
# This is the main entry point for rendering. It basically delegates
|
3
5
|
# to other objects like TemplateRenderer and PartialRenderer which
|
@@ -11,6 +13,11 @@ module ActionView
|
|
11
13
|
|
12
14
|
# Main render entry point shared by AV and AC.
|
13
15
|
def render(context, options)
|
16
|
+
if (options.is_a?(HashWithIndifferentAccess) && !options.respond_to?(:permitted?)) ||
|
17
|
+
(options.respond_to?(:permitted?) && !options.permitted?)
|
18
|
+
raise ArgumentError, "render parameters are not permitted"
|
19
|
+
end
|
20
|
+
|
14
21
|
if options.key?(:partial)
|
15
22
|
render_partial(context, options)
|
16
23
|
else
|
@@ -21,11 +21,12 @@ module ActionView
|
|
21
21
|
# Determine the template to be rendered using the given options.
|
22
22
|
def determine_template(options) #:nodoc:
|
23
23
|
keys = options[:locals].try(:keys) || []
|
24
|
-
|
25
24
|
if options.key?(:text)
|
26
25
|
Template::Text.new(options[:text], formats.try(:first))
|
26
|
+
elsif options.key?(:app_template_file)
|
27
|
+
find_template(options[:app_template_file], nil, false, keys, @details)
|
27
28
|
elsif options.key?(:file)
|
28
|
-
with_fallbacks {
|
29
|
+
with_fallbacks { find_file(options[:file], nil, false, keys, @details) }
|
29
30
|
elsif options.key?(:inline)
|
30
31
|
handler = Template.handler_for_extension(options[:type] || "erb")
|
31
32
|
Template.new(options[:inline], "inline template", handler, :locals => keys)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require "pathname"
|
2
2
|
require "active_support/core_ext/class"
|
3
3
|
require "active_support/core_ext/io"
|
4
|
+
require "active_support/core_ext/string/starts_ends_with"
|
4
5
|
require "action_view/template"
|
5
6
|
|
6
7
|
module ActionView
|
@@ -43,7 +44,13 @@ module ActionView
|
|
43
44
|
# Normalizes the arguments and passes it on to find_template.
|
44
45
|
def find_all(name, prefix=nil, partial=false, details={}, key=nil, locals=[])
|
45
46
|
cached(key, [name, prefix, partial], details, locals) do
|
46
|
-
find_templates(name, prefix, partial, details)
|
47
|
+
find_templates(name, prefix, partial, details, false)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def find_all_anywhere(name, prefix, partial=false, details={}, key=nil, locals=[])
|
52
|
+
cached(key, [name, prefix, partial], details, locals) do
|
53
|
+
find_templates(name, prefix, partial, details, true)
|
47
54
|
end
|
48
55
|
end
|
49
56
|
|
@@ -54,8 +61,8 @@ module ActionView
|
|
54
61
|
# This is what child classes implement. No defaults are needed
|
55
62
|
# because Resolver guarantees that the arguments are present and
|
56
63
|
# normalized.
|
57
|
-
def find_templates(name, prefix, partial, details)
|
58
|
-
raise NotImplementedError, "Subclasses must implement a find_templates(name, prefix, partial, details) method"
|
64
|
+
def find_templates(name, prefix, partial, details, outside_app_allowed = false)
|
65
|
+
raise NotImplementedError, "Subclasses must implement a find_templates(name, prefix, partial, details, outside_app_allowed) method"
|
59
66
|
end
|
60
67
|
|
61
68
|
# Helpers that builds a path. Useful for building virtual paths.
|
@@ -110,18 +117,22 @@ module ActionView
|
|
110
117
|
super()
|
111
118
|
end
|
112
119
|
|
120
|
+
cattr_accessor :instance_reader => false, :instance_writer => false
|
121
|
+
|
113
122
|
private
|
114
123
|
|
115
|
-
def find_templates(name, prefix, partial, details)
|
124
|
+
def find_templates(name, prefix, partial, details, outside_app_allowed = false)
|
116
125
|
path = Path.build(name, prefix, partial)
|
117
|
-
query(path, details, details[:formats])
|
126
|
+
query(path, details, details[:formats], outside_app_allowed)
|
118
127
|
end
|
119
128
|
|
120
|
-
def query(path, details, formats)
|
129
|
+
def query(path, details, formats, outside_app_allowed)
|
121
130
|
query = build_query(path, details)
|
122
131
|
|
123
132
|
template_paths = find_template_paths query
|
124
133
|
|
134
|
+
template_paths = reject_files_external_to_app(template_paths) unless outside_app_allowed
|
135
|
+
|
125
136
|
template_paths.map { |template|
|
126
137
|
handler, format = extract_handler_and_format(template, formats)
|
127
138
|
contents = File.binread template
|
@@ -133,6 +144,10 @@ module ActionView
|
|
133
144
|
}
|
134
145
|
end
|
135
146
|
|
147
|
+
def reject_files_external_to_app(files)
|
148
|
+
files.reject { |filename| !inside_path?(@path, filename) }
|
149
|
+
end
|
150
|
+
|
136
151
|
if RUBY_VERSION >= '2.2.0'
|
137
152
|
def find_template_paths(query)
|
138
153
|
Dir[query].reject { |filename|
|
@@ -153,6 +168,12 @@ module ActionView
|
|
153
168
|
end
|
154
169
|
end
|
155
170
|
|
171
|
+
def inside_path?(path, filename)
|
172
|
+
filename = File.expand_path(filename)
|
173
|
+
path = File.join(path, '')
|
174
|
+
filename.start_with?(path)
|
175
|
+
end
|
176
|
+
|
156
177
|
# Helper for building query glob string based on resolver's pattern.
|
157
178
|
def build_query(path, details)
|
158
179
|
query = @pattern.dup
|
@@ -250,7 +271,12 @@ module ActionView
|
|
250
271
|
class OptimizedFileSystemResolver < FileSystemResolver #:nodoc:
|
251
272
|
def build_query(path, details)
|
252
273
|
exts = EXTENSIONS.map { |ext| details[ext] }
|
253
|
-
|
274
|
+
|
275
|
+
if path.to_s.starts_with? @path.to_s
|
276
|
+
query = escape_entry(path)
|
277
|
+
else
|
278
|
+
query = escape_entry(File.join(@path, path))
|
279
|
+
end
|
254
280
|
|
255
281
|
query + exts.map { |ext|
|
256
282
|
"{#{ext.compact.uniq.map { |e| ".#{e}," }.join}}"
|
@@ -19,7 +19,7 @@ module ActionView #:nodoc:
|
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
def query(path, exts, formats)
|
22
|
+
def query(path, exts, formats, outside_app_allowed)
|
23
23
|
query = ""
|
24
24
|
EXTENSIONS.each do |ext|
|
25
25
|
query << '(' << exts[ext].map {|e| e && Regexp.escape(".#{e}") }.join('|') << '|)'
|
@@ -40,11 +40,10 @@ module ActionView #:nodoc:
|
|
40
40
|
end
|
41
41
|
|
42
42
|
class NullResolver < PathResolver
|
43
|
-
def query(path, exts, formats)
|
43
|
+
def query(path, exts, formats, outside_app_allowed)
|
44
44
|
handler, format = extract_handler_and_format(path, formats)
|
45
45
|
[ActionView::Template.new("Template generated by Null Resolver", path, handler, :virtual_path => path, :format => format)]
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
end
|
50
|
-
|
metadata
CHANGED
@@ -1,194 +1,166 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionpack
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 3
|
8
|
-
- 2
|
9
|
-
- 19
|
10
|
-
version: 3.2.19
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.2.22.5
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- David Heinemeier Hansson
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
-
none: false
|
24
|
-
requirements:
|
25
|
-
- - "="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
hash: 41
|
28
|
-
segments:
|
29
|
-
- 3
|
30
|
-
- 2
|
31
|
-
- 19
|
32
|
-
version: 3.2.19
|
33
|
-
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
prerelease: false
|
11
|
+
date: 2016-09-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
36
14
|
name: activesupport
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
hash: 41
|
44
|
-
segments:
|
45
|
-
- 3
|
46
|
-
- 2
|
47
|
-
- 19
|
48
|
-
version: 3.2.19
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.2.22.5
|
49
20
|
type: :runtime
|
50
|
-
version_requirements: *id002
|
51
21
|
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.2.22.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
52
28
|
name: activemodel
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
hash: 11
|
60
|
-
segments:
|
61
|
-
- 1
|
62
|
-
- 2
|
63
|
-
version: "1.2"
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.2.22.5
|
64
34
|
type: :runtime
|
65
|
-
version_requirements: *id003
|
66
35
|
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.2.22.5
|
41
|
+
- !ruby/object:Gem::Dependency
|
67
42
|
name: rack-cache
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
hash: 7
|
75
|
-
segments:
|
76
|
-
- 3
|
77
|
-
- 0
|
78
|
-
- 0
|
79
|
-
version: 3.0.0
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.2'
|
80
48
|
type: :runtime
|
81
|
-
version_requirements: *id004
|
82
49
|
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
83
56
|
name: builder
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
hash: 13
|
91
|
-
segments:
|
92
|
-
- 1
|
93
|
-
- 4
|
94
|
-
- 5
|
95
|
-
version: 1.4.5
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.0.0
|
96
62
|
type: :runtime
|
97
|
-
version_requirements: *id005
|
98
63
|
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.0.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
99
70
|
name: rack
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
hash: 5
|
107
|
-
segments:
|
108
|
-
- 0
|
109
|
-
- 6
|
110
|
-
- 1
|
111
|
-
version: 0.6.1
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.4.5
|
112
76
|
type: :runtime
|
113
|
-
version_requirements: *id006
|
114
77
|
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.4.5
|
83
|
+
- !ruby/object:Gem::Dependency
|
115
84
|
name: rack-test
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
hash: 31
|
123
|
-
segments:
|
124
|
-
- 1
|
125
|
-
- 0
|
126
|
-
- 4
|
127
|
-
version: 1.0.4
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.6.1
|
128
90
|
type: :runtime
|
129
|
-
version_requirements: *id007
|
130
91
|
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.6.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
131
98
|
name: journey
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
hash: 5
|
139
|
-
segments:
|
140
|
-
- 2
|
141
|
-
- 2
|
142
|
-
- 1
|
143
|
-
version: 2.2.1
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.0.4
|
144
104
|
type: :runtime
|
145
|
-
version_requirements: *id008
|
146
105
|
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.0.4
|
111
|
+
- !ruby/object:Gem::Dependency
|
147
112
|
name: sprockets
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
- !ruby/object:Gem::Version
|
154
|
-
hash: 19
|
155
|
-
segments:
|
156
|
-
- 2
|
157
|
-
- 7
|
158
|
-
- 0
|
159
|
-
version: 2.7.0
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.2.1
|
160
118
|
type: :runtime
|
161
|
-
version_requirements: *id009
|
162
119
|
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.2.1
|
125
|
+
- !ruby/object:Gem::Dependency
|
163
126
|
name: erubis
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 2.7.0
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 2.7.0
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: tzinfo
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
175
145
|
version: 0.3.29
|
176
146
|
type: :development
|
177
|
-
version_requirements: *id010
|
178
147
|
prerelease: false
|
179
|
-
|
180
|
-
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.3.29
|
153
|
+
description: Web apps on Rails. Simple, battle-tested conventions for building and
|
154
|
+
testing MVC web applications. Works with any Rack-compatible server.
|
181
155
|
email: david@loudthinking.com
|
182
156
|
executables: []
|
183
|
-
|
184
157
|
extensions: []
|
185
|
-
|
186
158
|
extra_rdoc_files: []
|
187
|
-
|
188
|
-
files:
|
159
|
+
files:
|
189
160
|
- CHANGELOG.md
|
190
|
-
- README.rdoc
|
191
161
|
- MIT-LICENSE
|
162
|
+
- README.rdoc
|
163
|
+
- lib/abstract_controller.rb
|
192
164
|
- lib/abstract_controller/asset_paths.rb
|
193
165
|
- lib/abstract_controller/base.rb
|
194
166
|
- lib/abstract_controller/callbacks.rb
|
@@ -201,17 +173,18 @@ files:
|
|
201
173
|
- lib/abstract_controller/translation.rb
|
202
174
|
- lib/abstract_controller/url_for.rb
|
203
175
|
- lib/abstract_controller/view_paths.rb
|
204
|
-
- lib/
|
176
|
+
- lib/action_controller.rb
|
205
177
|
- lib/action_controller/base.rb
|
178
|
+
- lib/action_controller/caching.rb
|
206
179
|
- lib/action_controller/caching/actions.rb
|
207
180
|
- lib/action_controller/caching/fragments.rb
|
208
181
|
- lib/action_controller/caching/pages.rb
|
209
182
|
- lib/action_controller/caching/sweeping.rb
|
210
|
-
- lib/action_controller/
|
183
|
+
- lib/action_controller/deprecated.rb
|
211
184
|
- lib/action_controller/deprecated/integration_test.rb
|
212
185
|
- lib/action_controller/deprecated/performance_test.rb
|
213
|
-
- lib/action_controller/deprecated.rb
|
214
186
|
- lib/action_controller/log_subscriber.rb
|
187
|
+
- lib/action_controller/metal.rb
|
215
188
|
- lib/action_controller/metal/compatibility.rb
|
216
189
|
- lib/action_controller/metal/conditional_get.rb
|
217
190
|
- lib/action_controller/metal/cookies.rb
|
@@ -238,20 +211,19 @@ files:
|
|
238
211
|
- lib/action_controller/metal/streaming.rb
|
239
212
|
- lib/action_controller/metal/testing.rb
|
240
213
|
- lib/action_controller/metal/url_for.rb
|
241
|
-
- lib/action_controller/metal.rb
|
242
214
|
- lib/action_controller/middleware.rb
|
243
215
|
- lib/action_controller/railtie.rb
|
244
216
|
- lib/action_controller/railties/paths.rb
|
245
217
|
- lib/action_controller/record_identifier.rb
|
246
218
|
- lib/action_controller/test_case.rb
|
219
|
+
- lib/action_controller/vendor/html-scanner.rb
|
247
220
|
- lib/action_controller/vendor/html-scanner/html/document.rb
|
248
221
|
- lib/action_controller/vendor/html-scanner/html/node.rb
|
249
222
|
- lib/action_controller/vendor/html-scanner/html/sanitizer.rb
|
250
223
|
- lib/action_controller/vendor/html-scanner/html/selector.rb
|
251
224
|
- lib/action_controller/vendor/html-scanner/html/tokenizer.rb
|
252
225
|
- lib/action_controller/vendor/html-scanner/html/version.rb
|
253
|
-
- lib/
|
254
|
-
- lib/action_controller.rb
|
226
|
+
- lib/action_dispatch.rb
|
255
227
|
- lib/action_dispatch/http/cache.rb
|
256
228
|
- lib/action_dispatch/http/filter_parameters.rb
|
257
229
|
- lib/action_dispatch/http/headers.rb
|
@@ -295,32 +267,33 @@ files:
|
|
295
267
|
- lib/action_dispatch/middleware/templates/rescues/template_error.erb
|
296
268
|
- lib/action_dispatch/middleware/templates/rescues/unknown_action.erb
|
297
269
|
- lib/action_dispatch/railtie.rb
|
270
|
+
- lib/action_dispatch/routing.rb
|
298
271
|
- lib/action_dispatch/routing/mapper.rb
|
299
272
|
- lib/action_dispatch/routing/polymorphic_routes.rb
|
300
273
|
- lib/action_dispatch/routing/redirection.rb
|
301
274
|
- lib/action_dispatch/routing/route_set.rb
|
302
275
|
- lib/action_dispatch/routing/routes_proxy.rb
|
303
276
|
- lib/action_dispatch/routing/url_for.rb
|
304
|
-
- lib/action_dispatch/
|
277
|
+
- lib/action_dispatch/testing/assertions.rb
|
305
278
|
- lib/action_dispatch/testing/assertions/dom.rb
|
306
279
|
- lib/action_dispatch/testing/assertions/response.rb
|
307
280
|
- lib/action_dispatch/testing/assertions/routing.rb
|
308
281
|
- lib/action_dispatch/testing/assertions/selector.rb
|
309
282
|
- lib/action_dispatch/testing/assertions/tag.rb
|
310
|
-
- lib/action_dispatch/testing/assertions.rb
|
311
283
|
- lib/action_dispatch/testing/integration.rb
|
312
284
|
- lib/action_dispatch/testing/performance_test.rb
|
313
285
|
- lib/action_dispatch/testing/test_process.rb
|
314
286
|
- lib/action_dispatch/testing/test_request.rb
|
315
287
|
- lib/action_dispatch/testing/test_response.rb
|
316
|
-
- lib/action_dispatch.rb
|
317
|
-
- lib/action_pack/version.rb
|
318
288
|
- lib/action_pack.rb
|
289
|
+
- lib/action_pack/version.rb
|
290
|
+
- lib/action_view.rb
|
319
291
|
- lib/action_view/asset_paths.rb
|
320
292
|
- lib/action_view/base.rb
|
321
293
|
- lib/action_view/buffers.rb
|
322
294
|
- lib/action_view/context.rb
|
323
295
|
- lib/action_view/flows.rb
|
296
|
+
- lib/action_view/helpers.rb
|
324
297
|
- lib/action_view/helpers/active_model_helper.rb
|
325
298
|
- lib/action_view/helpers/asset_paths.rb
|
326
299
|
- lib/action_view/helpers/asset_tag_helper.rb
|
@@ -348,7 +321,6 @@ files:
|
|
348
321
|
- lib/action_view/helpers/text_helper.rb
|
349
322
|
- lib/action_view/helpers/translation_helper.rb
|
350
323
|
- lib/action_view/helpers/url_helper.rb
|
351
|
-
- lib/action_view/helpers.rb
|
352
324
|
- lib/action_view/locale/en.yml
|
353
325
|
- lib/action_view/log_subscriber.rb
|
354
326
|
- lib/action_view/lookup_context.rb
|
@@ -359,59 +331,47 @@ files:
|
|
359
331
|
- lib/action_view/renderer/renderer.rb
|
360
332
|
- lib/action_view/renderer/streaming_template_renderer.rb
|
361
333
|
- lib/action_view/renderer/template_renderer.rb
|
334
|
+
- lib/action_view/template.rb
|
362
335
|
- lib/action_view/template/error.rb
|
336
|
+
- lib/action_view/template/handlers.rb
|
363
337
|
- lib/action_view/template/handlers/builder.rb
|
364
338
|
- lib/action_view/template/handlers/erb.rb
|
365
|
-
- lib/action_view/template/handlers.rb
|
366
339
|
- lib/action_view/template/resolver.rb
|
367
340
|
- lib/action_view/template/text.rb
|
368
|
-
- lib/action_view/template.rb
|
369
341
|
- lib/action_view/test_case.rb
|
370
342
|
- lib/action_view/testing/resolvers.rb
|
371
|
-
- lib/action_view.rb
|
372
343
|
- lib/sprockets/assets.rake
|
373
344
|
- lib/sprockets/bootstrap.rb
|
374
345
|
- lib/sprockets/compressors.rb
|
346
|
+
- lib/sprockets/helpers.rb
|
375
347
|
- lib/sprockets/helpers/isolated_helper.rb
|
376
348
|
- lib/sprockets/helpers/rails_helper.rb
|
377
|
-
- lib/sprockets/helpers.rb
|
378
349
|
- lib/sprockets/railtie.rb
|
379
350
|
- lib/sprockets/static_compiler.rb
|
380
|
-
has_rdoc: true
|
381
351
|
homepage: http://www.rubyonrails.org
|
382
|
-
licenses:
|
352
|
+
licenses:
|
383
353
|
- MIT
|
354
|
+
metadata: {}
|
384
355
|
post_install_message:
|
385
356
|
rdoc_options: []
|
386
|
-
|
387
|
-
require_paths:
|
357
|
+
require_paths:
|
388
358
|
- lib
|
389
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
390
|
-
|
391
|
-
requirements:
|
359
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
360
|
+
requirements:
|
392
361
|
- - ">="
|
393
|
-
- !ruby/object:Gem::Version
|
394
|
-
hash: 57
|
395
|
-
segments:
|
396
|
-
- 1
|
397
|
-
- 8
|
398
|
-
- 7
|
362
|
+
- !ruby/object:Gem::Version
|
399
363
|
version: 1.8.7
|
400
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
401
|
-
|
402
|
-
requirements:
|
364
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
365
|
+
requirements:
|
403
366
|
- - ">="
|
404
|
-
- !ruby/object:Gem::Version
|
405
|
-
|
406
|
-
|
407
|
-
- 0
|
408
|
-
version: "0"
|
409
|
-
requirements:
|
367
|
+
- !ruby/object:Gem::Version
|
368
|
+
version: '0'
|
369
|
+
requirements:
|
410
370
|
- none
|
411
371
|
rubyforge_project:
|
412
|
-
rubygems_version:
|
372
|
+
rubygems_version: 2.6.6
|
413
373
|
signing_key:
|
414
|
-
specification_version:
|
374
|
+
specification_version: 4
|
415
375
|
summary: Web-flow and rendering framework putting the VC in MVC (part of Rails).
|
416
376
|
test_files: []
|
417
|
-
|
377
|
+
has_rdoc:
|