actionpack 3.2.15 → 3.2.19
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.
- data/CHANGELOG.md +42 -0
- data/lib/abstract_controller/base.rb +25 -3
- data/lib/action_controller/metal/force_ssl.rb +1 -1
- data/lib/action_dispatch/http/request.rb +2 -2
- data/lib/action_pack/version.rb +1 -1
- data/lib/action_view/helpers/number_helper.rb +18 -6
- data/lib/action_view/helpers/translation_helper.rb +16 -13
- data/lib/action_view/lookup_context.rb +7 -0
- data/lib/action_view/template/resolver.rb +21 -7
- data/lib/action_view/template/text.rb +1 -1
- metadata +175 -134
- checksums.yaml +0 -7
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,45 @@
|
|
1
|
+
## Rails 3.2.19 (Jul 2, 2014) ##
|
2
|
+
|
3
|
+
* Fix regression when using `ActionView::Helpers::TranslationHelper#translate` with
|
4
|
+
`options[:raise]`.
|
5
|
+
|
6
|
+
This regression was introduced at ec16ba75a5493b9da972eea08bae630eba35b62f.
|
7
|
+
|
8
|
+
*Shota Fukumori (sora_h)*
|
9
|
+
|
10
|
+
|
11
|
+
## Rails 3.2.18 (May 6, 2014) ##
|
12
|
+
|
13
|
+
* Only accept actions without File::SEPARATOR in the name.
|
14
|
+
|
15
|
+
This will avoid directory traversal in implicit render.
|
16
|
+
|
17
|
+
Fixes: CVE-2014-0130
|
18
|
+
|
19
|
+
*Rafael Mendonça França*
|
20
|
+
|
21
|
+
|
22
|
+
## Rails 3.2.17 (Feb 18, 2014) ##
|
23
|
+
|
24
|
+
* Use the reference for the mime type to get the format
|
25
|
+
|
26
|
+
Fixes: CVE-2014-0082
|
27
|
+
|
28
|
+
* Escape format, negative_format and units options of number helpers
|
29
|
+
|
30
|
+
Fixes: CVE-2014-0081
|
31
|
+
|
32
|
+
|
33
|
+
## Rails 3.2.16 (Dec 12, 2013) ##
|
34
|
+
|
35
|
+
* Deep Munge the parameters for GET and POST Fixes CVE-2013-6417
|
36
|
+
|
37
|
+
* Stop using i18n's built in HTML error handling. Fixes: CVE-2013-4491
|
38
|
+
|
39
|
+
* Escape the unit value provided to number_to_currency Fixes CVE-2013-6415
|
40
|
+
|
41
|
+
* Only use valid mime type symbols as cache keys CVE-2013-6414
|
42
|
+
|
1
43
|
## Rails 3.2.15 (Oct 16, 2013) ##
|
2
44
|
|
3
45
|
* Fix `ActionDispatch::RemoteIp::GetIp#calculate_ip` to only check for spoofing
|
@@ -112,7 +112,7 @@ module AbstractController
|
|
112
112
|
def process(action, *args)
|
113
113
|
@_action_name = action_name = action.to_s
|
114
114
|
|
115
|
-
unless action_name =
|
115
|
+
unless action_name = _find_action_name(action_name)
|
116
116
|
raise ActionNotFound, "The action '#{action}' could not be found for #{self.class.name}"
|
117
117
|
end
|
118
118
|
|
@@ -138,7 +138,7 @@ module AbstractController
|
|
138
138
|
# available action consider actions that are also available
|
139
139
|
# through other means, for example, implicit render ones.
|
140
140
|
def available_action?(action_name)
|
141
|
-
|
141
|
+
_find_action_name(action_name).present?
|
142
142
|
end
|
143
143
|
|
144
144
|
private
|
@@ -181,6 +181,23 @@ module AbstractController
|
|
181
181
|
action_missing(@_action_name, *args)
|
182
182
|
end
|
183
183
|
|
184
|
+
# Takes an action name and returns the name of the method that will
|
185
|
+
# handle the action.
|
186
|
+
#
|
187
|
+
# It checks if the action name is valid and returns false otherwise.
|
188
|
+
#
|
189
|
+
# See method_for_action for more information.
|
190
|
+
#
|
191
|
+
# ==== Parameters
|
192
|
+
# * <tt>action_name</tt> - An action name to find a method name for
|
193
|
+
#
|
194
|
+
# ==== Returns
|
195
|
+
# * <tt>string</tt> - The name of the method that handles the action
|
196
|
+
# * false - No valid method name could be found. Raise ActionNotFound.
|
197
|
+
def _find_action_name(action_name)
|
198
|
+
_valid_action_name?(action_name) && method_for_action(action_name)
|
199
|
+
end
|
200
|
+
|
184
201
|
# Takes an action name and returns the name of the method that will
|
185
202
|
# handle the action. In normal cases, this method returns the same
|
186
203
|
# name as it receives. By default, if #method_for_action receives
|
@@ -203,11 +220,16 @@ module AbstractController
|
|
203
220
|
#
|
204
221
|
# ==== Returns
|
205
222
|
# * <tt>string</tt> - The name of the method that handles the action
|
206
|
-
# * <tt>nil</tt> - No method name could be found.
|
223
|
+
# * <tt>nil</tt> - No method name could be found.
|
207
224
|
def method_for_action(action_name)
|
208
225
|
if action_method?(action_name) then action_name
|
209
226
|
elsif respond_to?(:action_missing, true) then "_handle_action_missing"
|
210
227
|
end
|
211
228
|
end
|
229
|
+
|
230
|
+
# Checks if the action name is valid and returns false otherwise.
|
231
|
+
def _valid_action_name?(action_name)
|
232
|
+
action_name.to_s !~ Regexp.new(File::SEPARATOR)
|
233
|
+
end
|
212
234
|
end
|
213
235
|
end
|
@@ -22,7 +22,7 @@ module ActionController
|
|
22
22
|
#
|
23
23
|
# ==== Options
|
24
24
|
# * <tt>only</tt> - The callback should be run only for this action
|
25
|
-
# * <tt>except
|
25
|
+
# * <tt>except</tt> - The callback should be run for all actions except this action
|
26
26
|
def force_ssl(options = {})
|
27
27
|
host = options.delete(:host)
|
28
28
|
before_filter(options) do
|
@@ -228,13 +228,13 @@ module ActionDispatch
|
|
228
228
|
|
229
229
|
# Override Rack's GET method to support indifferent access
|
230
230
|
def GET
|
231
|
-
@env["action_dispatch.request.query_parameters"] ||= (normalize_parameters(super) || {})
|
231
|
+
@env["action_dispatch.request.query_parameters"] ||= deep_munge(normalize_parameters(super) || {})
|
232
232
|
end
|
233
233
|
alias :query_parameters :GET
|
234
234
|
|
235
235
|
# Override Rack's POST method to support indifferent access
|
236
236
|
def POST
|
237
|
-
@env["action_dispatch.request.request_parameters"] ||= (normalize_parameters(super) || {})
|
237
|
+
@env["action_dispatch.request.request_parameters"] ||= deep_munge(normalize_parameters(super) || {})
|
238
238
|
end
|
239
239
|
alias :request_parameters :POST
|
240
240
|
|
data/lib/action_pack/version.rb
CHANGED
@@ -129,21 +129,27 @@ module ActionView
|
|
129
129
|
#
|
130
130
|
# number_to_currency(-1234567890.50, :negative_format => "(%u%n)")
|
131
131
|
# # => ($1,234,567,890.50)
|
132
|
-
# number_to_currency(1234567890.50, :unit => "
|
133
|
-
# # =>
|
134
|
-
# number_to_currency(1234567890.50, :unit => "
|
135
|
-
# # => 1234567890,50
|
132
|
+
# number_to_currency(1234567890.50, :unit => "R$", :separator => ",", :delimiter => "")
|
133
|
+
# # => R$1234567890,50
|
134
|
+
# number_to_currency(1234567890.50, :unit => "R$", :separator => ",", :delimiter => "", :format => "%n %u")
|
135
|
+
# # => 1234567890,50 R$
|
136
136
|
def number_to_currency(number, options = {})
|
137
137
|
return unless number
|
138
138
|
|
139
139
|
options.symbolize_keys!
|
140
140
|
|
141
|
+
options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
|
142
|
+
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator]
|
143
|
+
options[:format] = ERB::Util.html_escape(options[:format]) if options[:format]
|
144
|
+
options[:negative_format] = ERB::Util.html_escape(options[:negative_format]) if options[:negative_format]
|
145
|
+
|
141
146
|
defaults = I18n.translate(:'number.format', :locale => options[:locale], :default => {})
|
142
147
|
currency = I18n.translate(:'number.currency.format', :locale => options[:locale], :default => {})
|
143
148
|
currency[:negative_format] ||= "-" + currency[:format] if currency[:format]
|
144
149
|
|
145
150
|
defaults = DEFAULT_CURRENCY_VALUES.merge(defaults).merge!(currency)
|
146
151
|
defaults[:negative_format] = "-" + options[:format] if options[:format]
|
152
|
+
|
147
153
|
options = defaults.merge!(options)
|
148
154
|
|
149
155
|
unit = options.delete(:unit)
|
@@ -156,7 +162,7 @@ module ActionView
|
|
156
162
|
|
157
163
|
begin
|
158
164
|
value = number_with_precision(number, options.merge(:raise => true))
|
159
|
-
format.gsub(/%n/, value).gsub(/%u/, unit).html_safe
|
165
|
+
format.gsub(/%n/, ERB::Util.html_escape(value)).gsub(/%u/, ERB::Util.html_escape(unit)).html_safe
|
160
166
|
rescue InvalidNumberError => e
|
161
167
|
if options[:raise]
|
162
168
|
raise
|
@@ -206,6 +212,9 @@ module ActionView
|
|
206
212
|
|
207
213
|
options.symbolize_keys!
|
208
214
|
|
215
|
+
options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
|
216
|
+
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator]
|
217
|
+
|
209
218
|
defaults = I18n.translate(:'number.format', :locale => options[:locale], :default => {})
|
210
219
|
percentage = I18n.translate(:'number.percentage.format', :locale => options[:locale], :default => {})
|
211
220
|
defaults = defaults.merge(percentage)
|
@@ -255,6 +264,9 @@ module ActionView
|
|
255
264
|
def number_with_delimiter(number, options = {})
|
256
265
|
options.symbolize_keys!
|
257
266
|
|
267
|
+
options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
|
268
|
+
options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator]
|
269
|
+
|
258
270
|
begin
|
259
271
|
Float(number)
|
260
272
|
rescue ArgumentError, TypeError
|
@@ -578,7 +590,7 @@ module ActionView
|
|
578
590
|
units = options.delete :units
|
579
591
|
unit_exponents = case units
|
580
592
|
when Hash
|
581
|
-
units
|
593
|
+
units = Hash[units.map { |k, v| [k, ERB::Util.html_escape(v)] }]
|
582
594
|
when String, Symbol
|
583
595
|
I18n.translate(:"#{units}", :locale => options[:locale], :raise => true)
|
584
596
|
when nil
|
@@ -1,24 +1,14 @@
|
|
1
1
|
require 'action_view/helpers/tag_helper'
|
2
2
|
require 'i18n/exceptions'
|
3
3
|
|
4
|
-
module I18n
|
5
|
-
class ExceptionHandler
|
6
|
-
include Module.new {
|
7
|
-
def call(exception, locale, key, options)
|
8
|
-
exception.is_a?(MissingTranslation) && options[:rescue_format] == :html ? super.html_safe : super
|
9
|
-
end
|
10
|
-
}
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
4
|
module ActionView
|
15
5
|
# = Action View Translation Helpers
|
16
6
|
module Helpers
|
17
7
|
module TranslationHelper
|
18
8
|
# Delegates to <tt>I18n#translate</tt> but also performs three additional functions.
|
19
9
|
#
|
20
|
-
# First, it
|
21
|
-
#
|
10
|
+
# First, it will ensure that any thrown +MissingTranslation+ messages will be turned
|
11
|
+
# into inline spans that:
|
22
12
|
#
|
23
13
|
# * have a "translation-missing" class set,
|
24
14
|
# * contain the missing key as a title attribute and
|
@@ -44,7 +34,15 @@ module ActionView
|
|
44
34
|
# naming convention helps to identify translations that include HTML tags so that
|
45
35
|
# you know what kind of output to expect when you call translate in a template.
|
46
36
|
def translate(key, options = {})
|
47
|
-
|
37
|
+
# If the user has specified rescue_format then pass it all through, otherwise use
|
38
|
+
# raise and do the work ourselves
|
39
|
+
if options.key?(:raise) || options.key?(:rescue_format)
|
40
|
+
raise_error = options[:raise] || options[:rescue_format]
|
41
|
+
else
|
42
|
+
raise_error = false
|
43
|
+
options[:raise] = true
|
44
|
+
end
|
45
|
+
|
48
46
|
if html_safe_translation_key?(key)
|
49
47
|
html_safe_options = options.dup
|
50
48
|
options.except(*I18n::RESERVED_KEYS).each do |name, value|
|
@@ -58,6 +56,11 @@ module ActionView
|
|
58
56
|
else
|
59
57
|
I18n.translate(scope_key_by_partial(key), options)
|
60
58
|
end
|
59
|
+
rescue I18n::MissingTranslationData => e
|
60
|
+
raise e if raise_error
|
61
|
+
|
62
|
+
keys = I18n.normalize_keys(e.locale, e.key, e.options[:scope])
|
63
|
+
content_tag('span', keys.last.to_s.titleize, :class => 'translation_missing', :title => "translation missing: #{keys.join('.')}")
|
61
64
|
end
|
62
65
|
alias :t :translate
|
63
66
|
|
@@ -62,6 +62,13 @@ module ActionView
|
|
62
62
|
@details_keys = Hash.new
|
63
63
|
|
64
64
|
def self.get(details)
|
65
|
+
if details[:formats]
|
66
|
+
details = details.dup
|
67
|
+
syms = Set.new Mime::SET.symbols
|
68
|
+
details[:formats] = details[:formats].select { |v|
|
69
|
+
syms.include? v
|
70
|
+
}
|
71
|
+
end
|
65
72
|
@details_keys[details] ||= new
|
66
73
|
end
|
67
74
|
|
@@ -120,13 +120,7 @@ module ActionView
|
|
120
120
|
def query(path, details, formats)
|
121
121
|
query = build_query(path, details)
|
122
122
|
|
123
|
-
|
124
|
-
sanitizer = Hash.new { |h,dir| h[dir] = Dir["#{dir}/*"] }
|
125
|
-
|
126
|
-
template_paths = Dir[query].reject { |filename|
|
127
|
-
File.directory?(filename) ||
|
128
|
-
!sanitizer[File.dirname(filename)].include?(filename)
|
129
|
-
}
|
123
|
+
template_paths = find_template_paths query
|
130
124
|
|
131
125
|
template_paths.map { |template|
|
132
126
|
handler, format = extract_handler_and_format(template, formats)
|
@@ -139,6 +133,26 @@ module ActionView
|
|
139
133
|
}
|
140
134
|
end
|
141
135
|
|
136
|
+
if RUBY_VERSION >= '2.2.0'
|
137
|
+
def find_template_paths(query)
|
138
|
+
Dir[query].reject { |filename|
|
139
|
+
File.directory?(filename) ||
|
140
|
+
# deals with case-insensitive file systems.
|
141
|
+
!File.fnmatch(query, filename, File::FNM_EXTGLOB)
|
142
|
+
}
|
143
|
+
end
|
144
|
+
else
|
145
|
+
def find_template_paths(query)
|
146
|
+
# deals with case-insensitive file systems.
|
147
|
+
sanitizer = Hash.new { |h,dir| h[dir] = Dir["#{dir}/*"] }
|
148
|
+
|
149
|
+
Dir[query].reject { |filename|
|
150
|
+
File.directory?(filename) ||
|
151
|
+
!sanitizer[File.dirname(filename)].include?(filename)
|
152
|
+
}
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
142
156
|
# Helper for building query glob string based on resolver's pattern.
|
143
157
|
def build_query(path, details)
|
144
158
|
query = @pattern.dup
|
metadata
CHANGED
@@ -1,162 +1,191 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionpack
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 41
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 2
|
9
|
+
- 19
|
10
|
+
version: 3.2.19
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- David Heinemeier Hansson
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
14
36
|
name: activesupport
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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
|
20
49
|
type: :runtime
|
50
|
+
version_requirements: *id002
|
21
51
|
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 3.2.15
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
52
|
name: activemodel
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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"
|
34
64
|
type: :runtime
|
65
|
+
version_requirements: *id003
|
35
66
|
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 3.2.15
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
67
|
name: rack-cache
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
version: '1.2'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: builder
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
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
|
61
79
|
version: 3.0.0
|
62
80
|
type: :runtime
|
81
|
+
version_requirements: *id004
|
63
82
|
prerelease: false
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
83
|
+
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
|
75
95
|
version: 1.4.5
|
76
96
|
type: :runtime
|
97
|
+
version_requirements: *id005
|
77
98
|
prerelease: false
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
99
|
+
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
|
89
111
|
version: 0.6.1
|
90
112
|
type: :runtime
|
113
|
+
version_requirements: *id006
|
91
114
|
prerelease: false
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
115
|
+
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
|
103
127
|
version: 1.0.4
|
104
128
|
type: :runtime
|
129
|
+
version_requirements: *id007
|
105
130
|
prerelease: false
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
131
|
+
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
|
117
143
|
version: 2.2.1
|
118
144
|
type: :runtime
|
145
|
+
version_requirements: *id008
|
119
146
|
prerelease: false
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
147
|
+
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
|
131
159
|
version: 2.7.0
|
132
160
|
type: :runtime
|
161
|
+
version_requirements: *id009
|
133
162
|
prerelease: false
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
163
|
+
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
|
145
175
|
version: 0.3.29
|
146
176
|
type: :development
|
177
|
+
version_requirements: *id010
|
147
178
|
prerelease: false
|
148
|
-
|
149
|
-
|
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.
|
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.
|
155
181
|
email: david@loudthinking.com
|
156
182
|
executables: []
|
183
|
+
|
157
184
|
extensions: []
|
185
|
+
|
158
186
|
extra_rdoc_files: []
|
159
|
-
|
187
|
+
|
188
|
+
files:
|
160
189
|
- CHANGELOG.md
|
161
190
|
- README.rdoc
|
162
191
|
- MIT-LICENSE
|
@@ -348,29 +377,41 @@ files:
|
|
348
377
|
- lib/sprockets/helpers.rb
|
349
378
|
- lib/sprockets/railtie.rb
|
350
379
|
- lib/sprockets/static_compiler.rb
|
380
|
+
has_rdoc: true
|
351
381
|
homepage: http://www.rubyonrails.org
|
352
|
-
licenses:
|
382
|
+
licenses:
|
353
383
|
- MIT
|
354
|
-
metadata: {}
|
355
384
|
post_install_message:
|
356
385
|
rdoc_options: []
|
357
|
-
|
386
|
+
|
387
|
+
require_paths:
|
358
388
|
- lib
|
359
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
360
|
-
|
389
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
390
|
+
none: false
|
391
|
+
requirements:
|
361
392
|
- - ">="
|
362
|
-
- !ruby/object:Gem::Version
|
393
|
+
- !ruby/object:Gem::Version
|
394
|
+
hash: 57
|
395
|
+
segments:
|
396
|
+
- 1
|
397
|
+
- 8
|
398
|
+
- 7
|
363
399
|
version: 1.8.7
|
364
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
365
|
-
|
400
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
401
|
+
none: false
|
402
|
+
requirements:
|
366
403
|
- - ">="
|
367
|
-
- !ruby/object:Gem::Version
|
368
|
-
|
369
|
-
|
404
|
+
- !ruby/object:Gem::Version
|
405
|
+
hash: 3
|
406
|
+
segments:
|
407
|
+
- 0
|
408
|
+
version: "0"
|
409
|
+
requirements:
|
370
410
|
- none
|
371
411
|
rubyforge_project:
|
372
|
-
rubygems_version:
|
412
|
+
rubygems_version: 1.6.2
|
373
413
|
signing_key:
|
374
|
-
specification_version:
|
414
|
+
specification_version: 3
|
375
415
|
summary: Web-flow and rendering framework putting the VC in MVC (part of Rails).
|
376
416
|
test_files: []
|
417
|
+
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 455d11505ca31532f8570b62dd5a8cb89ec6b6bd
|
4
|
-
data.tar.gz: 3cbb9416fae50fc72fc400dd8b82842b055f0ec1
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: e906230c1d7d55c88ae0e26cd5f9f0e20666bd6e19f93ce25bb51199081e7ebe4ee64b3e423e94eaf6c30429d876488d0a510fe44a6ff5f71275de0a0e8e485f
|
7
|
-
data.tar.gz: c39d68a232d12ef7c6bbbe08166f3d92163c1e9eacc8e314ec1039a8c91f05ab8c252d3a7b7d5a273e3cf626219b64a9801b3ebc8f09fc0ddcb951a49f394710
|