activesupport 5.0.7.2

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 (236) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1018 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +39 -0
  5. data/lib/active_support.rb +99 -0
  6. data/lib/active_support/all.rb +3 -0
  7. data/lib/active_support/array_inquirer.rb +44 -0
  8. data/lib/active_support/backtrace_cleaner.rb +103 -0
  9. data/lib/active_support/benchmarkable.rb +49 -0
  10. data/lib/active_support/builder.rb +6 -0
  11. data/lib/active_support/cache.rb +701 -0
  12. data/lib/active_support/cache/file_store.rb +204 -0
  13. data/lib/active_support/cache/mem_cache_store.rb +207 -0
  14. data/lib/active_support/cache/memory_store.rb +167 -0
  15. data/lib/active_support/cache/null_store.rb +41 -0
  16. data/lib/active_support/cache/strategy/local_cache.rb +172 -0
  17. data/lib/active_support/cache/strategy/local_cache_middleware.rb +44 -0
  18. data/lib/active_support/callbacks.rb +791 -0
  19. data/lib/active_support/concern.rb +142 -0
  20. data/lib/active_support/concurrency/latch.rb +26 -0
  21. data/lib/active_support/concurrency/share_lock.rb +226 -0
  22. data/lib/active_support/configurable.rb +148 -0
  23. data/lib/active_support/core_ext.rb +4 -0
  24. data/lib/active_support/core_ext/array.rb +7 -0
  25. data/lib/active_support/core_ext/array/access.rb +90 -0
  26. data/lib/active_support/core_ext/array/conversions.rb +211 -0
  27. data/lib/active_support/core_ext/array/extract_options.rb +29 -0
  28. data/lib/active_support/core_ext/array/grouping.rb +107 -0
  29. data/lib/active_support/core_ext/array/inquiry.rb +17 -0
  30. data/lib/active_support/core_ext/array/prepend_and_append.rb +7 -0
  31. data/lib/active_support/core_ext/array/wrap.rb +46 -0
  32. data/lib/active_support/core_ext/benchmark.rb +14 -0
  33. data/lib/active_support/core_ext/big_decimal.rb +1 -0
  34. data/lib/active_support/core_ext/big_decimal/conversions.rb +14 -0
  35. data/lib/active_support/core_ext/class.rb +2 -0
  36. data/lib/active_support/core_ext/class/attribute.rb +128 -0
  37. data/lib/active_support/core_ext/class/attribute_accessors.rb +4 -0
  38. data/lib/active_support/core_ext/class/subclasses.rb +41 -0
  39. data/lib/active_support/core_ext/date.rb +5 -0
  40. data/lib/active_support/core_ext/date/acts_like.rb +8 -0
  41. data/lib/active_support/core_ext/date/blank.rb +12 -0
  42. data/lib/active_support/core_ext/date/calculations.rb +143 -0
  43. data/lib/active_support/core_ext/date/conversions.rb +95 -0
  44. data/lib/active_support/core_ext/date/zones.rb +6 -0
  45. data/lib/active_support/core_ext/date_and_time/calculations.rb +335 -0
  46. data/lib/active_support/core_ext/date_and_time/compatibility.rb +14 -0
  47. data/lib/active_support/core_ext/date_and_time/zones.rb +40 -0
  48. data/lib/active_support/core_ext/date_time.rb +5 -0
  49. data/lib/active_support/core_ext/date_time/acts_like.rb +14 -0
  50. data/lib/active_support/core_ext/date_time/blank.rb +12 -0
  51. data/lib/active_support/core_ext/date_time/calculations.rb +199 -0
  52. data/lib/active_support/core_ext/date_time/compatibility.rb +16 -0
  53. data/lib/active_support/core_ext/date_time/conversions.rb +105 -0
  54. data/lib/active_support/core_ext/digest/uuid.rb +51 -0
  55. data/lib/active_support/core_ext/enumerable.rb +146 -0
  56. data/lib/active_support/core_ext/file.rb +1 -0
  57. data/lib/active_support/core_ext/file/atomic.rb +68 -0
  58. data/lib/active_support/core_ext/hash.rb +9 -0
  59. data/lib/active_support/core_ext/hash/compact.rb +24 -0
  60. data/lib/active_support/core_ext/hash/conversions.rb +262 -0
  61. data/lib/active_support/core_ext/hash/deep_merge.rb +38 -0
  62. data/lib/active_support/core_ext/hash/except.rb +22 -0
  63. data/lib/active_support/core_ext/hash/indifferent_access.rb +23 -0
  64. data/lib/active_support/core_ext/hash/keys.rb +170 -0
  65. data/lib/active_support/core_ext/hash/reverse_merge.rb +22 -0
  66. data/lib/active_support/core_ext/hash/slice.rb +48 -0
  67. data/lib/active_support/core_ext/hash/transform_values.rb +29 -0
  68. data/lib/active_support/core_ext/integer.rb +3 -0
  69. data/lib/active_support/core_ext/integer/inflections.rb +29 -0
  70. data/lib/active_support/core_ext/integer/multiple.rb +10 -0
  71. data/lib/active_support/core_ext/integer/time.rb +29 -0
  72. data/lib/active_support/core_ext/kernel.rb +4 -0
  73. data/lib/active_support/core_ext/kernel/agnostics.rb +11 -0
  74. data/lib/active_support/core_ext/kernel/concern.rb +12 -0
  75. data/lib/active_support/core_ext/kernel/debugger.rb +3 -0
  76. data/lib/active_support/core_ext/kernel/reporting.rb +43 -0
  77. data/lib/active_support/core_ext/kernel/singleton_class.rb +6 -0
  78. data/lib/active_support/core_ext/load_error.rb +31 -0
  79. data/lib/active_support/core_ext/marshal.rb +22 -0
  80. data/lib/active_support/core_ext/module.rb +12 -0
  81. data/lib/active_support/core_ext/module/aliasing.rb +74 -0
  82. data/lib/active_support/core_ext/module/anonymous.rb +28 -0
  83. data/lib/active_support/core_ext/module/attr_internal.rb +36 -0
  84. data/lib/active_support/core_ext/module/attribute_accessors.rb +212 -0
  85. data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +141 -0
  86. data/lib/active_support/core_ext/module/concerning.rb +135 -0
  87. data/lib/active_support/core_ext/module/delegation.rb +216 -0
  88. data/lib/active_support/core_ext/module/deprecation.rb +23 -0
  89. data/lib/active_support/core_ext/module/introspection.rb +68 -0
  90. data/lib/active_support/core_ext/module/method_transplanting.rb +3 -0
  91. data/lib/active_support/core_ext/module/qualified_const.rb +70 -0
  92. data/lib/active_support/core_ext/module/reachable.rb +8 -0
  93. data/lib/active_support/core_ext/module/remove_method.rb +35 -0
  94. data/lib/active_support/core_ext/name_error.rb +31 -0
  95. data/lib/active_support/core_ext/numeric.rb +4 -0
  96. data/lib/active_support/core_ext/numeric/bytes.rb +64 -0
  97. data/lib/active_support/core_ext/numeric/conversions.rb +144 -0
  98. data/lib/active_support/core_ext/numeric/inquiry.rb +26 -0
  99. data/lib/active_support/core_ext/numeric/time.rb +74 -0
  100. data/lib/active_support/core_ext/object.rb +14 -0
  101. data/lib/active_support/core_ext/object/acts_like.rb +10 -0
  102. data/lib/active_support/core_ext/object/blank.rb +143 -0
  103. data/lib/active_support/core_ext/object/conversions.rb +4 -0
  104. data/lib/active_support/core_ext/object/deep_dup.rb +53 -0
  105. data/lib/active_support/core_ext/object/duplicable.rb +124 -0
  106. data/lib/active_support/core_ext/object/inclusion.rb +27 -0
  107. data/lib/active_support/core_ext/object/instance_variables.rb +28 -0
  108. data/lib/active_support/core_ext/object/json.rb +205 -0
  109. data/lib/active_support/core_ext/object/to_param.rb +1 -0
  110. data/lib/active_support/core_ext/object/to_query.rb +84 -0
  111. data/lib/active_support/core_ext/object/try.rb +146 -0
  112. data/lib/active_support/core_ext/object/with_options.rb +69 -0
  113. data/lib/active_support/core_ext/range.rb +4 -0
  114. data/lib/active_support/core_ext/range/conversions.rb +31 -0
  115. data/lib/active_support/core_ext/range/each.rb +21 -0
  116. data/lib/active_support/core_ext/range/include_range.rb +23 -0
  117. data/lib/active_support/core_ext/range/overlaps.rb +8 -0
  118. data/lib/active_support/core_ext/regexp.rb +5 -0
  119. data/lib/active_support/core_ext/securerandom.rb +23 -0
  120. data/lib/active_support/core_ext/string.rb +13 -0
  121. data/lib/active_support/core_ext/string/access.rb +104 -0
  122. data/lib/active_support/core_ext/string/behavior.rb +6 -0
  123. data/lib/active_support/core_ext/string/conversions.rb +57 -0
  124. data/lib/active_support/core_ext/string/exclude.rb +11 -0
  125. data/lib/active_support/core_ext/string/filters.rb +102 -0
  126. data/lib/active_support/core_ext/string/indent.rb +43 -0
  127. data/lib/active_support/core_ext/string/inflections.rb +244 -0
  128. data/lib/active_support/core_ext/string/inquiry.rb +13 -0
  129. data/lib/active_support/core_ext/string/multibyte.rb +53 -0
  130. data/lib/active_support/core_ext/string/output_safety.rb +260 -0
  131. data/lib/active_support/core_ext/string/starts_ends_with.rb +4 -0
  132. data/lib/active_support/core_ext/string/strip.rb +23 -0
  133. data/lib/active_support/core_ext/string/zones.rb +14 -0
  134. data/lib/active_support/core_ext/struct.rb +3 -0
  135. data/lib/active_support/core_ext/time.rb +5 -0
  136. data/lib/active_support/core_ext/time/acts_like.rb +8 -0
  137. data/lib/active_support/core_ext/time/calculations.rb +290 -0
  138. data/lib/active_support/core_ext/time/compatibility.rb +14 -0
  139. data/lib/active_support/core_ext/time/conversions.rb +67 -0
  140. data/lib/active_support/core_ext/time/marshal.rb +3 -0
  141. data/lib/active_support/core_ext/time/zones.rb +111 -0
  142. data/lib/active_support/core_ext/uri.rb +24 -0
  143. data/lib/active_support/dependencies.rb +755 -0
  144. data/lib/active_support/dependencies/autoload.rb +77 -0
  145. data/lib/active_support/dependencies/interlock.rb +55 -0
  146. data/lib/active_support/deprecation.rb +43 -0
  147. data/lib/active_support/deprecation/behaviors.rb +90 -0
  148. data/lib/active_support/deprecation/instance_delegator.rb +37 -0
  149. data/lib/active_support/deprecation/method_wrappers.rb +70 -0
  150. data/lib/active_support/deprecation/proxy_wrappers.rb +149 -0
  151. data/lib/active_support/deprecation/reporting.rb +112 -0
  152. data/lib/active_support/descendants_tracker.rb +60 -0
  153. data/lib/active_support/duration.rb +235 -0
  154. data/lib/active_support/duration/iso8601_parser.rb +122 -0
  155. data/lib/active_support/duration/iso8601_serializer.rb +51 -0
  156. data/lib/active_support/evented_file_update_checker.rb +199 -0
  157. data/lib/active_support/execution_wrapper.rb +126 -0
  158. data/lib/active_support/executor.rb +6 -0
  159. data/lib/active_support/file_update_checker.rb +157 -0
  160. data/lib/active_support/gem_version.rb +15 -0
  161. data/lib/active_support/gzip.rb +36 -0
  162. data/lib/active_support/hash_with_indifferent_access.rb +329 -0
  163. data/lib/active_support/i18n.rb +13 -0
  164. data/lib/active_support/i18n_railtie.rb +115 -0
  165. data/lib/active_support/inflections.rb +70 -0
  166. data/lib/active_support/inflector.rb +7 -0
  167. data/lib/active_support/inflector/inflections.rb +242 -0
  168. data/lib/active_support/inflector/methods.rb +390 -0
  169. data/lib/active_support/inflector/transliterate.rb +112 -0
  170. data/lib/active_support/json.rb +2 -0
  171. data/lib/active_support/json/decoding.rb +74 -0
  172. data/lib/active_support/json/encoding.rb +127 -0
  173. data/lib/active_support/key_generator.rb +71 -0
  174. data/lib/active_support/lazy_load_hooks.rb +76 -0
  175. data/lib/active_support/locale/en.yml +135 -0
  176. data/lib/active_support/log_subscriber.rb +109 -0
  177. data/lib/active_support/log_subscriber/test_helper.rb +104 -0
  178. data/lib/active_support/logger.rb +106 -0
  179. data/lib/active_support/logger_silence.rb +28 -0
  180. data/lib/active_support/logger_thread_safe_level.rb +31 -0
  181. data/lib/active_support/message_encryptor.rb +114 -0
  182. data/lib/active_support/message_verifier.rb +134 -0
  183. data/lib/active_support/multibyte.rb +21 -0
  184. data/lib/active_support/multibyte/chars.rb +231 -0
  185. data/lib/active_support/multibyte/unicode.rb +413 -0
  186. data/lib/active_support/notifications.rb +212 -0
  187. data/lib/active_support/notifications/fanout.rb +157 -0
  188. data/lib/active_support/notifications/instrumenter.rb +91 -0
  189. data/lib/active_support/number_helper.rb +368 -0
  190. data/lib/active_support/number_helper/number_converter.rb +182 -0
  191. data/lib/active_support/number_helper/number_to_currency_converter.rb +44 -0
  192. data/lib/active_support/number_helper/number_to_delimited_converter.rb +28 -0
  193. data/lib/active_support/number_helper/number_to_human_converter.rb +68 -0
  194. data/lib/active_support/number_helper/number_to_human_size_converter.rb +62 -0
  195. data/lib/active_support/number_helper/number_to_percentage_converter.rb +12 -0
  196. data/lib/active_support/number_helper/number_to_phone_converter.rb +58 -0
  197. data/lib/active_support/number_helper/number_to_rounded_converter.rb +92 -0
  198. data/lib/active_support/option_merger.rb +25 -0
  199. data/lib/active_support/ordered_hash.rb +48 -0
  200. data/lib/active_support/ordered_options.rb +81 -0
  201. data/lib/active_support/per_thread_registry.rb +58 -0
  202. data/lib/active_support/proxy_object.rb +13 -0
  203. data/lib/active_support/rails.rb +27 -0
  204. data/lib/active_support/railtie.rb +51 -0
  205. data/lib/active_support/reloader.rb +129 -0
  206. data/lib/active_support/rescuable.rb +173 -0
  207. data/lib/active_support/security_utils.rb +27 -0
  208. data/lib/active_support/string_inquirer.rb +26 -0
  209. data/lib/active_support/subscriber.rb +120 -0
  210. data/lib/active_support/tagged_logging.rb +77 -0
  211. data/lib/active_support/test_case.rb +88 -0
  212. data/lib/active_support/testing/assertions.rb +99 -0
  213. data/lib/active_support/testing/autorun.rb +5 -0
  214. data/lib/active_support/testing/constant_lookup.rb +50 -0
  215. data/lib/active_support/testing/declarative.rb +26 -0
  216. data/lib/active_support/testing/deprecation.rb +36 -0
  217. data/lib/active_support/testing/file_fixtures.rb +34 -0
  218. data/lib/active_support/testing/isolation.rb +115 -0
  219. data/lib/active_support/testing/method_call_assertions.rb +41 -0
  220. data/lib/active_support/testing/setup_and_teardown.rb +50 -0
  221. data/lib/active_support/testing/stream.rb +42 -0
  222. data/lib/active_support/testing/tagged_logging.rb +25 -0
  223. data/lib/active_support/testing/time_helpers.rb +136 -0
  224. data/lib/active_support/time.rb +18 -0
  225. data/lib/active_support/time_with_zone.rb +511 -0
  226. data/lib/active_support/values/time_zone.rb +484 -0
  227. data/lib/active_support/values/unicode_tables.dat +0 -0
  228. data/lib/active_support/version.rb +8 -0
  229. data/lib/active_support/xml_mini.rb +209 -0
  230. data/lib/active_support/xml_mini/jdom.rb +181 -0
  231. data/lib/active_support/xml_mini/libxml.rb +77 -0
  232. data/lib/active_support/xml_mini/libxmlsax.rb +82 -0
  233. data/lib/active_support/xml_mini/nokogiri.rb +81 -0
  234. data/lib/active_support/xml_mini/nokogirisax.rb +85 -0
  235. data/lib/active_support/xml_mini/rexml.rb +128 -0
  236. metadata +349 -0
@@ -0,0 +1,23 @@
1
+ class Module
2
+ # deprecate :foo
3
+ # deprecate bar: 'message'
4
+ # deprecate :foo, :bar, baz: 'warning!', qux: 'gone!'
5
+ #
6
+ # You can also use custom deprecator instance:
7
+ #
8
+ # deprecate :foo, deprecator: MyLib::Deprecator.new
9
+ # deprecate :foo, bar: "warning!", deprecator: MyLib::Deprecator.new
10
+ #
11
+ # \Custom deprecators must respond to <tt>deprecation_warning(deprecated_method_name, message, caller_backtrace)</tt>
12
+ # method where you can implement your custom warning behavior.
13
+ #
14
+ # class MyLib::Deprecator
15
+ # def deprecation_warning(deprecated_method_name, message, caller_backtrace = nil)
16
+ # message = "#{deprecated_method_name} is deprecated and will be removed from MyLibrary | #{message}"
17
+ # Kernel.warn message
18
+ # end
19
+ # end
20
+ def deprecate(*method_names)
21
+ ActiveSupport::Deprecation.deprecate_methods(self, *method_names)
22
+ end
23
+ end
@@ -0,0 +1,68 @@
1
+ require 'active_support/inflector'
2
+
3
+ class Module
4
+ # Returns the name of the module containing this one.
5
+ #
6
+ # M::N.parent_name # => "M"
7
+ def parent_name
8
+ if defined?(@parent_name)
9
+ @parent_name
10
+ else
11
+ parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil
12
+ @parent_name = parent_name unless frozen?
13
+ parent_name
14
+ end
15
+ end
16
+
17
+ # Returns the module which contains this one according to its name.
18
+ #
19
+ # module M
20
+ # module N
21
+ # end
22
+ # end
23
+ # X = M::N
24
+ #
25
+ # M::N.parent # => M
26
+ # X.parent # => M
27
+ #
28
+ # The parent of top-level and anonymous modules is Object.
29
+ #
30
+ # M.parent # => Object
31
+ # Module.new.parent # => Object
32
+ def parent
33
+ parent_name ? ActiveSupport::Inflector.constantize(parent_name) : Object
34
+ end
35
+
36
+ # Returns all the parents of this module according to its name, ordered from
37
+ # nested outwards. The receiver is not contained within the result.
38
+ #
39
+ # module M
40
+ # module N
41
+ # end
42
+ # end
43
+ # X = M::N
44
+ #
45
+ # M.parents # => [Object]
46
+ # M::N.parents # => [M, Object]
47
+ # X.parents # => [M, Object]
48
+ def parents
49
+ parents = []
50
+ if parent_name
51
+ parts = parent_name.split('::')
52
+ until parts.empty?
53
+ parents << ActiveSupport::Inflector.constantize(parts * '::')
54
+ parts.pop
55
+ end
56
+ end
57
+ parents << Object unless parents.include? Object
58
+ parents
59
+ end
60
+
61
+ def local_constants #:nodoc:
62
+ ActiveSupport::Deprecation.warn(<<-MSG.squish)
63
+ Module#local_constants is deprecated and will be removed in Rails 5.1.
64
+ Use Module#constants(false) instead.
65
+ MSG
66
+ constants(false)
67
+ end
68
+ end
@@ -0,0 +1,3 @@
1
+ require 'active_support/deprecation'
2
+
3
+ ActiveSupport::Deprecation.warn("This file is deprecated and will be removed in Rails 5.1 with no replacement.")
@@ -0,0 +1,70 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+
3
+ #--
4
+ # Allows code reuse in the methods below without polluting Module.
5
+ #++
6
+
7
+ module ActiveSupport
8
+ module QualifiedConstUtils
9
+ def self.raise_if_absolute(path)
10
+ raise NameError.new("wrong constant name #$&") if path =~ /\A::[^:]+/
11
+ end
12
+
13
+ def self.names(path)
14
+ path.split('::')
15
+ end
16
+ end
17
+ end
18
+
19
+ ##
20
+ # Extends the API for constants to be able to deal with qualified names. Arguments
21
+ # are assumed to be relative to the receiver.
22
+ #
23
+ #--
24
+ # Qualified names are required to be relative because we are extending existing
25
+ # methods that expect constant names, ie, relative paths of length 1. For example,
26
+ # Object.const_get('::String') raises NameError and so does qualified_const_get.
27
+ #++
28
+ class Module
29
+ def qualified_const_defined?(path, search_parents=true)
30
+ ActiveSupport::Deprecation.warn(<<-MESSAGE.squish)
31
+ Module#qualified_const_defined? is deprecated in favour of the builtin
32
+ Module#const_defined? and will be removed in Rails 5.1.
33
+ MESSAGE
34
+
35
+ ActiveSupport::QualifiedConstUtils.raise_if_absolute(path)
36
+
37
+ ActiveSupport::QualifiedConstUtils.names(path).inject(self) do |mod, name|
38
+ return unless mod.const_defined?(name, search_parents)
39
+ mod.const_get(name)
40
+ end
41
+ return true
42
+ end
43
+
44
+ def qualified_const_get(path)
45
+ ActiveSupport::Deprecation.warn(<<-MESSAGE.squish)
46
+ Module#qualified_const_get is deprecated in favour of the builtin
47
+ Module#const_get and will be removed in Rails 5.1.
48
+ MESSAGE
49
+
50
+ ActiveSupport::QualifiedConstUtils.raise_if_absolute(path)
51
+
52
+ ActiveSupport::QualifiedConstUtils.names(path).inject(self) do |mod, name|
53
+ mod.const_get(name)
54
+ end
55
+ end
56
+
57
+ def qualified_const_set(path, value)
58
+ ActiveSupport::Deprecation.warn(<<-MESSAGE.squish)
59
+ Module#qualified_const_set is deprecated in favour of the builtin
60
+ Module#const_set and will be removed in Rails 5.1.
61
+ MESSAGE
62
+
63
+ ActiveSupport::QualifiedConstUtils.raise_if_absolute(path)
64
+
65
+ const_name = path.demodulize
66
+ mod_name = path.deconstantize
67
+ mod = mod_name.empty? ? self : const_get(mod_name)
68
+ mod.const_set(const_name, value)
69
+ end
70
+ end
@@ -0,0 +1,8 @@
1
+ require 'active_support/core_ext/module/anonymous'
2
+ require 'active_support/core_ext/string/inflections'
3
+
4
+ class Module
5
+ def reachable? #:nodoc:
6
+ !anonymous? && name.safe_constantize.equal?(self)
7
+ end
8
+ end
@@ -0,0 +1,35 @@
1
+ class Module
2
+ # Removes the named method, if it exists.
3
+ def remove_possible_method(method)
4
+ if method_defined?(method) || private_method_defined?(method)
5
+ undef_method(method)
6
+ end
7
+ end
8
+
9
+ # Removes the named singleton method, if it exists.
10
+ def remove_possible_singleton_method(method)
11
+ singleton_class.instance_eval do
12
+ remove_possible_method(method)
13
+ end
14
+ end
15
+
16
+ # Replaces the existing method definition, if there is one, with the passed
17
+ # block as its body.
18
+ def redefine_method(method, &block)
19
+ visibility = method_visibility(method)
20
+ remove_possible_method(method)
21
+ define_method(method, &block)
22
+ send(visibility, method)
23
+ end
24
+
25
+ def method_visibility(method) # :nodoc:
26
+ case
27
+ when private_method_defined?(method)
28
+ :private
29
+ when protected_method_defined?(method)
30
+ :protected
31
+ else
32
+ :public
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,31 @@
1
+ class NameError
2
+ # Extract the name of the missing constant from the exception message.
3
+ #
4
+ # begin
5
+ # HelloWorld
6
+ # rescue NameError => e
7
+ # e.missing_name
8
+ # end
9
+ # # => "HelloWorld"
10
+ def missing_name
11
+ if /undefined local variable or method/ !~ message
12
+ $1 if /((::)?([A-Z]\w*)(::[A-Z]\w*)*)$/ =~ message
13
+ end
14
+ end
15
+
16
+ # Was this exception raised because the given name was missing?
17
+ #
18
+ # begin
19
+ # HelloWorld
20
+ # rescue NameError => e
21
+ # e.missing_name?("HelloWorld")
22
+ # end
23
+ # # => true
24
+ def missing_name?(name)
25
+ if name.is_a? Symbol
26
+ self.name == name
27
+ else
28
+ missing_name == name.to_s
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,4 @@
1
+ require 'active_support/core_ext/numeric/bytes'
2
+ require 'active_support/core_ext/numeric/time'
3
+ require 'active_support/core_ext/numeric/inquiry'
4
+ require 'active_support/core_ext/numeric/conversions'
@@ -0,0 +1,64 @@
1
+ class Numeric
2
+ KILOBYTE = 1024
3
+ MEGABYTE = KILOBYTE * 1024
4
+ GIGABYTE = MEGABYTE * 1024
5
+ TERABYTE = GIGABYTE * 1024
6
+ PETABYTE = TERABYTE * 1024
7
+ EXABYTE = PETABYTE * 1024
8
+
9
+ # Enables the use of byte calculations and declarations, like 45.bytes + 2.6.megabytes
10
+ #
11
+ # 2.bytes # => 2
12
+ def bytes
13
+ self
14
+ end
15
+ alias :byte :bytes
16
+
17
+ # Returns the number of bytes equivalent to the kilobytes provided.
18
+ #
19
+ # 2.kilobytes # => 2048
20
+ def kilobytes
21
+ self * KILOBYTE
22
+ end
23
+ alias :kilobyte :kilobytes
24
+
25
+ # Returns the number of bytes equivalent to the megabytes provided.
26
+ #
27
+ # 2.megabytes # => 2_097_152
28
+ def megabytes
29
+ self * MEGABYTE
30
+ end
31
+ alias :megabyte :megabytes
32
+
33
+ # Returns the number of bytes equivalent to the gigabytes provided.
34
+ #
35
+ # 2.gigabytes # => 2_147_483_648
36
+ def gigabytes
37
+ self * GIGABYTE
38
+ end
39
+ alias :gigabyte :gigabytes
40
+
41
+ # Returns the number of bytes equivalent to the terabytes provided.
42
+ #
43
+ # 2.terabytes # => 2_199_023_255_552
44
+ def terabytes
45
+ self * TERABYTE
46
+ end
47
+ alias :terabyte :terabytes
48
+
49
+ # Returns the number of bytes equivalent to the petabytes provided.
50
+ #
51
+ # 2.petabytes # => 2_251_799_813_685_248
52
+ def petabytes
53
+ self * PETABYTE
54
+ end
55
+ alias :petabyte :petabytes
56
+
57
+ # Returns the number of bytes equivalent to the exabytes provided.
58
+ #
59
+ # 2.exabytes # => 2_305_843_009_213_693_952
60
+ def exabytes
61
+ self * EXABYTE
62
+ end
63
+ alias :exabyte :exabytes
64
+ end
@@ -0,0 +1,144 @@
1
+ require 'active_support/core_ext/big_decimal/conversions'
2
+ require 'active_support/number_helper'
3
+ require 'active_support/core_ext/module/deprecation'
4
+
5
+ module ActiveSupport::NumericWithFormat
6
+
7
+ # Provides options for converting numbers into formatted strings.
8
+ # Options are provided for phone numbers, currency, percentage,
9
+ # precision, positional notation, file size and pretty printing.
10
+ #
11
+ # ==== Options
12
+ #
13
+ # For details on which formats use which options, see ActiveSupport::NumberHelper
14
+ #
15
+ # ==== Examples
16
+ #
17
+ # Phone Numbers:
18
+ # 5551234.to_s(:phone) # => "555-1234"
19
+ # 1235551234.to_s(:phone) # => "123-555-1234"
20
+ # 1235551234.to_s(:phone, area_code: true) # => "(123) 555-1234"
21
+ # 1235551234.to_s(:phone, delimiter: ' ') # => "123 555 1234"
22
+ # 1235551234.to_s(:phone, area_code: true, extension: 555) # => "(123) 555-1234 x 555"
23
+ # 1235551234.to_s(:phone, country_code: 1) # => "+1-123-555-1234"
24
+ # 1235551234.to_s(:phone, country_code: 1, extension: 1343, delimiter: '.')
25
+ # # => "+1.123.555.1234 x 1343"
26
+ #
27
+ # Currency:
28
+ # 1234567890.50.to_s(:currency) # => "$1,234,567,890.50"
29
+ # 1234567890.506.to_s(:currency) # => "$1,234,567,890.51"
30
+ # 1234567890.506.to_s(:currency, precision: 3) # => "$1,234,567,890.506"
31
+ # 1234567890.506.to_s(:currency, locale: :fr) # => "1 234 567 890,51 €"
32
+ # -1234567890.50.to_s(:currency, negative_format: '(%u%n)')
33
+ # # => "($1,234,567,890.50)"
34
+ # 1234567890.50.to_s(:currency, unit: '&pound;', separator: ',', delimiter: '')
35
+ # # => "&pound;1234567890,50"
36
+ # 1234567890.50.to_s(:currency, unit: '&pound;', separator: ',', delimiter: '', format: '%n %u')
37
+ # # => "1234567890,50 &pound;"
38
+ #
39
+ # Percentage:
40
+ # 100.to_s(:percentage) # => "100.000%"
41
+ # 100.to_s(:percentage, precision: 0) # => "100%"
42
+ # 1000.to_s(:percentage, delimiter: '.', separator: ',') # => "1.000,000%"
43
+ # 302.24398923423.to_s(:percentage, precision: 5) # => "302.24399%"
44
+ # 1000.to_s(:percentage, locale: :fr) # => "1 000,000%"
45
+ # 100.to_s(:percentage, format: '%n %') # => "100.000 %"
46
+ #
47
+ # Delimited:
48
+ # 12345678.to_s(:delimited) # => "12,345,678"
49
+ # 12345678.05.to_s(:delimited) # => "12,345,678.05"
50
+ # 12345678.to_s(:delimited, delimiter: '.') # => "12.345.678"
51
+ # 12345678.to_s(:delimited, delimiter: ',') # => "12,345,678"
52
+ # 12345678.05.to_s(:delimited, separator: ' ') # => "12,345,678 05"
53
+ # 12345678.05.to_s(:delimited, locale: :fr) # => "12 345 678,05"
54
+ # 98765432.98.to_s(:delimited, delimiter: ' ', separator: ',')
55
+ # # => "98 765 432,98"
56
+ #
57
+ # Rounded:
58
+ # 111.2345.to_s(:rounded) # => "111.235"
59
+ # 111.2345.to_s(:rounded, precision: 2) # => "111.23"
60
+ # 13.to_s(:rounded, precision: 5) # => "13.00000"
61
+ # 389.32314.to_s(:rounded, precision: 0) # => "389"
62
+ # 111.2345.to_s(:rounded, significant: true) # => "111"
63
+ # 111.2345.to_s(:rounded, precision: 1, significant: true) # => "100"
64
+ # 13.to_s(:rounded, precision: 5, significant: true) # => "13.000"
65
+ # 111.234.to_s(:rounded, locale: :fr) # => "111,234"
66
+ # 13.to_s(:rounded, precision: 5, significant: true, strip_insignificant_zeros: true)
67
+ # # => "13"
68
+ # 389.32314.to_s(:rounded, precision: 4, significant: true) # => "389.3"
69
+ # 1111.2345.to_s(:rounded, precision: 2, separator: ',', delimiter: '.')
70
+ # # => "1.111,23"
71
+ #
72
+ # Human-friendly size in Bytes:
73
+ # 123.to_s(:human_size) # => "123 Bytes"
74
+ # 1234.to_s(:human_size) # => "1.21 KB"
75
+ # 12345.to_s(:human_size) # => "12.1 KB"
76
+ # 1234567.to_s(:human_size) # => "1.18 MB"
77
+ # 1234567890.to_s(:human_size) # => "1.15 GB"
78
+ # 1234567890123.to_s(:human_size) # => "1.12 TB"
79
+ # 1234567890123456.to_s(:human_size) # => "1.1 PB"
80
+ # 1234567890123456789.to_s(:human_size) # => "1.07 EB"
81
+ # 1234567.to_s(:human_size, precision: 2) # => "1.2 MB"
82
+ # 483989.to_s(:human_size, precision: 2) # => "470 KB"
83
+ # 1234567.to_s(:human_size, precision: 2, separator: ',') # => "1,2 MB"
84
+ # 1234567890123.to_s(:human_size, precision: 5) # => "1.1228 TB"
85
+ # 524288000.to_s(:human_size, precision: 5) # => "500 MB"
86
+ #
87
+ # Human-friendly format:
88
+ # 123.to_s(:human) # => "123"
89
+ # 1234.to_s(:human) # => "1.23 Thousand"
90
+ # 12345.to_s(:human) # => "12.3 Thousand"
91
+ # 1234567.to_s(:human) # => "1.23 Million"
92
+ # 1234567890.to_s(:human) # => "1.23 Billion"
93
+ # 1234567890123.to_s(:human) # => "1.23 Trillion"
94
+ # 1234567890123456.to_s(:human) # => "1.23 Quadrillion"
95
+ # 1234567890123456789.to_s(:human) # => "1230 Quadrillion"
96
+ # 489939.to_s(:human, precision: 2) # => "490 Thousand"
97
+ # 489939.to_s(:human, precision: 4) # => "489.9 Thousand"
98
+ # 1234567.to_s(:human, precision: 4,
99
+ # significant: false) # => "1.2346 Million"
100
+ # 1234567.to_s(:human, precision: 1,
101
+ # separator: ',',
102
+ # significant: false) # => "1,2 Million"
103
+ def to_s(format = nil, options = nil)
104
+ case format
105
+ when nil
106
+ super()
107
+ when Integer, String
108
+ super(format)
109
+ when :phone
110
+ return ActiveSupport::NumberHelper.number_to_phone(self, options || {})
111
+ when :currency
112
+ return ActiveSupport::NumberHelper.number_to_currency(self, options || {})
113
+ when :percentage
114
+ return ActiveSupport::NumberHelper.number_to_percentage(self, options || {})
115
+ when :delimited
116
+ return ActiveSupport::NumberHelper.number_to_delimited(self, options || {})
117
+ when :rounded
118
+ return ActiveSupport::NumberHelper.number_to_rounded(self, options || {})
119
+ when :human
120
+ return ActiveSupport::NumberHelper.number_to_human(self, options || {})
121
+ when :human_size
122
+ return ActiveSupport::NumberHelper.number_to_human_size(self, options || {})
123
+ when Symbol
124
+ super()
125
+ else
126
+ super(format)
127
+ end
128
+ end
129
+
130
+ def to_formatted_s(*args)
131
+ to_s(*args)
132
+ end
133
+ deprecate to_formatted_s: :to_s
134
+ end
135
+
136
+ # Ruby 2.4+ unifies Fixnum & Bignum into Integer.
137
+ if 0.class == Integer
138
+ Integer.prepend ActiveSupport::NumericWithFormat
139
+ else
140
+ Fixnum.prepend ActiveSupport::NumericWithFormat
141
+ Bignum.prepend ActiveSupport::NumericWithFormat
142
+ end
143
+ Float.prepend ActiveSupport::NumericWithFormat
144
+ BigDecimal.prepend ActiveSupport::NumericWithFormat