active_adapter 0.1.0.pre → 0.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb9a0b696b66beeb7ba853513320977fe4640f1e9c7913fc25d83af3629b704c
4
- data.tar.gz: 66b86fa974d9e3b7211a36666cb1411a00f1c1ef8cf94f02ad2f172d14cce00a
3
+ metadata.gz: 1b4167041e496f8892f1517ac5fc2ff1111ab350c065c2625d218077c7ab4db5
4
+ data.tar.gz: e9b87abaa921e7c998bcbb00efbe6aac698d3aac534565b01eb583484a065bbc
5
5
  SHA512:
6
- metadata.gz: 0a98bb5e6aad8d41e21713245b9828b088e9b36abc2747c63cf9fda5b430640630998b109fc414de8353841e9c2060b8e6c96e94fabf719f5e0f6324440031f9
7
- data.tar.gz: 15da185f9f6a941ac09dc71a50a5a32e9f55df8319a27a83b31094f14f6c5b25ac40dcdad53b3d159c78464ea18d9f20e0f383ba3542c84875391ef580f75ecf
6
+ metadata.gz: ebc7d39b8baf528e191925d582a4d1a857a8c9f2fd97e10342b98f7fd8ff098abf378dd6ed05745de47786293aa4ab3d449edab1e7997383e47722ae04e4745e
7
+ data.tar.gz: 36fa12a42e2588b2b91f0f564f92f6d830be01a6be122d200350ff50040c10a94fd3e6c83de4cb4f782b1497052abd6a1a3b7541519fd5562c0432391f0f8295
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # ActiveAdapter
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/active_adapter`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Simple implementation of the adapter pattern.
6
4
 
7
5
  ## Installation
8
6
 
@@ -22,7 +20,39 @@ Or install it yourself as:
22
20
 
23
21
  ## Usage
24
22
 
25
- TODO: Write usage instructions here
23
+ Define your adaptable classes:
24
+
25
+ ```ruby
26
+ # vehicle.rb
27
+ class Vehicle < ActiveAdapter::Engine; end
28
+ ```
29
+
30
+ ```ruby
31
+ # vehicle_adapters/abstract.rb
32
+ class VehicleAdapters::Abstract < ActiveAdapter::Abstract
33
+ def run
34
+ adapter.run
35
+ end
36
+ end
37
+ ```
38
+
39
+ ```ruby
40
+ # vehicle_adapters/car.rb
41
+ class VehicleAdapters::Car < ActiveAdapter::Implement
42
+ def run
43
+ "Car running..."
44
+ end
45
+ end
46
+ ```
47
+
48
+ Now you can use the adapter pattern as simple as you see:
49
+
50
+ ```ruby
51
+ vehicle = Vehicle.adapt(:car)
52
+ vehicle.run # => "Car running..."
53
+ ```
54
+
55
+ See complete abilities of ActiveAdapter, please follow [Spec files](https://github.com/pinewong/active_adapter/blob/master/spec/active_adapter_spec.rb)
26
56
 
27
57
  ## Development
28
58
 
@@ -2,6 +2,8 @@ module ActiveAdapter
2
2
  class Abstract
3
3
  attr_reader :adapter
4
4
 
5
+ # Instance an real object from abstract object by adapter
6
+ # @param implement_adapter_class [Class] The implement adapter class
5
7
  def initialize(implement_adapter_class)
6
8
  @adapter = implement_adapter_class.new
7
9
  end
@@ -1,10 +1,33 @@
1
1
  module ActiveAdapter
2
2
  class Engine
3
3
  class << self
4
- def adapters
5
- @adapters ||= {}
6
- end
7
-
4
+ # To adapt engine object for a real object
5
+ # @param adapter [#to_sym] Adapter class name
6
+ # @return [Object] The real object with a adapter
7
+ # @raise [ActiveAdapter::AbstractAdapterUndefinedError] if there is no *_adapters folder or
8
+ # there is no abstract class(inherit from ActiveAdapter::Abstract) in *_adapters folder
9
+ # @raise [ActiveAdapter::ImplementAdapterUndefinedError] if there is no implement class
10
+ # inherit from ActiveAdapter::Implement)
11
+ # @example
12
+ # # vehicle.rb
13
+ # class Vehicle < ActiveAdapter::Engine; end
14
+ #
15
+ # # vehicle_adapters/abstract.rb
16
+ # class VehicleAdapters::Abstract < ActiveAdapter::Abstract
17
+ # def run
18
+ # adapter.run
19
+ # end
20
+ # end
21
+ #
22
+ # # vehicle_adapters/car.rb
23
+ # class VehicleAdapters::Car < ActiveAdapter::Implement
24
+ # def run
25
+ # "Car running..."
26
+ # end
27
+ # end
28
+ #
29
+ # vehicle = Vehicle.adapt(:car)
30
+ # vehicle.run # => "Car running..."
8
31
  def adapt(adapter)
9
32
  adapters[adapter.to_s] ||= begin
10
33
  module_name = "#{name.deconstantize}::#{name.demodulize}Adapters"
@@ -17,6 +40,10 @@ module ActiveAdapter
17
40
 
18
41
  private
19
42
 
43
+ def adapters
44
+ @adapters ||= {}
45
+ end
46
+
20
47
  def get_implement_adapter_class(module_name, adapter)
21
48
  "#{module_name}::#{adapter.to_s.camelize}".constantize
22
49
  rescue NameError => e
@@ -1,3 +1,3 @@
1
1
  module ActiveAdapter
2
- VERSION = "0.1.0.pre".freeze
2
+ VERSION = "0.1.0".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pine Wong
@@ -144,9 +144,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
144
  version: '0'
145
145
  required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  requirements:
147
- - - ">"
147
+ - - ">="
148
148
  - !ruby/object:Gem::Version
149
- version: 1.3.1
149
+ version: '0'
150
150
  requirements: []
151
151
  rubyforge_project:
152
152
  rubygems_version: 2.7.6