ddplugin 1.0.1 → 1.0.2
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 +5 -5
- data/Gemfile +3 -1
- data/Gemfile.lock +23 -21
- data/NEWS.md +6 -0
- data/README.md +49 -15
- data/Rakefile +5 -3
- data/ddplugin.gemspec +7 -5
- data/lib/ddplugin.rb +2 -0
- data/lib/ddplugin/plugin.rb +7 -4
- data/lib/ddplugin/registry.rb +4 -1
- data/lib/ddplugin/version.rb +3 -1
- data/test/helper.rb +2 -0
- data/test/test_plugin.rb +33 -4
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 998e406c491ddfcde5cd7559cd22084fca1327f1b27b8dd177d6fe21b30ff79b
|
4
|
+
data.tar.gz: 0b3673fdf1c69fc0ae67ca50ef4ac6575a9973e58d50d86b3a86a91ef3a6c796
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52a6bfdfadc2f47031beb29dc586cd81e2cf7bfb756148f8f1dec312b890701c075406ba3dbbf9694dc5f084ece2d311b03c78ffa844afa6ccf61b53c80ac98f
|
7
|
+
data.tar.gz: 65684a38e9e46dbf83da7e010269712280c7605a9d141ff46a799809f1621dd37edb0feedc019f98e6bbb68753162516fb829628e5526df9f3404911c2ceeeac
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,43 +1,45 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ddplugin (1.0.
|
4
|
+
ddplugin (1.0.2)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
ast (2.
|
10
|
-
coveralls (0.8.
|
9
|
+
ast (2.4.0)
|
10
|
+
coveralls (0.8.21)
|
11
11
|
json (>= 1.8, < 3)
|
12
|
-
simplecov (~> 0.
|
12
|
+
simplecov (~> 0.14.1)
|
13
13
|
term-ansicolor (~> 1.3)
|
14
|
-
thor (~> 0.19.
|
14
|
+
thor (~> 0.19.4)
|
15
15
|
tins (~> 1.6)
|
16
16
|
docile (1.1.5)
|
17
|
-
json (2.0
|
18
|
-
minitest (5.
|
19
|
-
|
20
|
-
|
17
|
+
json (2.1.0)
|
18
|
+
minitest (5.11.3)
|
19
|
+
parallel (1.12.1)
|
20
|
+
parser (2.5.0.5)
|
21
|
+
ast (~> 2.4.0)
|
21
22
|
powerpack (0.1.1)
|
22
|
-
rainbow (
|
23
|
-
rake (12.
|
24
|
-
rubocop (0.
|
25
|
-
|
23
|
+
rainbow (3.0.0)
|
24
|
+
rake (12.3.1)
|
25
|
+
rubocop (0.54.0)
|
26
|
+
parallel (~> 1.10)
|
27
|
+
parser (>= 2.5)
|
26
28
|
powerpack (~> 0.1)
|
27
|
-
rainbow (>=
|
29
|
+
rainbow (>= 2.2.2, < 4.0)
|
28
30
|
ruby-progressbar (~> 1.7)
|
29
31
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
30
|
-
ruby-progressbar (1.
|
31
|
-
simplecov (0.
|
32
|
+
ruby-progressbar (1.9.0)
|
33
|
+
simplecov (0.14.1)
|
32
34
|
docile (~> 1.1.0)
|
33
35
|
json (>= 1.8, < 3)
|
34
36
|
simplecov-html (~> 0.10.0)
|
35
|
-
simplecov-html (0.10.
|
36
|
-
term-ansicolor (1.
|
37
|
+
simplecov-html (0.10.2)
|
38
|
+
term-ansicolor (1.6.0)
|
37
39
|
tins (~> 1.0)
|
38
40
|
thor (0.19.4)
|
39
|
-
tins (1.
|
40
|
-
unicode-display_width (1.
|
41
|
+
tins (1.16.3)
|
42
|
+
unicode-display_width (1.3.0)
|
41
43
|
|
42
44
|
PLATFORMS
|
43
45
|
ruby
|
@@ -51,4 +53,4 @@ DEPENDENCIES
|
|
51
53
|
rubocop
|
52
54
|
|
53
55
|
BUNDLED WITH
|
54
|
-
1.
|
56
|
+
1.16.1
|
data/NEWS.md
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
[](http://rubygems.org/gems/ddplugin)
|
2
|
+
[](http://rubygems.org/gems/ddplugin)
|
3
|
+
[](https://travis-ci.org/ddfreyne/ddplugin)
|
4
|
+
[](https://codeclimate.com/github/ddfreyne/ddplugin)
|
5
|
+
[](https://coveralls.io/r/ddfreyne/ddplugin)
|
5
6
|
|
6
7
|
# ddplugin
|
7
8
|
|
@@ -29,7 +30,7 @@ A typical way to use plugins would be to store the plugin names in a configurati
|
|
29
30
|
|
30
31
|
## Requirements
|
31
32
|
|
32
|
-
*ddplugin* requires Ruby 2.
|
33
|
+
*ddplugin* requires Ruby 2.3 or higher.
|
33
34
|
|
34
35
|
## Versioning
|
35
36
|
|
@@ -63,23 +64,27 @@ class DataSource
|
|
63
64
|
end
|
64
65
|
```
|
65
66
|
|
66
|
-
To define a plugin, create a class that inherits from the plugin type and sets the identifier:
|
67
|
+
To define a plugin, create a class that inherits from the plugin type and sets the identifier, either as a symbol or a string:
|
67
68
|
|
68
69
|
```ruby
|
69
70
|
class ERBFilter < Filter
|
71
|
+
# Specify the identifier as a symbol…
|
70
72
|
identifier :erb
|
71
73
|
end
|
72
74
|
|
73
75
|
class HamlFilter < Filter
|
74
|
-
|
76
|
+
# … or as a string …
|
77
|
+
identifier 'haml'
|
75
78
|
end
|
76
79
|
|
77
80
|
class FilesystemDataSource < DataSource
|
78
|
-
|
81
|
+
# … or even provide multiple.
|
82
|
+
identifiers :filesystem, :file_system
|
79
83
|
end
|
80
84
|
|
81
85
|
class PostgresDataSource < DataSource
|
82
|
-
|
86
|
+
# … or mix and match (not sure why you would, though)
|
87
|
+
identifier :postgres, 'postgresql'
|
83
88
|
end
|
84
89
|
```
|
85
90
|
|
@@ -89,7 +94,7 @@ To find a plugin of a given type and with a given identifier, call `.named` on t
|
|
89
94
|
Filter.named(:erb)
|
90
95
|
# => ERBFilter
|
91
96
|
|
92
|
-
Filter.named(
|
97
|
+
Filter.named('haml')
|
93
98
|
# => HamlFilter
|
94
99
|
|
95
100
|
DataSource.named(:filesystem)
|
@@ -99,22 +104,50 @@ DataSource.named(:postgres)
|
|
99
104
|
# => PostgresDataSource
|
100
105
|
```
|
101
106
|
|
107
|
+
In a real-world situation, the plugin types could be described in the environment:
|
108
|
+
|
109
|
+
```
|
110
|
+
% cat .env
|
111
|
+
DATA_SOURCE_TYPE=postgres
|
112
|
+
```
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
DataSource.named(ENV.fetch('DATA_SOURCE_TYPE'))
|
116
|
+
# => PostgresDataSource
|
117
|
+
```
|
118
|
+
|
119
|
+
… or in a configuration file:
|
120
|
+
|
121
|
+
```
|
122
|
+
% cat config.yml
|
123
|
+
data_source: 'filesystem'
|
124
|
+
```
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
config = YAML.load_file('config.yml')
|
128
|
+
DataSource.named(config.fetch('data_source'))
|
129
|
+
# => FilesystemDataSource
|
130
|
+
```
|
131
|
+
|
102
132
|
To get all plugins of a given type, call `.all` on the plugin type:
|
103
133
|
|
104
134
|
```ruby
|
105
135
|
Filter.all
|
106
|
-
# => [
|
136
|
+
# => [ERBFilter, HamlFilter]
|
107
137
|
|
108
138
|
DataSource.all
|
109
|
-
# => [
|
139
|
+
# => [FilesystemDataSource, PostgresDataSource]
|
110
140
|
```
|
111
141
|
|
112
|
-
To get the identifier of a plugin, call `.identifier
|
142
|
+
To get the identifier of a plugin, call `.identifier`, which returns a symbol:
|
113
143
|
|
114
144
|
```ruby
|
115
145
|
Filter.named(:erb).identifier
|
116
146
|
# => :erb
|
117
147
|
|
148
|
+
Filter.named('haml').identifier
|
149
|
+
# => :haml
|
150
|
+
|
118
151
|
PostgresDataSource.identifier
|
119
152
|
# => :postgres
|
120
153
|
```
|
@@ -125,8 +158,9 @@ Pull requests and issues are greatly appreciated.
|
|
125
158
|
|
126
159
|
When you submit a pull request, make sure that your change is covered by tests, and that the `README` and [YARD](http://yardoc.org/) source code documentation are still up-to-date.
|
127
160
|
|
128
|
-
To run the tests
|
161
|
+
To run the tests:
|
129
162
|
|
130
163
|
```
|
131
|
-
%
|
164
|
+
% bundle install
|
165
|
+
% bundle exec rake
|
132
166
|
```
|
data/Rakefile
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake/testtask'
|
2
4
|
require 'rubocop/rake_task'
|
3
5
|
|
4
6
|
Rake::TestTask.new do |t|
|
5
|
-
t.libs = %w
|
7
|
+
t.libs = %w[lib test]
|
6
8
|
t.test_files = FileList['test/**/test_*.rb', 'test/**/*_spec.rb']
|
7
9
|
end
|
8
10
|
|
9
11
|
RuboCop::RakeTask.new do |task|
|
10
|
-
task.options = %w
|
12
|
+
task.options = %w[--display-cop-names --format simple]
|
11
13
|
task.patterns = ['lib/**/*.rb', 'test/**/*.rb']
|
12
14
|
end
|
13
15
|
|
14
|
-
task :
|
16
|
+
task default: %i[test rubocop]
|
data/ddplugin.gemspec
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'lib/ddplugin/version'
|
2
4
|
|
3
5
|
Gem::Specification.new do |s|
|
@@ -11,15 +13,15 @@ Gem::Specification.new do |s|
|
|
11
13
|
s.email = 'denis.defreyne@stoneship.org'
|
12
14
|
s.license = 'MIT'
|
13
15
|
|
14
|
-
s.required_ruby_version = '
|
16
|
+
s.required_ruby_version = '~> 2.3'
|
15
17
|
|
16
18
|
s.files = Dir['[A-Z]*'] +
|
17
19
|
Dir['{lib,test}/**/*'] +
|
18
|
-
[
|
19
|
-
s.require_paths = [
|
20
|
+
['ddplugin.gemspec']
|
21
|
+
s.require_paths = ['lib']
|
20
22
|
|
21
|
-
s.rdoc_options = [
|
22
|
-
s.extra_rdoc_files = [
|
23
|
+
s.rdoc_options = ['--main', 'README.md']
|
24
|
+
s.extra_rdoc_files = ['LICENSE', 'README.md', 'NEWS.md']
|
23
25
|
|
24
26
|
s.add_development_dependency('bundler', '~> 1.13')
|
25
27
|
end
|
data/lib/ddplugin.rb
CHANGED
data/lib/ddplugin/plugin.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DDPlugin
|
2
4
|
# A module that contains class methods for plugins. It provides functions
|
3
5
|
# for setting identifiers and finding plugins. Plugin classes should extend
|
@@ -7,8 +9,8 @@ module DDPlugin
|
|
7
9
|
#
|
8
10
|
# Sets the identifiers for this class.
|
9
11
|
#
|
10
|
-
# @param [Array<Symbol>] identifiers A list of identifiers to
|
11
|
-
# this class.
|
12
|
+
# @param [Array<Symbol, String>] identifiers A list of identifiers to
|
13
|
+
# assign to this class.
|
12
14
|
#
|
13
15
|
# @return [void]
|
14
16
|
#
|
@@ -34,7 +36,8 @@ module DDPlugin
|
|
34
36
|
#
|
35
37
|
# Sets the identifier for this class.
|
36
38
|
#
|
37
|
-
# @param [Symbol] identifier The identifier to assign to this
|
39
|
+
# @param [Symbol, String] identifier The identifier to assign to this
|
40
|
+
# class.
|
38
41
|
#
|
39
42
|
# @return [void]
|
40
43
|
#
|
@@ -54,7 +57,7 @@ module DDPlugin
|
|
54
57
|
DDPlugin::Registry.instance.find_all(self)
|
55
58
|
end
|
56
59
|
|
57
|
-
# @param [Symbol] identifier The identifier of the class to find
|
60
|
+
# @param [Symbol, String] identifier The identifier of the class to find
|
58
61
|
#
|
59
62
|
# @return [Class] The class with the given identifier
|
60
63
|
def named(identifier)
|
data/lib/ddplugin/registry.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DDPlugin
|
2
4
|
# The registry is responsible for keeping track of all loaded plugins.
|
3
5
|
class Registry
|
@@ -25,7 +27,7 @@ module DDPlugin
|
|
25
27
|
#
|
26
28
|
# @return [void]
|
27
29
|
def register(root_class, klass, *identifiers)
|
28
|
-
identifiers.each do |identifier|
|
30
|
+
identifiers.map(&:to_sym).each do |identifier|
|
29
31
|
@classes_to_identifiers[root_class][klass] ||= []
|
30
32
|
|
31
33
|
@identifiers_to_classes[root_class][identifier] = klass
|
@@ -53,6 +55,7 @@ module DDPlugin
|
|
53
55
|
#
|
54
56
|
# @return [Class, nil] The class with the given identifier
|
55
57
|
def find(root_class, identifier)
|
58
|
+
identifier = identifier.to_sym
|
56
59
|
@identifiers_to_classes[root_class] ||= {}
|
57
60
|
@identifiers_to_classes[root_class][identifier]
|
58
61
|
end
|
data/lib/ddplugin/version.rb
CHANGED
data/test/helper.rb
CHANGED
data/test/test_plugin.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'helper'
|
2
4
|
|
3
|
-
class
|
5
|
+
class PluginTest < Minitest::Test
|
4
6
|
class IdentifierSample
|
5
7
|
extend DDPlugin::Plugin
|
6
8
|
end
|
@@ -28,15 +30,34 @@ class DDPlugin::PluginTest < Minitest::Test
|
|
28
30
|
assert_equal :foo, klass.identifier
|
29
31
|
end
|
30
32
|
|
33
|
+
def test_identifier_with_string
|
34
|
+
klass = Class.new(IdentifierSample)
|
35
|
+
assert_nil klass.identifier
|
36
|
+
|
37
|
+
klass.identifier 'asdf'
|
38
|
+
assert_equal :asdf, klass.identifier
|
39
|
+
end
|
40
|
+
|
31
41
|
def test_identifiers
|
32
42
|
klass = Class.new(IdentifierSample)
|
33
43
|
assert_empty klass.identifiers
|
34
44
|
|
35
45
|
klass.identifiers :foo1, :foo2
|
36
|
-
assert_equal [
|
46
|
+
assert_equal %i[foo1 foo2], klass.identifiers
|
37
47
|
|
38
48
|
klass.identifiers :bar1, :bar2
|
39
|
-
assert_equal [
|
49
|
+
assert_equal %i[foo1 foo2 bar1 bar2], klass.identifiers
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_identifiers_with_string
|
53
|
+
klass = Class.new(IdentifierSample)
|
54
|
+
assert_empty klass.identifiers
|
55
|
+
|
56
|
+
klass.identifiers 'foo1', 'foo2'
|
57
|
+
assert_equal %i[foo1 foo2], klass.identifiers
|
58
|
+
|
59
|
+
klass.identifiers 'bar1', 'bar2'
|
60
|
+
assert_equal %i[foo1 foo2 bar1 bar2], klass.identifiers
|
40
61
|
end
|
41
62
|
|
42
63
|
def test_root
|
@@ -50,7 +71,7 @@ class DDPlugin::PluginTest < Minitest::Test
|
|
50
71
|
assert_equal subklass, InheritanceSample.named(:sub)
|
51
72
|
|
52
73
|
assert_equal :sub, subklass.identifier
|
53
|
-
assert_equal [
|
74
|
+
assert_equal %i[sub also_sub], subklass.identifiers
|
54
75
|
|
55
76
|
assert_equal InheritanceSample, superklass.root_class
|
56
77
|
assert_equal InheritanceSample, subklass.root_class
|
@@ -64,6 +85,14 @@ class DDPlugin::PluginTest < Minitest::Test
|
|
64
85
|
assert_equal klass, NamedSample.named(:named_test)
|
65
86
|
end
|
66
87
|
|
88
|
+
def test_named_with_string
|
89
|
+
klass = Class.new(NamedSample)
|
90
|
+
klass.identifier :named_test
|
91
|
+
|
92
|
+
assert_nil NamedSample.named('unknown')
|
93
|
+
assert_equal klass, NamedSample.named('named_test')
|
94
|
+
end
|
95
|
+
|
67
96
|
def test_all
|
68
97
|
klass1 = Class.new(AllSample)
|
69
98
|
klass1.identifier :one
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddplugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,9 +58,9 @@ require_paths:
|
|
58
58
|
- lib
|
59
59
|
required_ruby_version: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - "
|
61
|
+
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 2.
|
63
|
+
version: '2.3'
|
64
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
68
|
version: '0'
|
69
69
|
requirements: []
|
70
70
|
rubyforge_project:
|
71
|
-
rubygems_version: 2.6
|
71
|
+
rubygems_version: 2.7.6
|
72
72
|
signing_key:
|
73
73
|
specification_version: 4
|
74
74
|
summary: Plugins for Ruby apps
|