sequelize-rails 0.2.1 → 0.4.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/.DS_Store +0 -0
- data/CHANGELOG.md +3 -2
- data/Gemfile.lock +105 -103
- data/README.md +203 -26
- data/lib/sequel/rails/generators/application_record/application_record_generator.rb +26 -0
- data/lib/sequel/rails/generators/migration/migration_generator.rb +23 -0
- data/lib/sequel/rails/generators/model/model_generator.rb +11 -0
- data/lib/sequel/rails/minitest.rb +24 -0
- data/lib/sequel/rails/railtie.rb +69 -0
- data/lib/sequel/rails/railties/controller_runtime.rb +48 -0
- data/lib/sequel/rails/railties/log_subscriber.rb +155 -0
- data/lib/sequel/rails/translation_support.rb +15 -0
- data/lib/sequel/rails/version.rb +7 -0
- data/lib/sequel/rails.rb +38 -0
- data/lib/{tasks.rake → sequel/tasks.rake} +6 -6
- data/lib/sequelize-rails.rb +1 -1
- data/lib/sequelize_rails.rb +1 -29
- data/sequelize-rails.gemspec +2 -2
- data/sig/sequelize_rails.rbs +5 -3
- metadata +18 -15
- data/lib/sequelize_rails/generators/application_record/application_record_generator.rb +0 -24
- data/lib/sequelize_rails/generators/migration/migration_generator.rb +0 -21
- data/lib/sequelize_rails/generators/model/model_generator.rb +0 -9
- data/lib/sequelize_rails/railtie.rb +0 -66
- data/lib/sequelize_rails/railties/controller_runtime.rb +0 -46
- data/lib/sequelize_rails/railties/log_subscriber.rb +0 -153
- data/lib/sequelize_rails/translation_support.rb +0 -13
- data/lib/sequelize_rails/version.rb +0 -5
- /data/lib/{sequelize_rails → sequel/rails}/db_console.rb +0 -0
- /data/lib/{sequelize_rails → sequel/rails}/generators/application_record/templates/application_record.rb.tt +0 -0
- /data/lib/{sequelize_rails → sequel/rails}/generators/migration/templates/migration.rb.erb +0 -0
@@ -1,46 +0,0 @@
|
|
1
|
-
require "active_support/core_ext/module/attr_internal"
|
2
|
-
|
3
|
-
module SequelizeRails
|
4
|
-
module Railties
|
5
|
-
module ControllerRuntime
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
protected
|
9
|
-
|
10
|
-
attr_internal :db_runtime
|
11
|
-
|
12
|
-
def process_action(action, *)
|
13
|
-
# We also need to reset the runtime before each action
|
14
|
-
# because of queries in middleware or in cases we are streaming
|
15
|
-
# and it won't be cleaned up by the method below.
|
16
|
-
::SequelizeRails::Railties::LogSubscriber.reset_runtime
|
17
|
-
::SequelizeRails::Railties::LogSubscriber.reset_count
|
18
|
-
super
|
19
|
-
end
|
20
|
-
|
21
|
-
def cleanup_view_runtime
|
22
|
-
db_rt_before_render = ::SequelizeRails::Railties::LogSubscriber.reset_runtime
|
23
|
-
self.db_runtime = (db_runtime || 0) + db_rt_before_render
|
24
|
-
runtime = super
|
25
|
-
db_rt_after_render = ::SequelizeRails::Railties::LogSubscriber.reset_runtime
|
26
|
-
self.db_runtime += db_rt_after_render
|
27
|
-
runtime - db_rt_after_render
|
28
|
-
end
|
29
|
-
|
30
|
-
def append_info_to_payload(payload)
|
31
|
-
super
|
32
|
-
payload[:db_runtime] = (db_runtime || 0) + ::SequelizeRails::Railties::LogSubscriber.reset_runtime
|
33
|
-
payload[:db_query_count] = ::SequelizeRails::Railties::LogSubscriber.count
|
34
|
-
end
|
35
|
-
|
36
|
-
module ClassMethods
|
37
|
-
def log_process_action(payload)
|
38
|
-
messages = super
|
39
|
-
messages << format("Database: %.1fms", payload[:db_runtime].to_f) if payload[:db_runtime]
|
40
|
-
messages << format("Queries: %d", payload[:db_query_count].to_f) if payload[:db_query_count]
|
41
|
-
messages
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,153 +0,0 @@
|
|
1
|
-
module SequelizeRails
|
2
|
-
module Railties
|
3
|
-
class LogSubscriber < ActiveSupport::LogSubscriber
|
4
|
-
IGNORE_PAYLOAD_NAMES = ["SCHEMA", "EXPLAIN"]
|
5
|
-
|
6
|
-
class_attribute :backtrace_cleaner, default: ActiveSupport::BacktraceCleaner.new
|
7
|
-
|
8
|
-
def self.runtime=(value)
|
9
|
-
Thread.current["sequel_sql_runtime"] = value
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.runtime
|
13
|
-
Thread.current["sequel_sql_runtime"] ||= 0
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.count=(value)
|
17
|
-
Thread.current["sequel_sql_count"] = value
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.count
|
21
|
-
Thread.current["sequel_sql_count"] ||= 0
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.reset_runtime
|
25
|
-
previous = runtime
|
26
|
-
self.runtime = 0
|
27
|
-
previous
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.reset_count
|
31
|
-
previous = count
|
32
|
-
self.count = 0
|
33
|
-
previous
|
34
|
-
end
|
35
|
-
|
36
|
-
def sql(event)
|
37
|
-
self.class.runtime += event.duration
|
38
|
-
self.class.count += 1
|
39
|
-
return unless logger.debug?
|
40
|
-
|
41
|
-
payload = event.payload
|
42
|
-
|
43
|
-
return if IGNORE_PAYLOAD_NAMES.include?(payload[:name])
|
44
|
-
|
45
|
-
name = format("%s (%.1fms)", payload[:name], event.duration)
|
46
|
-
sql = payload[:sql].squeeze(" ")
|
47
|
-
binds = nil
|
48
|
-
|
49
|
-
if payload[:binds]&.any?
|
50
|
-
casted_params = type_casted_binds(payload[:type_casted_binds])
|
51
|
-
|
52
|
-
binds = []
|
53
|
-
payload[:binds].each_with_index do |attr, i|
|
54
|
-
attribute_name = if attr.respond_to?(:name)
|
55
|
-
attr.name
|
56
|
-
elsif attr.respond_to?(:[]) && attr[i].respond_to?(:name)
|
57
|
-
attr[i].name
|
58
|
-
end
|
59
|
-
|
60
|
-
filtered_params = filter(attribute_name, casted_params[i])
|
61
|
-
|
62
|
-
binds << render_bind(attr, filtered_params)
|
63
|
-
end
|
64
|
-
binds = binds.inspect
|
65
|
-
binds.prepend(" ")
|
66
|
-
end
|
67
|
-
|
68
|
-
name = colorize_payload_name(name, payload[:name])
|
69
|
-
sql = color(sql, sql_color(sql), true) if colorize_logging
|
70
|
-
|
71
|
-
debug " #{name} #{sql}#{binds}"
|
72
|
-
end
|
73
|
-
|
74
|
-
private
|
75
|
-
|
76
|
-
def type_casted_binds(casted_binds)
|
77
|
-
casted_binds.respond_to?(:call) ? casted_binds.call : casted_binds
|
78
|
-
end
|
79
|
-
|
80
|
-
def render_bind(attr, value)
|
81
|
-
case attr
|
82
|
-
when ActiveModel::Attribute
|
83
|
-
if attr.type.binary? && attr.value
|
84
|
-
value = "<#{attr.value_for_database.to_s.bytesize} bytes of binary data>"
|
85
|
-
end
|
86
|
-
when Array
|
87
|
-
attr = attr.first
|
88
|
-
else
|
89
|
-
attr = nil
|
90
|
-
end
|
91
|
-
|
92
|
-
[attr&.name, value]
|
93
|
-
end
|
94
|
-
|
95
|
-
def colorize_payload_name(name, payload_name)
|
96
|
-
if payload_name.blank? || payload_name == "SQL" # SQL vs Model Load/Exists
|
97
|
-
color(name, WHITE, true)
|
98
|
-
else
|
99
|
-
color(name, CYAN, true)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def sql_color(sql)
|
104
|
-
case sql
|
105
|
-
when /\A\s*rollback/mi
|
106
|
-
RED
|
107
|
-
when /select .*for update/mi, /\A\s*lock/mi
|
108
|
-
CYAN
|
109
|
-
when /\A\s*select/i
|
110
|
-
CYAN
|
111
|
-
when /\A\s*insert/i
|
112
|
-
GREEN
|
113
|
-
when /\A\s*update/i
|
114
|
-
YELLOW
|
115
|
-
when /\A\s*delete/i
|
116
|
-
RED
|
117
|
-
when /transaction\s*\Z/i, /\A\s*begin/i, /\A\s*commit/i
|
118
|
-
BLUE
|
119
|
-
else
|
120
|
-
MAGENTA
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def logger
|
125
|
-
::Rails.application.config.sequel.logger
|
126
|
-
end
|
127
|
-
|
128
|
-
def debug(progname = nil, &block)
|
129
|
-
return unless super
|
130
|
-
|
131
|
-
if Rails.application.config.sequel.verbose_query_logs
|
132
|
-
log_query_source
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def log_query_source
|
137
|
-
source = extract_query_source_location(caller)
|
138
|
-
|
139
|
-
if source
|
140
|
-
logger.debug(" ↳ #{source}")
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
def extract_query_source_location(locations)
|
145
|
-
backtrace_cleaner.clean(locations.lazy).first
|
146
|
-
end
|
147
|
-
|
148
|
-
def filter(name, value)
|
149
|
-
ActiveRecord::Base.inspection_filter.filter_param(name, value)
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module SequelizeRails
|
2
|
-
module TranslationSupport
|
3
|
-
def i18n_scope
|
4
|
-
:sequel
|
5
|
-
end
|
6
|
-
|
7
|
-
def lookup_ancestors
|
8
|
-
# ActiveModel uses the name of ancestors. Exclude unnamed classes, like
|
9
|
-
# those returned by Sequel::Model(...).
|
10
|
-
super.reject { |x| x.name.nil? }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
File without changes
|
File without changes
|
File without changes
|