facade 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
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