lamian 0.3.3 → 1.0.0alpha

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d930fc16394a1bd7581075c1954e1d88856e8ae
4
- data.tar.gz: 0e8748b7f588666c1b691f367ff8420a723c3108
3
+ metadata.gz: ce288b47c40d6a1f17839187b23d82035175c4af
4
+ data.tar.gz: fbc768abd2f211ba6a4ad617aa3ea74c5876a26a
5
5
  SHA512:
6
- metadata.gz: 6986d58f6a9e1c3b4d99fbf879ddbb0995b93af1212e4ac8c6a20068cba411754cb40ef4c277cb50a84b0acd239c8a7c05dc077ba5f32e0c69cd9b698088b1fa
7
- data.tar.gz: 44a3f5301eb75d07010548ec272ddca4ac155bcca5ab1d1c4f64ee59d3acb0cc5571f7067293c6c47ff12cbf260271ad609ff84be0b2ed0f29668312811a9342
6
+ metadata.gz: '027578767295a91366fca4de695f6de44111fdce461fece1ad13fe0fb187dcaaff172988bc42dd57c60036c41f2122e861d1a153947f8a75b8a67a2185675f3c'
7
+ data.tar.gz: 3e577960fe820800fe8f2925eec5e2733b94a02c3571a7d50ed909dec45e5f44c41628928057328778c27b85f31b8a91590417451f26bfc89d91057a4ac96390
@@ -1,15 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Lamian is an in-memory logger, which content could be released
4
+ # for error messages.
5
+ # It is designed to work in pair with `exception_notification` gem inside
6
+ # rails aplications
3
7
  module Lamian
4
- autoload :VERSION, 'lamian/version'
5
- autoload :Config, 'lamian/config'
6
- autoload :Logger, 'lamian/logger'
7
- autoload :LoggerExtension, 'lamian/logger_extension'
8
- autoload :Middleware, 'lamian/middleware'
8
+ autoload :VERSION, "lamian/version"
9
+ autoload :Config, "lamian/config"
10
+ autoload :Logger, "lamian/logger"
11
+ autoload :LoggerExtension, "lamian/logger_extension"
12
+ autoload :Middleware, "lamian/middleware"
9
13
 
10
- require 'lamian/engine'
14
+ require "lamian/engine"
11
15
 
12
16
  class << self
17
+ # Yields curent configuration if block given
18
+ # @example
19
+ # Lamian.configure do |config|
20
+ # config.formatter = MyFormatter.new
21
+ # end
22
+ # @yield [config] current configuration
23
+ # @yieldparam config [Lamian::Config]
24
+ # @return [Lamian::Config] current configuration
13
25
  def configure
14
26
  @config ||= Config.new
15
27
  yield(@config) if block_given?
@@ -17,18 +29,30 @@ module Lamian
17
29
  end
18
30
  alias config configure
19
31
 
32
+ # Extends logger instance to tee it's output to Lamian logger
33
+ # @param other_logger [Logger] logger to extend
20
34
  def extend_logger(other_logger)
21
35
  other_logger.extend(Lamian::LoggerExtension)
22
36
  end
23
37
 
38
+ # @api private
39
+ # Gives access to current logger
40
+ # @return [Lamian::Logger] current logger
24
41
  def logger
25
42
  Lamian::Logger.current
26
43
  end
27
44
 
45
+ # Collects logs sent inside block
28
46
  def run
29
47
  logger.run { yield }
30
48
  end
31
49
 
50
+ # Dumps log collected in this run
51
+ # @option format [Symbol]
52
+ # requested format of log. At this point, returns raw log if falsey
53
+ # or log without controll sequences (such as '[23m') if truthy
54
+ # value given (for now)
55
+ # @return formatted log (String by default)
32
56
  def dump(format: nil)
33
57
  logger.dump(format: format)
34
58
  end
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
- require 'logger'
2
+
3
+ require "logger"
3
4
 
4
5
  module Lamian
6
+ # General lamian configuration class
7
+ # @attr formatter [Logger::Foramtter]
8
+ # formatter to use in lamian, global
5
9
  Config = Struct.new(:formatter) do
6
10
  def initialize
7
11
  self.formatter = ::Logger::Formatter.new
@@ -1,15 +1,20 @@
1
1
  # frozen_string_literal: true
2
- require 'rails'
3
- require 'exception_notification'
4
- require 'exception_notification/rails'
2
+
3
+ require "rails"
4
+ require "exception_notification"
5
+ require "exception_notification/rails"
5
6
 
6
7
  module Lamian
8
+ # Rails engine, which injects middleware and appends
9
+ # lamian views to rails library.
10
+ # Lamian views are used in exception_notifier to provide
11
+ # request_log section
7
12
  class Engine < ::Rails::Engine
8
13
  config.app_middleware.insert_before(
9
14
  ExceptionNotification::Rack,
10
- ::Lamian::Middleware
15
+ ::Lamian::Middleware,
11
16
  )
12
17
 
13
- paths['app/views'] << 'lib/lamian/rails_views'
18
+ paths["app/views"] << "lib/lamian/rails_views"
14
19
  end
15
20
  end
@@ -1,9 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'logger'
3
+ require "logger"
4
4
 
5
5
  module Lamian
6
+ # @api private
7
+ # Provides thread-local loggers to catch teed messages from
8
+ # regular loggers.
9
+ # Uses :__lamian_logger thread variable
10
+ # @attr level [Int]
11
+ # current log level, implicitly set to zero
12
+ # @attr logdevs [Array(StringIO)]
13
+ # stack of log devices used to store logs
14
+ # @attr formatter [Logger::Formatter]
15
+ # formatter, inherited from Lamian.config
6
16
  class Logger < ::Logger
17
+ # Provides access to logger bound to curent thread
18
+ # @return [Lamian::Logger] current logger
7
19
  def self.current
8
20
  Thread.current[:__lamian_logger] ||= new
9
21
  end
@@ -14,6 +26,8 @@ module Lamian
14
26
  self.formatter = Lamian.config.formatter
15
27
  end
16
28
 
29
+ # @see Lamian.run
30
+ # Collects logs sent inside block
17
31
  def run
18
32
  push_logdev(StringIO.new)
19
33
  yield
@@ -21,10 +35,19 @@ module Lamian
21
35
  pop_logdev
22
36
  end
23
37
 
38
+ # Part of Logger api, entry point for all logs
39
+ # extened to run on each log device in stack
24
40
  def add(*args, &block)
25
41
  each_logdev { super(*args, &block) }
26
42
  end
27
43
 
44
+ # @see Lamian.dump
45
+ # Dumps log collected in this run
46
+ # @option format [Symbol]
47
+ # requested format of log. At this point, returns raw log if falsey
48
+ # or log without controll sequences (such as '[23m') if truthy
49
+ # value given (for now)
50
+ # @return formatted log (String by default)
28
51
  def dump(format: nil)
29
52
  result = logdevs[-1]&.string&.dup
30
53
  apply_format!(format, result)
@@ -35,20 +58,34 @@ module Lamian
35
58
 
36
59
  attr_accessor :level, :logdevs, :formatter
37
60
 
38
- def apply_format!(format, result)
61
+ # Formats string using given format
62
+ # @todo create `formatters` interface to allow real format selection
63
+ # @note
64
+ # `format` is now checked only for thruthyness. Please, use
65
+ # `:text` format to keep it same after `formatters` interface integration
66
+ # @param format [Symbol] requested format, e.g. `:text`
67
+ # @param string [String] string to be changed
68
+ # @return avoid return value usage
69
+ def apply_format!(format, string)
39
70
  return unless format
40
- return unless result
41
- result.gsub!(/\[\d{1,2}m/, '')
71
+ return unless string
72
+ string.gsub!(/\[\d{1,2}m/, "")
42
73
  end
43
74
 
75
+ # Pushes new logdev in the start of #run call
76
+ # @param logdev [StringIO] new StringIO
44
77
  def push_logdev(logdev)
45
78
  logdevs << logdev
46
79
  end
47
80
 
81
+ # Pops logdev in the end of #run call
82
+ # @return [StringIO] logdev
48
83
  def pop_logdev
49
84
  logdevs.pop
50
85
  end
51
86
 
87
+ # Runs specific block with all logdevs in stack to
88
+ # populate them all
52
89
  def each_logdev
53
90
  logdevs.each do |logdev|
54
91
  @logdev = logdev
@@ -1,9 +1,20 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Lamian
4
+ # Provides extension to loggers, which should be teed to lamian
3
5
  module LoggerExtension
6
+ # @api stdlib
7
+ # Add is a single entry point for ::Logger.{debug,info,..}
4
8
  def add(*args, &block)
5
9
  Logger.current.add(*args, &block)
6
10
  super
7
11
  end
12
+
13
+ # @api stdlib
14
+ # log is an alis for add and should also be prepended
15
+ def log(*args, &block)
16
+ Logger.current.add(*args, &block)
17
+ super
18
+ end
8
19
  end
9
20
  end
@@ -1,10 +1,17 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Lamian
4
+ # Provides rack middleware, which allows to colelct request logs
5
+ # @attr app [Proc] stored application
3
6
  class Middleware
7
+ # @param app [Proc] stored application
4
8
  def initialize(app)
5
9
  self.app = app
6
10
  end
7
11
 
12
+ # wraps application inside lamian context and calls it
13
+ # @param env [Hash] left intact
14
+ # @return result of app.call
8
15
  def call(env)
9
16
  Lamian.run { app.call(env) }
10
17
  end
@@ -1,4 +1,17 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Lamian
3
- VERSION = '0.3.3'
4
+ # Current lamian vewrsion
5
+ #
6
+ # format: 'a.b.c' with possible suffixes such as alpha
7
+ # * a is for major version, it is guaranteed to be changed
8
+ # if back-compatibility of public API is broken
9
+ # * b is for minor version, it is guaranteed to be changed
10
+ # on public API changes and also if private API
11
+ # back-compatibility is broken
12
+ # * c is for incremental version, it is updated in other cases
13
+ # According to this, it is enought to specify '~> a.b'
14
+ # if private API was not used and to specify '~> a.b.c' if it was
15
+
16
+ VERSION = "1.0.0alpha"
4
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lamian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 1.0.0alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - JelF
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-22 00:00:00.000000000 Z
11
+ date: 2017-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -81,19 +81,19 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rubocop
84
+ name: rubocop-config-umbrellio
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: '0.45'
89
+ version: 0.49.1.4
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: '0.45'
96
+ version: 0.49.1.4
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: pry
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +122,48 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.8'
125
+ - !ruby/object:Gem::Dependency
126
+ name: yard
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.9'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.9'
139
+ - !ruby/object:Gem::Dependency
140
+ name: launchy
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 2.4.3
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 2.4.3
153
+ - !ruby/object:Gem::Dependency
154
+ name: json
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 2.1.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 2.1.0
125
167
  description: Add logs to your error messages, using exception_notifier or smth like
126
168
  it
127
169
  email:
@@ -153,12 +195,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
195
  version: '0'
154
196
  required_rubygems_version: !ruby/object:Gem::Requirement
155
197
  requirements:
156
- - - ">="
198
+ - - ">"
157
199
  - !ruby/object:Gem::Version
158
- version: '0'
200
+ version: 1.3.1
159
201
  requirements: []
160
202
  rubyforge_project:
161
- rubygems_version: 2.5.1
203
+ rubygems_version: 2.6.11
162
204
  signing_key:
163
205
  specification_version: 4
164
206
  summary: Add logs to your error messages