logcabin 0.0.3 → 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/.circle-ruby +3 -0
- data/.prospectus +11 -0
- data/circle.yml +2 -8
- data/lib/logcabin.rb +32 -1
- data/lib/logcabin/dircollection.rb +31 -0
- data/lib/logcabin/gemcollection.rb +16 -0
- data/logcabin.gemspec +5 -5
- metadata +14 -11
- data/lib/logcabin/collection.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef90713deb951b064cd2f0ca1c2ed75d200657db
|
4
|
+
data.tar.gz: 3f2eea4cef0e3b3b477191b2df6f035e27c5a171
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03be55faf5c1b9817ccab75721e7501d6841d878d83fea29929f952e08147296b8532307e7183536ee0407ce2500f7e200f5f6d38779a47561f1acb734f3480c
|
7
|
+
data.tar.gz: dcbc389a09a7b302bad7dd9a1df6cbaec6091a831cc94616ddcb7b6acdb181ae2d433124d499dbf82fd466d28771da5af77e68eae7abe4d0721a81a3c0048a80
|
data/.circle-ruby
ADDED
data/.prospectus
ADDED
data/circle.yml
CHANGED
@@ -1,12 +1,6 @@
|
|
1
1
|
dependencies:
|
2
2
|
override:
|
3
|
-
|
4
|
-
- 'rvm-exec 2.0.0-p645 bundle install'
|
5
|
-
- 'rvm-exec 2.1.6 bundle install'
|
6
|
-
- 'rvm-exec 2.2.2 bundle install'
|
3
|
+
- 'for i in $(cat .circle-ruby) ; do rvm-exec $i bundle install || exit 1 ; done'
|
7
4
|
test:
|
8
5
|
override:
|
9
|
-
|
10
|
-
- 'rvm-exec 2.0.0-p645 bundle exec rake'
|
11
|
-
- 'rvm-exec 2.1.6 bundle exec rake'
|
12
|
-
- 'rvm-exec 2.2.2 bundle exec rake'
|
6
|
+
- 'for i in $(cat .circle-ruby) ; do rvm-exec $i bundle exec rake || exit 1 ; done'
|
data/lib/logcabin.rb
CHANGED
@@ -14,6 +14,37 @@ module LogCabin
|
|
14
14
|
# Empty module for namespacing dynamic modules
|
15
15
|
module Modules
|
16
16
|
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Basic collection object for subclassing
|
20
|
+
class BaseCollection
|
21
|
+
def initialize(_)
|
22
|
+
@modules = {}
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def cache(name)
|
28
|
+
@modules[name] ||= yield
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_class(name)
|
32
|
+
require name
|
33
|
+
class_name = parse_class_name(name)
|
34
|
+
LogCabin::Modules.const_get(class_name)
|
35
|
+
rescue LoadError
|
36
|
+
raise("Error while loading #{name}")
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# Convert file name to class name
|
41
|
+
# Borrowed with love from Homebrew: http://git.io/vEoDg
|
42
|
+
def parse_class_name(name)
|
43
|
+
class_name = name.to_s.capitalize
|
44
|
+
class_name.gsub(/[-_.\s]([a-zA-Z0-9])/) { Regexp.last_match[1].upcase }
|
45
|
+
end
|
46
|
+
end
|
17
47
|
end
|
18
48
|
|
19
|
-
require 'logcabin/
|
49
|
+
require 'logcabin/dircollection'
|
50
|
+
require 'logcabin/gemcollection'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module LogCabin
|
2
|
+
##
|
3
|
+
# Define a collection of modules in a local dir
|
4
|
+
class DirCollection < BaseCollection
|
5
|
+
attr_reader :load_path
|
6
|
+
|
7
|
+
def initialize(params = {})
|
8
|
+
@load_path = params[:load_path] || raise('Load path must be provided')
|
9
|
+
@load_path = [@load_path] if @load_path.is_a? String
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Method for finding modules to load
|
15
|
+
def find(name)
|
16
|
+
cache(name) { load_class_from_module(find_file(name)) }
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
##
|
22
|
+
# Check module path for module
|
23
|
+
def find_file(name)
|
24
|
+
@load_path.each do |dir|
|
25
|
+
file_path = File.join(dir, "#{name}.rb")
|
26
|
+
return file_path if File.exist? file_path
|
27
|
+
end
|
28
|
+
raise("Module #{name} not found")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module LogCabin
|
2
|
+
##
|
3
|
+
# Define a collection of modules in separate gems
|
4
|
+
class GemCollection < BaseCollection
|
5
|
+
def initialize(params = {})
|
6
|
+
@prefix = params[:prefix] || raise('Gem prefix must be provided')
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
##
|
11
|
+
# Method for finding modules to load
|
12
|
+
def find(name)
|
13
|
+
cache(name) { load_class_from_module("#{@prefix}-#{name}") }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/logcabin.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logcabin'
|
3
|
-
s.version = '0.0
|
3
|
+
s.version = '0.1.0'
|
4
4
|
s.date = Time.now.strftime('%Y-%m-%d')
|
5
5
|
|
6
6
|
s.summary = 'Support dynamic loading of modules at runtime'
|
@@ -13,9 +13,9 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.files = `git ls-files`.split
|
14
14
|
s.test_files = `git ls-files spec/*`.split
|
15
15
|
|
16
|
-
s.add_development_dependency 'rubocop', '~> 0.
|
17
|
-
s.add_development_dependency 'rake', '~>
|
16
|
+
s.add_development_dependency 'rubocop', '~> 0.42.0'
|
17
|
+
s.add_development_dependency 'rake', '~> 11.2.0'
|
18
18
|
s.add_development_dependency 'codecov', '~> 0.1.1'
|
19
|
-
s.add_development_dependency 'rspec', '~> 3.
|
20
|
-
s.add_development_dependency 'fuubar', '~> 2.
|
19
|
+
s.add_development_dependency 'rspec', '~> 3.5.0'
|
20
|
+
s.add_development_dependency 'fuubar', '~> 2.2.0'
|
21
21
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logcabin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.42.0
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.42.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 11.2.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 11.2.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: codecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,35 +58,37 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
61
|
+
version: 3.5.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
68
|
+
version: 3.5.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: fuubar
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2.
|
75
|
+
version: 2.2.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 2.
|
82
|
+
version: 2.2.0
|
83
83
|
description: Support dynamic loading of modules at runtime
|
84
84
|
email: me@lesaker.org
|
85
85
|
executables: []
|
86
86
|
extensions: []
|
87
87
|
extra_rdoc_files: []
|
88
88
|
files:
|
89
|
+
- ".circle-ruby"
|
89
90
|
- ".gitignore"
|
91
|
+
- ".prospectus"
|
90
92
|
- ".rspec"
|
91
93
|
- ".rubocop.yml"
|
92
94
|
- Gemfile
|
@@ -95,7 +97,8 @@ files:
|
|
95
97
|
- Rakefile
|
96
98
|
- circle.yml
|
97
99
|
- lib/logcabin.rb
|
98
|
-
- lib/logcabin/
|
100
|
+
- lib/logcabin/dircollection.rb
|
101
|
+
- lib/logcabin/gemcollection.rb
|
99
102
|
- logcabin.gemspec
|
100
103
|
- spec/logcabin_spec.rb
|
101
104
|
- spec/spec_helper.rb
|
data/lib/logcabin/collection.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module LogCabin
|
2
|
-
##
|
3
|
-
# Define a collection of modules
|
4
|
-
class Collection
|
5
|
-
attr_reader :load_path
|
6
|
-
|
7
|
-
def initialize(params = {})
|
8
|
-
@load_path = params[:load_path] || fail('Load path must be provided')
|
9
|
-
@load_path = [@load_path] if @load_path.is_a? String
|
10
|
-
@modules = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
##
|
14
|
-
# Method for finding modules to load
|
15
|
-
def find(name)
|
16
|
-
return @modules[name] if @modules[name]
|
17
|
-
file = find_file(name)
|
18
|
-
require file
|
19
|
-
class_name = parse_class_name(name)
|
20
|
-
@modules[name] = LogCabin::Modules.const_get(class_name)
|
21
|
-
rescue LoadError
|
22
|
-
raise("Error while loading #{name}")
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
##
|
28
|
-
# Convert file name to class name
|
29
|
-
# Borrowed with love from Homebrew: http://git.io/vEoDg
|
30
|
-
def parse_class_name(name)
|
31
|
-
class_name = name.to_s.capitalize
|
32
|
-
class_name.gsub(/[-_.\s]([a-zA-Z0-9])/) { Regexp.last_match[1].upcase }
|
33
|
-
end
|
34
|
-
|
35
|
-
##
|
36
|
-
# Check module path for module
|
37
|
-
def find_file(name)
|
38
|
-
@load_path.each do |dir|
|
39
|
-
file_path = File.join(dir, "#{name}.rb")
|
40
|
-
return file_path if File.exist? file_path
|
41
|
-
end
|
42
|
-
fail("Module #{name} not found")
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|