active_adapter 0.1.0.pre → 0.1.0

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