cayuga 0.0.10 → 0.0.11

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.
data/.rubocop.yml CHANGED
@@ -19,6 +19,9 @@ Layout/SpaceAroundOperators:
19
19
  Layout/TrailingBlankLines:
20
20
  Enabled: false
21
21
 
22
+ Metrics/BlockLength:
23
+ ExcludedMethods: [ RSpec.describe ]
24
+
22
25
  Metrics/MethodLength:
23
26
  Enabled: true
24
27
  Max: 15
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in cayuga.gemspec
6
6
  gemspec
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "cayuga"
3
+ require 'bundler/setup'
4
+ require 'cayuga'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "cayuga"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
@@ -5,6 +5,7 @@ require 'cayuga'
5
5
 
6
6
  module Cayuga
7
7
  module Object
8
+ # noinspection RubyModuleAsSuperclassInspection
8
9
  class Constants < Singleton
9
10
  def constant(constant)
10
11
  constants[constant.symbolize]
@@ -60,19 +60,18 @@ module Cayuga
60
60
 
61
61
  def release(klass, name = nil)
62
62
  key = klass.symbolize
63
- if registered?(key, name)
64
- type = type(key)
65
- case type
66
- when :singleton #, :factory
67
- instances.delete(key)
68
- when :named
69
- value = instances[key]
70
- if value
71
- value.delete(name)
72
- end
73
- else
74
- raise "bad type '#{type}'"
75
- end
63
+ return unless registered?(key, name)
64
+ type = type(key)
65
+ case type
66
+ when :singleton
67
+ instances.delete(key)
68
+ when :named
69
+ value = instances[key]
70
+ if value
71
+ value.delete(name)
72
+ end
73
+ else
74
+ raise "bad type '#{type}'"
76
75
  end
77
76
  end
78
77
 
@@ -83,15 +82,22 @@ module Cayuga
83
82
  private
84
83
 
85
84
  OBJECTS = {
86
- singletons: %w(Cayuga::Object::Logger Cayuga::Object::Constants)
85
+ singletons: %w[Cayuga::Object::Logger Cayuga::Object::Constants]
87
86
  }.deep_freeze
88
87
 
89
88
  attr_reader :configuration, :types, :instances
90
89
 
91
90
  def initialize(config)
92
- @configuration = JSON.parse(File.read(config), symbolize_names: true).deep_freeze
91
+ @configuration =
92
+ JSON.parse(File.read(config), symbolize_names: true).deep_freeze
93
93
  @configuration_name = configuration[:configuration_name]
94
94
  @logs_directory = configuration[:directories][:logs]
95
+ setup_types
96
+ @instances = {}
97
+ @directories = configuration[:directories].freeze
98
+ end
99
+
100
+ def setup_types
95
101
  @types = {}
96
102
  register_classes(configuration[:object_classes], :object)
97
103
  register_classes(OBJECTS[:singletons], :singleton)
@@ -99,8 +105,6 @@ module Cayuga
99
105
  register_classes(
100
106
  configuration[:named_object_classes], :named
101
107
  )
102
- @instances = {}
103
- @directories = configuration[:directories].freeze
104
108
  end
105
109
 
106
110
  def register_classes(list, type)
@@ -120,11 +124,6 @@ module Cayuga
120
124
 
121
125
  def create_instance(type, klass, name)
122
126
  case type
123
- # when :factory
124
- # object = klass.create(self, configuration)
125
- # unless klass == LoggerFactory
126
- # log.info("factory #{klass} created ")
127
- # end
128
127
  when :object, :singleton
129
128
  object = klass.create(self, configuration)
130
129
  # log.info("singleton #{klass} created ")
@@ -5,10 +5,14 @@ require 'cayuga'
5
5
 
6
6
  module Cayuga
7
7
  module Object
8
+
9
+ # Cayuga Object Logger
10
+ # noinspection RubyModuleAsSuperclassInspection
8
11
  class Logger < Singleton
9
12
 
10
13
  def generic_log_file(name)
11
- "#{factory.logs_directory}/#{name.stringify.filenamify('.log')}"
14
+ filename = name.stringify.filenamify('.log')
15
+ "#{factory.logs_directory}/#{filename}"
12
16
  end
13
17
 
14
18
  def log_names
@@ -21,60 +25,55 @@ module Cayuga
21
25
 
22
26
  alias [] log_filename
23
27
 
28
+ def log_appender_name(name)
29
+ name.stringify + annotation
30
+ end
31
+
24
32
  def log_appender(name)
25
- all = SemanticLogger.appenders.select { |log| log.name == name.stringify }
26
- count = all.count
27
- raise RuntimeError, "More than one log with name #{name}" if count > 1
28
- if count == 1
29
- all[0]
30
- else
31
- nil
33
+ all = SemanticLogger.appenders.select do |log|
34
+ log.name == log_appender_name(name)
32
35
  end
36
+ count = all.count
37
+ raise "More than one log with name #{name}" if count > 1
38
+ count == 1 ? all[0] : nil
33
39
  end
34
40
 
35
41
  def log_log?(name)
36
- not @logs[name.symbolize].nil?
42
+ !@logs[name.symbolize].nil?
37
43
  end
38
44
 
39
45
  def log_log!(name, filename: nil, stream: nil, filter: nil, level: :info)
40
- symbol = name.symbolize
41
- return log_filename(symbol) if log_log?(symbol)
42
- if log_appender_exists?(symbol)
43
- logger.warn('no entry for log', payload = { name: symbol })
44
- logger.warn('no entry for log', payload = { log: log_names })
45
- @logs[symbol] = filename || stream
46
- if log_filename(symbol).nil?
47
- @logs[symbol] = factory.logs_directory + '/' + name.classify.log_file
48
- end
49
- return
46
+ unless log_log?(name)
47
+ remove_any_orphan_appender(name)
48
+ make_appender(name, filename, stream, filter, level)
50
49
  end
51
- if filename.nil?
52
- if stream.nil?
53
- #must be a class
54
- filename = factory.logs_directory + '/' + name.classify.log_file
55
- log = SemanticLogger.add_appender(file_name: filename, filter: filter)
56
- else
57
- log = SemanticLogger.add_appender(io: stream, filter: filter)
58
- end
59
- else
60
- log = SemanticLogger.add_appender(file_name: filename, filter: filter)
61
- end
62
- log.name = name.stringify
63
- log.level = level
64
- @logs[name.symbolize] = filename || stream || name.stringify
65
- logger.info('logs', payload = { log_names: log_names })
66
- logger.info('logs', payload = { count: SemanticLogger.appenders.count })
50
+ logger.info('log created', payload: { name: name })
51
+ logger.debug('logs', payload: { log_names: log_names })
52
+ logger.debug('logs', payload: { count: SemanticLogger.appenders.count })
53
+ log_filename(name)
67
54
  end
68
55
 
69
56
  private_class_method :new
70
57
 
71
58
  private
72
59
 
73
- attr_reader :factory
60
+ attr_reader :annotation
74
61
 
75
62
  def initialize(factory, configuration)
76
63
  @factory = factory
64
+ @configuration = configuration
65
+ @configuration_name = factory.configuration_name
66
+ @annotation = fetch_annotation
77
67
  @logs = {}
68
+ create_logs
69
+ end
70
+
71
+ def fetch_annotation
72
+ value = configuration[:constants][:log_annotation_marker]
73
+ value.nil? ? '' : value
74
+ end
75
+
76
+ def create_logs
78
77
  log_log!(:console, stream: $stderr, level: :warn)
79
78
  log_log!(:main, filename: generic_log_file(:main))
80
79
  log_log!(factory.class, filter: Regexp.new(factory.class.stringify))
@@ -82,13 +81,30 @@ module Cayuga
82
81
  end
83
82
 
84
83
  def log_appender_exists?(name)
85
- name = name.symbolize
86
- log = log_appender(name)
87
- if log.nil?
88
- false
84
+ !log_appender(name.symbolize).nil?
85
+ end
86
+
87
+ def make_appender(name, filename, stream, filter, level)
88
+ if stream.nil?
89
+ if filename.nil?
90
+ filename = factory.logs_directory + '/' + name.classify.log_file
91
+ end
92
+ log = SemanticLogger.add_appender(file_name: filename, filter: filter)
89
93
  else
90
- true
94
+ log = SemanticLogger.add_appender(io: stream, filter: filter)
91
95
  end
96
+ log.name = log_appender_name(name)
97
+ log.level = level
98
+ @logs[name.symbolize] = filename || stream || name.stringify
99
+ log
100
+ end
101
+
102
+ def remove_any_orphan_appender(name)
103
+ return if log_log?(name)
104
+ return unless log_appender_exists?(name)
105
+ logger.warn('log without registration', payload: { name: name })
106
+ logger.debug('log without registration', payload: { log: log_names })
107
+ SemanticLogger.remove_appender(log_appender(name))
92
108
  end
93
109
 
94
110
  end
@@ -20,7 +20,9 @@ module Cayuga
20
20
  end
21
21
 
22
22
  def self.create(factory, configuration, name)
23
- raise "#{self.stringify}[#{name}] already registered" if factory.registered?(self, name)
23
+ if factory.registered?(self, name)
24
+ raise "#{stringify}[#{name}] already registered"
25
+ end
24
26
  if primary?(name)
25
27
  primary = name
26
28
  alternate = nil
@@ -9,6 +9,8 @@ module Cayuga
9
9
  RootObject = Object
10
10
 
11
11
  module Object
12
+
13
+ # Cayuga Object Object
12
14
  class Object
13
15
  include Tools::Loggable
14
16
 
@@ -28,10 +30,9 @@ module Cayuga
28
30
  @factory = factory
29
31
  @configuration = configuration
30
32
  @configuration_name = factory.configuration_name
31
- factory[Logger].log_log!(
32
- self.class,
33
- filter: Regexp.new(self.class.stringify)
34
- ) unless self.class == Logger
33
+ return if self.class == Logger
34
+ factory[Logger]
35
+ .log_log!(self.class, filter: Regexp.new(self.class.stringify))
35
36
  end
36
37
 
37
38
  end
@@ -6,7 +6,7 @@ module Cayuga
6
6
  # Cayuga Object Singleton
7
7
  class Singleton < Object
8
8
  def self.create(factory, configuration)
9
- raise "#{self.stringify} already registered" if factory.registered?(self)
9
+ raise "#{stringify} already registered" if factory.registered?(self)
10
10
  factory.register(new(factory, configuration), self)
11
11
  end
12
12
 
@@ -18,7 +18,7 @@ module Cayuga
18
18
  self
19
19
  end
20
20
 
21
- def filenamify(extension=nil)
21
+ def filenamify(extension = nil)
22
22
  stringify.filenamify(extension)
23
23
  end
24
24
 
@@ -17,7 +17,7 @@ module Cayuga
17
17
  alias_method :log, :logger
18
18
 
19
19
  def self.log_file
20
- "#{self.filenamify('.log')}"
20
+ filenamify('.log')
21
21
  end
22
22
 
23
23
  end
@@ -22,7 +22,7 @@ module Cayuga
22
22
 
23
23
  def filenamify(extension = nil)
24
24
  # noinspection RubyResolve
25
- result = pathize.gsub('/', '#')
25
+ result = pathize.tr('/', '#')
26
26
  unless extension.nil? || extension.empty?
27
27
  result += extension[0] == '.' ? '' : '.'
28
28
  result += extension.stringify
@@ -15,12 +15,12 @@ module Cayuga
15
15
  end
16
16
 
17
17
  def classify
18
- klass = Object.const_get(self.to_s)
19
- raise(NameError,"wrong class name '#{klass}'") unless klass.kind_of?(Class)
18
+ klass = Object.const_get(to_s)
19
+ raise NameError, "wrong class name '#{klass}'" unless klass.is_a?(Class)
20
20
  klass
21
21
  end
22
22
 
23
- def filenamify(extension=nil)
23
+ def filenamify(extension = nil)
24
24
  stringify.filenamify(extension)
25
25
  end
26
26
 
@@ -1,3 +1,3 @@
1
1
  module Cayuga
2
- VERSION = "0.0.10"
2
+ VERSION = '0.0.11'.freeze
3
3
  end
data/test_script.rb CHANGED
@@ -7,8 +7,8 @@ filename = File.expand_path('development.log')
7
7
  SemanticLogger.add_appender(file_name: filename)
8
8
  SemanticLogger.add_appender(io: $stderr)
9
9
  buffer = StringIO.new
10
- SemanticLogger.add_appender(io: buffer) #, formatter: :json)
11
- tail_lines =3
10
+ SemanticLogger.add_appender(io: buffer) # , formatter: :json)
11
+ tail_lines = 3
12
12
 
13
13
  log.info 'start'
14
14
  # puts buffer.string
@@ -26,31 +26,30 @@ top = 2 ** 23
26
26
  # array[i] = i
27
27
  now = Time.now
28
28
  elapsed = now - last
29
- if (elapsed > 5) && (now.sec % 5).zero?
29
+ next unless (elapsed > 5) && (now.sec % 5).zero?
30
+ stats = "#{now}: #{format('%.6f', (i / 1e6))}" \
31
+ ", #{format('%.2f', elapsed)}s" \
32
+ ", #{format('%.2f', (now - start))}s" \
33
+ ", #{format('%.6f', ((i - old) / 1e6))}"
34
+ puts stats
35
+ log.info(stats)
36
+ # puts buffer.string
37
+ last = now
38
+ old = i
39
+ # end
40
+ # rubocop: disable Style/Next
41
+ if (now - start > 1800) || (i == top - 1)
42
+ duration = now - start
30
43
  stats = "#{now}: #{format('%.6f', (i / 1e6))}" \
31
- ", #{format('%.2f', elapsed)}s" \
32
- ", #{format('%.2f', (now - start))}s" \
33
- ", #{format('%.6f', ((i - old) / 1e6))}"
44
+ ", #{format('%.2f', duration)}s" \
45
+ ", #{format('%.6f', set.size / 1e6)}" \
46
+ ", #{format('%.6f', array.size / 1e6)}"
34
47
  puts stats
35
- log.info(stats)
48
+ log.info stats
36
49
  # puts buffer.string
37
- last = now
38
- old = i
39
- # end
40
- # rubocop: disable Style/Next
41
- if (now - start > 1800) || (i == top - 1)
42
- duration = now - start
43
- stats = "#{now}: #{format('%.6f', (i / 1e6))}" \
44
- ", #{format('%.2f', duration)}s" \
45
- ", #{format('%.6f', set.size / 1e6)}" \
46
- ", #{format('%.6f', array.size / 1e6)}"
47
- puts stats
48
- log.info stats
49
- # puts buffer.string
50
- break
51
- end
52
- # rubocop: enable Style/Next
50
+ break
53
51
  end
52
+ # rubocop: enable Style/Next
54
53
  end
55
54
  now = Time.now
56
55
  # last = now
@@ -70,18 +69,24 @@ puts format('%.2fs', duration)
70
69
  puts format('%.2fs', (Time.now - now))
71
70
  puts format('%.2fs', (Time.now - start))
72
71
 
73
- log.info('finish', set_size: set.size / 1e6, load: duration, analyze: Time.now - now, total: Time.now - start)
72
+ log.info(
73
+ 'finish',
74
+ set_size: set.size / 1e6,
75
+ load: duration,
76
+ analyze: Time.now - now,
77
+ total: Time.now - start
78
+ )
74
79
  SemanticLogger.flush
75
80
  puts '*****FILE*****'
76
- File.open(filename) do |aLog|
77
- aLog.extend(File::Tail)
78
- puts aLog.backward(tail_lines).tail(tail_lines)
81
+ File.open(filename) do |a_log|
82
+ a_log.extend(File::Tail)
83
+ puts a_log.backward(tail_lines).tail(tail_lines)
79
84
  end
80
85
  puts '*****BUFFER*****'
81
86
  puts buffer.string
82
87
  # sleep(1)
83
88
  puts '*****FILE*****'
84
- File.open(filename) do |aLog|
85
- aLog.extend(File::Tail)
86
- puts aLog.backward(tail_lines).tail(tail_lines)
89
+ File.open(filename) do |a_log|
90
+ a_log.extend(File::Tail)
91
+ puts a_log.backward(tail_lines).tail(tail_lines)
87
92
  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.10
4
+ version: 0.0.11
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-28 00:00:00.000000000 Z
11
+ date: 2018-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: semantic_logger