activesupport 1.2.4 → 8.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +505 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +40 -0
  5. data/lib/active_support/actionable_error.rb +50 -0
  6. data/lib/active_support/all.rb +5 -0
  7. data/lib/active_support/array_inquirer.rb +50 -0
  8. data/lib/active_support/backtrace_cleaner.rb +234 -0
  9. data/lib/active_support/benchmark.rb +21 -0
  10. data/lib/active_support/benchmarkable.rb +53 -0
  11. data/lib/active_support/broadcast_logger.rb +238 -0
  12. data/lib/active_support/builder.rb +8 -0
  13. data/lib/active_support/cache/coder.rb +153 -0
  14. data/lib/active_support/cache/entry.rb +134 -0
  15. data/lib/active_support/cache/file_store.rb +244 -0
  16. data/lib/active_support/cache/mem_cache_store.rb +288 -0
  17. data/lib/active_support/cache/memory_store.rb +264 -0
  18. data/lib/active_support/cache/null_store.rb +62 -0
  19. data/lib/active_support/cache/redis_cache_store.rb +498 -0
  20. data/lib/active_support/cache/serializer_with_fallback.rb +152 -0
  21. data/lib/active_support/cache/strategy/local_cache.rb +246 -0
  22. data/lib/active_support/cache/strategy/local_cache_middleware.rb +45 -0
  23. data/lib/active_support/cache.rb +1170 -0
  24. data/lib/active_support/callbacks.rb +960 -0
  25. data/lib/active_support/class_attribute.rb +33 -0
  26. data/lib/active_support/code_generator.rb +79 -0
  27. data/lib/active_support/concern.rb +217 -0
  28. data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +18 -0
  29. data/lib/active_support/concurrency/null_lock.rb +13 -0
  30. data/lib/active_support/concurrency/share_lock.rb +225 -0
  31. data/lib/active_support/concurrency/thread_monitor.rb +55 -0
  32. data/lib/active_support/configurable.rb +193 -0
  33. data/lib/active_support/configuration_file.rb +60 -0
  34. data/lib/active_support/continuous_integration.rb +145 -0
  35. data/lib/active_support/core_ext/array/access.rb +100 -0
  36. data/lib/active_support/core_ext/array/conversions.rb +209 -26
  37. data/lib/active_support/core_ext/array/extract.rb +21 -0
  38. data/lib/active_support/core_ext/array/extract_options.rb +31 -0
  39. data/lib/active_support/core_ext/array/grouping.rb +109 -0
  40. data/lib/active_support/core_ext/array/inquiry.rb +19 -0
  41. data/lib/active_support/core_ext/array/wrap.rb +48 -0
  42. data/lib/active_support/core_ext/array.rb +8 -4
  43. data/lib/active_support/core_ext/benchmark.rb +6 -0
  44. data/lib/active_support/core_ext/big_decimal/conversions.rb +14 -0
  45. data/lib/active_support/core_ext/big_decimal.rb +3 -0
  46. data/lib/active_support/core_ext/class/attribute.rb +137 -0
  47. data/lib/active_support/core_ext/class/attribute_accessors.rb +6 -0
  48. data/lib/active_support/core_ext/class/subclasses.rb +24 -0
  49. data/lib/active_support/core_ext/class.rb +4 -0
  50. data/lib/active_support/core_ext/date/acts_like.rb +10 -0
  51. data/lib/active_support/core_ext/date/blank.rb +18 -0
  52. data/lib/active_support/core_ext/date/calculations.rb +161 -0
  53. data/lib/active_support/core_ext/date/conversions.rb +95 -28
  54. data/lib/active_support/core_ext/date/zones.rb +8 -0
  55. data/lib/active_support/core_ext/date.rb +6 -5
  56. data/lib/active_support/core_ext/date_and_time/calculations.rb +374 -0
  57. data/lib/active_support/core_ext/date_and_time/compatibility.rb +23 -0
  58. data/lib/active_support/core_ext/date_and_time/zones.rb +40 -0
  59. data/lib/active_support/core_ext/date_time/acts_like.rb +16 -0
  60. data/lib/active_support/core_ext/date_time/blank.rb +18 -0
  61. data/lib/active_support/core_ext/date_time/calculations.rb +215 -0
  62. data/lib/active_support/core_ext/date_time/compatibility.rb +16 -0
  63. data/lib/active_support/core_ext/date_time/conversions.rb +108 -0
  64. data/lib/active_support/core_ext/date_time.rb +7 -0
  65. data/lib/active_support/core_ext/digest/uuid.rb +76 -0
  66. data/lib/active_support/core_ext/digest.rb +3 -0
  67. data/lib/active_support/core_ext/enumerable.rb +277 -7
  68. data/lib/active_support/core_ext/erb/util.rb +201 -0
  69. data/lib/active_support/core_ext/file/atomic.rb +72 -0
  70. data/lib/active_support/core_ext/file.rb +3 -0
  71. data/lib/active_support/core_ext/hash/conversions.rb +262 -0
  72. data/lib/active_support/core_ext/hash/deep_merge.rb +43 -0
  73. data/lib/active_support/core_ext/hash/deep_transform_values.rb +46 -0
  74. data/lib/active_support/core_ext/hash/except.rb +12 -0
  75. data/lib/active_support/core_ext/hash/indifferent_access.rb +19 -55
  76. data/lib/active_support/core_ext/hash/keys.rb +134 -44
  77. data/lib/active_support/core_ext/hash/reverse_merge.rb +22 -22
  78. data/lib/active_support/core_ext/hash/slice.rb +27 -0
  79. data/lib/active_support/core_ext/hash.rb +9 -8
  80. data/lib/active_support/core_ext/integer/inflections.rb +29 -13
  81. data/lib/active_support/core_ext/integer/multiple.rb +12 -0
  82. data/lib/active_support/core_ext/integer/time.rb +22 -0
  83. data/lib/active_support/core_ext/integer.rb +4 -6
  84. data/lib/active_support/core_ext/kernel/concern.rb +14 -0
  85. data/lib/active_support/core_ext/kernel/reporting.rb +45 -0
  86. data/lib/active_support/core_ext/kernel/singleton_class.rb +8 -0
  87. data/lib/active_support/core_ext/kernel.rb +4 -78
  88. data/lib/active_support/core_ext/load_error.rb +6 -35
  89. data/lib/active_support/core_ext/module/aliasing.rb +31 -0
  90. data/lib/active_support/core_ext/module/anonymous.rb +30 -0
  91. data/lib/active_support/core_ext/module/attr_internal.rb +48 -0
  92. data/lib/active_support/core_ext/module/attribute_accessors.rb +214 -0
  93. data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +175 -0
  94. data/lib/active_support/core_ext/module/concerning.rb +140 -0
  95. data/lib/active_support/core_ext/module/delegation.rb +225 -0
  96. data/lib/active_support/core_ext/module/deprecation.rb +25 -0
  97. data/lib/active_support/core_ext/module/introspection.rb +65 -0
  98. data/lib/active_support/core_ext/module/redefine_method.rb +40 -0
  99. data/lib/active_support/core_ext/module/remove_method.rb +17 -0
  100. data/lib/active_support/core_ext/module.rb +13 -0
  101. data/lib/active_support/core_ext/name_error.rb +59 -0
  102. data/lib/active_support/core_ext/numeric/bytes.rb +73 -42
  103. data/lib/active_support/core_ext/numeric/conversions.rb +145 -0
  104. data/lib/active_support/core_ext/numeric/time.rb +64 -57
  105. data/lib/active_support/core_ext/numeric.rb +4 -6
  106. data/lib/active_support/core_ext/object/acts_like.rb +45 -0
  107. data/lib/active_support/core_ext/object/blank.rb +199 -0
  108. data/lib/active_support/core_ext/object/conversions.rb +6 -0
  109. data/lib/active_support/core_ext/object/deep_dup.rb +71 -0
  110. data/lib/active_support/core_ext/object/duplicable.rb +69 -0
  111. data/lib/active_support/core_ext/object/inclusion.rb +37 -0
  112. data/lib/active_support/core_ext/object/instance_variables.rb +32 -0
  113. data/lib/active_support/core_ext/object/json.rb +267 -0
  114. data/lib/active_support/core_ext/object/to_param.rb +3 -0
  115. data/lib/active_support/core_ext/object/to_query.rb +93 -0
  116. data/lib/active_support/core_ext/object/try.rb +158 -0
  117. data/lib/active_support/core_ext/object/with.rb +46 -0
  118. data/lib/active_support/core_ext/object/with_options.rb +101 -0
  119. data/lib/active_support/core_ext/object.rb +17 -0
  120. data/lib/active_support/core_ext/pathname/blank.rb +20 -0
  121. data/lib/active_support/core_ext/pathname/existence.rb +23 -0
  122. data/lib/active_support/core_ext/pathname.rb +4 -0
  123. data/lib/active_support/core_ext/range/compare_range.rb +57 -0
  124. data/lib/active_support/core_ext/range/conversions.rb +58 -17
  125. data/lib/active_support/core_ext/range/overlap.rb +40 -0
  126. data/lib/active_support/core_ext/range/sole.rb +17 -0
  127. data/lib/active_support/core_ext/range.rb +5 -4
  128. data/lib/active_support/core_ext/regexp.rb +14 -0
  129. data/lib/active_support/core_ext/securerandom.rb +57 -0
  130. data/lib/active_support/core_ext/string/access.rb +93 -56
  131. data/lib/active_support/core_ext/string/behavior.rb +8 -0
  132. data/lib/active_support/core_ext/string/conversions.rb +57 -16
  133. data/lib/active_support/core_ext/string/exclude.rb +13 -0
  134. data/lib/active_support/core_ext/string/filters.rb +151 -0
  135. data/lib/active_support/core_ext/string/indent.rb +45 -0
  136. data/lib/active_support/core_ext/string/inflections.rb +297 -54
  137. data/lib/active_support/core_ext/string/inquiry.rb +16 -0
  138. data/lib/active_support/core_ext/string/multibyte.rb +67 -0
  139. data/lib/active_support/core_ext/string/output_safety.rb +235 -0
  140. data/lib/active_support/core_ext/string/starts_ends_with.rb +4 -18
  141. data/lib/active_support/core_ext/string/strip.rb +27 -0
  142. data/lib/active_support/core_ext/string/zones.rb +16 -0
  143. data/lib/active_support/core_ext/string.rb +14 -10
  144. data/lib/active_support/core_ext/symbol/starts_ends_with.rb +6 -0
  145. data/lib/active_support/core_ext/symbol.rb +3 -0
  146. data/lib/active_support/core_ext/thread/backtrace/location.rb +7 -0
  147. data/lib/active_support/core_ext/time/acts_like.rb +10 -0
  148. data/lib/active_support/core_ext/time/calculations.rb +358 -153
  149. data/lib/active_support/core_ext/time/compatibility.rb +15 -0
  150. data/lib/active_support/core_ext/time/conversions.rb +69 -30
  151. data/lib/active_support/core_ext/time/zones.rb +97 -0
  152. data/lib/active_support/core_ext/time.rb +6 -6
  153. data/lib/active_support/core_ext.rb +5 -1
  154. data/lib/active_support/current_attributes/test_helper.rb +13 -0
  155. data/lib/active_support/current_attributes.rb +243 -0
  156. data/lib/active_support/deep_mergeable.rb +53 -0
  157. data/lib/active_support/delegation.rb +183 -0
  158. data/lib/active_support/dependencies/autoload.rb +72 -0
  159. data/lib/active_support/dependencies/interlock.rb +55 -0
  160. data/lib/active_support/dependencies/require_dependency.rb +28 -0
  161. data/lib/active_support/dependencies.rb +84 -222
  162. data/lib/active_support/deprecation/behaviors.rb +148 -0
  163. data/lib/active_support/deprecation/constant_accessor.rb +74 -0
  164. data/lib/active_support/deprecation/deprecators.rb +104 -0
  165. data/lib/active_support/deprecation/disallowed.rb +54 -0
  166. data/lib/active_support/deprecation/method_wrappers.rb +68 -0
  167. data/lib/active_support/deprecation/proxy_wrappers.rb +189 -0
  168. data/lib/active_support/deprecation/reporting.rb +162 -0
  169. data/lib/active_support/deprecation.rb +81 -0
  170. data/lib/active_support/deprecator.rb +7 -0
  171. data/lib/active_support/descendants_tracker.rb +112 -0
  172. data/lib/active_support/digest.rb +22 -0
  173. data/lib/active_support/duration/iso8601_parser.rb +123 -0
  174. data/lib/active_support/duration/iso8601_serializer.rb +64 -0
  175. data/lib/active_support/duration.rb +524 -0
  176. data/lib/active_support/editor.rb +70 -0
  177. data/lib/active_support/encrypted_configuration.rb +126 -0
  178. data/lib/active_support/encrypted_file.rb +133 -0
  179. data/lib/active_support/environment_inquirer.rb +40 -0
  180. data/lib/active_support/error_reporter/test_helper.rb +15 -0
  181. data/lib/active_support/error_reporter.rb +318 -0
  182. data/lib/active_support/event_reporter/test_helper.rb +32 -0
  183. data/lib/active_support/event_reporter.rb +592 -0
  184. data/lib/active_support/evented_file_update_checker.rb +185 -0
  185. data/lib/active_support/execution_context/test_helper.rb +13 -0
  186. data/lib/active_support/execution_context.rb +110 -0
  187. data/lib/active_support/execution_wrapper.rb +150 -0
  188. data/lib/active_support/executor/test_helper.rb +7 -0
  189. data/lib/active_support/executor.rb +8 -0
  190. data/lib/active_support/file_update_checker.rb +166 -0
  191. data/lib/active_support/fork_tracker.rb +43 -0
  192. data/lib/active_support/gem_version.rb +17 -0
  193. data/lib/active_support/gzip.rb +41 -0
  194. data/lib/active_support/hash_with_indifferent_access.rb +464 -0
  195. data/lib/active_support/html_safe_translation.rb +56 -0
  196. data/lib/active_support/i18n.rb +17 -0
  197. data/lib/active_support/i18n_railtie.rb +140 -0
  198. data/lib/active_support/inflections.rb +68 -49
  199. data/lib/active_support/inflector/inflections.rb +290 -0
  200. data/lib/active_support/inflector/methods.rb +387 -0
  201. data/lib/active_support/inflector/transliterate.rb +147 -0
  202. data/lib/active_support/inflector.rb +7 -164
  203. data/lib/active_support/isolated_execution_state.rb +76 -0
  204. data/lib/active_support/json/decoding.rb +78 -0
  205. data/lib/active_support/json/encoding.rb +256 -0
  206. data/lib/active_support/json.rb +4 -0
  207. data/lib/active_support/key_generator.rb +66 -0
  208. data/lib/active_support/lazy_load_hooks.rb +107 -0
  209. data/lib/active_support/locale/en.rb +33 -0
  210. data/lib/active_support/locale/en.yml +141 -0
  211. data/lib/active_support/log_subscriber/test_helper.rb +106 -0
  212. data/lib/active_support/log_subscriber.rb +188 -0
  213. data/lib/active_support/logger.rb +55 -0
  214. data/lib/active_support/logger_silence.rb +21 -0
  215. data/lib/active_support/logger_thread_safe_level.rb +50 -0
  216. data/lib/active_support/message_encryptor.rb +374 -0
  217. data/lib/active_support/message_encryptors.rb +193 -0
  218. data/lib/active_support/message_pack/cache_serializer.rb +23 -0
  219. data/lib/active_support/message_pack/extensions.rb +310 -0
  220. data/lib/active_support/message_pack/serializer.rb +63 -0
  221. data/lib/active_support/message_pack.rb +50 -0
  222. data/lib/active_support/message_verifier.rb +377 -0
  223. data/lib/active_support/message_verifiers.rb +189 -0
  224. data/lib/active_support/messages/codec.rb +65 -0
  225. data/lib/active_support/messages/metadata.rb +146 -0
  226. data/lib/active_support/messages/rotation_configuration.rb +23 -0
  227. data/lib/active_support/messages/rotation_coordinator.rb +102 -0
  228. data/lib/active_support/messages/rotator.rb +69 -0
  229. data/lib/active_support/messages/serializer_with_fallback.rb +158 -0
  230. data/lib/active_support/multibyte/chars.rb +188 -0
  231. data/lib/active_support/multibyte/unicode.rb +42 -0
  232. data/lib/active_support/multibyte.rb +27 -0
  233. data/lib/active_support/notifications/fanout.rb +467 -0
  234. data/lib/active_support/notifications/instrumenter.rb +240 -0
  235. data/lib/active_support/notifications.rb +281 -0
  236. data/lib/active_support/number_helper/number_converter.rb +190 -0
  237. data/lib/active_support/number_helper/number_to_currency_converter.rb +46 -0
  238. data/lib/active_support/number_helper/number_to_delimited_converter.rb +30 -0
  239. data/lib/active_support/number_helper/number_to_human_converter.rb +69 -0
  240. data/lib/active_support/number_helper/number_to_human_size_converter.rb +60 -0
  241. data/lib/active_support/number_helper/number_to_percentage_converter.rb +16 -0
  242. data/lib/active_support/number_helper/number_to_phone_converter.rb +60 -0
  243. data/lib/active_support/number_helper/number_to_rounded_converter.rb +59 -0
  244. data/lib/active_support/number_helper/rounding_helper.rb +46 -0
  245. data/lib/active_support/number_helper.rb +479 -0
  246. data/lib/active_support/option_merger.rb +38 -0
  247. data/lib/active_support/ordered_hash.rb +50 -0
  248. data/lib/active_support/ordered_options.rb +141 -25
  249. data/lib/active_support/parameter_filter.rb +157 -0
  250. data/lib/active_support/rails.rb +26 -0
  251. data/lib/active_support/railtie.rb +180 -0
  252. data/lib/active_support/reloader.rb +138 -0
  253. data/lib/active_support/rescuable.rb +176 -0
  254. data/lib/active_support/secure_compare_rotator.rb +58 -0
  255. data/lib/active_support/security_utils.rb +38 -0
  256. data/lib/active_support/string_inquirer.rb +35 -0
  257. data/lib/active_support/structured_event_subscriber.rb +99 -0
  258. data/lib/active_support/subscriber.rb +141 -0
  259. data/lib/active_support/syntax_error_proxy.rb +67 -0
  260. data/lib/active_support/tagged_logging.rb +157 -0
  261. data/lib/active_support/test_case.rb +365 -0
  262. data/lib/active_support/testing/assertions.rb +369 -0
  263. data/lib/active_support/testing/autorun.rb +10 -0
  264. data/lib/active_support/testing/constant_lookup.rb +51 -0
  265. data/lib/active_support/testing/constant_stubbing.rb +54 -0
  266. data/lib/active_support/testing/declarative.rb +28 -0
  267. data/lib/active_support/testing/deprecation.rb +82 -0
  268. data/lib/active_support/testing/error_reporter_assertions.rb +124 -0
  269. data/lib/active_support/testing/event_reporter_assertions.rb +227 -0
  270. data/lib/active_support/testing/file_fixtures.rb +38 -0
  271. data/lib/active_support/testing/isolation.rb +121 -0
  272. data/lib/active_support/testing/method_call_assertions.rb +69 -0
  273. data/lib/active_support/testing/notification_assertions.rb +92 -0
  274. data/lib/active_support/testing/parallelization/server.rb +98 -0
  275. data/lib/active_support/testing/parallelization/worker.rb +107 -0
  276. data/lib/active_support/testing/parallelization.rb +79 -0
  277. data/lib/active_support/testing/parallelize_executor.rb +81 -0
  278. data/lib/active_support/testing/setup_and_teardown.rb +57 -0
  279. data/lib/active_support/testing/stream.rb +41 -0
  280. data/lib/active_support/testing/tagged_logging.rb +27 -0
  281. data/lib/active_support/testing/tests_without_assertions.rb +19 -0
  282. data/lib/active_support/testing/time_helpers.rb +273 -0
  283. data/lib/active_support/time.rb +20 -0
  284. data/lib/active_support/time_with_zone.rb +613 -0
  285. data/lib/active_support/values/time_zone.rb +599 -158
  286. data/lib/active_support/version.rb +7 -6
  287. data/lib/active_support/xml_mini/jdom.rb +175 -0
  288. data/lib/active_support/xml_mini/libxml.rb +80 -0
  289. data/lib/active_support/xml_mini/libxmlsax.rb +83 -0
  290. data/lib/active_support/xml_mini/nokogiri.rb +83 -0
  291. data/lib/active_support/xml_mini/nokogirisax.rb +86 -0
  292. data/lib/active_support/xml_mini/rexml.rb +137 -0
  293. data/lib/active_support/xml_mini.rb +212 -0
  294. data/lib/active_support.rb +122 -10
  295. metadata +524 -93
  296. data/CHANGELOG +0 -283
  297. data/lib/active_support/binding_of_caller.rb +0 -84
  298. data/lib/active_support/breakpoint.rb +0 -523
  299. data/lib/active_support/class_attribute_accessors.rb +0 -57
  300. data/lib/active_support/class_inheritable_attributes.rb +0 -117
  301. data/lib/active_support/clean_logger.rb +0 -36
  302. data/lib/active_support/core_ext/blank.rb +0 -38
  303. data/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +0 -14
  304. data/lib/active_support/core_ext/cgi.rb +0 -5
  305. data/lib/active_support/core_ext/exception.rb +0 -29
  306. data/lib/active_support/core_ext/integer/even_odd.rb +0 -24
  307. data/lib/active_support/core_ext/object_and_class.rb +0 -44
  308. data/lib/active_support/module_attribute_accessors.rb +0 -57
  309. data/lib/active_support/whiny_nil.rb +0 -38
@@ -0,0 +1,212 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "time"
4
+ require "base64"
5
+ require "bigdecimal"
6
+ require "bigdecimal/util"
7
+ require "active_support/core_ext/module/delegation"
8
+ require "active_support/core_ext/string/inflections"
9
+ require "active_support/core_ext/date_time/calculations"
10
+
11
+ module ActiveSupport
12
+ # = \XmlMini
13
+ #
14
+ # To use the much faster libxml parser:
15
+ # gem "libxml-ruby"
16
+ # XmlMini.backend = 'LibXML'
17
+ module XmlMini
18
+ extend self
19
+
20
+ # This module decorates files deserialized using Hash.from_xml with
21
+ # the <tt>original_filename</tt> and <tt>content_type</tt> methods.
22
+ module FileLike # :nodoc:
23
+ attr_writer :original_filename, :content_type
24
+
25
+ def original_filename
26
+ @original_filename || "untitled"
27
+ end
28
+
29
+ def content_type
30
+ @content_type || "application/octet-stream"
31
+ end
32
+ end
33
+
34
+ DEFAULT_ENCODINGS = {
35
+ "binary" => "base64"
36
+ } unless defined?(DEFAULT_ENCODINGS)
37
+
38
+ unless defined?(TYPE_NAMES)
39
+ TYPE_NAMES = {
40
+ "Symbol" => "symbol",
41
+ "Integer" => "integer",
42
+ "BigDecimal" => "decimal",
43
+ "Float" => "float",
44
+ "TrueClass" => "boolean",
45
+ "FalseClass" => "boolean",
46
+ "Date" => "date",
47
+ "DateTime" => "dateTime",
48
+ "Time" => "dateTime",
49
+ "ActiveSupport::Duration" => "duration",
50
+ "Array" => "array",
51
+ "Hash" => "hash"
52
+ }
53
+ end
54
+ TYPE_NAMES["ActiveSupport::TimeWithZone"] = TYPE_NAMES["Time"]
55
+
56
+ FORMATTING = {
57
+ "symbol" => Proc.new { |symbol| symbol.to_s },
58
+ "date" => Proc.new { |date| date.to_fs(:db) },
59
+ "dateTime" => Proc.new { |time| time.xmlschema },
60
+ "duration" => Proc.new { |duration| duration.iso8601 },
61
+ "binary" => Proc.new { |binary| ::Base64.encode64(binary) },
62
+ "yaml" => Proc.new { |yaml| yaml.to_yaml }
63
+ } unless defined?(FORMATTING)
64
+
65
+ unless defined?(PARSING)
66
+ PARSING = {
67
+ "symbol" => Proc.new { |symbol| symbol.to_s.to_sym },
68
+ "date" => Proc.new { |date| ::Date.strptime(date, "%Y-%m-%d") },
69
+ "datetime" => Proc.new { |time| Time.xmlschema(time).utc rescue ::DateTime.parse(time).utc },
70
+ "duration" => Proc.new { |duration| Duration.parse(duration) },
71
+ "integer" => Proc.new { |integer| integer.to_i },
72
+ "float" => Proc.new { |float| float.to_f },
73
+ "decimal" => Proc.new do |number|
74
+ if String === number
75
+ number.to_d
76
+ elsif Float === number
77
+ BigDecimal(number, 0)
78
+ else
79
+ BigDecimal(number)
80
+ end
81
+ end,
82
+ "boolean" => Proc.new { |boolean| %w(1 true).include?(boolean.to_s.strip) },
83
+ "string" => Proc.new { |string| string.to_s },
84
+ "yaml" => Proc.new { |yaml| YAML.load(yaml) rescue yaml },
85
+ "base64Binary" => Proc.new { |bin| ::Base64.decode64(bin) },
86
+ "hexBinary" => Proc.new { |bin| _parse_hex_binary(bin) },
87
+ "binary" => Proc.new { |bin, entity| _parse_binary(bin, entity) },
88
+ "file" => Proc.new { |file, entity| _parse_file(file, entity) }
89
+ }
90
+
91
+ PARSING.update(
92
+ "double" => PARSING["float"],
93
+ "dateTime" => PARSING["datetime"]
94
+ )
95
+ end
96
+
97
+ attr_accessor :depth
98
+ self.depth = 100
99
+
100
+ delegate :parse, to: :backend
101
+
102
+ def backend
103
+ current_thread_backend || @backend
104
+ end
105
+
106
+ def backend=(name)
107
+ backend = name && cast_backend_name_to_module(name)
108
+ self.current_thread_backend = backend if current_thread_backend
109
+ @backend = backend
110
+ end
111
+
112
+ def with_backend(name)
113
+ old_backend = current_thread_backend
114
+ self.current_thread_backend = name && cast_backend_name_to_module(name)
115
+ yield
116
+ ensure
117
+ self.current_thread_backend = old_backend
118
+ end
119
+
120
+ def to_tag(key, value, options)
121
+ type_name = options.delete(:type)
122
+ merged_options = options.merge(root: key, skip_instruct: true)
123
+
124
+ if value.is_a?(::Method) || value.is_a?(::Proc)
125
+ if value.arity == 1
126
+ value.call(merged_options)
127
+ else
128
+ value.call(merged_options, key.to_s.singularize)
129
+ end
130
+ elsif value.respond_to?(:to_xml)
131
+ value.to_xml(merged_options)
132
+ else
133
+ type_name ||= TYPE_NAMES[value.class.name]
134
+ type_name ||= value.class.name if value && !value.respond_to?(:to_str)
135
+ type_name = type_name.to_s if type_name
136
+ type_name = "dateTime" if type_name == "datetime"
137
+
138
+ key = rename_key(key.to_s, options)
139
+
140
+ attributes = options[:skip_types] || type_name.nil? ? {} : { type: type_name }
141
+ attributes[:nil] = true if value.nil?
142
+
143
+ encoding = options[:encoding] || DEFAULT_ENCODINGS[type_name]
144
+ attributes[:encoding] = encoding if encoding
145
+
146
+ formatted_value = FORMATTING[type_name] && !value.nil? ?
147
+ FORMATTING[type_name].call(value) : value
148
+
149
+ options[:builder].tag!(key, formatted_value, attributes)
150
+ end
151
+ end
152
+
153
+ def rename_key(key, options = {})
154
+ camelize = options[:camelize]
155
+ dasherize = !options.has_key?(:dasherize) || options[:dasherize]
156
+ if camelize
157
+ key = true == camelize ? key.camelize : key.camelize(camelize)
158
+ end
159
+ key = _dasherize(key) if dasherize
160
+ key
161
+ end
162
+
163
+ private
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
169
+
170
+ def _parse_binary(bin, entity)
171
+ case entity["encoding"]
172
+ when "base64"
173
+ ::Base64.decode64(bin)
174
+ when "hex", "hexBinary"
175
+ _parse_hex_binary(bin)
176
+ else
177
+ bin
178
+ end
179
+ end
180
+
181
+ def _parse_file(file, entity)
182
+ f = StringIO.new(::Base64.decode64(file))
183
+ f.extend(FileLike)
184
+ f.original_filename = entity["name"]
185
+ f.content_type = entity["content_type"]
186
+ f
187
+ end
188
+
189
+ def _parse_hex_binary(bin)
190
+ [bin].pack("H*")
191
+ end
192
+
193
+ def current_thread_backend
194
+ IsolatedExecutionState[:xml_mini_backend]
195
+ end
196
+
197
+ def current_thread_backend=(name)
198
+ IsolatedExecutionState[:xml_mini_backend] = name && cast_backend_name_to_module(name)
199
+ end
200
+
201
+ def cast_backend_name_to_module(name)
202
+ if name.is_a?(Module)
203
+ name
204
+ else
205
+ require "active_support/xml_mini/#{name.downcase}"
206
+ ActiveSupport.const_get("XmlMini_#{name}")
207
+ end
208
+ end
209
+ end
210
+
211
+ XmlMini.backend = "REXML"
212
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #--
2
- # Copyright (c) 2005 David Heinemeier Hansson
4
+ # Copyright (c) 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,16 +23,126 @@
21
23
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
24
  #++
23
25
 
24
- $:.unshift(File.dirname(__FILE__))
26
+ require "securerandom"
27
+ require "active_support/dependencies/autoload"
28
+ require "active_support/version"
29
+ require "active_support/deprecator"
30
+ require "active_support/logger"
31
+ require "active_support/broadcast_logger"
32
+ require "active_support/lazy_load_hooks"
33
+ require "active_support/core_ext/date_and_time/compatibility"
34
+
35
+ # :include: ../README.rdoc
36
+ module ActiveSupport
37
+ extend ActiveSupport::Autoload
38
+
39
+ autoload :Concern
40
+ autoload :CodeGenerator
41
+ autoload :ActionableError
42
+ autoload :Configurable
43
+ autoload :ConfigurationFile
44
+ autoload :ContinuousIntegration
45
+ autoload :CurrentAttributes
46
+ autoload :Dependencies
47
+ autoload :DescendantsTracker
48
+ autoload :Editor
49
+ autoload :ExecutionWrapper
50
+ autoload :Executor
51
+ autoload :ErrorReporter
52
+ autoload :EventReporter
53
+ autoload :FileUpdateChecker
54
+ autoload :EventedFileUpdateChecker
55
+ autoload :ForkTracker
56
+ autoload :LogSubscriber
57
+ autoload :StructuredEventSubscriber
58
+ autoload :IsolatedExecutionState
59
+ autoload :Notifications
60
+ autoload :Reloader
61
+ autoload :SecureCompareRotator
62
+
63
+ eager_autoload do
64
+ autoload :BacktraceCleaner
65
+ autoload :Benchmark
66
+ autoload :Benchmarkable
67
+ autoload :Cache
68
+ autoload :Callbacks
69
+ autoload :ClassAttribute
70
+ autoload :Deprecation
71
+ autoload :Delegation
72
+ autoload :Digest
73
+ autoload :ExecutionContext
74
+ autoload :Gzip
75
+ autoload :Inflector
76
+ autoload :JSON
77
+ autoload :KeyGenerator
78
+ autoload :MessageEncryptor
79
+ autoload :MessageEncryptors
80
+ autoload :MessageVerifier
81
+ autoload :MessageVerifiers
82
+ autoload :Multibyte
83
+ autoload :NumberHelper
84
+ autoload :OptionMerger
85
+ autoload :OrderedHash
86
+ autoload :OrderedOptions
87
+ autoload :StringInquirer
88
+ autoload :EnvironmentInquirer
89
+ autoload :TaggedLogging
90
+ autoload :XmlMini
91
+ autoload :ArrayInquirer
92
+ end
93
+
94
+ autoload :Rescuable
95
+ autoload :SafeBuffer, "active_support/core_ext/string/output_safety"
96
+ autoload :TestCase
97
+
98
+ def self.eager_load!
99
+ super
100
+
101
+ NumberHelper.eager_load!
102
+ end
103
+
104
+ cattr_accessor :test_order # :nodoc:
105
+ cattr_accessor :test_parallelization_threshold, default: 50 # :nodoc:
106
+ cattr_accessor :parallelize_test_databases, default: true # :nodoc:
107
+
108
+ @error_reporter = ActiveSupport::ErrorReporter.new
109
+ singleton_class.attr_accessor :error_reporter # :nodoc:
110
+
111
+ @event_reporter = ActiveSupport::EventReporter.new
112
+ singleton_class.attr_accessor :event_reporter # :nodoc:
113
+
114
+ cattr_accessor :filter_parameters, default: [] # :nodoc:
115
+
116
+ def self.cache_format_version
117
+ Cache.format_version
118
+ end
119
+
120
+ def self.cache_format_version=(value)
121
+ Cache.format_version = value
122
+ end
123
+
124
+ def self.to_time_preserves_timezone
125
+ ActiveSupport.deprecator.warn(
126
+ "`config.active_support.to_time_preserves_timezone` is deprecated and will be removed in Rails 8.2"
127
+ )
128
+ @to_time_preserves_timezone
129
+ end
130
+
131
+ def self.to_time_preserves_timezone=(value)
132
+ ActiveSupport.deprecator.warn(
133
+ "`config.active_support.to_time_preserves_timezone` is deprecated and will be removed in Rails 8.2"
134
+ )
25
135
 
26
- require 'active_support/class_attribute_accessors'
27
- require 'active_support/class_inheritable_attributes'
28
- require 'active_support/inflector'
136
+ @to_time_preserves_timezone = value
137
+ end
29
138
 
30
- require 'active_support/core_ext'
31
- require 'active_support/clean_logger'
32
- require 'active_support/dependencies'
139
+ def self.utc_to_local_returns_utc_offset_times
140
+ DateAndTime::Compatibility.utc_to_local_returns_utc_offset_times
141
+ end
33
142
 
34
- require 'active_support/ordered_options'
143
+ def self.utc_to_local_returns_utc_offset_times=(value)
144
+ DateAndTime::Compatibility.utc_to_local_returns_utc_offset_times = value
145
+ end
146
+ end
35
147
 
36
- require 'active_support/values/time_zone'
148
+ autoload :I18n, "active_support/i18n"