logcabin 0.0.3 → 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
  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