fagin 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/fagin.rb +35 -0
- data/lib/fagin/error.rb +4 -0
- data/lib/fagin/error/unknown_child_class_error.rb +7 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 86024e067d071e5dfba0399915702f7f9f696675
|
4
|
+
data.tar.gz: 89857e493aa49706671a144c7a480c19da2b9282
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c00c88f3985c5f35fcf3e090d1088e346299d75e76737ccc6ec231d22e7cbc42676d5722b632fad7afe585ceab6578eef5530f7acb9631a609d004a862356622
|
7
|
+
data.tar.gz: b18b4f962b6d949a46f49e3b5fbfde4e766ffbd92444964edf8eab46913c644c82bfc5d8b8c7965fbcd74b59bbd3de281dccf45f0a82d946c3264b5dd6fa7533
|
data/lib/fagin.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
3
|
+
class Fagin
|
4
|
+
def self.find_children(parent, dir)
|
5
|
+
children = Hash.new
|
6
|
+
path = Pathname.new(dir).expand_path
|
7
|
+
|
8
|
+
Dir["#{path}/*.rb"].each do |file|
|
9
|
+
require_relative file
|
10
|
+
|
11
|
+
%x(
|
12
|
+
\grep -E "^class .+ \< #{parent}" #{file} | \
|
13
|
+
awk '{print $2}'
|
14
|
+
).each_line do |clas|
|
15
|
+
next if (clas.nil?)
|
16
|
+
clas.strip!
|
17
|
+
next if (clas.nil?)
|
18
|
+
|
19
|
+
child = nil
|
20
|
+
begin
|
21
|
+
child = clas.split("::").inject(Object) do |m, c|
|
22
|
+
m.const_get(c)
|
23
|
+
end.new
|
24
|
+
rescue NameError => e
|
25
|
+
raise Error::UnknownChildClassError.new(clas)
|
26
|
+
end
|
27
|
+
children[clas] = child if (child)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
return children
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
require "fagin/error"
|
data/lib/fagin/error.rb
ADDED
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fagin
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Miles Whittaker
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-06 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Dynamically load children classes for a specified parent class from a
|
14
|
+
specified directory.
|
15
|
+
email: mjwhitta@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/fagin.rb
|
21
|
+
- lib/fagin/error.rb
|
22
|
+
- lib/fagin/error/unknown_child_class_error.rb
|
23
|
+
homepage: http://mjwhitta.github.io/fagin
|
24
|
+
licenses:
|
25
|
+
- GPL-3.0
|
26
|
+
metadata: {}
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 2.4.5.1
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: Dynamically load children classes
|
47
|
+
test_files: []
|