Module: Polyfill
- Defined in:
- lib/polyfill.rb,
lib/polyfill/v2_2.rb,
lib/polyfill/v2_3.rb,
lib/polyfill/v2_4.rb,
lib/polyfill/v2_5.rb,
lib/polyfill/v2_6.rb,
lib/polyfill/v2_4/io.rb,
lib/polyfill/version.rb,
lib/polyfill/v2_4/dir.rb,
lib/polyfill/v2_5/dir.rb,
lib/polyfill/v2_5/set.rb,
lib/polyfill/v2_2/math.rb,
lib/polyfill/v2_3/hash.rb,
lib/polyfill/v2_4/file.rb,
lib/polyfill/v2_4/hash.rb,
lib/polyfill/v2_5/hash.rb,
lib/polyfill/v2_5/time.rb,
lib/polyfill/v2_6/hash.rb,
lib/polyfill/v2_2/prime.rb,
lib/polyfill/v2_3/array.rb,
lib/polyfill/v2_3/prime.rb,
lib/polyfill/v2_4/array.rb,
lib/polyfill/v2_4/float.rb,
lib/polyfill/v2_5/array.rb,
lib/polyfill/v2_2/kernel.rb,
lib/polyfill/v2_2/vector.rb,
lib/polyfill/v2_3/kernel.rb,
lib/polyfill/v2_3/string.rb,
lib/polyfill/v2_3/struct.rb,
lib/polyfill/v2_4/object.rb,
lib/polyfill/v2_4/regexp.rb,
lib/polyfill/v2_4/string.rb,
lib/polyfill/v2_4/symbol.rb,
lib/polyfill/v2_5/kernel.rb,
lib/polyfill/v2_5/string.rb,
lib/polyfill/v2_5/struct.rb,
lib/polyfill/v2_6/kernel.rb,
lib/polyfill/v2_3/numeric.rb,
lib/polyfill/v2_4/integer.rb,
lib/polyfill/v2_4/numeric.rb,
lib/polyfill/v2_5/integer.rb,
lib/polyfill/v2_4/i_p_addr.rb,
lib/polyfill/v2_4/pathname.rb,
lib/polyfill/internal_utils.rb,
lib/polyfill/v2_4/string_io.rb,
lib/polyfill/v2_2/enumerable.rb,
lib/polyfill/v2_3/enumerable.rb,
lib/polyfill/v2_4/comparable.rb,
lib/polyfill/v2_4/enumerable.rb,
lib/polyfill/v2_4/match_data.rb,
lib/polyfill/v2_5/enumerable.rb,
lib/polyfill/v2_5/big_decimal.rb,
lib/polyfill/v2_3/enumerator/lazy.rb,
lib/polyfill/v2_4/enumerator/lazy.rb
Defined Under Namespace
Modules: InternalUtils, Module, V2_2, V2_3, V2_4, V2_5, V2_6
Constant Summary collapse
- VERSION =
Gem::Version.new('1.6.0'.freeze)
Class Method Summary collapse
Class Method Details
.get(module_name, methods, options = {}) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/polyfill.rb', line 7 def get(module_name, methods, = {}) if Object.const_get(module_name.to_s, false).is_a?(Class) raise ArgumentError, "#{module_name} is a class not a module" end # # parse options # versions = InternalUtils.polyfill_versions_to_use(.delete(:version)) unless .empty? raise ArgumentError, "unknown keyword: #{options.first[0]}" end # # find all polyfills for the module across all versions # modules_with_updates, modules = InternalUtils.modules_to_use(module_name, versions) # # remove methods that were not requested # requested_methods = InternalUtils.methods_to_keep(modules_with_updates, methods, '#', module_name) modules.each do |instance_module| InternalUtils.keep_only_these_methods!(instance_module, requested_methods) end # # build the module to return # InternalUtils.create_module do |mod| # make sure the methods get added if this module is included mod.singleton_class.send(:define_method, :included) do |base| modules.each do |module_to_add| base.include module_to_add unless module_to_add.instance_methods.empty? end end # make sure the methods get added if this module is extended mod.singleton_class.send(:define_method, :extended) do |base| modules.each do |module_to_add| base.extend module_to_add unless module_to_add.instance_methods.empty? end end # make sure the methods get added if this module is prepended mod.singleton_class.send(:define_method, :prepended) do |base| modules.each do |module_to_add| base.prepend module_to_add unless module_to_add.instance_methods.empty? end end end end |