facade 1.0.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 (6) hide show
  1. data/CHANGES +7 -0
  2. data/MANIFEST +9 -0
  3. data/README +39 -0
  4. data/lib/facade.rb +51 -0
  5. data/test/tc_facade.rb +55 -0
  6. metadata +48 -0
data/CHANGES ADDED
@@ -0,0 +1,7 @@
1
+ == 1.0.1 - 8-Jun-2005
2
+ * Moved project to RubyForge.
3
+ * Added a .gemspec file.
4
+ * Added a MANIFEST.
5
+
6
+ == 1.0.0 - 18-May-2005
7
+ * Initial release
@@ -0,0 +1,9 @@
1
+ CHANGES
2
+ MANIFEST
3
+ README
4
+ install.rb
5
+ facade.gemspec
6
+
7
+ lib/facade.rb
8
+
9
+ test/tc_facade.rb
data/README ADDED
@@ -0,0 +1,39 @@
1
+ == Synopsis
2
+ An easy way to implement the facade pattern in your classes.
3
+
4
+ == Prerequisites
5
+ Ruby 1.8.0 or later
6
+
7
+ == Installation
8
+ ruby test/tc_facade.rb (optional)
9
+ ruby install.rb
10
+
11
+ == Usage
12
+ require "facade"
13
+ class Foo < String
14
+ extend Facade
15
+ facade File, :dirname, :basename
16
+ facade Dir
17
+ end
18
+
19
+ f = Foo.new("/home/djberge")
20
+ puts f.basename # 'djberge'
21
+ puts f.dirname # '/home'
22
+
23
+ == Acknowledgements
24
+ Eero Saynatkari, Eric Hodel and Michael Granger for ideas and code which I
25
+ shamelessly plagiarized.
26
+
27
+ == Copyright
28
+ Copyright (c) 2005 Daniel J. Berger
29
+ Licensed under the same terms as Ruby itself.
30
+
31
+ == Warranty
32
+ This package is provided "as is" and without any express or
33
+ implied warranties, including, without limitation, the implied
34
+ warranties of merchantability and fitness for a particular purpose
35
+
36
+ == Author
37
+ Daniel J. Berger
38
+ djberg96 at yahoo dot com
39
+ imperator on IRC (freenode)
@@ -0,0 +1,51 @@
1
+ # == Synopsis
2
+ # An easy way to implement the facade pattern for your Ruby classes
3
+ #
4
+ # == Usage
5
+ # require "facade"
6
+ # class Foo < String
7
+ # extend Facade
8
+ # facade File, :dirname, :basename
9
+ # end
10
+ #
11
+ # f = Foo.new("/home/djberge")
12
+ # puts f.basename # 'djberge'
13
+ # puts f.dirname # '/home'
14
+ #
15
+ # == Author
16
+ # Daniel J. Berger
17
+ # djberg96 at yahoo dot com
18
+ # imperator on IRC (freenode)
19
+ #
20
+ # == Copyright
21
+ # Copyright (c) 2005 Daniel J. Berger
22
+ # Licensed under the same terms as Ruby itself.
23
+
24
+ module Facade
25
+ FACADE_VERSION = "1.0.1"
26
+
27
+ # Forward a class method as an instance method of the including class
28
+ #
29
+ # call-seq:
30
+ # forward +Klass+, :method
31
+ # forward +Klass+, :method1, :method2, ...
32
+ #
33
+ # This will not override the class' existing methods.
34
+ def facade(klass, *methods)
35
+ methods.flatten!
36
+ methods = klass.methods(false) if methods.empty? # Default to all methods
37
+ methods.collect!{|m| m.to_s} # Symbols or strings
38
+ methods -= self.instance_methods # No clobber
39
+
40
+ methods.each do |methname|
41
+ define_method(methname){ ||
42
+ meth = klass.method(methname)
43
+ if meth.arity.zero? # Zero or one argument
44
+ meth.call
45
+ else
46
+ meth.call( self )
47
+ end
48
+ }
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,55 @@
1
+ #####################################
2
+ # tc_facade.rb
3
+ #
4
+ # Test suite for the Facade module.
5
+ #####################################
6
+ base = File.basename(Dir.pwd)
7
+ if base == "test" || base =~ /facade.*/
8
+ Dir.chdir("..") if base == "test"
9
+ $LOAD_PATH.unshift(Dir.pwd)
10
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
11
+ end
12
+
13
+ require "test/unit"
14
+ require "facade"
15
+
16
+ class Foo < String
17
+ extend Facade
18
+ facade File, :basename, "dirname"
19
+ facade Dir
20
+ def blockdev?
21
+ "test"
22
+ end
23
+ end
24
+
25
+ class TC_Facade < Test::Unit::TestCase
26
+ def setup
27
+ @f = Foo.new("/home/djberge")
28
+ end
29
+
30
+ def test_file_methods
31
+ assert_respond_to(@f, :basename)
32
+ assert_respond_to(@f, :dirname)
33
+ assert_raises(NoMethodError){ @f.exists? }
34
+ assert_raises(NoMethodError){ @f.chardev? }
35
+ end
36
+
37
+ def test_file_method_return_values
38
+ assert_equal("djberge", @f.basename)
39
+ assert_equal("/home", @f.dirname)
40
+ end
41
+
42
+ def test_dir_methods
43
+ assert_respond_to(@f, :pwd)
44
+ assert_respond_to(@f, :entries)
45
+ end
46
+
47
+ def test_no_clobber
48
+ assert_respond_to(@f, :blockdev?)
49
+ assert_equal("test", @f.blockdev?)
50
+ end
51
+
52
+ def teardown
53
+ @f = nil
54
+ end
55
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.10
3
+ specification_version: 1
4
+ name: facade
5
+ version: !ruby/object:Gem::Version
6
+ version: 1.0.1
7
+ date: 2005-06-09
8
+ summary: An easy way to implement the facade pattern in your class
9
+ require_paths:
10
+ - lib
11
+ email: djberg96@gmail.com
12
+ homepage: http://www.rubyforge.org/projects/shards
13
+ rubyforge_project:
14
+ description:
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ authors:
27
+ - Daniel J. Berger
28
+ files:
29
+ - lib/facade.rb
30
+ - CHANGES
31
+ - MANIFEST
32
+ - README
33
+ - test/tc_facade.rb
34
+ test_files:
35
+ - test/tc_facade.rb
36
+ rdoc_options: []
37
+
38
+ extra_rdoc_files:
39
+ - README
40
+ - CHANGES
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ requirements: []
46
+
47
+ dependencies: []
48
+