methodchain 0.3.0 → 0.3.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.
data/Rakefile CHANGED
@@ -134,15 +134,17 @@ require 'rake/gempackagetask'
134
134
  spec = Gem::Specification.new do |s|
135
135
  s.name = project
136
136
  s.rubyforge_project = project
137
- s.version = "0.3.0"
137
+ s.version = "0.3.1"
138
138
  s.author = "Greg Weber"
139
139
  s.email = "greg@gregweber.info"
140
140
  s.homepage = "http://projects.gregweber.info/#{project}"
141
141
  s.platform = Gem::Platform::RUBY
142
142
  s.summary = "convenience methods for method chaining"
143
- s.files = FileList.new('./**', '*/**') do |fl|
144
- fl.exclude('pkg','pkg/*','tmp','tmp/*')
143
+ s.files =
144
+ FileList.new('./**', '*/**', 'lib/methodchain/*') do |fl|
145
+ fl.exclude('pkg','pkg/*','tmp','tmp/*', 'coverage', 'coverage/*')
145
146
  end
147
+ p s.files
146
148
  s.require_path = "lib"
147
149
  s.has_rdoc = true
148
150
  s.extra_rdoc_files = ["README"]
data/doc/created.rid CHANGED
@@ -1 +1 @@
1
- Sun, 16 Mar 2008 10:24:28 -0500
1
+ Mon, 17 Mar 2008 08:17:16 -0500
@@ -0,0 +1,71 @@
1
+ # :main: README
2
+ module MethodChain
3
+
4
+ private
5
+
6
+ # arg = Message | Code
7
+ # Message = Symbol | [Symbol, *arguments]
8
+ # Code.to_proc = Proc
9
+ def send_as_function arg
10
+ case arg
11
+ when Symbol then __send__ arg
12
+ when Array then __send__(*arg)
13
+ else yield_or_eval(&arg)
14
+ end
15
+ end
16
+
17
+ # send_as_function with multiple args, returns self
18
+ def send_as_functions *args
19
+ args.each {|arg| send_as_function arg}
20
+ self
21
+ end
22
+
23
+ # yield or instance_eval based on the block arity
24
+ def yield_or_eval &block
25
+ case block.arity
26
+ # ruby bug for -1
27
+ when 0, -1 then instance_eval(&block)
28
+ when 1 then yield(self)
29
+ else raise ArgumentError, "too many arguments required by block"
30
+ end
31
+ end
32
+
33
+ public
34
+
35
+ # send messages, evaluate blocks, but always return self
36
+ def tap *messages, &block
37
+ send_as_functions *messages unless messages.empty?
38
+ yield_or_eval(&block) if block_given?
39
+ self
40
+ end
41
+
42
+ # method chaining with a guard.
43
+ # If no guard block is given then guard against nil and false
44
+ def chain *messages, &guard
45
+ return self if messages.empty? or not(
46
+ (block_given? ? (yield_or_eval(&guard)) : self))
47
+
48
+ (send_as_function (messages.shift)).chain(*messages, &guard)
49
+ end
50
+
51
+ # return self if self evaluates to false, otherwise
52
+ # evaluate the block or return the default argument
53
+ def then default=nil, &block
54
+ if self
55
+ block_given? ? (yield_or_eval(&block)) : (default || (fail \
56
+ ArgumentError, "#then must be called with an argument or a block"))
57
+ else
58
+ self
59
+ end
60
+ end
61
+
62
+ # the inverse of then
63
+ def else arg=nil, &block
64
+ if self
65
+ self
66
+ else
67
+ block_given? ? (yield_or_eval(&block)) : (arg || (fail \
68
+ ArgumentError, "#else must be called with an argument or a bloc"))
69
+ end
70
+ end
71
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: methodchain
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.0
7
- date: 2008-03-16 00:00:00 -05:00
6
+ version: 0.3.1
7
+ date: 2008-03-17 00:00:00 -05:00
8
8
  summary: convenience methods for method chaining
9
9
  require_paths:
10
10
  - lib
@@ -34,7 +34,6 @@ files:
34
34
  - ./spec
35
35
  - ./Rakefile
36
36
  - ./README
37
- - ./coverage
38
37
  - doc/files
39
38
  - doc/index.html
40
39
  - doc/rdoc-style.css
@@ -46,10 +45,7 @@ files:
46
45
  - lib/methodchain
47
46
  - lib/methodchain.rb
48
47
  - spec/methodchain_spec.rb
49
- - coverage/lib-methodchain_rb.html
50
- - coverage/index.html
51
- - coverage/-var-lib-gems-1_8-gems-rcov-0_8_0_2-lib-rcov_rb.html
52
- - coverage/lib-methodchain-not_included_rb.html
48
+ - lib/methodchain/not-included.rb
53
49
  - README
54
50
  test_files: []
55
51