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 +4 -4
- data/README.md +34 -4
- data/lib/active_adapter/abstract.rb +2 -0
- data/lib/active_adapter/engine.rb +31 -4
- data/lib/active_adapter/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b4167041e496f8892f1517ac5fc2ff1111ab350c065c2625d218077c7ab4db5
|
4
|
+
data.tar.gz: e9b87abaa921e7c998bcbb00efbe6aac698d3aac534565b01eb583484a065bbc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebc7d39b8baf528e191925d582a4d1a857a8c9f2fd97e10342b98f7fd8ff098abf378dd6ed05745de47786293aa4ab3d449edab1e7997383e47722ae04e4745e
|
7
|
+
data.tar.gz: 36fa12a42e2588b2b91f0f564f92f6d830be01a6be122d200350ff50040c10a94fd3e6c83de4cb4f782b1497052abd6a1a3b7541519fd5562c0432391f0f8295
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# ActiveAdapter
|
2
2
|
|
3
|
-
|
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
|
-
|
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
|
-
|
5
|
-
|
6
|
-
|
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
|
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
|
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:
|
149
|
+
version: '0'
|
150
150
|
requirements: []
|
151
151
|
rubyforge_project:
|
152
152
|
rubygems_version: 2.7.6
|