rails-footnotes 7.0.0 → 7.1.0
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 +4 -4
- data/Gemfile +3 -1
- data/Gemfile.lock +107 -68
- data/{README.rdoc → README.md} +65 -59
- data/lib/generators/templates/rails_footnotes.rb +3 -0
- data/lib/rails-footnotes/filter.rb +42 -29
- data/lib/rails-footnotes/notes/assigns_note.rb +23 -20
- data/lib/rails-footnotes/notes/controller_note.rb +1 -1
- data/lib/rails-footnotes/notes/log_note/note_logger.rb +0 -38
- data/lib/rails-footnotes/notes/log_note.rb +8 -5
- data/lib/rails-footnotes/notes/partials_note.rb +2 -2
- data/lib/rails-footnotes/notes/queries_note.rb +4 -6
- data/lib/rails-footnotes/notes/view_note.rb +4 -4
- data/lib/rails-footnotes/version.rb +1 -1
- data/lib/rails-footnotes.rb +18 -16
- data/rails-footnotes.gemspec +1 -3
- data/spec/footnotes_spec.rb +173 -140
- data/spec/notes/assigns_note_spec.rb +27 -9
- data/spec/spec_helper.rb +1 -1
- data/spec/support/active_record.rb +22 -0
- metadata +5 -3
@@ -1,24 +1,24 @@
|
|
1
|
+
require "active_record"
|
2
|
+
|
1
3
|
module Footnotes
|
2
4
|
module Notes
|
3
5
|
class AssignsNote < AbstractNote
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@@ignored_assigns_pattern = /^@_/
|
21
|
-
cattr_accessor :ignored_assigns_pattern, :instance_writer => false
|
6
|
+
thread_cattr_accessor :ignored_assigns, instance_writer: false, default: [
|
7
|
+
:@real_format,
|
8
|
+
:@before_filter_chain_aborted,
|
9
|
+
:@performed_redirect,
|
10
|
+
:@performed_render,
|
11
|
+
:@_params,
|
12
|
+
:@_response,
|
13
|
+
:@url,
|
14
|
+
:@template,
|
15
|
+
:@_request,
|
16
|
+
:@db_rt_before_render,
|
17
|
+
:@db_rt_after_render,
|
18
|
+
:@view_runtime,
|
19
|
+
:@marked_for_same_origin_verification
|
20
|
+
]
|
21
|
+
thread_cattr_accessor :ignored_assigns_pattern, instance_writer: false, default: /^@_/
|
22
22
|
|
23
23
|
def initialize(controller)
|
24
24
|
@controller = controller
|
@@ -40,8 +40,11 @@ module Footnotes
|
|
40
40
|
def to_table
|
41
41
|
table = assigns.inject([]) do |rr, var|
|
42
42
|
class_name = assigned_value(var).class.name
|
43
|
-
|
44
|
-
|
43
|
+
var_value = assigned_value(var)
|
44
|
+
if var_value.is_a?(ActiveRecord::Relation) && var_value.limit_value.nil?
|
45
|
+
var_value = var_value.limit(Footnotes::Filter.default_limit)
|
46
|
+
end
|
47
|
+
rr << ["<strong>#{var.to_s}</strong>" + "<br /><em>#{class_name}</em>", escape(var_value.inspect)]
|
45
48
|
end
|
46
49
|
|
47
50
|
table.unshift(['Name', 'Value'])
|
@@ -15,44 +15,6 @@ module Footnotes
|
|
15
15
|
formatter = @formatter || Logger::Formatter.new
|
16
16
|
@logs << formatter.call(format_severity(severity), Time.now, message, progname)
|
17
17
|
end
|
18
|
-
|
19
|
-
## Backport from rails 4 for handling logging broadcast, should be removed when rails 3 is deprecated :
|
20
|
-
|
21
|
-
# Broadcasts logs to multiple loggers.
|
22
|
-
def self.broadcast(logger) # :nodoc:
|
23
|
-
Module.new do
|
24
|
-
define_method(:add) do |*args, &block|
|
25
|
-
logger.add(*args, &block)
|
26
|
-
super(*args, &block)
|
27
|
-
end
|
28
|
-
|
29
|
-
define_method(:<<) do |x|
|
30
|
-
logger << x
|
31
|
-
super(x)
|
32
|
-
end
|
33
|
-
|
34
|
-
define_method(:close) do
|
35
|
-
logger.close
|
36
|
-
super()
|
37
|
-
end
|
38
|
-
|
39
|
-
define_method(:progname=) do |name|
|
40
|
-
logger.progname = name
|
41
|
-
super(name)
|
42
|
-
end
|
43
|
-
|
44
|
-
define_method(:formatter=) do |formatter|
|
45
|
-
logger.formatter = formatter
|
46
|
-
super(formatter)
|
47
|
-
end
|
48
|
-
|
49
|
-
define_method(:level=) do |level|
|
50
|
-
logger.level = level
|
51
|
-
super(level)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
18
|
end
|
57
19
|
end
|
58
20
|
end
|
@@ -4,8 +4,8 @@ module Footnotes
|
|
4
4
|
|
5
5
|
autoload :NoteLogger, 'rails-footnotes/notes/log_note/note_logger'
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
thread_cattr_accessor :logs
|
8
|
+
thread_cattr_accessor :original_logger
|
9
9
|
|
10
10
|
def self.start!(controller)
|
11
11
|
self.logs = []
|
@@ -18,9 +18,12 @@ module Footnotes
|
|
18
18
|
else
|
19
19
|
defined?(ActiveSupport::Logger) ? ActiveSupport::Logger::SimpleFormatter.new : Logger::SimpleFormatter.new
|
20
20
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
|
22
|
+
if ::Rails::VERSION::STRING < "7.1"
|
23
|
+
::Rails.logger.extend(::ActiveSupport::Logger.broadcast(note_logger))
|
24
|
+
else
|
25
|
+
::Rails.logger = ::ActiveSupport::BroadcastLogger.new(::Rails.logger, note_logger)
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
29
|
def title
|
@@ -2,12 +2,12 @@ module Footnotes
|
|
2
2
|
module Notes
|
3
3
|
class PartialsNote < AbstractNote
|
4
4
|
|
5
|
-
|
5
|
+
thread_cattr_accessor :partials
|
6
6
|
|
7
7
|
def self.start!(controller)
|
8
8
|
self.partials = []
|
9
9
|
@subscriber ||= ActiveSupport::Notifications.subscribe('render_partial.action_view') do |*args|
|
10
|
-
event = ActiveSupport::Notifications::Event.new
|
10
|
+
event = ActiveSupport::Notifications::Event.new(*args)
|
11
11
|
self.partials << {:file => event.payload[:identifier], :duration => event.duration}
|
12
12
|
end
|
13
13
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
module Footnotes
|
2
2
|
module Notes
|
3
3
|
class QueriesNote < AbstractNote
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
@@orm = [:active_record, :data_mapper]
|
9
|
-
@@ignored_regexps = [%r{(pg_table|pg_attribute|pg_namespace|show\stables|pragma|sqlite_master)}i]
|
4
|
+
thread_cattr_accessor :alert_db_time, default: 16.0, instance_writer: false
|
5
|
+
thread_cattr_accessor :alert_sql_number, default: 8, instance_writer: false
|
6
|
+
thread_cattr_accessor :orm, default: [:active_record, :data_mapper], instance_writer: false
|
7
|
+
thread_cattr_accessor :ignored_regexps, default: [%r{(pg_table|pg_attribute|pg_namespace|show\stables|pragma|sqlite_master)}i], instance_writer: false
|
10
8
|
|
11
9
|
def self.start!(controller)
|
12
10
|
self.query_subscriber.reset!
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Footnotes
|
2
2
|
module Notes
|
3
3
|
class ViewNote < AbstractNote
|
4
|
-
|
4
|
+
thread_cattr_accessor :template
|
5
5
|
|
6
6
|
def self.start!(controller)
|
7
7
|
@subscriber ||= ActiveSupport::Notifications.subscribe('render_template.action_view') do |*args|
|
8
|
-
event = ActiveSupport::Notifications::Event.new
|
8
|
+
event = ActiveSupport::Notifications::Event.new(*args)
|
9
9
|
self.template = {:file => event.payload[:identifier], :duration => event.duration}
|
10
10
|
end
|
11
11
|
end
|
@@ -19,7 +19,7 @@ module Footnotes
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def title
|
22
|
-
"View (#{"%.3f" %
|
22
|
+
"View (#{"%.3f" % template[:duration]}ms)"
|
23
23
|
end
|
24
24
|
|
25
25
|
def link
|
@@ -34,7 +34,7 @@ module Footnotes
|
|
34
34
|
|
35
35
|
def filename
|
36
36
|
return @filename if defined?(@filename)
|
37
|
-
@filename =
|
37
|
+
@filename = template.try(:[], :file)
|
38
38
|
end
|
39
39
|
|
40
40
|
end
|
data/lib/rails-footnotes.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rails'
|
2
2
|
require 'action_controller'
|
3
|
+
require 'active_support/core_ext/module/attribute_accessors_per_thread'
|
3
4
|
require 'rails-footnotes/abstract_note'
|
4
5
|
require 'rails-footnotes/each_with_rescue'
|
5
6
|
require 'rails-footnotes/filter'
|
@@ -7,14 +8,9 @@ require 'rails-footnotes/notes/all'
|
|
7
8
|
require 'rails-footnotes/extension'
|
8
9
|
|
9
10
|
module Footnotes
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
mattr_accessor :after_hooks
|
14
|
-
@@after_hooks = []
|
15
|
-
|
16
|
-
mattr_accessor :enabled
|
17
|
-
@@enabled = false
|
11
|
+
thread_mattr_accessor :before_hooks
|
12
|
+
thread_mattr_accessor :after_hooks
|
13
|
+
thread_mattr_accessor :enabled, default: false
|
18
14
|
|
19
15
|
class << self
|
20
16
|
delegate :notes, :to => Filter
|
@@ -34,25 +30,28 @@ module Footnotes
|
|
34
30
|
|
35
31
|
delegate :font_size, :to => Filter
|
36
32
|
delegate :font_size=, :to => Filter
|
33
|
+
|
34
|
+
delegate :default_limit, :to => Filter
|
35
|
+
delegate :default_limit=, :to => Filter
|
37
36
|
end
|
38
37
|
|
39
38
|
def self.before(&block)
|
40
|
-
|
39
|
+
before_hooks << block
|
41
40
|
end
|
42
41
|
|
43
42
|
def self.after(&block)
|
44
|
-
|
43
|
+
after_hooks << block
|
45
44
|
end
|
46
45
|
|
47
46
|
def self.enabled?(controller)
|
48
|
-
if
|
49
|
-
if
|
50
|
-
|
47
|
+
if enabled.is_a? Proc
|
48
|
+
if enabled.arity == 1
|
49
|
+
enabled.call(controller)
|
51
50
|
else
|
52
|
-
|
51
|
+
enabled.call
|
53
52
|
end
|
54
53
|
else
|
55
|
-
|
54
|
+
!!enabled
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
@@ -61,8 +60,11 @@ module Footnotes
|
|
61
60
|
end
|
62
61
|
end
|
63
62
|
|
63
|
+
Footnotes.before_hooks = []
|
64
|
+
Footnotes.after_hooks = []
|
65
|
+
|
64
66
|
ActiveSupport.on_load(:action_controller) do
|
65
67
|
ActionController::Base.send(:include, Footnotes::RailsFootnotesExtension)
|
66
68
|
end
|
67
69
|
|
68
|
-
load Rails.root.join('.rails_footnotes') if Rails.root
|
70
|
+
load Rails.root.join('.rails_footnotes') if Rails.root&.join('.rails_footnotes')&.exist?
|