mixers 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY CHANGED
@@ -0,0 +1,19 @@
1
+ = RELEASE HISTORY
2
+
3
+ == 1.2.0 / 2010-10-12
4
+
5
+ This release deprecates the Advisable mixin, as it was not
6
+ operating correctly, and I beleive requires a complete rewrite
7
+ to do so --which I am not endeavoring into because it has become
8
+ clear there are much better ways to appoach the needs it addressed.
9
+
10
+ == 1.1.0 / 2010-05-07
11
+
12
+ Thie release include a complete rewrite of the Advisable mixin
13
+ and bug fixes to the Registerable mixin. Also QED doc/tests
14
+ had been added for almost all mixins.
15
+
16
+ == 1.0.0 / 2010-05-02
17
+
18
+ Initial release of libraries as take directory from Ruby Facets.
19
+
data/LICENSE CHANGED
@@ -1,22 +1,205 @@
1
- The MIT License
1
+ .
2
2
 
3
- Copyright (c) 2010 Thomas Sawyer
3
+ Apache License
4
+ Version 2.0, January 2004
5
+ http://www.apache.org/licenses/
4
6
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
7
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
11
8
 
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
9
+ 1. Definitions.
14
10
 
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
11
+ "License" shall mean the terms and conditions for use, reproduction,
12
+ and distribution as defined by Sections 1 through 9 of this document.
22
13
 
14
+ "Licensor" shall mean the copyright owner or entity authorized by
15
+ the copyright owner that is granting the License.
16
+
17
+ "Legal Entity" shall mean the union of the acting entity and all
18
+ other entities that control, are controlled by, or are under common
19
+ control with that entity. For the purposes of this definition,
20
+ "control" means (i) the power, direct or indirect, to cause the
21
+ direction or management of such entity, whether by contract or
22
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
23
+ outstanding shares, or (iii) beneficial ownership of such entity.
24
+
25
+ "You" (or "Your") shall mean an individual or Legal Entity
26
+ exercising permissions granted by this License.
27
+
28
+ "Source" form shall mean the preferred form for making modifications,
29
+ including but not limited to software source code, documentation
30
+ source, and configuration files.
31
+
32
+ "Object" form shall mean any form resulting from mechanical
33
+ transformation or translation of a Source form, including but
34
+ not limited to compiled object code, generated documentation,
35
+ and conversions to other media types.
36
+
37
+ "Work" shall mean the work of authorship, whether in Source or
38
+ Object form, made available under the License, as indicated by a
39
+ copyright notice that is included in or attached to the work
40
+ (an example is provided in the Appendix below).
41
+
42
+ "Derivative Works" shall mean any work, whether in Source or Object
43
+ form, that is based on (or derived from) the Work and for which the
44
+ editorial revisions, annotations, elaborations, or other modifications
45
+ represent, as a whole, an original work of authorship. For the purposes
46
+ of this License, Derivative Works shall not include works that remain
47
+ separable from, or merely link (or bind by name) to the interfaces of,
48
+ the Work and Derivative Works thereof.
49
+
50
+ "Contribution" shall mean any work of authorship, including
51
+ the original version of the Work and any modifications or additions
52
+ to that Work or Derivative Works thereof, that is intentionally
53
+ submitted to Licensor for inclusion in the Work by the copyright owner
54
+ or by an individual or Legal Entity authorized to submit on behalf of
55
+ the copyright owner. For the purposes of this definition, "submitted"
56
+ means any form of electronic, verbal, or written communication sent
57
+ to the Licensor or its representatives, including but not limited to
58
+ communication on electronic mailing lists, source code control systems,
59
+ and issue tracking systems that are managed by, or on behalf of, the
60
+ Licensor for the purpose of discussing and improving the Work, but
61
+ excluding communication that is conspicuously marked or otherwise
62
+ designated in writing by the copyright owner as "Not a Contribution."
63
+
64
+ "Contributor" shall mean Licensor and any individual or Legal Entity
65
+ on behalf of whom a Contribution has been received by Licensor and
66
+ subsequently incorporated within the Work.
67
+
68
+ 2. Grant of Copyright License. Subject to the terms and conditions of
69
+ this License, each Contributor hereby grants to You a perpetual,
70
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
71
+ copyright license to reproduce, prepare Derivative Works of,
72
+ publicly display, publicly perform, sublicense, and distribute the
73
+ Work and such Derivative Works in Source or Object form.
74
+
75
+ 3. Grant of Patent License. Subject to the terms and conditions of
76
+ this License, each Contributor hereby grants to You a perpetual,
77
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
78
+ (except as stated in this section) patent license to make, have made,
79
+ use, offer to sell, sell, import, and otherwise transfer the Work,
80
+ where such license applies only to those patent claims licensable
81
+ by such Contributor that are necessarily infringed by their
82
+ Contribution(s) alone or by combination of their Contribution(s)
83
+ with the Work to which such Contribution(s) was submitted. If You
84
+ institute patent litigation against any entity (including a
85
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
86
+ or a Contribution incorporated within the Work constitutes direct
87
+ or contributory patent infringement, then any patent licenses
88
+ granted to You under this License for that Work shall terminate
89
+ as of the date such litigation is filed.
90
+
91
+ 4. Redistribution. You may reproduce and distribute copies of the
92
+ Work or Derivative Works thereof in any medium, with or without
93
+ modifications, and in Source or Object form, provided that You
94
+ meet the following conditions:
95
+
96
+ (a) You must give any other recipients of the Work or
97
+ Derivative Works a copy of this License; and
98
+
99
+ (b) You must cause any modified files to carry prominent notices
100
+ stating that You changed the files; and
101
+
102
+ (c) You must retain, in the Source form of any Derivative Works
103
+ that You distribute, all copyright, patent, trademark, and
104
+ attribution notices from the Source form of the Work,
105
+ excluding those notices that do not pertain to any part of
106
+ the Derivative Works; and
107
+
108
+ (d) If the Work includes a "NOTICE" text file as part of its
109
+ distribution, then any Derivative Works that You distribute must
110
+ include a readable copy of the attribution notices contained
111
+ within such NOTICE file, excluding those notices that do not
112
+ pertain to any part of the Derivative Works, in at least one
113
+ of the following places: within a NOTICE text file distributed
114
+ as part of the Derivative Works; within the Source form or
115
+ documentation, if provided along with the Derivative Works; or,
116
+ within a display generated by the Derivative Works, if and
117
+ wherever such third-party notices normally appear. The contents
118
+ of the NOTICE file are for informational purposes only and
119
+ do not modify the License. You may add Your own attribution
120
+ notices within Derivative Works that You distribute, alongside
121
+ or as an addendum to the NOTICE text from the Work, provided
122
+ that such additional attribution notices cannot be construed
123
+ as modifying the License.
124
+
125
+ You may add Your own copyright statement to Your modifications and
126
+ may provide additional or different license terms and conditions
127
+ for use, reproduction, or distribution of Your modifications, or
128
+ for any such Derivative Works as a whole, provided Your use,
129
+ reproduction, and distribution of the Work otherwise complies with
130
+ the conditions stated in this License.
131
+
132
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
133
+ any Contribution intentionally submitted for inclusion in the Work
134
+ by You to the Licensor shall be under the terms and conditions of
135
+ this License, without any additional terms or conditions.
136
+ Notwithstanding the above, nothing herein shall supersede or modify
137
+ the terms of any separate license agreement you may have executed
138
+ with Licensor regarding such Contributions.
139
+
140
+ 6. Trademarks. This License does not grant permission to use the trade
141
+ names, trademarks, service marks, or product names of the Licensor,
142
+ except as required for reasonable and customary use in describing the
143
+ origin of the Work and reproducing the content of the NOTICE file.
144
+
145
+ 7. Disclaimer of Warranty. Unless required by applicable law or
146
+ agreed to in writing, Licensor provides the Work (and each
147
+ Contributor provides its Contributions) on an "AS IS" BASIS,
148
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
149
+ implied, including, without limitation, any warranties or conditions
150
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
151
+ PARTICULAR PURPOSE. You are solely responsible for determining the
152
+ appropriateness of using or redistributing the Work and assume any
153
+ risks associated with Your exercise of permissions under this License.
154
+
155
+ 8. Limitation of Liability. In no event and under no legal theory,
156
+ whether in tort (including negligence), contract, or otherwise,
157
+ unless required by applicable law (such as deliberate and grossly
158
+ negligent acts) or agreed to in writing, shall any Contributor be
159
+ liable to You for damages, including any direct, indirect, special,
160
+ incidental, or consequential damages of any character arising as a
161
+ result of this License or out of the use or inability to use the
162
+ Work (including but not limited to damages for loss of goodwill,
163
+ work stoppage, computer failure or malfunction, or any and all
164
+ other commercial damages or losses), even if such Contributor
165
+ has been advised of the possibility of such damages.
166
+
167
+ 9. Accepting Warranty or Additional Liability. While redistributing
168
+ the Work or Derivative Works thereof, You may choose to offer,
169
+ and charge a fee for, acceptance of support, warranty, indemnity,
170
+ or other liability obligations and/or rights consistent with this
171
+ License. However, in accepting such obligations, You may act only
172
+ on Your own behalf and on Your sole responsibility, not on behalf
173
+ of any other Contributor, and only if You agree to indemnify,
174
+ defend, and hold each Contributor harmless for any liability
175
+ incurred by, or claims asserted against, such Contributor by reason
176
+ of your accepting any such warranty or additional liability.
177
+
178
+ END OF TERMS AND CONDITIONS
179
+
180
+ APPENDIX: How to apply the Apache License to your work.
181
+
182
+ To apply the Apache License to your work, attach the following
183
+ boilerplate notice, with the fields enclosed by brackets "[]"
184
+ replaced with your own identifying information. (Don't include
185
+ the brackets!) The text should be enclosed in the appropriate
186
+ comment syntax for the file format. We also recommend that a
187
+ file or class name and description of purpose be included on the
188
+ same "printed page" as the copyright notice for easier
189
+ identification within third-party archives.
190
+
191
+ Copyright [yyyy] [name of copyright owner]
192
+
193
+ Licensed under the Apache License, Version 2.0 (the "License");
194
+ you may not use this file except in compliance with the License.
195
+ You may obtain a copy of the License at
196
+
197
+ http://www.apache.org/licenses/LICENSE-2.0
198
+
199
+ Unless required by applicable law or agreed to in writing, software
200
+ distributed under the License is distributed on an "AS IS" BASIS,
201
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
202
+ See the License for the specific language governing permissions and
203
+ limitations under the License.
204
+
205
+ .
data/PROFILE ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ title : Mixers
3
+ suite : rubyworks
4
+ summary: Collection of helpful mixin modules
5
+ contact: Trans <transfire@gmail.com>
6
+ license: Apache 2.0
7
+ authors: Thomas Sawyer
8
+ created: 2010-05-02
9
+
10
+ description:
11
+ Ruby Mixers is collection mixin modules for the Ruby
12
+ programming language. Mixers is a spin-off of Ruby
13
+ Facets. When Ruby Facets scaled back to extensions
14
+ only project, it's mixin modules were gathered to
15
+ create this new project.
16
+
17
+ resources:
18
+ home: http://rubyworks.github.com/mixers
19
+ code: http://github.com/rubyworks/mixers
20
+ mail: http://groups.google.com/group/rubyworks-mailinglist
21
+
22
+ copyright:
23
+ Copyright (c) 2010 Thomas Sawyer
@@ -9,9 +9,11 @@ Mixers is a spin-off of Ruby Facets. When Ruby Facets
9
9
  scaled back to extensions only project, it's mixin
10
10
  modules were gathered to create this new project.
11
11
 
12
- == COPYRIGHTS
12
+ == COPYRIGHT
13
13
 
14
- Ruby Mixers Copyright (c) 2010 Thomas Sawyer
14
+ (Apache 2.0 License)
15
15
 
16
- Ruby Mixers is distibuted under the terms of the MIT license.
16
+ Ruby Mixers, Copyright (c) 2010 Thomas Sawyer
17
+
18
+ Ruby Mixers is distibuted under the terms of the Apache 2.0 license.
17
19
 
data/VERSION ADDED
@@ -0,0 +1,8 @@
1
+ name : mixers
2
+ date : 2010-10-12
3
+ version : 1.2.0
4
+
5
+ requires:
6
+ - syckle (build)
7
+ - qed (test)
8
+
@@ -0,0 +1,11 @@
1
+ module Mixers
2
+ DIRECTORY = File.dirname(__FILE__)
3
+
4
+ def self.version
5
+ @version ||= YAML.load(File.new(DIRECTORY + '/mixers/version.yml'))
6
+ end
7
+
8
+ def self.const_missing(name)
9
+ version[name.to_s.downcase] || super(name)
10
+ end
11
+ end
@@ -4,10 +4,9 @@
4
4
  #
5
5
  module Expirable
6
6
 
7
- attr_accessor :expiration
7
+ attr_reader :expiration
8
8
 
9
9
  # Set the expires timeout for this entry.
10
-
11
10
  def expiration=(time)
12
11
  case time
13
12
  when Time, Date, DateTime
@@ -17,29 +16,21 @@ module Expirable
17
16
  end
18
17
  end
19
18
 
20
- #def expires_after(timeout = 86400)
21
- # @expires = Time.now + timeout
22
- #end
23
-
24
19
  ## Set the expire timeout for this entry. The timeout happens
25
20
  ## after (base + rand(spread)) seconds.
26
- #
27
- #def expires_spread(base, spread)
28
- # @expires = Time.now + base + rand(spread)
29
- #end
21
+ ##
22
+ ##def expires_spread(base, spread)
23
+ ## @expires = Time.now + base + rand(spread)
24
+ ##end
30
25
 
31
26
  # Is this entry expired?
32
-
33
27
  def expired?
34
- if @expiration.nil? or (Time.now > @expiration)
35
- return true
36
- else
37
- return false
38
- end
28
+ return true if expiration.nil?
29
+ return true if (Time.now > expiration)
30
+ return false
39
31
  end
40
32
 
41
33
  # Update the expiration period. Override in your application.
42
-
43
34
  def touch!
44
35
  end
45
36
 
@@ -0,0 +1,8 @@
1
+ name : mixers
2
+ date : 2010-10-12
3
+ version : 1.2.0
4
+
5
+ requires:
6
+ - syckle (build)
7
+ - qed (test)
8
+
@@ -12,7 +12,7 @@ Example class.
12
12
 
13
13
  Now the experation can be set to a Time object, or a number of seconds
14
14
  from +Time.now+. For instance, to set the expiration for one second
15
- from now:
15
+ from now.
16
16
 
17
17
  X.expiration = 1
18
18
 
@@ -20,7 +20,7 @@ We can see the the object has not yet expired.
20
20
 
21
21
  X.refute.expired?
22
22
 
23
- But if we wait one second.
23
+ But if we wait one seconds.
24
24
 
25
25
  sleep 1
26
26
 
@@ -4,7 +4,7 @@ Require the library.
4
4
 
5
5
  require 'mixers/ostructable'
6
6
 
7
- We will use the simpliest example class:
7
+ We will use the simpliest example class.
8
8
 
9
9
  class X
10
10
  include OpenStructable
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mixers
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 31
4
5
  prerelease: false
5
6
  segments:
6
7
  - 1
7
- - 1
8
+ - 2
8
9
  - 0
9
- version: 1.1.0
10
+ version: 1.2.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Thomas Sawyer
@@ -14,25 +15,46 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-05-07 00:00:00 -04:00
18
+ date: 2010-10-12 00:00:00 -04:00
18
19
  default_executable:
19
- dependencies: []
20
-
21
- description: |-
22
- Ruby Mixers is collection mixin modules for the Ruby
23
- programming language. Mixers is a spin-off of Ruby
24
- Facets. When Ruby Facets scaled back to extensions
25
- only project, it's mixin modules were gathered to
26
- create this new project.
27
- email:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: syckle
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: qed
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ description: Ruby Mixers is collection mixin modules for the Ruby programming language. Mixers is a spin-off of Ruby Facets. When Ruby Facets scaled back to extensions only project, it's mixin modules were gathered to create this new project.
50
+ email: transfire@gmail.com
28
51
  executables: []
29
52
 
30
53
  extensions: []
31
54
 
32
- extra_rdoc_files: []
33
-
55
+ extra_rdoc_files:
56
+ - README.rdoc
34
57
  files:
35
- - lib/mixers/advisable.rb
36
58
  - lib/mixers/cloneable.rb
37
59
  - lib/mixers/enumargs.rb
38
60
  - lib/mixers/equitable.rb
@@ -42,23 +64,8 @@ files:
42
64
  - lib/mixers/ostructable.rb
43
65
  - lib/mixers/preinitialize.rb
44
66
  - lib/mixers/registerable.rb
45
- - meta/authors
46
- - meta/contact
47
- - meta/description
48
- - meta/name
49
- - meta/repository
50
- - meta/sites/api
51
- - meta/sites/blog
52
- - meta/sites/development
53
- - meta/sites/documentation
54
- - meta/sites/homepage
55
- - meta/sites/mail
56
- - meta/sites/source
57
- - meta/sites/wiki
58
- - meta/suite
59
- - meta/summary
60
- - meta/version
61
- - qed/01_advisable.rdoc
67
+ - lib/mixers/version.yml
68
+ - lib/mixers.rb
62
69
  - qed/02_cloneable.rdoc
63
70
  - qed/03_enumargs.rdoc
64
71
  - qed/04_equitable.rdoc
@@ -73,37 +80,45 @@ files:
73
80
  - test/test_equitable.rb
74
81
  - test/test_instantiable.rb
75
82
  - test/test_preinitilizable.rb
83
+ - PROFILE
76
84
  - LICENSE
77
85
  - README.rdoc
78
86
  - HISTORY
87
+ - VERSION
79
88
  has_rdoc: true
80
89
  homepage: http://rubyworks.github.com/mixers
81
- licenses: []
82
-
90
+ licenses:
91
+ - Apache 2.0
83
92
  post_install_message:
84
93
  rdoc_options:
85
94
  - --title
86
95
  - Mixers API
96
+ - --main
97
+ - README.rdoc
87
98
  require_paths:
88
99
  - lib
89
100
  required_ruby_version: !ruby/object:Gem::Requirement
101
+ none: false
90
102
  requirements:
91
103
  - - ">="
92
104
  - !ruby/object:Gem::Version
105
+ hash: 3
93
106
  segments:
94
107
  - 0
95
108
  version: "0"
96
109
  required_rubygems_version: !ruby/object:Gem::Requirement
110
+ none: false
97
111
  requirements:
98
112
  - - ">="
99
113
  - !ruby/object:Gem::Version
114
+ hash: 3
100
115
  segments:
101
116
  - 0
102
117
  version: "0"
103
118
  requirements: []
104
119
 
105
120
  rubyforge_project: mixers
106
- rubygems_version: 1.3.6
121
+ rubygems_version: 1.3.7
107
122
  signing_key:
108
123
  specification_version: 3
109
124
  summary: Collection of helpful mixin modules
@@ -1,80 +0,0 @@
1
- # = Advisable
2
- #
3
- # Advisable provides a means of using before, after and
4
- # around adivce in dynamic fashion.
5
- #
6
- module Advisable
7
-
8
- require 'facets/proc/bind'
9
-
10
- def self.append_features(base)
11
- base.extend(self)
12
- end
13
-
14
- def before(meth, &block)
15
- advice_before[meth.to_sym] << block
16
- method_added(meth) if method_defined?(meth)
17
- end
18
-
19
- def after(meth, &block)
20
- advice_after[meth.to_sym] << block
21
- method_added(meth) if method_defined?(meth)
22
- end
23
-
24
- def around(meth, &block)
25
- advice_around[meth.to_sym] << block
26
- method_added(meth) if method_defined?(meth)
27
- end
28
-
29
- def advice_before
30
- @@advice_before ||= Hash.new{|h,k| h[k] = []}
31
- end
32
-
33
- def advice_after
34
- @@advice_after ||= Hash.new{|h,k| h[k] = []}
35
- end
36
-
37
- def advice_around
38
- @@advice_around ||= Hash.new{|h,k| h[k] = []}
39
- end
40
-
41
- # TODO: Should around advice be fed the result of the last around advice?
42
- def method_added(meth)
43
- @method_added_stack ||= []
44
- return if @method_added_stack.last == meth
45
- @method_added_stack << meth
46
-
47
- if advice_before.key?(meth) or advice_after.key?(meth)
48
-
49
- before = advice_before[meth] || []
50
- around = advice_around[meth] || []
51
- after = advice_after[meth] || []
52
-
53
- alias_method "#{meth}:advised", meth
54
- target = instance_method("#{meth}:advised")
55
-
56
- define_method meth do |*a, &b|
57
- before.reverse_each do |block|
58
- block.bind(self).call(*a,&b)
59
- end
60
- if around.empty?
61
- result = target.bind(self).call(*a,&b)
62
- else
63
- around.each do |block|
64
- result = block.call(target.bind(self),*a,&b)
65
- end
66
- end
67
- after.each do |block|
68
- block.bind(self).call(*a,&b)
69
- end
70
- result
71
- end
72
- end
73
-
74
- super(meth)
75
-
76
- @method_added_stack.pop
77
- end
78
-
79
- end
80
-
@@ -1 +0,0 @@
1
- Thomas Sawyer
@@ -1 +0,0 @@
1
- rubyworks-mailinglist@googlegroups.com
@@ -1,6 +0,0 @@
1
- Ruby Mixers is collection mixin modules for the Ruby
2
- programming language. Mixers is a spin-off of Ruby
3
- Facets. When Ruby Facets scaled back to extensions
4
- only project, it's mixin modules were gathered to
5
- create this new project.
6
-
data/meta/name DELETED
@@ -1 +0,0 @@
1
- mixers
@@ -1 +0,0 @@
1
- git://github.com/rubyworks/mixers.git
@@ -1 +0,0 @@
1
- http://rubyworks.github.com/mixers/rdoc
@@ -1 +0,0 @@
1
- http://rubyworks.github.com/
@@ -1 +0,0 @@
1
- http://github.com/rubyworks/mixers
@@ -1 +0,0 @@
1
- http://wiki.github.com/rubyworks/mixers
@@ -1 +0,0 @@
1
- http://rubyworks.github.com/mixers
@@ -1 +0,0 @@
1
- http://groups.google.com/group/rubyworks-mailinglist
@@ -1 +0,0 @@
1
- http://github.com/rubyworks/mixers
@@ -1 +0,0 @@
1
- http://wiki.github.com/rubyworks/mixers
data/meta/suite DELETED
@@ -1 +0,0 @@
1
- rubyworks
@@ -1 +0,0 @@
1
- Collection of helpful mixin modules
@@ -1 +0,0 @@
1
- 1.1.0
@@ -1,71 +0,0 @@
1
- = Advisable
2
-
3
- Require the library.
4
-
5
- require 'mixers/advisable'
6
-
7
- We will use this fixture.
8
-
9
- class X
10
- include Advisable
11
-
12
- attr_reader :out
13
-
14
- def initialize
15
- @out = []
16
- end
17
-
18
- before :x do
19
- @out << "BEFORE X#x"
20
- end
21
-
22
- after :x do
23
- @out << "AFTER X#x"
24
- end
25
-
26
- def x
27
- @out << "X#x"
28
- "x"
29
- end
30
- end
31
-
32
- Our results:
33
-
34
- x = X.new
35
- r = x.x
36
- o = x.out
37
- r.assert == "x"
38
- o.assert == ["BEFORE X#x", "X#x", "AFTER X#x"]
39
-
40
- And let's see what a subclass of the example does:
41
-
42
- class Y < X
43
- before :x do
44
- @out << "BEFORE Y#x"
45
- end
46
-
47
- after :x do
48
- @out << "AFTER Y#x"
49
- end
50
-
51
- around :x do |target|
52
- "{" + target.call + "}"
53
- end
54
-
55
- def x
56
- @out << "Y#x"
57
- super
58
- end
59
- end
60
-
61
- y = Y.new
62
-
63
- The result of #x should be a bracketed "x".
64
-
65
- y.x.assert == "{x}"
66
-
67
- Then the out variable should indicate where the call has been.
68
-
69
- y.out.assert == ["BEFORE Y#x", "BEFORE X#x", "Y#x", "X#x", "AFTER X#x", "AFTER Y#x"]
70
-
71
-