chainable 0.1.0 → 0.1.1

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 (3) hide show
  1. data/README.rdoc +13 -6
  2. data/lib/chainable.rb +10 -1
  3. metadata +1 -1
data/README.rdoc CHANGED
@@ -3,13 +3,13 @@
3
3
  This is heavy ruby abuse. It even got the Evil of the Day Award™ from zenspider.
4
4
 
5
5
  == Thou shalt not use alias_method_chain!
6
- - http://yehudakatz.com/2009/03/06/alias_method_chain-in-models/
7
- - http://yehudakatz.com/2009/01/18/other-ways-to-wrap-a-method/
6
+ - http://yehudakatz.com/2009/03/06/alias_method_chain-in-models
7
+ - http://yehudakatz.com/2009/01/18/other-ways-to-wrap-a-method
8
8
  - http://www.codefluency.com/articles/2009/01/03/wrapping-a-method-in-ruby
9
9
 
10
10
  == What it does
11
11
  Chainable is an alternative to alias_method_chain, that uses inheritance, rather
12
- than aliasing. Instead it does the following when "chaining" a method:
12
+ than aliasing. It does the following when "chaining" a method:
13
13
 
14
14
  - copy the original method to a new model
15
15
  - include the model
@@ -17,8 +17,8 @@ than aliasing. Instead it does the following when "chaining" a method:
17
17
 
18
18
  Thus you can use super and keep your method list clean, too!
19
19
  It even supports a (rather dangerous) auto chaining mode, so you do not have
20
- to explicitly chain a method, but chain a method when ever it would be
21
- overwritten.
20
+ to explicitly chain a method, but chain a method whenever it would be
21
+ overwritten instead.
22
22
 
23
23
 
24
24
  Example:
@@ -64,4 +64,11 @@ Of course you can do this with any class (or module):
64
64
  return super if block_given? or RUBY_VERSION >= "1.8.7"
65
65
  MyStuff::Enumerator.new self, :each
66
66
  end
67
- end
67
+ end
68
+
69
+ == Installation
70
+ Add github gems, if you haven't already:
71
+ gem sources -a http://gems.github.com
72
+
73
+ Install gem:
74
+ gem install rkh-chainable
data/lib/chainable.rb CHANGED
@@ -9,6 +9,11 @@ module Chainable
9
9
  @auto_chain = false
10
10
  end
11
11
 
12
+ # This will "chain" a method (read: push it to a module and include it).
13
+ # If a block is given, it will do a define_method(name, &block).
14
+ # Maybe that is not what you want, as methods defined by def tend to be
15
+ # faster. If that is the case, simply don't pass the block and call def
16
+ # after chain_method instead.
12
17
  def chain_method(name, &block)
13
18
  name = name.to_s
14
19
  if instance_methods(false).include? name
@@ -24,7 +29,11 @@ module Chainable
24
29
  define_method(name, &block)
25
30
  end
26
31
 
27
- def auto_chain &block
32
+ # If you define a method inside a block passed to auto_chain, chain_method
33
+ # will be called on that method right after it has been defined. This will
34
+ # only affect methods defined for the class (or module) auto_chain has been
35
+ # send to. See README.rdoc or spec/chainable/auto_chain_spec.rb for examples.
36
+ def auto_chain
28
37
  class << self
29
38
  chain_method :method_added do |name|
30
39
  Chainable.skip_chain { chain_method name }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chainable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Haase