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 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,3 +1,8 @@
1
+ ## Rails 3.2.22 (Jun 16, 2015) ##
2
+
3
+ * No changes.
4
+
5
+
1
6
  ## Rails 3.2.19 (Jul 2, 2014) ##
2
7
 
3
8
  * Fix regression when using `ActionView::Helpers::TranslationHelper#translate` with
@@ -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 :file => "foo/bar".
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?(?/) ? :file : :action
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
- name == options[:name] && password == options[:password]
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 = Hash.new { |h, k| h[k] = Type.new(k) unless k.blank? }
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 ||= generate_sid
20
- session = @cache.read(cache_key(sid))
21
- session ||= {}
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
 
@@ -2,8 +2,8 @@ module ActionPack
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 2
5
- TINY = 19
6
- PRE = nil
5
+ TINY = 22
6
+ PRE = "5"
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
9
  end
@@ -1,3 +1,5 @@
1
+ require "active_support/core_ext/hash/indifferent_access"
2
+
1
3
  module ActionView
2
4
  module Helpers
3
5
  # = Action View Rendering
@@ -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
- v = ERB::Util.html_escape(v) if escape
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
- final_value = value.is_a?(Array) ? value.join(" ") : value
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(/"/, '&quot;'.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
@@ -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
- templates = resolver.find_all(path, prefix, *args)
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 { find_template(options[:file], nil, false, keys, @details) }
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
- query = escape_entry(File.join(@path, path))
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}}"
@@ -193,6 +193,7 @@ module ActionView
193
193
  @_result
194
194
  @_routes
195
195
  @controller
196
+ @internal_data
196
197
  @layouts
197
198
  @locals
198
199
  @method_name
@@ -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
- hash: 41
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
- date: 2014-07-02 00:00:00 -03:00
19
- default_executable:
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
- - !ruby/object:Gem::Dependency
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
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
- - !ruby/object:Gem::Dependency
54
- requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
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
- - !ruby/object:Gem::Dependency
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
- requirements:
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
- - !ruby/object:Gem::Dependency
85
- requirement: &id005 !ruby/object:Gem::Requirement
86
- none: false
87
- requirements:
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
- - !ruby/object:Gem::Dependency
101
- requirement: &id006 !ruby/object:Gem::Requirement
102
- none: false
103
- requirements:
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
- - !ruby/object:Gem::Dependency
117
- requirement: &id007 !ruby/object:Gem::Requirement
118
- none: false
119
- requirements:
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
- - !ruby/object:Gem::Dependency
133
- requirement: &id008 !ruby/object:Gem::Requirement
134
- none: false
135
- requirements:
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
- - !ruby/object:Gem::Dependency
149
- requirement: &id009 !ruby/object:Gem::Requirement
150
- none: false
151
- requirements:
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
- - !ruby/object:Gem::Dependency
165
- requirement: &id010 !ruby/object:Gem::Requirement
166
- none: false
167
- requirements:
168
- - - ~>
169
- - !ruby/object:Gem::Version
170
- hash: 41
171
- segments:
172
- - 0
173
- - 3
174
- - 29
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
- name: tzinfo
180
- description: Web apps on Rails. Simple, battle-tested conventions for building and testing MVC web applications. Works with any Rack-compatible server.
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/abstract_controller.rb
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/caching.rb
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/action_controller/vendor/html-scanner.rb
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/routing.rb
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
- none: false
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
- none: false
402
- requirements:
364
+ required_rubygems_version: !ruby/object:Gem::Requirement
365
+ requirements:
403
366
  - - ">="
404
- - !ruby/object:Gem::Version
405
- hash: 3
406
- segments:
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: 1.6.2
372
+ rubygems_version: 2.6.6
413
373
  signing_key:
414
- specification_version: 3
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: