tailog 0.4.0 → 0.4.1

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: e059546fe3ba51e4d77e16ecec8e8415849af454
4
- data.tar.gz: b3ae7620423132949c16eb327e5f8e56a280fb89
3
+ metadata.gz: 1bc9bb6de653960e66a8228ef816c32ab109d72c
4
+ data.tar.gz: 2f8dc643971a9aa671f03c933e26918645240143
5
5
  SHA512:
6
- metadata.gz: 0afce3b55d7d34d91819a52a356846e58db3eb6ddc4e72e31b3240c76371a4b2bd93207d983247a0ab5734da94ae4089bd68ac9f3cf10fce201944eab14106bb
7
- data.tar.gz: 143514a5dba6dd0519d1633961d7d44f52e92e60ceecde7108ac82a7cee2aa1c0555e5f4b97326e707e6eef4e7c7f705f8001b2e334560b0c59464b5b49b885a
6
+ metadata.gz: cad43120d0b3a0b1c6ec9e8050a931568abd9b31f814074887fd46bececfe20932a74f9de7e096bee5a37cc422f609ad5cbe64b81b7c1254bb91ab929788f2a3
7
+ data.tar.gz: 8d842e8058e457a9e3bdb41a9d00fbbcf875e4a3c173d22309b733141c1d08d3d9e422a286ba19d4befaaec59be4215f6efca4f868b45fef769ad5a10b4d9b80
@@ -1,3 +1,3 @@
1
1
  module Tailog
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -1,10 +1,13 @@
1
1
  require 'active_support/core_ext/string'
2
2
  require 'securerandom'
3
3
  require 'logger'
4
+ require 'erb'
4
5
 
5
6
  module Tailog
6
7
  module WatchMethods
7
8
  class << self
9
+ attr_accessor :inject_options
10
+
8
11
  def logger
9
12
  return @logger if @logger
10
13
  @logger = Logger.new(File.join Tailog.log_path, "watch_methods.log")
@@ -22,18 +25,27 @@ module Tailog
22
25
  end
23
26
  end
24
27
 
25
- def inject targets
28
+ self.inject_options = {
29
+ self: true,
30
+ arguments: true,
31
+ caller_backtrace: false,
32
+ result: true,
33
+ error_backtrace: true
34
+ }
35
+
36
+ def inject targets, options = {}
37
+ options = Tailog::WatchMethods.inject_options.merge(options)
26
38
  targets.each do |target|
27
39
  begin
28
40
  if target.include? "#"
29
- inject_instance_method target
41
+ inject_instance_method target, options
30
42
  elsif target.include? "."
31
- inject_class_method target
43
+ inject_class_method target, options
32
44
  else
33
- inject_constant target
45
+ inject_constant target, options
34
46
  end
35
47
  rescue => error
36
- WatchMethods.logger.error "Inject #{target} FAILED: #{error.class}: #{error.message}"
48
+ WatchMethods.logger.error "Inject #{target} FAILED: #{error.class}: #{error.message}."
37
49
  end
38
50
  end
39
51
  end
@@ -58,30 +70,31 @@ module Tailog
58
70
  method.to_s.start_with? RAW_METHOD_PREFIX
59
71
  end
60
72
 
61
- def inject_constant target
73
+ def inject_constant target, options
62
74
  constant = target.constantize
63
75
  constant.instance_methods(false).each do |method|
64
- inject_instance_method "#{target}##{method}" unless raw_method? method
76
+ inject_instance_method "#{target}##{method}", options unless raw_method? method
65
77
  end
66
78
  constant.methods(false).each do |method|
67
- inject_class_method "#{target}.#{method}" unless raw_method? method
79
+ inject_class_method "#{target}.#{method}", options unless raw_method? method
68
80
  end
69
81
  end
70
82
 
71
83
  def cleanup_constant target
72
- target.constantize.instance_methods(false).each do |method|
84
+ constant = target.constantize
85
+ constant.instance_methods(false).each do |method|
73
86
  cleanup_instance_method "#{target}##{method}" unless raw_method? method
74
87
  end
75
- target.constantize.methods(false).each do |method|
88
+ constant.methods(false).each do |method|
76
89
  cleanup_class_method "#{target}.#{method}" unless raw_method? method
77
90
  end
78
91
  end
79
92
 
80
- def inject_class_method target
93
+ def inject_class_method target, options
81
94
  klass, _, method = target.rpartition(".")
82
95
  klass.constantize.class_eval <<-EOS, __FILE__, __LINE__
83
96
  class << self
84
- #{build_watch_method target, method}
97
+ #{build_watch_method target, method, options}
85
98
  end
86
99
  EOS
87
100
  end
@@ -95,10 +108,10 @@ module Tailog
95
108
  EOS
96
109
  end
97
110
 
98
- def inject_instance_method target
111
+ def inject_instance_method target, options
99
112
  klass, _, method = target.rpartition("#")
100
113
  klass.constantize.class_eval <<-EOS, __FILE__, __LINE__
101
- #{build_watch_method target, method}
114
+ #{build_watch_method target, method, options}
102
115
  EOS
103
116
  end
104
117
 
@@ -109,26 +122,9 @@ module Tailog
109
122
  EOS
110
123
  end
111
124
 
112
- def build_watch_method target, method
125
+ def build_watch_method target, method, options
113
126
  raw_method = "#{RAW_METHOD_PREFIX}#{method}"
114
- return <<-EOS
115
- unless instance_methods.include?(:#{raw_method})
116
- alias_method :#{raw_method}, :#{method}
117
- def #{method} *args
118
- start = Time.now
119
- call_id = SecureRandom.uuid
120
- Tailog::WatchMethods.logger.info "[\#{call_id}] #{target} CALLED: self: \#{self.inspect}, arguments: \#{args.inspect}"
121
- result = send :#{raw_method}, *args
122
- Tailog::WatchMethods.logger.info "[\#{call_id}] #{target} FINISHED: \#{(Time.now - start) * 1000} ms, result: \#{result.inspect}"
123
- result
124
- rescue => error
125
- Tailog::WatchMethods.logger.error "[\#{call_id}] #{target} FAILED: \#{error.class} - \#{error.message} => \#{error.backtrace.join(", ")}"
126
- raise error
127
- end
128
- else
129
- Tailog::WatchMethods.logger.error "Inject method `#{target}' failed: already injected"
130
- end
131
- EOS
127
+ ERB.new(WATCH_METHOD_ERB).result(binding)
132
128
  end
133
129
 
134
130
  def build_cleanup_method target, method
@@ -142,3 +138,27 @@ module Tailog
142
138
  end
143
139
  end
144
140
  end
141
+
142
+ WATCH_METHOD_ERB = <<-EOS
143
+ unless instance_methods.include?(:<%= raw_method %>)
144
+ alias_method :<%= raw_method %>, :<%= method %>
145
+ def <%= method %> *args
146
+ start = Time.now
147
+ call_id = SecureRandom.uuid
148
+
149
+ Tailog::WatchMethods.logger.info "[\#{call_id}] <%= target %> CALLED<% if options[:self] %>, self: \#{self.inspect}<% end %><% if options[:arguments] %>, arguments: \#{args.inspect}<% end %><% if options[:caller_backtrace] %>, backtrace: \#{caller.join(", ")}<% end %>."
150
+
151
+ result = send :<%= raw_method %>, *args
152
+
153
+ Tailog::WatchMethods.logger.info "[\#{call_id}] <%= target %> FINISHED in \#{(Time.now - start) * 1000} ms<% if options[:result] %>, result: \#{result.inspect}<% end %>."
154
+
155
+ result
156
+ rescue => error
157
+ Tailog::WatchMethods.logger.error "[\#{call_id}] <%= target %> FAILED: \#{error.class}: \#{error.message}<% if options[:error_backtrace] %>, backtrace: \#{error.backtrace.join(", ")}<% end %>."
158
+
159
+ raise error
160
+ end
161
+ else
162
+ Tailog::WatchMethods.logger.error "Inject <%= target %> FAILED: already injected."
163
+ end
164
+ EOS
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tailog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - bbtfr