cayuga 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
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