cayuga 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.idea/.rakeTasks +1 -1
- data/.idea/workspace.xml +582 -372
- data/cayuga.gemspec +10 -10
- data/cayuga.iml +1 -1
- data/lib/cayuga/object/constants.rb +5 -12
- data/lib/cayuga/object/factory.rb +13 -12
- data/lib/cayuga/object/logger.rb +59 -22
- data/lib/cayuga/object/{named_object_class.rb → named_object.rb} +24 -11
- data/lib/cayuga/object/object.rb +25 -8
- data/lib/cayuga/object/singleton.rb +4 -6
- data/lib/cayuga/tools/loggable.rb +6 -0
- data/lib/cayuga/version.rb +1 -1
- data/lib/cayuga.rb +11 -4
- metadata +3 -3
data/cayuga.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
lib = File.expand_path("../lib", __FILE__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require
|
3
|
+
require 'cayuga/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.version
|
8
|
-
spec.authors
|
9
|
-
spec.email
|
6
|
+
spec.name = "cayuga"
|
7
|
+
spec.version = Cayuga::VERSION
|
8
|
+
spec.authors = ["patrick"]
|
9
|
+
spec.email = ["peateas@gmail.com"]
|
10
10
|
|
11
|
-
spec.summary
|
12
|
-
spec.homepage
|
11
|
+
spec.summary = %q{Holder for Cayuga applications and utilities.}
|
12
|
+
spec.homepage = ""
|
13
13
|
|
14
14
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
15
15
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
@@ -22,11 +22,11 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
24
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
|
-
spec.files
|
25
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
26
26
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
27
|
end
|
28
|
-
spec.bindir
|
29
|
-
spec.executables
|
28
|
+
spec.bindir = "exe"
|
29
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
spec.add_development_dependency "bundler", "~> 1.16"
|
data/cayuga.iml
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
<orderEntry type="library" scope="PROVIDED" name="tins (v1.17.0, ruby-2.4.4-p296) [gem]" level="application" />
|
30
30
|
</component>
|
31
31
|
<component name="RModuleSettingsStorage">
|
32
|
-
<LOAD_PATH number="
|
32
|
+
<LOAD_PATH number="2" string0="$MODULE_DIR$/lib" string1="$MODULE_DIR$/spec" />
|
33
33
|
<I18N_FOLDERS number="0" />
|
34
34
|
</component>
|
35
35
|
</module>
|
@@ -1,16 +1,11 @@
|
|
1
1
|
#
|
2
2
|
# Copyright (c) 2018 Patrick Thomas. All rights reserved.
|
3
3
|
#
|
4
|
-
require 'cayuga
|
5
|
-
require 'cayuga/object/object'
|
6
|
-
require 'cayuga/object/singleton'
|
4
|
+
require 'cayuga'
|
7
5
|
|
8
6
|
module Cayuga
|
9
7
|
module Object
|
10
|
-
class Constants
|
11
|
-
extend Singleton
|
12
|
-
include Object
|
13
|
-
include Tools::Loggable
|
8
|
+
class Constants < Singleton
|
14
9
|
|
15
10
|
def directory(constant)
|
16
11
|
directories[constant.symbolize]
|
@@ -22,11 +17,9 @@ module Cayuga
|
|
22
17
|
|
23
18
|
attr_reader :factory, :directories
|
24
19
|
|
25
|
-
def initialize(factory)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@directories = factory.directory_constants
|
20
|
+
def initialize(factory, configuration)
|
21
|
+
super
|
22
|
+
@directories = configuration[:directories]
|
30
23
|
end
|
31
24
|
|
32
25
|
end
|
@@ -2,15 +2,15 @@
|
|
2
2
|
# Copyright (c) 2018 Patrick Thomas. All rights reserved.
|
3
3
|
#
|
4
4
|
require 'json'
|
5
|
-
require 'cayuga
|
6
|
-
require 'cayuga/tools/symbol'
|
7
|
-
require 'cayuga/tools/class'
|
5
|
+
require 'cayuga'
|
8
6
|
|
9
7
|
module Cayuga
|
10
8
|
module Object
|
11
9
|
# Cayuga Object Factory
|
12
10
|
class Factory
|
13
|
-
|
11
|
+
include Tools::Loggable
|
12
|
+
|
13
|
+
attr_reader :configuration_name, :logs_directory
|
14
14
|
|
15
15
|
def supported?(klass)
|
16
16
|
types.key?(klass.symbolize)
|
@@ -74,17 +74,17 @@ module Cayuga
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
def directory_constants
|
78
|
+
@directories.freeze
|
79
|
+
end
|
80
80
|
|
81
81
|
private
|
82
82
|
|
83
83
|
attr_reader :configuration, :types, :instances
|
84
84
|
|
85
85
|
def initialize(config)
|
86
|
-
@configuration_information = config
|
87
86
|
@configuration = JSON.parse(File.read(config), symbolize_names: true)
|
87
|
+
@configuration_name = configuration[:configuration_name]
|
88
88
|
@logs_directory = configuration[:directories][:logs]
|
89
89
|
@types = {}
|
90
90
|
# register_classes(FACTORIES, :factory)
|
@@ -120,11 +120,11 @@ module Cayuga
|
|
120
120
|
# log.info("factory #{klass} created ")
|
121
121
|
# end
|
122
122
|
when :singleton
|
123
|
-
object = klass.create(self)
|
124
|
-
|
123
|
+
object = klass.create(self, configuration)
|
124
|
+
# log.info("singleton #{klass} created ")
|
125
125
|
when :named
|
126
|
-
object = klass.create(self, name)
|
127
|
-
|
126
|
+
object = klass.create(self, configuration, name)
|
127
|
+
# log.info("#{klass} created with name #{name}")
|
128
128
|
else
|
129
129
|
raise "unregistered or incorrectly registered class #{klass}"
|
130
130
|
end
|
@@ -132,5 +132,6 @@ module Cayuga
|
|
132
132
|
end
|
133
133
|
|
134
134
|
end
|
135
|
+
|
135
136
|
end
|
136
137
|
end
|
data/lib/cayuga/object/logger.rb
CHANGED
@@ -2,47 +2,73 @@
|
|
2
2
|
# Copyright (c) 2018 Patrick Thomas. All rights reserved.
|
3
3
|
#
|
4
4
|
require 'file-tail'
|
5
|
-
require 'cayuga
|
6
|
-
require 'cayuga/object/singleton'
|
7
|
-
require 'cayuga/tools/loggable'
|
5
|
+
require 'cayuga'
|
8
6
|
|
9
7
|
module Cayuga
|
10
8
|
module Object
|
11
|
-
class Logger
|
12
|
-
extend Singleton
|
13
|
-
include Object
|
14
|
-
include Tools::Loggable
|
9
|
+
class Logger < Singleton
|
15
10
|
|
16
11
|
def generic_log_file(name)
|
17
12
|
"#{factory.logs_directory}/#{name.stringify.filenamify('.log')}"
|
18
13
|
end
|
19
14
|
|
20
|
-
def
|
15
|
+
def log_names
|
21
16
|
@logs.keys.freeze
|
22
17
|
end
|
23
18
|
|
24
|
-
def
|
19
|
+
def log_filename(name)
|
25
20
|
@logs[name.symbolize]
|
26
21
|
end
|
27
22
|
|
28
|
-
alias []
|
23
|
+
alias [] log_filename
|
24
|
+
|
25
|
+
def log_appender(name)
|
26
|
+
all = SemanticLogger.appenders.select { |log| log.name == name.stringify }
|
27
|
+
count = all.count
|
28
|
+
raise RuntimeError, "More than one log with name #{name}" if count > 1
|
29
|
+
if count == 1
|
30
|
+
all[0]
|
31
|
+
else
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
end
|
29
35
|
|
30
36
|
def log_log?(name)
|
31
37
|
not @logs[name.symbolize].nil?
|
32
38
|
end
|
33
39
|
|
34
|
-
def log_log!(name, filename: nil, stream: nil, filter: nil)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
+
def log_log!(name, filename: nil, stream: nil, filter: nil, level: :info)
|
41
|
+
symbol = name.symbolize
|
42
|
+
return log_filename(symbol) if log_log?(symbol)
|
43
|
+
if log_appender_exists?(symbol)
|
44
|
+
logger.warn('no entry for log', payload = { name: symbol })
|
45
|
+
logger.warn('no entry for log', payload = { log: log_names })
|
46
|
+
@logs[symbol] = filename || stream
|
47
|
+
if log_filename(symbol).nil?
|
48
|
+
@logs[symbol] = factory.logs_directory + '/' + name.classify.log_file
|
49
|
+
end
|
50
|
+
return
|
51
|
+
end
|
52
|
+
if filename.nil?
|
53
|
+
if stream.nil?
|
54
|
+
#must be a class
|
55
|
+
filename = factory.logs_directory + '/' + name.classify.log_file
|
56
|
+
log = SemanticLogger.add_appender(file_name: filename, filter: filter)
|
57
|
+
else
|
58
|
+
log = SemanticLogger.add_appender(io: stream, filter: filter)
|
59
|
+
end
|
60
|
+
else
|
61
|
+
log = SemanticLogger.add_appender(file_name: filename, filter: filter)
|
62
|
+
end
|
40
63
|
log.name = name.stringify
|
41
|
-
|
64
|
+
log.level = level
|
65
|
+
@logs[name.symbolize] = filename || stream || name.stringify
|
66
|
+
logger.info('logs', payload = { log_names: log_names })
|
67
|
+
logger.info('logs', payload = { count: SemanticLogger.appenders.count })
|
42
68
|
end
|
43
69
|
|
44
70
|
def tail(name, size: 5)
|
45
|
-
File.open(
|
71
|
+
File.open(log_filename(name)) do |log|
|
46
72
|
log.extend File::Tail
|
47
73
|
log.return_if_eof = true
|
48
74
|
log.backward(size).tail(size)
|
@@ -55,14 +81,25 @@ module Cayuga
|
|
55
81
|
|
56
82
|
attr_reader :factory
|
57
83
|
|
58
|
-
def initialize(factory)
|
84
|
+
def initialize(factory, configuration)
|
59
85
|
@factory = factory
|
60
86
|
@logs = {}
|
61
|
-
log_log!(:console, stream: $stderr)
|
87
|
+
log_log!(:console, stream: $stderr, level: :warn)
|
62
88
|
log_log!(:main, filename: generic_log_file(:main))
|
63
|
-
log_log!(
|
89
|
+
log_log!(factory.class, filter: Regexp.new(factory.class.stringify))
|
90
|
+
log_log!(self.class, filter: Regexp.new(self.class.stringify))
|
91
|
+
end
|
92
|
+
|
93
|
+
def log_appender_exists?(name)
|
94
|
+
name = name.symbolize
|
95
|
+
log = log_appender(name)
|
96
|
+
if log.nil?
|
97
|
+
false
|
98
|
+
else
|
99
|
+
true
|
100
|
+
end
|
64
101
|
end
|
65
102
|
|
66
103
|
end
|
67
104
|
end
|
68
|
-
end
|
105
|
+
end
|
@@ -3,21 +3,24 @@
|
|
3
3
|
#
|
4
4
|
module Cayuga
|
5
5
|
module Object
|
6
|
-
# Named Object
|
7
|
-
|
8
|
-
|
6
|
+
# Named Object
|
7
|
+
class NamedObject < Object
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
def self.valid_name?(_factory, name)
|
9
11
|
name != nil
|
10
12
|
end
|
11
13
|
|
12
|
-
def primary?(_name)
|
14
|
+
def self.primary?(_name)
|
13
15
|
true
|
14
16
|
end
|
15
17
|
|
16
|
-
def primary(name)
|
18
|
+
def self.primary(name)
|
17
19
|
name
|
18
20
|
end
|
19
21
|
|
20
|
-
def create(factory, name)
|
22
|
+
def self.create(factory, configuration, name)
|
23
|
+
raise "#{self.stringify}[#{name}] already registered" if factory.registered?(self, name)
|
21
24
|
if primary?(name)
|
22
25
|
primary = name
|
23
26
|
alternate = nil
|
@@ -26,14 +29,20 @@ module Cayuga
|
|
26
29
|
alternate = name
|
27
30
|
end
|
28
31
|
verify_name_validity(factory, primary, alternate)
|
29
|
-
instance = create_primary(factory, primary(name))
|
32
|
+
instance = create_primary(factory, configuration, primary(name))
|
30
33
|
factory.register(instance, self, alternate) unless alternate.nil?
|
31
34
|
instance
|
32
35
|
end
|
33
36
|
|
34
37
|
private
|
35
38
|
|
36
|
-
def
|
39
|
+
def initialize(factory, configuration, name)
|
40
|
+
super(factory, configuration)
|
41
|
+
@name = name
|
42
|
+
# Todo: alternative names
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.verify_name_validity(factory, name, alternate)
|
37
46
|
# check validity of name
|
38
47
|
unless valid_name?(factory, name)
|
39
48
|
raise "'#{self}['#{name}'] is not a valid #{self}"
|
@@ -49,16 +58,20 @@ module Cayuga
|
|
49
58
|
true
|
50
59
|
end
|
51
60
|
|
52
|
-
|
61
|
+
private_class_method :verify_name_validity
|
62
|
+
|
63
|
+
def self.create_primary(factory, configuration, name)
|
53
64
|
if factory.registered?(self, name)
|
54
65
|
instance = factory[self, name]
|
55
66
|
else
|
56
|
-
instance = new(factory, name)
|
67
|
+
instance = new(factory, configuration, name)
|
57
68
|
factory.register(instance, self, name)
|
58
69
|
end
|
59
70
|
instance
|
60
71
|
end
|
61
72
|
|
73
|
+
private_class_method :create_primary
|
74
|
+
|
62
75
|
end
|
63
76
|
end
|
64
|
-
end
|
77
|
+
end
|
data/lib/cayuga/object/object.rb
CHANGED
@@ -2,18 +2,35 @@
|
|
2
2
|
# Copyright (c) 2018 Patrick Thomas. All rights reserved.
|
3
3
|
#
|
4
4
|
#
|
5
|
-
require 'cayuga
|
6
|
-
require 'cayuga/tools/symbol'
|
7
|
-
require 'cayuga/tools/class'
|
8
|
-
require 'cayuga/tools/loggable'
|
5
|
+
require 'cayuga'
|
9
6
|
|
10
7
|
module Cayuga
|
8
|
+
# noinspection RubyConstantNamingConvention
|
9
|
+
RootObject = Object
|
10
|
+
|
11
11
|
module Object
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
class Object
|
13
|
+
include Tools::Loggable
|
14
|
+
|
15
|
+
attr_reader :configuration_name
|
16
|
+
|
17
|
+
private_class_method :new
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :factory, :configuration
|
22
|
+
|
23
|
+
def initialize(factory, configuration)
|
24
|
+
@factory = factory
|
25
|
+
@configuration = configuration
|
26
|
+
@configuration_name = factory.configuration_name
|
27
|
+
factory[Logger].log_log!(
|
28
|
+
self.class,
|
29
|
+
filter: Regexp.new(self.class.stringify)
|
30
|
+
) unless self.class == Logger
|
15
31
|
end
|
16
32
|
|
17
33
|
end
|
18
34
|
end
|
19
|
-
end
|
35
|
+
end
|
36
|
+
|
@@ -4,13 +4,11 @@
|
|
4
4
|
module Cayuga
|
5
5
|
module Object
|
6
6
|
# Cayuga Object Singleton
|
7
|
-
|
8
|
-
|
9
|
-
def create(factory)
|
7
|
+
class Singleton < Object
|
8
|
+
def self.create(factory, configuration)
|
10
9
|
raise "#{self.stringify} already registered" if factory.registered?(self)
|
11
|
-
factory.register(new(factory), self)
|
10
|
+
factory.register(new(factory, configuration), self)
|
12
11
|
end
|
13
|
-
|
14
12
|
end
|
15
13
|
end
|
16
|
-
end
|
14
|
+
end
|
data/lib/cayuga/version.rb
CHANGED
data/lib/cayuga.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
-
require
|
1
|
+
require 'cayuga/version'
|
2
|
+
require 'cayuga/tools/string'
|
3
|
+
require 'cayuga/tools/symbol'
|
4
|
+
require 'cayuga/tools/class'
|
5
|
+
require 'cayuga/tools/loggable'
|
6
|
+
require 'cayuga/object/object'
|
7
|
+
require 'cayuga/object/singleton'
|
8
|
+
require 'cayuga/object/constants'
|
9
|
+
require 'cayuga/object/logger'
|
10
|
+
require 'cayuga/object/named_object'
|
11
|
+
require 'cayuga/object/factory'
|
2
12
|
|
3
|
-
module Cayuga
|
4
|
-
# Your code goes here...
|
5
|
-
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cayuga
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- patrick
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -138,7 +138,7 @@ files:
|
|
138
138
|
- lib/cayuga/object/constants.rb
|
139
139
|
- lib/cayuga/object/factory.rb
|
140
140
|
- lib/cayuga/object/logger.rb
|
141
|
-
- lib/cayuga/object/
|
141
|
+
- lib/cayuga/object/named_object.rb
|
142
142
|
- lib/cayuga/object/object.rb
|
143
143
|
- lib/cayuga/object/singleton.rb
|
144
144
|
- lib/cayuga/tools/class.rb
|