Граф коммитов

88 Коммитов

Автор SHA1 Сообщение Дата
zzak 0a4129cb7a * lib/delegate.rb: Remove backtrace cleaning for delegated methods
This patch was provided by Rafael França and greatly improves
  performance when an exception is raised. [Bug #11461]

  Before:
    Calculating -------------------------------------
             default    86.209k i/100ms
     default raising     2.209k i/100ms
    -------------------------------------------------
             default      1.953M (±11.0%) i/s -      9.655M
     default raising     21.826k (±13.5%) i/s -    108.241k

  After:
    Calculating -------------------------------------
             default    72.211k i/100ms
     default raising    34.288k i/100ms
    -------------------------------------------------
             default      2.013M (±18.7%) i/s -      9.460M
     default raising    623.950k (± 9.7%) i/s -      3.120M

  Benchmark:
    require 'delegate'
    require 'benchmark/ips'

    class Foo
      def name
        'foo'
      end

      def bla
        raise
      end
    end

    class Bar < DelegateClass(Foo)
    end

    bar = Bar.new(Foo.new)

    Benchmark.ips do |b|
      b.report('default') { bar.name }
      b.report('default raising') { bar.bla rescue nil }
    end


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-09 02:12:52 +00:00
eregon 3f2d575f8c * lib/delegate.rb: [DOC] Update SimpleDelegator example. [ci skip]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50878 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-06-13 19:17:19 +00:00
hsbt bd29cec6bb * lib/delegate.rb: fix a typo.
[fix GH-881][ci skip] Patch by @Zorbash

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50370 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-04-23 01:01:44 +00:00
hsbt 6d6bd26270 * lib/delegate.rb: split executable code into sample directory.
* sample/delegate.rb: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46966 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-26 17:11:56 +00:00
zzak cfe2cbda54 * lib/delegate.rb: [DOC] Document raise in Delegator class
Patch by @lucasmazza. [Fixes GH-621]
  https://github.com/ruby/ruby/pull/621


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-30 18:52:30 +00:00
ayumin 2ff10784e4 * lib/delegate.rb: Fix example of using delegator.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-08 19:02:36 +00:00
nobu bcaec55695 delegate.rb: keep special methods
* lib/delegate.rb (Delegator): keep source information methods
  which start and end with '__'.  [ruby-core:58572] [Bug #9155]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-17 11:05:03 +00:00
nobu fc4de12302 delegate.rb: ignore unset target
* lib/delegate.rb (Delegator#method_missing): ignore the target if not
  set, and delegate to global methods.  [ruby-core:58572] [Bug #9155]
* lib/delegate.rb (Delegator#respond_to_missing): ditto.
* lib/delegate.rb (SimpleDelegator#__getobj__): yield and return if
  not delegated but a block is given, like as Hash#fetch.
* lib/delegate.rb (DelegateClass#__getobj__): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-04 03:47:57 +00:00
nobu bb6607404a delegate.rb: check if target is set
* lib/delegate.rb (SimpleDelegator#__getobj__): target object must be set.
* lib/delegate.rb (DelegateClass#__getobj__): ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43759 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-21 09:47:31 +00:00
nobu 594eec5b7d delegate.rb: try private methods after the target
* lib/delegate.rb (Delegator#method_missing): try private methods defined in
  Kernel after the target.  [Fixes GH-449]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43752 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-21 07:33:01 +00:00
nobu a9a6c103e5 delegate.rb: refix r43682
* lib/delegate.rb (Delegator#send): separate from method_missing so
  that super calls proper method.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43727 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-19 16:27:40 +00:00
nobu ca5739979d delegate.rb: get rid of global function interference
* lib/delegate.rb (Delegator#send): override to get rid of global function interference.
  [Fixes GH-449]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-15 08:07:39 +00:00
zzak 0357488b43 * lib/delegate.rb: Add example for __setobj__ and __getobj__
[Bug #8615] Patch by Caleb Thompson


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-10 15:50:23 +00:00
drbrain 1d7798dc75 * lib/delegate.rb: Added documentation for Delegator#!. Patch by
Zachary Scott.  [ruby-trunk - Feature #6534]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-06-08 22:46:49 +00:00
naruse 6e56d645f0 * lib/delegate.rb (Delegator#methods): Kernel#methods receives
zero or one argument. [ruby-core:37118] [Bug #4882]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33939 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-12-04 03:05:03 +00:00
drbrain cfb37052cb * lib/delegate.rb: Move file-level documentation to the appropriate
classes.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32713 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-07-27 19:53:44 +00:00
nobu d371e3583e * lib: revert r31635-r31638 and untabify with expand(1).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-19 00:07:25 +00:00
drbrain 7bbf2f3085 * lib: Convert tabs to spaces for ruby files per
http://redmine.ruby-lang.org/projects/ruby/wiki/DeveloperHowto#coding-style
	  Patch by Steve Klabnik [Ruby 1.9 - Bug #4730]
	  Patch by Jason Dew [Ruby 1.9 - Feature #4718]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-05-18 21:19:18 +00:00
marcandre 6233ed4dcd * lib/delegate.rb: Forward #trust, #untrust, #taint and #untaint
to both the delegator and __getobj__ [ruby-core:26138]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-06-22 04:23:59 +00:00
marcandre 0486db01fd * lib/delegate.rb: Delegate !=, eql? and hash [ruby-core:26139]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28309 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-06-12 19:25:03 +00:00
marcandre 89efbfe0fa * lib/delegate: Delegator: combine (public|protected) methods with
those of the delegated object. [ruby-core:27224]
  DelegateClass: combine (public|protected) instance methods
  with those of the delegated superclass.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28099 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-30 16:43:52 +00:00
naruse e707e05fe8 Fix :nodoc: definition. [ruby-dev:40949]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27287 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-10 22:09:09 +00:00
matz a7926befe0 * object.c (rb_obj_clone): call initialize_clone hook method to
call initialize_copy.

* object.c (rb_obj_dup): call initialize_dup hook.

* lib/delegate.rb (Delegator#initialize_clone): use new hook to
  implement deep copy.  [ruby-dev:40242]

* lib/delegate.rb (Delegator#initialize_dup): ditto.

* test/test_delegate.rb (TestDelegateClass#test_copy_frozen): add
  a test to ensure #clone copies frozen status.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-02-08 07:43:54 +00:00
nobu a6569ad637 * lib/delegate.rb (Delegator#method_missing),
(Delegator.delegating_block): don't hide backtrace from
  __getobj__ and reduced exception messages when $DEBUG.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26592 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-02-06 03:02:40 +00:00
nobu 7873c05684 * lib/delegate.rb (Delegator): include copy of Kernel.
[ruby-dev:40314]

* lib/delegate.rb (Delegator#{dup,clone}): class of copy should be
  Delegator.  [ruby-dev:40313]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26580 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-02-05 07:38:10 +00:00
nobu 10e8419da6 * lib/delegate.rb (Delegator): now inherits BasicObject.
[ruby-dev:39154], [Bug #2679], [ruby-dev:40242]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26566 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-02-03 23:15:55 +00:00
nobu bafb881c1f * lib/delegate.rb (Delegator#marshal_dump): exclude
delegator-specific instance variables.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26539 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-02-02 02:14:00 +00:00
matz d9e84f2327 * lib/delegate.rb (Delegator#initialize_copy): use initialize_copy
instead of overriding clone/dup.  [ruby-dev:40221]
  it now always clones the target, it might cause incompatibility.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26462 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-01-28 16:47:21 +00:00
marcandre 92ab16fac6 * lib/delegate.rb (marshal_dump/load): Provide forward compatibility [ruby-core:24211]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-29 01:56:55 +00:00
marcandre ab2a02348b * lib/delegate.rb (marshal_dump/load): dump & load instance variables by default [ruby-core:24211]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-24 03:08:15 +00:00
matz 51f033f853 * object.c (rb_obj_cmp): defines Object#<=>. [ruby-core:24063]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25453 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-24 16:48:05 +00:00
matz eccb700286 * vm_method.c (basic_obj_respond_to): call #respond_to_missing?
always with two arguments.  [ruby-core:26090]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25381 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-17 05:34:51 +00:00
matz c02e47c4e0 * lib/delegate.rb (Delegator#respond_to_missing): warn only when
specified method is a private.  [ruby-dev:39498]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25380 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-17 04:22:58 +00:00
marcandre b73be705db * lib/delegate: rdoc typo
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25379 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-16 19:20:35 +00:00
matz 78fea69776 * lib/delegate.rb (Delegator#method_missing): remove backtrace
lines _until_ `method_missing'.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25375 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-16 11:20:06 +00:00
matz 749b3aa794 * lib/delegate.rb (Delegator#freeze): #freeze should freeze self
and the target at once.   [ruby-core:26118]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-16 11:11:00 +00:00
matz fbf15be35f * lib/delegate.rb (Delegator#respond_to_missing): warn if optional
include_private argument is not false.  Delegator does (and
  should) not forward private methods.  [ruby-core:26080]

* lib/delegate.rb (Delegator#respond_to_missing): instead of
  redefining #respond_to?, use #respond_to_missing?.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-16 11:04:15 +00:00
matz e1797bc7dd * lib/delegate.rb (Delegator::public_api): take snapshot of
public method at the beginning time.

* lib/delegate.rb (SimpleDelegator#initialize): use
  Delegator.public_api since public_method might be added after
  initialization.  [ruby-dev:39383]

* lib/delegate.rb (DelegateClass): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25245 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-06 13:07:12 +00:00
matz eadc3604c0 * lib/delegate.rb (Delegator#method_missing): __FILE__ may contain
multi-byte characters.  a patch from Kenta Murata in [ruby-dev:39066].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24531 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-08-13 15:21:32 +00:00
nobu 287a34ae0d * {ext,lib,test}/**/*.rb: removed trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-03-06 03:56:38 +00:00
matz 504abcc00f * lib/delegate.rb (Delegator.delegating_block): should not refer
DelegateClass specific @delegate_dc_obj.  a patch from Erik
  Hollensbe in [ruby-core:19671].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20169 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-10 01:52:46 +00:00
matz 7a0acc7eee * lib/delegate.rb (DelegateClass): restored 1.8 behavior for
DelegateClass as well.  [ruby-dev:36739]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19795 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-10-15 14:12:15 +00:00
matz f9c35bce1b * lib/delegate.rb (Delegator): simplified and restored 1.8
behavior.  [ruby-dev:35986]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19786 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-10-14 14:21:25 +00:00
matz e6c1752137 * lib/rdoc.rb: massive spelling correction patch from Evan Farrar
<evanfarrar at gmail.com> in [ruby-doc:1382] applied.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16810 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-04 09:37:38 +00:00
knu c147806901 * lib/delegate.rb (Delegator::MethodDelegation#respond_to):
respond_to? should now take optional second argument; submitted
  by Jeremy Kemper <jeremy at bitsweat.net> in [ruby-core:17045].


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16751 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-02 07:29:03 +00:00
nobu 23757bce57 * lib/delegate.rb (DelegateClass): use define_method instead of
module_eval to improve performance.  [ruby-dev:33586]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15376 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-02-04 12:52:08 +00:00
usa 00f34f9274 * lib/delegate.rb (Delegator.preserved, DelegateClass.methods): extend
shouldn't be delegated. [ruby-dev:32987], etc.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-02-04 05:01:00 +00:00
matz 373d43f61e * eval.c (Init_eval): move instance_eval and instance_exec to
BasicObject.  [ruby-core:14747]

* lib/delegate.rb: should preserve new methods in BasicObject.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-01-04 16:51:16 +00:00
matz 5ee029f62c * eval.c (rb_f_public_send): rename invoke_method to public_send.
it now invokes public method only no matter how it's called.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14173 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-12-10 05:34:50 +00:00
matz 1eee78b876 * eval.c (rb_f_send): allow send/__send__ to call methods of all
visibility again.  we no longer provide __send, __send!.

* eval.c (rb_invoke_method): new method to honor private
  visibility.  if it's invoked in a function call style, it calls
  private methods as well (previous 1.9 send behavior).

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13824 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-11-04 20:36:20 +00:00