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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78dfabf180182de5dd6875e7f2243daf68cbf8b3
4
- data.tar.gz: f469c06d8306c37972d634d8e51de37858aca3d0
3
+ metadata.gz: ef90713deb951b064cd2f0ca1c2ed75d200657db
4
+ data.tar.gz: 3f2eea4cef0e3b3b477191b2df6f035e27c5a171
5
5
  SHA512:
6
- metadata.gz: 46cc8adc143a1323e5f89308fed8e791d2f808030df61d28bf899798ef406965191884e60799fedb895e91bf60aba394b7ff668232797c0ca8e59338c177d5b4
7
- data.tar.gz: 526caafd0a0d0ad491a852a0301af625fbd91d3d016e08586fcefa9f73aa6ae997ba2a538229dadf2791fd92c7703faeaa82d7952eecc2b0e7f3c6d102cea3d7
6
+ metadata.gz: 03be55faf5c1b9817ccab75721e7501d6841d878d83fea29929f952e08147296b8532307e7183536ee0407ce2500f7e200f5f6d38779a47561f1acb734f3480c
7
+ data.tar.gz: dcbc389a09a7b302bad7dd9a1df6cbaec6091a831cc94616ddcb7b6acdb181ae2d433124d499dbf82fd466d28771da5af77e68eae7abe4d0721a81a3c0048a80
data/.circle-ruby ADDED
@@ -0,0 +1,3 @@
1
+ 2.3.1
2
+ 2.2.5
3
+ 2.1.10
data/.prospectus ADDED
@@ -0,0 +1,11 @@
1
+ item do
2
+ expected do
3
+ static
4
+ set 'green'
5
+ end
6
+
7
+ actual do
8
+ gemnasium
9
+ slug 'akerl/logcabin'
10
+ end
11
+ end
data/circle.yml CHANGED
@@ -1,12 +1,6 @@
1
1
  dependencies:
2
2
  override:
3
- - 'rvm-exec 1.9.3-p551 bundle install'
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
- - 'rvm-exec 1.9.3-p551 bundle exec rake'
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/collection'
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'
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.35.0'
17
- s.add_development_dependency 'rake', '~> 10.4.0'
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.4.0'
20
- s.add_development_dependency 'fuubar', '~> 2.0.0'
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.3
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: 2015-12-29 00:00:00.000000000 Z
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.35.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.35.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: 10.4.0
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: 10.4.0
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.4.0
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.4.0
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.0.0
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.0.0
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/collection.rb
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
@@ -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