facade 1.0.4 → 1.0.5

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 (7) hide show
  1. data/CHANGES +3 -0
  2. data/README +22 -22
  3. data/Rakefile +19 -16
  4. data/facade.gemspec +18 -20
  5. data/lib/facade.rb +47 -47
  6. data/test/test_facade.rb +41 -41
  7. metadata +22 -10
data/CHANGES CHANGED
@@ -1,3 +1,6 @@
1
+ == 1.0.5 - 10-Nov-2010
2
+ * Refactored the Rakefile.
3
+
1
4
  == 1.0.4 - 3-Aug-2009
2
5
  * Fixed a symbol vs string issue for Ruby 1.9.x.
3
6
 
data/README CHANGED
@@ -1,40 +1,40 @@
1
1
  == Synopsis
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.
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.
5
5
 
6
6
  == Prerequisites
7
- Ruby 1.8.2 or later
7
+ Ruby 1.8.2 or later
8
8
 
9
9
  == Installation
10
- rake test
11
- rake install (non-gem) or rake install_gem (gem)
10
+ gem install facade
12
11
 
13
12
  == Usage
14
- require 'facade'
15
- class MyString < String
16
- extend Facade
17
- facade File, :dirname, :basename
18
- end
13
+ require 'facade'
19
14
 
20
- f = MyString.new('/home/djberge')
21
- puts f.basename # 'djberge'
22
- puts f.dirname # '/home'
15
+ class MyString < String
16
+ extend Facade
17
+ facade File, :dirname, :basename
18
+ end
19
+
20
+ f = MyString.new('/home/djberge')
21
+ puts f.basename # 'djberge'
22
+ puts f.dirname # '/home'
23
23
 
24
24
  == Acknowledgements
25
- Eero Saynatkari, Eric Hodel and Michael Granger for ideas and code which I
26
- shamelessly plagiarized.
25
+ Eero Saynatkari, Eric Hodel and Michael Granger for ideas and code which I
26
+ shamelessly plagiarized.
27
27
 
28
28
  == Copyright
29
- Copyright (c) 2005-2009 Daniel J. Berger
29
+ Copyright (c) 2005-2010 Daniel J. Berger
30
30
 
31
31
  == License
32
- Artistic 2.0
32
+ Artistic 2.0
33
33
 
34
34
  == Warranty
35
- This package is provided "as is" and without any express or
36
- implied warranties, including, without limitation, the implied
37
- warranties of merchantability and fitness for a particular purpose
35
+ This package is provided "as is" and without any express or
36
+ implied warranties, including, without limitation, the implied
37
+ warranties of merchantability and fitness for a particular purpose
38
38
 
39
39
  == Author
40
- Daniel J. Berger
40
+ Daniel J. Berger
data/Rakefile CHANGED
@@ -1,24 +1,27 @@
1
1
  require 'rake'
2
+ require 'rake/clean'
2
3
  require 'rake/testtask'
3
- require 'rbconfig'
4
- include Config
5
4
 
6
- desc 'Install the facade library (non-gem)'
7
- task :install do
8
- sitelibdir = CONFIG["sitelibdir"]
9
- file = "lib/facade.rb"
10
- FileUtils.cp(file, sitelibdir, :verbose => true)
11
- end
5
+ CLEAN.include("**/*.gem", "**/*.rbc")
6
+
7
+ namespace :gem do
8
+ desc 'Create the facade gem'
9
+ task :create => [:clean] do
10
+ spec = eval(IO.read('facade.gemspec'))
11
+ Gem::Builder.new(spec).build
12
+ end
12
13
 
13
- desc 'Install the facade library as a gem'
14
- task :install_gem do
15
- ruby 'facade.gemspec'
16
- file = Dir["*.gem"].first
17
- sh "gem install #{file}"
14
+ desc 'Install the facade gem'
15
+ task :install => [:create] do
16
+ file = Dir["*.gem"].first
17
+ sh "gem install #{file}"
18
+ end
18
19
  end
19
20
 
20
21
  Rake::TestTask.new do |t|
21
- t.libs << 'test'
22
- t.verbose = true
23
- t.warning = true
22
+ t.libs << 'test'
23
+ t.verbose = true
24
+ t.warning = true
24
25
  end
26
+
27
+ task :default => :test
@@ -1,25 +1,23 @@
1
1
  require 'rubygems'
2
2
 
3
- spec = Gem::Specification.new do |gem|
4
- gem.name = 'facade'
5
- gem.version = '1.0.4'
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') }
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'facade'
5
+ spec.version = '1.0.5'
6
+ spec.author = 'Daniel J. Berger'
7
+ spec.license = 'Artistic 2.0'
8
+ spec.email = 'djberg96@gmail.com'
9
+ spec.homepage = 'http://www.rubyforge.org/projects/shards'
10
+ spec.platform = Gem::Platform::RUBY
11
+ spec.summary = 'An easy way to implement the facade pattern in your class'
12
+ spec.test_file = 'test/test_facade.rb'
13
+ spec.has_rdoc = true
14
+ spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
15
15
 
16
- gem.rubyforge_project = 'shards'
17
- gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
16
+ spec.rubyforge_project = 'shards'
17
+ spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
18
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
19
+ spec.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
23
  end
24
-
25
- Gem::Builder.new(spec).build
@@ -1,55 +1,55 @@
1
1
  module Facade
2
- # The version of the facade library
3
- FACADE_VERSION = '1.0.4'
2
+ # The version of the facade library
3
+ FACADE_VERSION = '1.0.5'
4
4
 
5
- # The facade method will forward a singleton method as an instance
6
- # method of the extending class. If no arguments are provided, then all
7
- # singleton methods of the class or module become instance methods.
8
- #
9
- # Existing instance methods are NOT overridden, but are instead ignored.
10
- #
11
- # Example:
12
- #
13
- # require 'facade'
14
- #
15
- # class MyString < String
16
- # extend Facade
17
- # facade File, :dirname, :basename
18
- # end
19
- #
20
- # s = MyString.new('/home/djberge')
21
- # s.basename # => 'djberge'
22
- # s.dirname # => '/home'
23
- #
24
- def facade(klass, *methods)
25
- methods = methods.flatten
5
+ # The facade method will forward a singleton method as an instance
6
+ # method of the extending class. If no arguments are provided, then all
7
+ # singleton methods of the class or module become instance methods.
8
+ #
9
+ # Existing instance methods are NOT overridden, but are instead ignored.
10
+ #
11
+ # Example:
12
+ #
13
+ # require 'facade'
14
+ #
15
+ # class MyString < String
16
+ # extend Facade
17
+ # facade File, :dirname, :basename
18
+ # end
19
+ #
20
+ # s = MyString.new('/home/djberge')
21
+ # s.basename # => 'djberge'
22
+ # s.dirname # => '/home'
23
+ #
24
+ def facade(klass, *methods)
25
+ methods = methods.flatten
26
26
 
27
- if methods.empty? # Default to all methods
28
- if klass.kind_of?(Class)
29
- methods = klass.methods(false)
30
- else
31
- methods = klass.public_instance_methods(false)
32
- end
27
+ if methods.empty? # Default to all methods
28
+ if klass.kind_of?(Class)
29
+ methods = klass.methods(false)
30
+ else
31
+ methods = klass.public_instance_methods(false)
33
32
  end
33
+ end
34
34
 
35
- # Convert all strings to symbols to stay sane between 1.8.x and 1.9.x
36
- methods = methods.map{ |m| m.to_sym }
37
- methods -= self.instance_methods.map{ |m| m.to_sym } # No clobber
35
+ # Convert all strings to symbols to stay sane between 1.8.x and 1.9.x
36
+ methods = methods.map{ |m| m.to_sym }
37
+ methods -= self.instance_methods.map{ |m| m.to_sym } # No clobber
38
38
 
39
- methods.each do |methname|
40
- define_method(methname){
41
- if klass.kind_of?(Class)
42
- meth = klass.method(methname)
43
- else
44
- meth = Object.new.extend(klass).method(methname)
45
- end
39
+ methods.each do |methname|
40
+ define_method(methname){
41
+ if klass.kind_of?(Class)
42
+ meth = klass.method(methname)
43
+ else
44
+ meth = Object.new.extend(klass).method(methname)
45
+ end
46
46
 
47
- if meth.arity.zero? # Zero or one argument
48
- meth.call
49
- else
50
- meth.call(self)
51
- end
52
- }
53
- end
54
- end
47
+ if meth.arity.zero? # Zero or one argument
48
+ meth.call
49
+ else
50
+ meth.call(self)
51
+ end
52
+ }
53
+ end
54
+ end
55
55
  end
@@ -8,59 +8,59 @@ require 'test/unit'
8
8
  require 'facade'
9
9
 
10
10
  module Baz
11
- def testme(str)
12
- str
13
- end
11
+ def testme(str)
12
+ str
13
+ end
14
14
  end
15
15
 
16
16
  class FooString < String
17
- extend Facade
18
- facade File, :basename, 'dirname'
19
- facade Dir
20
- facade Baz
17
+ extend Facade
18
+ facade File, :basename, 'dirname'
19
+ facade Dir
20
+ facade Baz
21
21
 
22
- def blockdev?
23
- 'test'
24
- end
22
+ def blockdev?
23
+ 'test'
24
+ end
25
25
  end
26
26
 
27
27
  class TC_Facade < Test::Unit::TestCase
28
- def setup
29
- @str = FooString.new('/home/djberge')
30
- end
28
+ def setup
29
+ @str = FooString.new('/home/djberge')
30
+ end
31
31
 
32
- def test_facade_version
33
- assert_equal('1.0.4', Facade::FACADE_VERSION)
34
- end
32
+ def test_facade_version
33
+ assert_equal('1.0.5', Facade::FACADE_VERSION)
34
+ end
35
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
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
42
 
43
- def test_file_method_return_values
44
- assert_equal('djberge', @str.basename)
45
- assert_equal('/home', @str.dirname)
46
- end
43
+ def test_file_method_return_values
44
+ assert_equal('djberge', @str.basename)
45
+ assert_equal('/home', @str.dirname)
46
+ end
47
47
 
48
- def test_dir_methods
49
- assert_respond_to(@str, :pwd)
50
- assert_respond_to(@str, :entries)
51
- end
48
+ def test_dir_methods
49
+ assert_respond_to(@str, :pwd)
50
+ assert_respond_to(@str, :entries)
51
+ end
52
52
 
53
- def test_no_clobber
54
- assert_respond_to(@str, :blockdev?)
55
- assert_equal('test', @str.blockdev?)
56
- end
53
+ def test_no_clobber
54
+ assert_respond_to(@str, :blockdev?)
55
+ assert_equal('test', @str.blockdev?)
56
+ end
57
57
 
58
- def test_module_methods
59
- assert_respond_to(@str, :testme)
60
- assert_equal('/home/djberge', @str.testme)
61
- end
58
+ def test_module_methods
59
+ assert_respond_to(@str, :testme)
60
+ assert_equal('/home/djberge', @str.testme)
61
+ end
62
62
 
63
- def teardown
64
- @str = nil
65
- end
63
+ def teardown
64
+ @str = nil
65
+ end
66
66
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: facade
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 5
10
+ version: 1.0.5
5
11
  platform: ruby
6
12
  authors:
7
13
  - Daniel J. Berger
@@ -9,11 +15,11 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-08-03 00:00:00 -06:00
18
+ date: 2010-11-10 00:00:00 -07:00
13
19
  default_executable:
14
20
  dependencies: []
15
21
 
16
- description: " The facade library allows you to mixin singleton methods from classes\n or modules as instance methods of the extending class.\n"
22
+ description: " The facade library allows you to mixin singleton methods from classes\n or modules as instance methods of the extending class.\n"
17
23
  email: djberg96@gmail.com
18
24
  executables: []
19
25
 
@@ -24,13 +30,13 @@ extra_rdoc_files:
24
30
  - CHANGES
25
31
  - MANIFEST
26
32
  files:
27
- - CHANGES
28
- - facade.gemspec
29
- - lib/facade.rb
30
- - MANIFEST
31
33
  - Rakefile
32
34
  - README
35
+ - facade.gemspec
36
+ - lib/facade.rb
37
+ - CHANGES
33
38
  - test/test_facade.rb
39
+ - MANIFEST
34
40
  has_rdoc: true
35
41
  homepage: http://www.rubyforge.org/projects/shards
36
42
  licenses:
@@ -41,21 +47,27 @@ rdoc_options: []
41
47
  require_paths:
42
48
  - lib
43
49
  required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
44
51
  requirements:
45
52
  - - ">="
46
53
  - !ruby/object:Gem::Version
54
+ hash: 3
55
+ segments:
56
+ - 0
47
57
  version: "0"
48
- version:
49
58
  required_rubygems_version: !ruby/object:Gem::Requirement
59
+ none: false
50
60
  requirements:
51
61
  - - ">="
52
62
  - !ruby/object:Gem::Version
63
+ hash: 3
64
+ segments:
65
+ - 0
53
66
  version: "0"
54
- version:
55
67
  requirements: []
56
68
 
57
69
  rubyforge_project: shards
58
- rubygems_version: 1.3.5
70
+ rubygems_version: 1.3.7
59
71
  signing_key:
60
72
  specification_version: 3
61
73
  summary: An easy way to implement the facade pattern in your class