facade 1.0.2 → 1.0.3
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/CHANGES +20 -13
- data/MANIFEST +1 -1
- data/README +14 -10
- data/Rakefile +3 -3
- data/facade.gemspec +26 -0
- data/lib/facade.rb +26 -37
- data/test/test_facade.rb +66 -0
- metadata +48 -38
- data/test/tc_facade.rb +0 -65
data/CHANGES
CHANGED
@@ -1,13 +1,20 @@
|
|
1
|
-
== 1.0.
|
2
|
-
*
|
3
|
-
*
|
4
|
-
*
|
5
|
-
*
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
* Added a
|
10
|
-
*
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
== 1.0.3 - 21-Jul-2009
|
2
|
+
* License changed to Artistic 2.0.
|
3
|
+
* Documentation updates.
|
4
|
+
* Test file renamed to test_facade.rb.
|
5
|
+
* Some Rakefile and gemspec updates
|
6
|
+
* One test modified so that it passes with 1.9.x as well.
|
7
|
+
|
8
|
+
== 1.0.2 - 11-Jun-2007
|
9
|
+
* Added a Rakefile with tasks for installation and testing.
|
10
|
+
* Removed the install.rb file. Installation is now handled as a Rake task.
|
11
|
+
* Some test suite refactoring.
|
12
|
+
* Fixed the FACADE_VERSION number (now 1.0.2, was 1.1.0).
|
13
|
+
|
14
|
+
== 1.0.1 - 8-Jun-2005
|
15
|
+
* Moved project to RubyForge.
|
16
|
+
* Added a .gemspec file.
|
17
|
+
* Added a MANIFEST.
|
18
|
+
|
19
|
+
== 1.0.0 - 18-May-2005
|
20
|
+
* Initial release
|
data/MANIFEST
CHANGED
data/README
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
== Synopsis
|
2
|
-
An easy way to implement the facade pattern in your classes.
|
2
|
+
An easy way to implement the facade pattern in your classes. In short,
|
3
|
+
this library wraps singleton methods from another class as instance
|
4
|
+
methods of the current class.
|
3
5
|
|
4
6
|
== Prerequisites
|
5
7
|
Ruby 1.8.0 or later
|
6
8
|
|
7
9
|
== Installation
|
8
|
-
|
9
|
-
|
10
|
+
rake test
|
11
|
+
rake install (non-gem) or rake install_gem (gem)
|
10
12
|
|
11
13
|
== Usage
|
12
|
-
require
|
13
|
-
class
|
14
|
+
require 'facade'
|
15
|
+
class MyString < String
|
14
16
|
extend Facade
|
15
17
|
facade File, :dirname, :basename
|
16
|
-
facade Dir
|
17
18
|
end
|
18
19
|
|
19
|
-
f =
|
20
|
+
f = MyString.new('/home/djberge')
|
20
21
|
puts f.basename # 'djberge'
|
21
22
|
puts f.dirname # '/home'
|
22
23
|
|
@@ -25,8 +26,11 @@
|
|
25
26
|
shamelessly plagiarized.
|
26
27
|
|
27
28
|
== Copyright
|
28
|
-
Copyright (c) 2005-
|
29
|
-
Licensed under the same terms as Ruby itself.
|
29
|
+
Copyright (c) 2005-2009 Daniel J. Berger
|
30
|
+
Licensed under the same terms as Ruby itself.
|
31
|
+
|
32
|
+
== License
|
33
|
+
Artistic 2.0
|
30
34
|
|
31
35
|
== Warranty
|
32
36
|
This package is provided "as is" and without any express or
|
@@ -36,4 +40,4 @@
|
|
36
40
|
== Author
|
37
41
|
Daniel J. Berger
|
38
42
|
djberg96 at nospam at gmail dot com
|
39
|
-
imperator on IRC (freenode)
|
43
|
+
imperator on IRC (freenode)
|
data/Rakefile
CHANGED
@@ -3,13 +3,14 @@ require 'rake/testtask'
|
|
3
3
|
require 'rbconfig'
|
4
4
|
include Config
|
5
5
|
|
6
|
-
desc 'Install the facade
|
6
|
+
desc 'Install the facade library (non-gem)'
|
7
7
|
task :install do
|
8
8
|
sitelibdir = CONFIG["sitelibdir"]
|
9
9
|
file = "lib/facade.rb"
|
10
10
|
FileUtils.cp(file, sitelibdir, :verbose => true)
|
11
11
|
end
|
12
12
|
|
13
|
+
desc 'Install the facade library as a gem'
|
13
14
|
task :install_gem do
|
14
15
|
ruby 'facade.gemspec'
|
15
16
|
file = Dir["*.gem"].first
|
@@ -20,5 +21,4 @@ Rake::TestTask.new do |t|
|
|
20
21
|
t.libs << 'test'
|
21
22
|
t.verbose = true
|
22
23
|
t.warning = true
|
23
|
-
|
24
|
-
end
|
24
|
+
end
|
data/facade.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
spec = Gem::Specification.new do |gem|
|
4
|
+
gem.name = 'facade'
|
5
|
+
gem.version = '1.0.3'
|
6
|
+
gem.author = 'Daniel J. Berger'
|
7
|
+
gem.license = 'Artistic 2.0'
|
8
|
+
gem.email = 'djberg96@gmail.com'
|
9
|
+
gem.homepage = 'http://www.rubyforge.org/projects/shards'
|
10
|
+
gem.platform = Gem::Platform::RUBY
|
11
|
+
gem.summary = 'An easy way to implement the facade pattern in your class'
|
12
|
+
gem.test_file = 'test/test_facade.rb'
|
13
|
+
gem.has_rdoc = true
|
14
|
+
gem.files = Dir['**/*'].reject{ |f| f.include?('CVS') }
|
15
|
+
|
16
|
+
gem.rubyforge_project = 'shards'
|
17
|
+
gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
18
|
+
|
19
|
+
gem.description = <<-EOF
|
20
|
+
The facade library allows you to mixin singleton methods from classes
|
21
|
+
or modules as instance methods of the extending class.
|
22
|
+
EOF
|
23
|
+
end
|
24
|
+
|
25
|
+
Gem.manage_gems if Gem::RubyGemsVersion.to_f < 1.0
|
26
|
+
Gem::Builder.new(spec).build
|
data/lib/facade.rb
CHANGED
@@ -1,63 +1,52 @@
|
|
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
1
|
module Facade
|
25
|
-
FACADE_VERSION = '1.0.
|
2
|
+
FACADE_VERSION = '1.0.3'
|
26
3
|
|
27
|
-
#
|
28
|
-
#
|
4
|
+
# The facade method will forward a singleton method as an instance
|
5
|
+
# method of the extending class. If no arguments are provided, then all
|
6
|
+
# singleton methods of the class or module become instance methods.
|
29
7
|
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
8
|
+
# Existing instance methods are NOT overridden, but are instead ignored.
|
9
|
+
#
|
10
|
+
# Example:
|
11
|
+
#
|
12
|
+
# require 'facade'
|
33
13
|
#
|
34
|
-
#
|
14
|
+
# class MyString < String
|
15
|
+
# extend Facade
|
16
|
+
# facade File, :dirname, :basename
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# s = MyString.new('/home/djberge')
|
20
|
+
# s.basename # => 'djberge'
|
21
|
+
# s.dirname # => '/home'
|
35
22
|
#
|
36
23
|
def facade(klass, *methods)
|
37
|
-
methods.flatten
|
38
|
-
|
24
|
+
methods = methods.flatten
|
25
|
+
|
26
|
+
if methods.empty? # Default to all methods
|
39
27
|
if klass.kind_of?(Class)
|
40
28
|
methods = klass.methods(false)
|
41
29
|
else
|
42
30
|
methods = klass.public_instance_methods(false)
|
43
31
|
end
|
44
32
|
end
|
45
|
-
|
46
|
-
methods
|
33
|
+
|
34
|
+
methods.collect!{ |m| m.to_s } # Symbols or strings
|
35
|
+
methods -= self.instance_methods # No clobber
|
47
36
|
|
48
37
|
methods.each do |methname|
|
49
38
|
methname = methname.to_sym
|
50
|
-
define_method(methname){
|
39
|
+
define_method(methname){
|
51
40
|
if klass.kind_of?(Class)
|
52
41
|
meth = klass.method(methname)
|
53
42
|
else
|
54
43
|
meth = Object.new.extend(klass).method(methname)
|
55
44
|
end
|
56
45
|
|
57
|
-
if meth.arity.zero?
|
46
|
+
if meth.arity.zero? # Zero or one argument
|
58
47
|
meth.call
|
59
48
|
else
|
60
|
-
meth.call(
|
49
|
+
meth.call(self)
|
61
50
|
end
|
62
51
|
}
|
63
52
|
end
|
data/test/test_facade.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
#########################################################################
|
2
|
+
# test_facade.rb
|
3
|
+
#
|
4
|
+
# Test suite for the Facade module. This test suite should be run via
|
5
|
+
# the 'rake test' task.
|
6
|
+
#########################################################################
|
7
|
+
require 'test/unit'
|
8
|
+
require 'facade'
|
9
|
+
|
10
|
+
module Baz
|
11
|
+
def testme(str)
|
12
|
+
str
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class FooString < String
|
17
|
+
extend Facade
|
18
|
+
facade File, :basename, 'dirname'
|
19
|
+
facade Dir
|
20
|
+
facade Baz
|
21
|
+
|
22
|
+
def blockdev?
|
23
|
+
'test'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class TC_Facade < Test::Unit::TestCase
|
28
|
+
def setup
|
29
|
+
@str = FooString.new('/home/djberge')
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_facade_version
|
33
|
+
assert_equal('1.0.3', Facade::FACADE_VERSION)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_file_methods
|
37
|
+
assert_respond_to(@str, :basename)
|
38
|
+
assert_respond_to(@str, :dirname)
|
39
|
+
assert_raises(NoMethodError){ @str.executable? }
|
40
|
+
assert_raises(NoMethodError){ @str.chardev? }
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_file_method_return_values
|
44
|
+
assert_equal('djberge', @str.basename)
|
45
|
+
assert_equal('/home', @str.dirname)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_dir_methods
|
49
|
+
assert_respond_to(@str, :pwd)
|
50
|
+
assert_respond_to(@str, :entries)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_no_clobber
|
54
|
+
assert_respond_to(@str, :blockdev?)
|
55
|
+
assert_equal('test', @str.blockdev?)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_module_methods
|
59
|
+
assert_respond_to(@str, :testme)
|
60
|
+
assert_equal('/home/djberge', @str.testme)
|
61
|
+
end
|
62
|
+
|
63
|
+
def teardown
|
64
|
+
@str = nil
|
65
|
+
end
|
66
|
+
end
|
metadata
CHANGED
@@ -1,53 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: facade
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.0.
|
7
|
-
date: 2007-06-11 00:00:00 -06:00
|
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:
|
4
|
+
version: 1.0.3
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Daniel J. Berger
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-07-21 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: " The facade library allows you to mixin singleton methods from classes\n or modules as instance methods of the extending class.\n"
|
17
|
+
email: djberg96@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- CHANGES
|
25
|
+
- MANIFEST
|
31
26
|
files:
|
32
|
-
- lib/facade.rb
|
33
27
|
- CHANGES
|
28
|
+
- facade.gemspec
|
29
|
+
- lib/facade.rb
|
34
30
|
- MANIFEST
|
35
31
|
- Rakefile
|
36
32
|
- README
|
37
|
-
- test/
|
38
|
-
|
39
|
-
|
33
|
+
- test/test_facade.rb
|
34
|
+
has_rdoc: true
|
35
|
+
homepage: http://www.rubyforge.org/projects/shards
|
36
|
+
licenses:
|
37
|
+
- Artistic 2.0
|
38
|
+
post_install_message:
|
40
39
|
rdoc_options: []
|
41
40
|
|
42
|
-
|
43
|
-
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
version:
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
50
55
|
requirements: []
|
51
56
|
|
52
|
-
|
53
|
-
|
57
|
+
rubyforge_project: shards
|
58
|
+
rubygems_version: 1.3.4
|
59
|
+
signing_key:
|
60
|
+
specification_version: 3
|
61
|
+
summary: An easy way to implement the facade pattern in your class
|
62
|
+
test_files:
|
63
|
+
- test/test_facade.rb
|
data/test/tc_facade.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
#########################################################################
|
2
|
-
# tc_facade.rb
|
3
|
-
#
|
4
|
-
# Test suite for the Facade module. This test suite should be run via
|
5
|
-
# the 'rake test' task.
|
6
|
-
#########################################################################
|
7
|
-
require "test/unit"
|
8
|
-
require "facade"
|
9
|
-
|
10
|
-
module Baz
|
11
|
-
def testme(str)
|
12
|
-
str
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class Foo < String
|
17
|
-
extend Facade
|
18
|
-
facade File, :basename, "dirname"
|
19
|
-
facade Dir
|
20
|
-
facade Baz
|
21
|
-
def blockdev?
|
22
|
-
"test"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class TC_Facade < Test::Unit::TestCase
|
27
|
-
def setup
|
28
|
-
@f = Foo.new("/home/djberge")
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_facade_version
|
32
|
-
assert_equal('1.0.2', Facade::FACADE_VERSION)
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_file_methods
|
36
|
-
assert_respond_to(@f, :basename)
|
37
|
-
assert_respond_to(@f, :dirname)
|
38
|
-
assert_raises(NoMethodError){ @f.exists? }
|
39
|
-
assert_raises(NoMethodError){ @f.chardev? }
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_file_method_return_values
|
43
|
-
assert_equal("djberge", @f.basename)
|
44
|
-
assert_equal("/home", @f.dirname)
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_dir_methods
|
48
|
-
assert_respond_to(@f, :pwd)
|
49
|
-
assert_respond_to(@f, :entries)
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_no_clobber
|
53
|
-
assert_respond_to(@f, :blockdev?)
|
54
|
-
assert_equal("test", @f.blockdev?)
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_module_methods
|
58
|
-
assert_respond_to(@f, :testme)
|
59
|
-
assert_equal("/home/djberge", @f.testme)
|
60
|
-
end
|
61
|
-
|
62
|
-
def teardown
|
63
|
-
@f = nil
|
64
|
-
end
|
65
|
-
end
|