RubyGems Navigation menu

pluggability 0.5.0

Pluggability is a toolkit for creating plugins. It provides a mixin that extends your class with methods to load and instantiate its subclasses by name. So instead of: require 'acme/adapter/png' png_adapter = Acme::Adapter::PNG.new( 'file.png' ) you can do: require 'acme/adapter' png_adapter = Acme::Adapter.create( :png, 'file.png' ) A full example of where this might be useful is in a program which generates output with a 'driver' object, which provides a unified interface but generates different kinds of output. First the abstract base class, which is extended with Pluggability: # in mygem/driver.rb: require 'pluggability' require 'mygem' unless defined?( MyGem ) class MyGem::Driver extend Pluggability plugin_prefixes "mygem/drivers" end We can have one driver that outputs PDF documents: # mygem/drivers/pdf.rb: require 'mygem/driver' unless defined?( MyGem::Driver ) class MyGem::Driver::PDF < Driver ...implementation... end and another that outputs plain ascii text: #mygem/drivers/ascii.rb: require 'mygem/driver' unless defined?( MyGem::Driver ) class MyGem::Driver::ASCII < Driver ...implementation... end Now the driver is configurable by the end-user, who can just set it by its short name: require 'mygem' config[:driver_type] #=> "pdf" driver = MyGem::Driver.create( config[:driver_type] ) driver.class #=> MyGem::Driver::PDF # You can also pass arguments to the constructor, too: ascii_driver = MyGem::Driver.create( :ascii, :columns => 80 )

Gemfile:
=

インストール:
=

バージョン履歴:

  1. 0.9.0 June 08, 2023 (18KB)
  2. 0.8.0 December 01, 2022 (18KB)
  3. 0.7.0 February 05, 2020 (23.5KB)
  4. 0.6.0 March 21, 2018 (25KB)
  5. 0.5.0 January 19, 2018 (25KB)
全てのバージョンを表示(全14件)

Runtime依存関係 (1):

loggability ~> 0.12

Development依存関係 (5):

hoe ~> 3.16
hoe-deveiate ~> 0.9
hoe-highline ~> 0.2
hoe-mercurial ~> 1.4
rdoc ~> 5.1

所有者:

作者:

  • Martin Chase, Michael Granger

SHA 256チェックサム:

=

累計ダウンロード数 44,402

このバージョンのみ 9,445

このバージョンがリリースされたのは:

ライセンス:

BSD-3-Clause

必要なRubyのバージョン: >= 2.3.4

リンク: