facade-1.0.7/0000755000175000017500000000000012577435402012647 5ustar mcrusoemcrusoefacade-1.0.7/metadata.yml0000644000175000017500000000550612577435402015160 0ustar mcrusoemcrusoe--- !ruby/object:Gem::Specification name: facade version: !ruby/object:Gem::Version version: 1.0.7 platform: ruby authors: - Daniel J. Berger autorequire: bindir: bin cert_chain: - | -----BEGIN CERTIFICATE----- MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7 tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC /sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2 wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V tGSHgAmcLlkdGgan182qsE/4kKM= -----END CERTIFICATE----- date: 2015-09-09 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: rake requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' description: |2 The facade library allows you to mixin singleton methods from classes or modules as instance methods of the extending class. email: djberg96@gmail.com executables: [] extensions: [] extra_rdoc_files: - README - CHANGES - MANIFEST files: - CHANGES - MANIFEST - README - Rakefile - certs/djberg96_pub.pem - facade.gemspec - lib/facade.rb - test/test_facade.rb homepage: https://github.com/djberg96/facade licenses: - Artistic 2.0 metadata: {} post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: rubygems_version: 2.4.5 signing_key: specification_version: 4 summary: An easy way to implement the facade pattern in your class test_files: - test/test_facade.rb facade-1.0.7/test/0000755000175000017500000000000012577435402013626 5ustar mcrusoemcrusoefacade-1.0.7/test/test_facade.rb0000644000175000017500000000254312577435402016421 0ustar mcrusoemcrusoe######################################################################### # test_facade.rb # # Test suite for the Facade module. This test suite should be run via # the 'rake test' task. ######################################################################### require 'test/unit' require 'facade' module Baz def testme(str) str end end class FooString < String extend Facade facade File, :basename, 'dirname' facade Dir facade Baz def blockdev? 'test' end end class TC_Facade < Test::Unit::TestCase def setup @str = FooString.new('/home/djberge') end def test_facade_version assert_equal('1.0.7', Facade::FACADE_VERSION) end def test_file_methods assert_respond_to(@str, :basename) assert_respond_to(@str, :dirname) assert_raises(NoMethodError){ @str.executable? } assert_raises(NoMethodError){ @str.chardev? } end def test_file_method_return_values assert_equal('djberge', @str.basename) assert_equal('/home', @str.dirname) end def test_dir_methods assert_respond_to(@str, :pwd) assert_respond_to(@str, :entries) end def test_no_clobber assert_respond_to(@str, :blockdev?) assert_equal('test', @str.blockdev?) end def test_module_methods assert_respond_to(@str, :testme) assert_equal('/home/djberge', @str.testme) end def teardown @str = nil end end facade-1.0.7/lib/0000755000175000017500000000000012577435402013415 5ustar mcrusoemcrusoefacade-1.0.7/lib/facade.rb0000644000175000017500000000264512577435402015154 0ustar mcrusoemcrusoemodule Facade # The version of the facade library FACADE_VERSION = '1.0.7' # The facade method will forward a singleton method as an instance # method of the extending class. If no arguments are provided, then all # singleton methods of the class or module become instance methods. # # Existing instance methods are NOT overridden, but are instead ignored. # # Example: # # require 'facade' # # class MyString < String # extend Facade # facade File, :dirname, :basename # end # # s = MyString.new('/home/djberge') # s.basename # => 'djberge' # s.dirname # => '/home' # def facade(klass, *methods) methods = methods.flatten if methods.empty? # Default to all methods if klass.kind_of?(Class) methods = klass.methods(false) else methods = klass.public_instance_methods(false) end end # Convert all strings to symbols to stay sane between 1.8.x and 1.9.x methods = methods.map{ |m| m.to_sym } methods -= self.instance_methods.map{ |m| m.to_sym } # No clobber methods.each do |methname| define_method(methname){ if klass.kind_of?(Class) meth = klass.method(methname) else meth = Object.new.extend(klass).method(methname) end if meth.arity.zero? # Zero or one argument meth.call else meth.call(self) end } end end end facade-1.0.7/facade.gemspec0000644000175000017500000000142712577435402015423 0ustar mcrusoemcrusoerequire 'rubygems' Gem::Specification.new do |spec| spec.name = 'facade' spec.version = '1.0.7' spec.author = 'Daniel J. Berger' spec.license = 'Artistic 2.0' spec.email = 'djberg96@gmail.com' spec.homepage = 'https://github.com/djberg96/facade' spec.summary = 'An easy way to implement the facade pattern in your class' spec.test_file = 'test/test_facade.rb' spec.files = Dir['**/*'].reject{ |f| f.include?('git') } spec.cert_chain = ['certs/djberg96_pub.pem'] spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST'] spec.add_development_dependency('rake') spec.description = <<-EOF The facade library allows you to mixin singleton methods from classes or modules as instance methods of the extending class. EOF end facade-1.0.7/certs/0000755000175000017500000000000012577435402013767 5ustar mcrusoemcrusoefacade-1.0.7/certs/djberg96_pub.pem0000600000175000017500000000234512577435402016750 0ustar mcrusoemcrusoe-----BEGIN CERTIFICATE----- MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7 tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC /sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2 wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V tGSHgAmcLlkdGgan182qsE/4kKM= -----END CERTIFICATE----- facade-1.0.7/Rakefile0000644000175000017500000000114412577435402014314 0ustar mcrusoemcrusoerequire 'rake' require 'rake/clean' require 'rake/testtask' CLEAN.include("**/*.gem", "**/*.rbc") namespace :gem do desc 'Create the facade gem' task :create => [:clean] do require 'rubygems/package' spec = eval(IO.read('facade.gemspec')) spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem') Gem::Package.build(spec) end desc 'Install the facade gem' task :install => [:create] do file = Dir["*.gem"].first sh "gem install -l #{file}" end end Rake::TestTask.new do |t| t.libs << 'test' t.verbose = true t.warning = true end task :default => :test facade-1.0.7/README0000644000175000017500000000157312577435402013535 0ustar mcrusoemcrusoe== Synopsis An easy way to implement the facade pattern in your classes. In short, this library wraps singleton methods from another class as instance methods of the current class. == Installation gem install facade == Usage require 'facade' class MyString < String extend Facade facade File, :dirname, :basename end f = MyString.new('/home/djberge') puts f.basename # 'djberge' puts f.dirname # '/home' == Acknowledgements Eero Saynatkari, Eric Hodel and Michael Granger for ideas and code which I shamelessly plagiarized. == Copyright Copyright (c) 2005-2015 Daniel J. Berger == License Artistic 2.0 == Warranty This package is provided "as is" and without any express or implied warranties, including, without limitation, the implied warranties of merchantability and fitness for a particular purpose == Author Daniel J. Berger facade-1.0.7/MANIFEST0000644000175000017500000000017112577435402013777 0ustar mcrusoemcrusoe* CHANGES * MANIFEST * README * Rakefile * facade.gemspec * certs/djberg96_pub.pem * lib/facade.rb * test/test_facade.rb facade-1.0.7/CHANGES0000644000175000017500000000156512577435402013651 0ustar mcrusoemcrusoe== 1.0.7 - 9-Sep-2015 * This gem is now signed. * The Rakefile tasks now assume Rubygems 2.x. == 1.0.6 - 12-Oct-2014 * Updates to the gemspec and Rakefile. == 1.0.5 - 10-Nov-2010 * Refactored the Rakefile. == 1.0.4 - 3-Aug-2009 * Fixed a symbol vs string issue for Ruby 1.9.x. == 1.0.3 - 21-Jul-2009 * License changed to Artistic 2.0. * Documentation updates. * Test file renamed to test_facade.rb. * Some Rakefile and gemspec updates * One test modified so that it passes with 1.9.x as well. == 1.0.2 - 11-Jun-2007 * Added a Rakefile with tasks for installation and testing. * Removed the install.rb file. Installation is now handled as a Rake task. * Some test suite refactoring. * Fixed the FACADE_VERSION number (now 1.0.2, was 1.1.0). == 1.0.1 - 8-Jun-2005 * Moved project to RubyForge. * Added a .gemspec file. * Added a MANIFEST. == 1.0.0 - 18-May-2005 * Initial release facade-1.0.7/checksums.yaml.gz.sig0000444000175000017500000000040012577435402016710 0ustar mcrusoemcrusoe>[z| qG@B{Ң~V!6ٻ]uqd'6)UvƟj,֤I55QE 3pt 9Gm>@S *?ӈ1*ޖUHiD rESs{Zl'&ؖ"f]\Y$GiMiI )qz8>P?VmRZ;Ye[fdML2(+DcClp uGnu*A]{facade-1.0.7/data.tar.gz.sig0000444000175000017500000000040012577435402015460 0ustar mcrusoemcrusoedEJkl Ctj,^6!i (xDF(BxxGL  8i؆S'gZ=y VJ^)F/CRw0ǤAG!]&`E¾G9Xv'djM/J!W)3T Ukֲ|qg2%^ñU<}j'LZ0ZRaX"0bv@f<6qJK}| facade-1.0.7/metadata.gz.sig0000444000175000017500000000040012577435402015542 0ustar mcrusoemcrusoe}fJ3H=;vYW.AāFYV:(#R +W=%z%V]G.7sфf}F#{Х#ɱO(5+ĥzP-9m3+ f) %zJRQzuR$Tp!F] qöV-h3U I%vcMa]2;m~N?awa"?řS!YF