activesupport 4.2.8 → 5.2.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activesupport might be problematic. Click here for more details.

Files changed (256) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +424 -373
  3. data/MIT-LICENSE +2 -2
  4. data/README.rdoc +4 -5
  5. data/lib/active_support/all.rb +5 -3
  6. data/lib/active_support/array_inquirer.rb +48 -0
  7. data/lib/active_support/backtrace_cleaner.rb +7 -5
  8. data/lib/active_support/benchmarkable.rb +6 -4
  9. data/lib/active_support/builder.rb +3 -1
  10. data/lib/active_support/cache/file_store.rb +41 -35
  11. data/lib/active_support/cache/mem_cache_store.rb +91 -91
  12. data/lib/active_support/cache/memory_store.rb +27 -30
  13. data/lib/active_support/cache/null_store.rb +7 -8
  14. data/lib/active_support/cache/redis_cache_store.rb +466 -0
  15. data/lib/active_support/cache/strategy/local_cache.rb +67 -34
  16. data/lib/active_support/cache/strategy/local_cache_middleware.rb +10 -9
  17. data/lib/active_support/cache.rb +287 -196
  18. data/lib/active_support/callbacks.rb +640 -590
  19. data/lib/active_support/concern.rb +11 -5
  20. data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +17 -0
  21. data/lib/active_support/concurrency/share_lock.rb +227 -0
  22. data/lib/active_support/configurable.rb +8 -5
  23. data/lib/active_support/core_ext/array/access.rb +29 -1
  24. data/lib/active_support/core_ext/array/conversions.rb +22 -18
  25. data/lib/active_support/core_ext/array/extract_options.rb +2 -0
  26. data/lib/active_support/core_ext/array/grouping.rb +11 -18
  27. data/lib/active_support/core_ext/array/inquiry.rb +19 -0
  28. data/lib/active_support/core_ext/array/prepend_and_append.rb +5 -3
  29. data/lib/active_support/core_ext/array/wrap.rb +7 -4
  30. data/lib/active_support/core_ext/array.rb +9 -6
  31. data/lib/active_support/core_ext/benchmark.rb +3 -1
  32. data/lib/active_support/core_ext/big_decimal/conversions.rb +10 -12
  33. data/lib/active_support/core_ext/big_decimal.rb +3 -1
  34. data/lib/active_support/core_ext/class/attribute.rb +41 -22
  35. data/lib/active_support/core_ext/class/attribute_accessors.rb +3 -1
  36. data/lib/active_support/core_ext/class/subclasses.rb +20 -6
  37. data/lib/active_support/core_ext/class.rb +4 -3
  38. data/lib/active_support/core_ext/date/acts_like.rb +3 -1
  39. data/lib/active_support/core_ext/date/blank.rb +14 -0
  40. data/lib/active_support/core_ext/date/calculations.rb +11 -9
  41. data/lib/active_support/core_ext/date/conversions.rb +25 -23
  42. data/lib/active_support/core_ext/date/zones.rb +4 -2
  43. data/lib/active_support/core_ext/date.rb +6 -4
  44. data/lib/active_support/core_ext/date_and_time/calculations.rb +170 -58
  45. data/lib/active_support/core_ext/date_and_time/compatibility.rb +4 -17
  46. data/lib/active_support/core_ext/date_and_time/zones.rb +12 -12
  47. data/lib/active_support/core_ext/date_time/acts_like.rb +4 -2
  48. data/lib/active_support/core_ext/date_time/blank.rb +14 -0
  49. data/lib/active_support/core_ext/date_time/calculations.rb +29 -16
  50. data/lib/active_support/core_ext/date_time/compatibility.rb +14 -1
  51. data/lib/active_support/core_ext/date_time/conversions.rb +16 -12
  52. data/lib/active_support/core_ext/date_time.rb +7 -5
  53. data/lib/active_support/core_ext/digest/uuid.rb +7 -5
  54. data/lib/active_support/core_ext/digest.rb +3 -0
  55. data/lib/active_support/core_ext/enumerable.rb +101 -33
  56. data/lib/active_support/core_ext/file/atomic.rb +38 -31
  57. data/lib/active_support/core_ext/file.rb +3 -1
  58. data/lib/active_support/core_ext/hash/compact.rb +14 -9
  59. data/lib/active_support/core_ext/hash/conversions.rb +62 -41
  60. data/lib/active_support/core_ext/hash/deep_merge.rb +9 -13
  61. data/lib/active_support/core_ext/hash/except.rb +11 -8
  62. data/lib/active_support/core_ext/hash/indifferent_access.rb +4 -3
  63. data/lib/active_support/core_ext/hash/keys.rb +33 -27
  64. data/lib/active_support/core_ext/hash/reverse_merge.rb +5 -2
  65. data/lib/active_support/core_ext/hash/slice.rb +8 -8
  66. data/lib/active_support/core_ext/hash/transform_values.rb +14 -5
  67. data/lib/active_support/core_ext/hash.rb +11 -9
  68. data/lib/active_support/core_ext/integer/inflections.rb +3 -1
  69. data/lib/active_support/core_ext/integer/multiple.rb +2 -0
  70. data/lib/active_support/core_ext/integer/time.rb +11 -18
  71. data/lib/active_support/core_ext/integer.rb +5 -3
  72. data/lib/active_support/core_ext/kernel/agnostics.rb +2 -0
  73. data/lib/active_support/core_ext/kernel/concern.rb +5 -1
  74. data/lib/active_support/core_ext/kernel/reporting.rb +4 -84
  75. data/lib/active_support/core_ext/kernel/singleton_class.rb +2 -0
  76. data/lib/active_support/core_ext/kernel.rb +6 -5
  77. data/lib/active_support/core_ext/load_error.rb +3 -22
  78. data/lib/active_support/core_ext/marshal.rb +8 -8
  79. data/lib/active_support/core_ext/module/aliasing.rb +6 -44
  80. data/lib/active_support/core_ext/module/anonymous.rb +12 -1
  81. data/lib/active_support/core_ext/module/attr_internal.rb +8 -9
  82. data/lib/active_support/core_ext/module/attribute_accessors.rb +43 -40
  83. data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +150 -0
  84. data/lib/active_support/core_ext/module/concerning.rb +11 -12
  85. data/lib/active_support/core_ext/module/delegation.rb +99 -29
  86. data/lib/active_support/core_ext/module/deprecation.rb +4 -2
  87. data/lib/active_support/core_ext/module/introspection.rb +9 -9
  88. data/lib/active_support/core_ext/module/reachable.rb +5 -2
  89. data/lib/active_support/core_ext/module/redefine_method.rb +49 -0
  90. data/lib/active_support/core_ext/module/remove_method.rb +8 -3
  91. data/lib/active_support/core_ext/module.rb +14 -11
  92. data/lib/active_support/core_ext/name_error.rb +22 -2
  93. data/lib/active_support/core_ext/numeric/bytes.rb +22 -0
  94. data/lib/active_support/core_ext/numeric/conversions.rb +78 -81
  95. data/lib/active_support/core_ext/numeric/inquiry.rb +28 -0
  96. data/lib/active_support/core_ext/numeric/time.rb +35 -23
  97. data/lib/active_support/core_ext/numeric.rb +6 -3
  98. data/lib/active_support/core_ext/object/acts_like.rb +12 -1
  99. data/lib/active_support/core_ext/object/blank.rb +27 -2
  100. data/lib/active_support/core_ext/object/conversions.rb +6 -4
  101. data/lib/active_support/core_ext/object/deep_dup.rb +13 -4
  102. data/lib/active_support/core_ext/object/duplicable.rb +41 -14
  103. data/lib/active_support/core_ext/object/inclusion.rb +5 -3
  104. data/lib/active_support/core_ext/object/instance_variables.rb +3 -1
  105. data/lib/active_support/core_ext/object/json.rb +49 -19
  106. data/lib/active_support/core_ext/object/to_param.rb +3 -1
  107. data/lib/active_support/core_ext/object/to_query.rb +10 -5
  108. data/lib/active_support/core_ext/object/try.rb +69 -21
  109. data/lib/active_support/core_ext/object/with_options.rb +16 -3
  110. data/lib/active_support/core_ext/object.rb +14 -13
  111. data/lib/active_support/core_ext/range/compare_range.rb +61 -0
  112. data/lib/active_support/core_ext/range/conversions.rb +27 -7
  113. data/lib/active_support/core_ext/range/each.rb +19 -17
  114. data/lib/active_support/core_ext/range/include_range.rb +2 -22
  115. data/lib/active_support/core_ext/range/include_time_with_zone.rb +23 -0
  116. data/lib/active_support/core_ext/range/overlaps.rb +2 -0
  117. data/lib/active_support/core_ext/range.rb +7 -4
  118. data/lib/active_support/core_ext/regexp.rb +6 -0
  119. data/lib/active_support/core_ext/securerandom.rb +25 -0
  120. data/lib/active_support/core_ext/string/access.rb +8 -6
  121. data/lib/active_support/core_ext/string/behavior.rb +3 -1
  122. data/lib/active_support/core_ext/string/conversions.rb +7 -4
  123. data/lib/active_support/core_ext/string/exclude.rb +2 -0
  124. data/lib/active_support/core_ext/string/filters.rb +6 -5
  125. data/lib/active_support/core_ext/string/indent.rb +6 -4
  126. data/lib/active_support/core_ext/string/inflections.rb +61 -24
  127. data/lib/active_support/core_ext/string/inquiry.rb +3 -1
  128. data/lib/active_support/core_ext/string/multibyte.rb +15 -7
  129. data/lib/active_support/core_ext/string/output_safety.rb +34 -38
  130. data/lib/active_support/core_ext/string/starts_ends_with.rb +2 -0
  131. data/lib/active_support/core_ext/string/strip.rb +4 -5
  132. data/lib/active_support/core_ext/string/zones.rb +4 -2
  133. data/lib/active_support/core_ext/string.rb +15 -13
  134. data/lib/active_support/core_ext/time/acts_like.rb +3 -1
  135. data/lib/active_support/core_ext/time/calculations.rb +88 -52
  136. data/lib/active_support/core_ext/time/compatibility.rb +12 -1
  137. data/lib/active_support/core_ext/time/conversions.rb +20 -13
  138. data/lib/active_support/core_ext/time/zones.rb +41 -7
  139. data/lib/active_support/core_ext/time.rb +7 -6
  140. data/lib/active_support/core_ext/uri.rb +6 -8
  141. data/lib/active_support/core_ext.rb +3 -1
  142. data/lib/active_support/current_attributes.rb +195 -0
  143. data/lib/active_support/dependencies/autoload.rb +2 -0
  144. data/lib/active_support/dependencies/interlock.rb +57 -0
  145. data/lib/active_support/dependencies.rb +152 -161
  146. data/lib/active_support/deprecation/behaviors.rb +44 -11
  147. data/lib/active_support/deprecation/constant_accessor.rb +52 -0
  148. data/lib/active_support/deprecation/instance_delegator.rb +17 -2
  149. data/lib/active_support/deprecation/method_wrappers.rb +66 -20
  150. data/lib/active_support/deprecation/proxy_wrappers.rb +56 -28
  151. data/lib/active_support/deprecation/reporting.rb +32 -12
  152. data/lib/active_support/deprecation.rb +12 -9
  153. data/lib/active_support/descendants_tracker.rb +2 -0
  154. data/lib/active_support/digest.rb +20 -0
  155. data/lib/active_support/duration/iso8601_parser.rb +125 -0
  156. data/lib/active_support/duration/iso8601_serializer.rb +55 -0
  157. data/lib/active_support/duration.rb +314 -38
  158. data/lib/active_support/encrypted_configuration.rb +49 -0
  159. data/lib/active_support/encrypted_file.rb +99 -0
  160. data/lib/active_support/evented_file_update_checker.rb +205 -0
  161. data/lib/active_support/execution_wrapper.rb +128 -0
  162. data/lib/active_support/executor.rb +8 -0
  163. data/lib/active_support/file_update_checker.rb +63 -37
  164. data/lib/active_support/gem_version.rb +5 -3
  165. data/lib/active_support/gzip.rb +7 -5
  166. data/lib/active_support/hash_with_indifferent_access.rb +127 -28
  167. data/lib/active_support/i18n.rb +8 -6
  168. data/lib/active_support/i18n_railtie.rb +37 -13
  169. data/lib/active_support/inflections.rb +13 -11
  170. data/lib/active_support/inflector/inflections.rb +61 -12
  171. data/lib/active_support/inflector/methods.rb +163 -136
  172. data/lib/active_support/inflector/transliterate.rb +48 -27
  173. data/lib/active_support/inflector.rb +7 -5
  174. data/lib/active_support/json/decoding.rb +16 -13
  175. data/lib/active_support/json/encoding.rb +11 -58
  176. data/lib/active_support/json.rb +4 -2
  177. data/lib/active_support/key_generator.rb +25 -25
  178. data/lib/active_support/lazy_load_hooks.rb +50 -20
  179. data/lib/active_support/locale/en.yml +2 -0
  180. data/lib/active_support/log_subscriber/test_helper.rb +14 -12
  181. data/lib/active_support/log_subscriber.rb +13 -10
  182. data/lib/active_support/logger.rb +19 -7
  183. data/lib/active_support/logger_silence.rb +6 -4
  184. data/lib/active_support/logger_thread_safe_level.rb +7 -5
  185. data/lib/active_support/message_encryptor.rb +168 -53
  186. data/lib/active_support/message_verifier.rb +150 -17
  187. data/lib/active_support/messages/metadata.rb +71 -0
  188. data/lib/active_support/messages/rotation_configuration.rb +22 -0
  189. data/lib/active_support/messages/rotator.rb +56 -0
  190. data/lib/active_support/multibyte/chars.rb +36 -23
  191. data/lib/active_support/multibyte/unicode.rb +100 -96
  192. data/lib/active_support/multibyte.rb +4 -2
  193. data/lib/active_support/notifications/fanout.rb +11 -9
  194. data/lib/active_support/notifications/instrumenter.rb +27 -7
  195. data/lib/active_support/notifications.rb +11 -7
  196. data/lib/active_support/number_helper/number_converter.rb +13 -11
  197. data/lib/active_support/number_helper/number_to_currency_converter.rb +9 -9
  198. data/lib/active_support/number_helper/number_to_delimited_converter.rb +9 -3
  199. data/lib/active_support/number_helper/number_to_human_converter.rb +11 -9
  200. data/lib/active_support/number_helper/number_to_human_size_converter.rb +9 -8
  201. data/lib/active_support/number_helper/number_to_percentage_converter.rb +3 -1
  202. data/lib/active_support/number_helper/number_to_phone_converter.rb +13 -4
  203. data/lib/active_support/number_helper/number_to_rounded_converter.rb +23 -56
  204. data/lib/active_support/number_helper/rounding_helper.rb +66 -0
  205. data/lib/active_support/number_helper.rb +94 -68
  206. data/lib/active_support/option_merger.rb +3 -1
  207. data/lib/active_support/ordered_hash.rb +6 -4
  208. data/lib/active_support/ordered_options.rb +23 -5
  209. data/lib/active_support/per_thread_registry.rb +9 -4
  210. data/lib/active_support/proxy_object.rb +2 -0
  211. data/lib/active_support/rails.rb +16 -8
  212. data/lib/active_support/railtie.rb +43 -9
  213. data/lib/active_support/reloader.rb +131 -0
  214. data/lib/active_support/rescuable.rb +108 -53
  215. data/lib/active_support/security_utils.rb +15 -11
  216. data/lib/active_support/string_inquirer.rb +11 -3
  217. data/lib/active_support/subscriber.rb +21 -16
  218. data/lib/active_support/tagged_logging.rb +14 -11
  219. data/lib/active_support/test_case.rb +19 -47
  220. data/lib/active_support/testing/assertions.rb +137 -20
  221. data/lib/active_support/testing/autorun.rb +4 -2
  222. data/lib/active_support/testing/constant_lookup.rb +2 -1
  223. data/lib/active_support/testing/declarative.rb +3 -1
  224. data/lib/active_support/testing/deprecation.rb +14 -10
  225. data/lib/active_support/testing/file_fixtures.rb +36 -0
  226. data/lib/active_support/testing/isolation.rb +34 -25
  227. data/lib/active_support/testing/method_call_assertions.rb +43 -0
  228. data/lib/active_support/testing/setup_and_teardown.rb +13 -8
  229. data/lib/active_support/testing/stream.rb +44 -0
  230. data/lib/active_support/testing/tagged_logging.rb +3 -1
  231. data/lib/active_support/testing/time_helpers.rb +91 -23
  232. data/lib/active_support/time.rb +14 -12
  233. data/lib/active_support/time_with_zone.rb +182 -40
  234. data/lib/active_support/values/time_zone.rb +196 -61
  235. data/lib/active_support/values/unicode_tables.dat +0 -0
  236. data/lib/active_support/version.rb +3 -1
  237. data/lib/active_support/xml_mini/jdom.rb +116 -114
  238. data/lib/active_support/xml_mini/libxml.rb +17 -16
  239. data/lib/active_support/xml_mini/libxmlsax.rb +16 -18
  240. data/lib/active_support/xml_mini/nokogiri.rb +15 -15
  241. data/lib/active_support/xml_mini/nokogirisax.rb +15 -16
  242. data/lib/active_support/xml_mini/rexml.rb +11 -9
  243. data/lib/active_support/xml_mini.rb +37 -37
  244. data/lib/active_support.rb +12 -11
  245. metadata +54 -25
  246. data/lib/active_support/concurrency/latch.rb +0 -27
  247. data/lib/active_support/core_ext/big_decimal/yaml_conversions.rb +0 -16
  248. data/lib/active_support/core_ext/class/delegating_attributes.rb +0 -45
  249. data/lib/active_support/core_ext/date_time/zones.rb +0 -6
  250. data/lib/active_support/core_ext/kernel/debugger.rb +0 -10
  251. data/lib/active_support/core_ext/module/method_transplanting.rb +0 -13
  252. data/lib/active_support/core_ext/module/qualified_const.rb +0 -52
  253. data/lib/active_support/core_ext/object/itself.rb +0 -15
  254. data/lib/active_support/core_ext/struct.rb +0 -6
  255. data/lib/active_support/core_ext/thread.rb +0 -86
  256. data/lib/active_support/core_ext/time/marshal.rb +0 -30
@@ -1,6 +1,8 @@
1
- require 'libxml'
2
- require 'active_support/core_ext/object/blank'
3
- require 'stringio'
1
+ # frozen_string_literal: true
2
+
3
+ require "libxml"
4
+ require "active_support/core_ext/object/blank"
5
+ require "stringio"
4
6
 
5
7
  module ActiveSupport
6
8
  module XmlMini_LibXML #:nodoc:
@@ -11,18 +13,15 @@ module ActiveSupport
11
13
  # XML Document string or IO to parse
12
14
  def parse(data)
13
15
  if !data.respond_to?(:read)
14
- data = StringIO.new(data || '')
16
+ data = StringIO.new(data || "")
15
17
  end
16
18
 
17
- char = data.getc
18
- if char.nil?
19
+ if data.eof?
19
20
  {}
20
21
  else
21
- data.ungetc(char)
22
22
  LibXML::XML::Parser.io(data).parse.to_hash
23
23
  end
24
24
  end
25
-
26
25
  end
27
26
  end
28
27
 
@@ -35,20 +34,20 @@ module LibXML #:nodoc:
35
34
  end
36
35
 
37
36
  module Node #:nodoc:
38
- CONTENT_ROOT = '__content__'.freeze
37
+ CONTENT_ROOT = "__content__".freeze
39
38
 
40
39
  # Convert XML document to hash.
41
40
  #
42
41
  # hash::
43
42
  # Hash to merge the converted element into.
44
- def to_hash(hash={})
43
+ def to_hash(hash = {})
45
44
  node_hash = {}
46
45
 
47
46
  # Insert node hash into parent hash correctly.
48
47
  case hash[name]
49
- when Array then hash[name] << node_hash
50
- when Hash then hash[name] = [hash[name], node_hash]
51
- when nil then hash[name] = node_hash
48
+ when Array then hash[name] << node_hash
49
+ when Hash then hash[name] = [hash[name], node_hash]
50
+ when nil then hash[name] = node_hash
52
51
  end
53
52
 
54
53
  # Handle child elements
@@ -56,7 +55,7 @@ module LibXML #:nodoc:
56
55
  if c.element?
57
56
  c.to_hash(node_hash)
58
57
  elsif c.text? || c.cdata?
59
- node_hash[CONTENT_ROOT] ||= ''
58
+ node_hash[CONTENT_ROOT] ||= "".dup
60
59
  node_hash[CONTENT_ROOT] << c.content
61
60
  end
62
61
  end
@@ -75,5 +74,7 @@ module LibXML #:nodoc:
75
74
  end
76
75
  end
77
76
 
78
- LibXML::XML::Document.send(:include, LibXML::Conversions::Document)
79
- LibXML::XML::Node.send(:include, LibXML::Conversions::Node)
77
+ # :enddoc:
78
+
79
+ LibXML::XML::Document.include(LibXML::Conversions::Document)
80
+ LibXML::XML::Node.include(LibXML::Conversions::Node)
@@ -1,6 +1,8 @@
1
- require 'libxml'
2
- require 'active_support/core_ext/object/blank'
3
- require 'stringio'
1
+ # frozen_string_literal: true
2
+
3
+ require "libxml"
4
+ require "active_support/core_ext/object/blank"
5
+ require "stringio"
4
6
 
5
7
  module ActiveSupport
6
8
  module XmlMini_LibXMLSAX #:nodoc:
@@ -9,11 +11,10 @@ module ActiveSupport
9
11
  # Class that will build the hash while the XML document
10
12
  # is being parsed using SAX events.
11
13
  class HashBuilder
12
-
13
14
  include LibXML::XML::SaxParser::Callbacks
14
15
 
15
- CONTENT_KEY = '__content__'.freeze
16
- HASH_SIZE_KEY = '__hash_size__'.freeze
16
+ CONTENT_KEY = "__content__".freeze
17
+ HASH_SIZE_KEY = "__hash_size__".freeze
17
18
 
18
19
  attr_reader :hash
19
20
 
@@ -22,7 +23,7 @@ module ActiveSupport
22
23
  end
23
24
 
24
25
  def on_start_document
25
- @hash = { CONTENT_KEY => '' }
26
+ @hash = { CONTENT_KEY => "".dup }
26
27
  @hash_stack = [@hash]
27
28
  end
28
29
 
@@ -32,20 +33,20 @@ module ActiveSupport
32
33
  end
33
34
 
34
35
  def on_start_element(name, attrs = {})
35
- new_hash = { CONTENT_KEY => '' }.merge!(attrs)
36
+ new_hash = { CONTENT_KEY => "".dup }.merge!(attrs)
36
37
  new_hash[HASH_SIZE_KEY] = new_hash.size + 1
37
38
 
38
39
  case current_hash[name]
39
- when Array then current_hash[name] << new_hash
40
- when Hash then current_hash[name] = [current_hash[name], new_hash]
41
- when nil then current_hash[name] = new_hash
40
+ when Array then current_hash[name] << new_hash
41
+ when Hash then current_hash[name] = [current_hash[name], new_hash]
42
+ when nil then current_hash[name] = new_hash
42
43
  end
43
44
 
44
45
  @hash_stack.push(new_hash)
45
46
  end
46
47
 
47
48
  def on_end_element(name)
48
- if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == ''
49
+ if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == ""
49
50
  current_hash.delete(CONTENT_KEY)
50
51
  end
51
52
  @hash_stack.pop
@@ -63,18 +64,15 @@ module ActiveSupport
63
64
 
64
65
  def parse(data)
65
66
  if !data.respond_to?(:read)
66
- data = StringIO.new(data || '')
67
+ data = StringIO.new(data || "")
67
68
  end
68
69
 
69
- char = data.getc
70
- if char.nil?
70
+ if data.eof?
71
71
  {}
72
72
  else
73
- data.ungetc(char)
74
-
75
73
  LibXML::XML::Error.set_handler(&LibXML::XML::Error::QUIET_HANDLER)
76
74
  parser = LibXML::XML::SaxParser.io(data)
77
- document = self.document_class.new
75
+ document = document_class.new
78
76
 
79
77
  parser.callbacks = document
80
78
  parser.parse
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  begin
2
- require 'nokogiri'
4
+ require "nokogiri"
3
5
  rescue LoadError => e
4
6
  $stderr.puts "You don't have nokogiri installed in your application. Please add it to your Gemfile and run bundle install"
5
7
  raise e
6
8
  end
7
- require 'active_support/core_ext/object/blank'
8
- require 'stringio'
9
+ require "active_support/core_ext/object/blank"
10
+ require "stringio"
9
11
 
10
12
  module ActiveSupport
11
13
  module XmlMini_Nokogiri #:nodoc:
@@ -16,14 +18,12 @@ module ActiveSupport
16
18
  # XML Document string or IO to parse
17
19
  def parse(data)
18
20
  if !data.respond_to?(:read)
19
- data = StringIO.new(data || '')
21
+ data = StringIO.new(data || "")
20
22
  end
21
23
 
22
- char = data.getc
23
- if char.nil?
24
+ if data.eof?
24
25
  {}
25
26
  else
26
- data.ungetc(char)
27
27
  doc = Nokogiri::XML(data)
28
28
  raise doc.errors.first if doc.errors.length > 0
29
29
  doc.to_hash
@@ -38,20 +38,20 @@ module ActiveSupport
38
38
  end
39
39
 
40
40
  module Node #:nodoc:
41
- CONTENT_ROOT = '__content__'.freeze
41
+ CONTENT_ROOT = "__content__".freeze
42
42
 
43
43
  # Convert XML document to hash.
44
44
  #
45
45
  # hash::
46
46
  # Hash to merge the converted element into.
47
- def to_hash(hash={})
47
+ def to_hash(hash = {})
48
48
  node_hash = {}
49
49
 
50
50
  # Insert node hash into parent hash correctly.
51
51
  case hash[name]
52
- when Array then hash[name] << node_hash
53
- when Hash then hash[name] = [hash[name], node_hash]
54
- when nil then hash[name] = node_hash
52
+ when Array then hash[name] << node_hash
53
+ when Hash then hash[name] = [hash[name], node_hash]
54
+ when nil then hash[name] = node_hash
55
55
  end
56
56
 
57
57
  # Handle child elements
@@ -59,7 +59,7 @@ module ActiveSupport
59
59
  if c.element?
60
60
  c.to_hash(node_hash)
61
61
  elsif c.text? || c.cdata?
62
- node_hash[CONTENT_ROOT] ||= ''
62
+ node_hash[CONTENT_ROOT] ||= "".dup
63
63
  node_hash[CONTENT_ROOT] << c.content
64
64
  end
65
65
  end
@@ -77,7 +77,7 @@ module ActiveSupport
77
77
  end
78
78
  end
79
79
 
80
- Nokogiri::XML::Document.send(:include, Conversions::Document)
81
- Nokogiri::XML::Node.send(:include, Conversions::Node)
80
+ Nokogiri::XML::Document.include(Conversions::Document)
81
+ Nokogiri::XML::Node.include(Conversions::Node)
82
82
  end
83
83
  end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  begin
2
- require 'nokogiri'
4
+ require "nokogiri"
3
5
  rescue LoadError => e
4
6
  $stderr.puts "You don't have nokogiri installed in your application. Please add it to your Gemfile and run bundle install"
5
7
  raise e
6
8
  end
7
- require 'active_support/core_ext/object/blank'
8
- require 'stringio'
9
+ require "active_support/core_ext/object/blank"
10
+ require "stringio"
9
11
 
10
12
  module ActiveSupport
11
13
  module XmlMini_NokogiriSAX #:nodoc:
@@ -14,9 +16,8 @@ module ActiveSupport
14
16
  # Class that will build the hash while the XML document
15
17
  # is being parsed using SAX events.
16
18
  class HashBuilder < Nokogiri::XML::SAX::Document
17
-
18
- CONTENT_KEY = '__content__'.freeze
19
- HASH_SIZE_KEY = '__hash_size__'.freeze
19
+ CONTENT_KEY = "__content__".freeze
20
+ HASH_SIZE_KEY = "__hash_size__".freeze
20
21
 
21
22
  attr_reader :hash
22
23
 
@@ -38,20 +39,20 @@ module ActiveSupport
38
39
  end
39
40
 
40
41
  def start_element(name, attrs = [])
41
- new_hash = { CONTENT_KEY => '' }.merge!(Hash[attrs])
42
+ new_hash = { CONTENT_KEY => "".dup }.merge!(Hash[attrs])
42
43
  new_hash[HASH_SIZE_KEY] = new_hash.size + 1
43
44
 
44
45
  case current_hash[name]
45
- when Array then current_hash[name] << new_hash
46
- when Hash then current_hash[name] = [current_hash[name], new_hash]
47
- when nil then current_hash[name] = new_hash
46
+ when Array then current_hash[name] << new_hash
47
+ when Hash then current_hash[name] = [current_hash[name], new_hash]
48
+ when nil then current_hash[name] = new_hash
48
49
  end
49
50
 
50
51
  @hash_stack.push(new_hash)
51
52
  end
52
53
 
53
54
  def end_element(name)
54
- if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == ''
55
+ if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == ""
55
56
  current_hash.delete(CONTENT_KEY)
56
57
  end
57
58
  @hash_stack.pop
@@ -69,15 +70,13 @@ module ActiveSupport
69
70
 
70
71
  def parse(data)
71
72
  if !data.respond_to?(:read)
72
- data = StringIO.new(data || '')
73
+ data = StringIO.new(data || "")
73
74
  end
74
75
 
75
- char = data.getc
76
- if char.nil?
76
+ if data.eof?
77
77
  {}
78
78
  else
79
- data.ungetc(char)
80
- document = self.document_class.new
79
+ document = document_class.new
81
80
  parser = Nokogiri::XML::SAX::Parser.new(document)
82
81
  parser.parse(data)
83
82
  document.hash
@@ -1,12 +1,14 @@
1
- require 'active_support/core_ext/kernel/reporting'
2
- require 'active_support/core_ext/object/blank'
3
- require 'stringio'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/kernel/reporting"
4
+ require "active_support/core_ext/object/blank"
5
+ require "stringio"
4
6
 
5
7
  module ActiveSupport
6
8
  module XmlMini_REXML #:nodoc:
7
9
  extend self
8
10
 
9
- CONTENT_KEY = '__content__'.freeze
11
+ CONTENT_KEY = "__content__".freeze
10
12
 
11
13
  # Parse an XML Document string or IO into a simple hash.
12
14
  #
@@ -17,13 +19,13 @@ module ActiveSupport
17
19
  # XML Document string or IO to parse
18
20
  def parse(data)
19
21
  if !data.respond_to?(:read)
20
- data = StringIO.new(data || '')
22
+ data = StringIO.new(data || "")
21
23
  end
22
24
 
23
25
  if data.eof?
24
26
  {}
25
27
  else
26
- silence_warnings { require 'rexml/document' } unless defined?(REXML::Document)
28
+ silence_warnings { require "rexml/document" } unless defined?(REXML::Document)
27
29
  doc = REXML::Document.new(data)
28
30
 
29
31
  if doc.root
@@ -55,7 +57,7 @@ module ActiveSupport
55
57
  hash = get_attributes(element)
56
58
 
57
59
  if element.has_elements?
58
- element.each_element {|child| merge_element!(hash, child, depth - 1) }
60
+ element.each_element { |child| merge_element!(hash, child, depth - 1) }
59
61
  merge_texts!(hash, element) unless empty_content?(element)
60
62
  hash
61
63
  else
@@ -74,7 +76,7 @@ module ActiveSupport
74
76
  hash
75
77
  else
76
78
  # must use value to prevent double-escaping
77
- texts = ''
79
+ texts = "".dup
78
80
  element.texts.each { |t| texts << t.value }
79
81
  merge!(hash, CONTENT_KEY, texts)
80
82
  end
@@ -113,7 +115,7 @@ module ActiveSupport
113
115
  # XML element to extract attributes from.
114
116
  def get_attributes(element)
115
117
  attributes = {}
116
- element.attributes.each { |n,v| attributes[n] = v }
118
+ element.attributes.each { |n, v| attributes[n] = v }
117
119
  attributes
118
120
  end
119
121
 
@@ -1,9 +1,11 @@
1
- require 'time'
2
- require 'base64'
3
- require 'bigdecimal'
4
- require 'active_support/core_ext/module/delegation'
5
- require 'active_support/core_ext/string/inflections'
6
- require 'active_support/core_ext/date_time/calculations'
1
+ # frozen_string_literal: true
2
+
3
+ require "time"
4
+ require "base64"
5
+ require "bigdecimal"
6
+ require "active_support/core_ext/module/delegation"
7
+ require "active_support/core_ext/string/inflections"
8
+ require "active_support/core_ext/date_time/calculations"
7
9
 
8
10
  module ActiveSupport
9
11
  # = XmlMini
@@ -20,11 +22,11 @@ module ActiveSupport
20
22
  attr_writer :original_filename, :content_type
21
23
 
22
24
  def original_filename
23
- @original_filename || 'untitled'
25
+ @original_filename || "untitled"
24
26
  end
25
27
 
26
28
  def content_type
27
- @content_type || 'application/octet-stream'
29
+ @content_type || "application/octet-stream"
28
30
  end
29
31
  end
30
32
 
@@ -73,7 +75,7 @@ module ActiveSupport
73
75
  begin
74
76
  BigDecimal(number)
75
77
  rescue ArgumentError
76
- BigDecimal('0')
78
+ BigDecimal(number.to_f.to_s)
77
79
  end
78
80
  else
79
81
  BigDecimal(number)
@@ -81,7 +83,7 @@ module ActiveSupport
81
83
  end,
82
84
  "boolean" => Proc.new { |boolean| %w(1 true).include?(boolean.to_s.strip) },
83
85
  "string" => Proc.new { |string| string.to_s },
84
- "yaml" => Proc.new { |yaml| YAML::load(yaml) rescue yaml },
86
+ "yaml" => Proc.new { |yaml| YAML.load(yaml) rescue yaml },
85
87
  "base64Binary" => Proc.new { |bin| ::Base64.decode64(bin) },
86
88
  "binary" => Proc.new { |bin, entity| _parse_binary(bin, entity) },
87
89
  "file" => Proc.new { |file, entity| _parse_file(file, entity) }
@@ -96,7 +98,7 @@ module ActiveSupport
96
98
  attr_accessor :depth
97
99
  self.depth = 100
98
100
 
99
- delegate :parse, :to => :backend
101
+ delegate :parse, to: :backend
100
102
 
101
103
  def backend
102
104
  current_thread_backend || @backend
@@ -118,7 +120,7 @@ module ActiveSupport
118
120
 
119
121
  def to_tag(key, value, options)
120
122
  type_name = options.delete(:type)
121
- merged_options = options.merge(:root => key, :skip_instruct => true)
123
+ merged_options = options.merge(root: key, skip_instruct: true)
122
124
 
123
125
  if value.is_a?(::Method) || value.is_a?(::Proc)
124
126
  if value.arity == 1
@@ -136,7 +138,7 @@ module ActiveSupport
136
138
 
137
139
  key = rename_key(key.to_s, options)
138
140
 
139
- attributes = options[:skip_types] || type_name.nil? ? { } : { :type => type_name }
141
+ attributes = options[:skip_types] || type_name.nil? ? {} : { type: type_name }
140
142
  attributes[:nil] = true if value.nil?
141
143
 
142
144
  encoding = options[:encoding] || DEFAULT_ENCODINGS[type_name]
@@ -159,33 +161,31 @@ module ActiveSupport
159
161
  key
160
162
  end
161
163
 
162
- protected
163
-
164
- def _dasherize(key)
165
- # $2 must be a non-greedy regex for this to work
166
- left, middle, right = /\A(_*)(.*?)(_*)\Z/.match(key.strip)[1,3]
167
- "#{left}#{middle.tr('_ ', '--')}#{right}"
168
- end
164
+ private
169
165
 
170
- # TODO: Add support for other encodings
171
- def _parse_binary(bin, entity) #:nodoc:
172
- case entity['encoding']
173
- when 'base64'
174
- ::Base64.decode64(bin)
175
- else
176
- bin
166
+ def _dasherize(key)
167
+ # $2 must be a non-greedy regex for this to work
168
+ left, middle, right = /\A(_*)(.*?)(_*)\Z/.match(key.strip)[1, 3]
169
+ "#{left}#{middle.tr('_ ', '--')}#{right}"
177
170
  end
178
- end
179
171
 
180
- def _parse_file(file, entity)
181
- f = StringIO.new(::Base64.decode64(file))
182
- f.extend(FileLike)
183
- f.original_filename = entity['name']
184
- f.content_type = entity['content_type']
185
- f
186
- end
172
+ # TODO: Add support for other encodings
173
+ def _parse_binary(bin, entity)
174
+ case entity["encoding"]
175
+ when "base64"
176
+ ::Base64.decode64(bin)
177
+ else
178
+ bin
179
+ end
180
+ end
187
181
 
188
- private
182
+ def _parse_file(file, entity)
183
+ f = StringIO.new(::Base64.decode64(file))
184
+ f.extend(FileLike)
185
+ f.original_filename = entity["name"]
186
+ f.content_type = entity["content_type"]
187
+ f
188
+ end
189
189
 
190
190
  def current_thread_backend
191
191
  Thread.current[:xml_mini_backend]
@@ -205,5 +205,5 @@ module ActiveSupport
205
205
  end
206
206
  end
207
207
 
208
- XmlMini.backend = 'REXML'
208
+ XmlMini.backend = "REXML"
209
209
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
- # Copyright (c) 2005-2014 David Heinemeier Hansson
4
+ # Copyright (c) 2005-2018 David Heinemeier Hansson
3
5
  #
4
6
  # Permission is hereby granted, free of charge, to any person obtaining
5
7
  # a copy of this software and associated documentation files (the
@@ -21,7 +23,7 @@
21
23
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
24
  #++
23
25
 
24
- require 'securerandom'
26
+ require "securerandom"
25
27
  require "active_support/dependencies/autoload"
26
28
  require "active_support/version"
27
29
  require "active_support/logger"
@@ -32,11 +34,16 @@ module ActiveSupport
32
34
  extend ActiveSupport::Autoload
33
35
 
34
36
  autoload :Concern
37
+ autoload :CurrentAttributes
35
38
  autoload :Dependencies
36
39
  autoload :DescendantsTracker
40
+ autoload :ExecutionWrapper
41
+ autoload :Executor
37
42
  autoload :FileUpdateChecker
43
+ autoload :EventedFileUpdateChecker
38
44
  autoload :LogSubscriber
39
45
  autoload :Notifications
46
+ autoload :Reloader
40
47
 
41
48
  eager_autoload do
42
49
  autoload :BacktraceCleaner
@@ -46,6 +53,7 @@ module ActiveSupport
46
53
  autoload :Callbacks
47
54
  autoload :Configurable
48
55
  autoload :Deprecation
56
+ autoload :Digest
49
57
  autoload :Gzip
50
58
  autoload :Inflector
51
59
  autoload :JSON
@@ -60,6 +68,7 @@ module ActiveSupport
60
68
  autoload :StringInquirer
61
69
  autoload :TaggedLogging
62
70
  autoload :XmlMini
71
+ autoload :ArrayInquirer
63
72
  end
64
73
 
65
74
  autoload :Rescuable
@@ -72,15 +81,7 @@ module ActiveSupport
72
81
  NumberHelper.eager_load!
73
82
  end
74
83
 
75
- @@test_order = nil
76
-
77
- def self.test_order=(new_order) # :nodoc:
78
- @@test_order = new_order
79
- end
80
-
81
- def self.test_order # :nodoc:
82
- @@test_order
83
- end
84
+ cattr_accessor :test_order # :nodoc:
84
85
 
85
86
  def self.to_time_preserves_timezone
86
87
  DateAndTime::Compatibility.preserve_timezone