hyper-pure-sys 0.0.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 +7 -0
- data/bullet-8.1.3/CHANGELOG.md +374 -0
- data/bullet-8.1.3/MIT-LICENSE +20 -0
- data/bullet-8.1.3/README.md +525 -0
- data/bullet-8.1.3/lib/bullet/active_job.rb +13 -0
- data/bullet-8.1.3/lib/bullet/active_record4.rb +197 -0
- data/bullet-8.1.3/lib/bullet/active_record41.rb +191 -0
- data/bullet-8.1.3/lib/bullet/active_record42.rb +262 -0
- data/bullet-8.1.3/lib/bullet/active_record5.rb +294 -0
- data/bullet-8.1.3/lib/bullet/active_record52.rb +278 -0
- data/bullet-8.1.3/lib/bullet/active_record60.rb +310 -0
- data/bullet-8.1.3/lib/bullet/active_record61.rb +310 -0
- data/bullet-8.1.3/lib/bullet/active_record70.rb +319 -0
- data/bullet-8.1.3/lib/bullet/active_record71.rb +319 -0
- data/bullet-8.1.3/lib/bullet/active_record72.rb +319 -0
- data/bullet-8.1.3/lib/bullet/active_record80.rb +319 -0
- data/bullet-8.1.3/lib/bullet/active_record81.rb +321 -0
- data/bullet-8.1.3/lib/bullet/bullet_xhr.js +64 -0
- data/bullet-8.1.3/lib/bullet/dependency.rb +165 -0
- data/bullet-8.1.3/lib/bullet/detector/association.rb +92 -0
- data/bullet-8.1.3/lib/bullet/detector/base.rb +8 -0
- data/bullet-8.1.3/lib/bullet/detector/counter_cache.rb +69 -0
- data/bullet-8.1.3/lib/bullet/detector/n_plus_one_query.rb +148 -0
- data/bullet-8.1.3/lib/bullet/detector/unused_eager_loading.rb +100 -0
- data/bullet-8.1.3/lib/bullet/detector.rb +11 -0
- data/bullet-8.1.3/lib/bullet/ext/object.rb +37 -0
- data/bullet-8.1.3/lib/bullet/ext/string.rb +14 -0
- data/bullet-8.1.3/lib/bullet/mongoid4x.rb +59 -0
- data/bullet-8.1.3/lib/bullet/mongoid5x.rb +59 -0
- data/bullet-8.1.3/lib/bullet/mongoid6x.rb +59 -0
- data/bullet-8.1.3/lib/bullet/mongoid7x.rb +74 -0
- data/bullet-8.1.3/lib/bullet/mongoid8x.rb +61 -0
- data/bullet-8.1.3/lib/bullet/mongoid9x.rb +74 -0
- data/bullet-8.1.3/lib/bullet/notification/base.rb +92 -0
- data/bullet-8.1.3/lib/bullet/notification/counter_cache.rb +15 -0
- data/bullet-8.1.3/lib/bullet/notification/n_plus_one_query.rb +31 -0
- data/bullet-8.1.3/lib/bullet/notification/unused_eager_loading.rb +31 -0
- data/bullet-8.1.3/lib/bullet/notification.rb +13 -0
- data/bullet-8.1.3/lib/bullet/notification_collector.rb +25 -0
- data/bullet-8.1.3/lib/bullet/rack.rb +186 -0
- data/bullet-8.1.3/lib/bullet/registry/association.rb +16 -0
- data/bullet-8.1.3/lib/bullet/registry/base.rb +46 -0
- data/bullet-8.1.3/lib/bullet/registry/call_stack.rb +17 -0
- data/bullet-8.1.3/lib/bullet/registry/object.rb +18 -0
- data/bullet-8.1.3/lib/bullet/registry.rb +10 -0
- data/bullet-8.1.3/lib/bullet/stack_trace_filter.rb +67 -0
- data/bullet-8.1.3/lib/bullet/version.rb +5 -0
- data/bullet-8.1.3/lib/bullet.rb +289 -0
- data/bullet-8.1.3/lib/generators/bullet/install_generator.rb +47 -0
- data/bullet-8.1.3/tasks/bullet_tasks.rake +11 -0
- data/hyper-pure-sys.gemspec +12 -0
- metadata +91 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bundler"
|
|
4
|
+
|
|
5
|
+
using Bullet::Ext::Object
|
|
6
|
+
|
|
7
|
+
module Bullet
|
|
8
|
+
module StackTraceFilter
|
|
9
|
+
VENDOR_PATH = '/vendor'
|
|
10
|
+
|
|
11
|
+
# @param bullet_key[String] - use this to get stored call stack from call_stacks object.
|
|
12
|
+
def caller_in_project(bullet_key = nil)
|
|
13
|
+
vendor_root = Bullet.app_root + VENDOR_PATH
|
|
14
|
+
bundler_path = Bundler.bundle_path.to_s
|
|
15
|
+
select_caller_locations(bullet_key) do |location|
|
|
16
|
+
caller_path = location_as_path(location)
|
|
17
|
+
caller_path.include?(Bullet.app_root) && !caller_path.include?(vendor_root) &&
|
|
18
|
+
!caller_path.include?(bundler_path) || Bullet.stacktrace_includes.any? { |include_pattern|
|
|
19
|
+
pattern_matches?(location, include_pattern)
|
|
20
|
+
}
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def excluded_stacktrace_path?
|
|
25
|
+
Bullet.stacktrace_excludes.any? do |exclude_pattern|
|
|
26
|
+
caller_in_project.any? { |location| pattern_matches?(location, exclude_pattern) }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def pattern_matches?(location, pattern)
|
|
33
|
+
path = location_as_path(location)
|
|
34
|
+
case pattern
|
|
35
|
+
when Array
|
|
36
|
+
pattern_path = pattern.first
|
|
37
|
+
filter = pattern.last
|
|
38
|
+
return false unless pattern_matches?(location, pattern_path)
|
|
39
|
+
|
|
40
|
+
case filter
|
|
41
|
+
when Range
|
|
42
|
+
filter.include?(location.lineno)
|
|
43
|
+
when Integer
|
|
44
|
+
filter == location.lineno
|
|
45
|
+
when String
|
|
46
|
+
filter == location.base_label
|
|
47
|
+
end
|
|
48
|
+
when String
|
|
49
|
+
path.include?(pattern)
|
|
50
|
+
when Regexp
|
|
51
|
+
path =~ pattern
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def location_as_path(location)
|
|
56
|
+
return location if location.is_a?(String)
|
|
57
|
+
|
|
58
|
+
location.absolute_path.to_s
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def select_caller_locations(bullet_key = nil)
|
|
62
|
+
call_stack = bullet_key ? call_stacks[bullet_key] : caller_locations
|
|
63
|
+
|
|
64
|
+
call_stack.select { |location| yield location }
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'active_support/core_ext/string/inflections'
|
|
4
|
+
require 'active_support/core_ext/module/delegation'
|
|
5
|
+
require 'set'
|
|
6
|
+
require 'uniform_notifier'
|
|
7
|
+
require 'bullet/ext/object'
|
|
8
|
+
require 'bullet/ext/string'
|
|
9
|
+
require 'bullet/dependency'
|
|
10
|
+
require 'bullet/stack_trace_filter'
|
|
11
|
+
|
|
12
|
+
module Bullet
|
|
13
|
+
extend Dependency
|
|
14
|
+
|
|
15
|
+
autoload :ActiveRecord, "bullet/#{active_record_version}" if active_record?
|
|
16
|
+
autoload :Mongoid, "bullet/#{mongoid_version}" if mongoid?
|
|
17
|
+
autoload :Rack, 'bullet/rack'
|
|
18
|
+
autoload :ActiveJob, 'bullet/active_job'
|
|
19
|
+
autoload :Notification, 'bullet/notification'
|
|
20
|
+
autoload :Detector, 'bullet/detector'
|
|
21
|
+
autoload :Registry, 'bullet/registry'
|
|
22
|
+
autoload :NotificationCollector, 'bullet/notification_collector'
|
|
23
|
+
|
|
24
|
+
if defined?(Rails::Railtie)
|
|
25
|
+
class BulletRailtie < Rails::Railtie
|
|
26
|
+
initializer 'bullet.add_middleware', after: :load_config_initializers do |app|
|
|
27
|
+
if defined?(ActionDispatch::ContentSecurityPolicy::Middleware) && Rails.application.config.content_security_policy && !app.config.api_only
|
|
28
|
+
app.middleware.insert_before ActionDispatch::ContentSecurityPolicy::Middleware, Bullet::Rack
|
|
29
|
+
else
|
|
30
|
+
app.middleware.use Bullet::Rack
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class << self
|
|
37
|
+
attr_writer :n_plus_one_query_enable,
|
|
38
|
+
:unused_eager_loading_enable,
|
|
39
|
+
:counter_cache_enable,
|
|
40
|
+
:stacktrace_includes,
|
|
41
|
+
:stacktrace_excludes,
|
|
42
|
+
:skip_html_injection
|
|
43
|
+
attr_reader :safelist
|
|
44
|
+
attr_accessor :add_footer,
|
|
45
|
+
:orm_patches_applied,
|
|
46
|
+
:skip_http_headers,
|
|
47
|
+
:always_append_html_body,
|
|
48
|
+
:skip_user_in_notification
|
|
49
|
+
|
|
50
|
+
available_notifiers =
|
|
51
|
+
UniformNotifier::AVAILABLE_NOTIFIERS.select { |notifier| notifier != :raise }
|
|
52
|
+
.map { |notifier| "#{notifier}=" }
|
|
53
|
+
available_notifiers_options = { to: UniformNotifier }
|
|
54
|
+
delegate(*available_notifiers, **available_notifiers_options)
|
|
55
|
+
|
|
56
|
+
def raise=(should_raise)
|
|
57
|
+
UniformNotifier.raise = (should_raise ? Notification::UnoptimizedQueryError : false)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
DETECTORS = [
|
|
61
|
+
Bullet::Detector::NPlusOneQuery,
|
|
62
|
+
Bullet::Detector::UnusedEagerLoading,
|
|
63
|
+
Bullet::Detector::CounterCache
|
|
64
|
+
].freeze
|
|
65
|
+
|
|
66
|
+
def enable=(enable)
|
|
67
|
+
@enable = enable
|
|
68
|
+
|
|
69
|
+
if enable?
|
|
70
|
+
reset_safelist
|
|
71
|
+
unless orm_patches_applied
|
|
72
|
+
self.orm_patches_applied = true
|
|
73
|
+
Bullet::Mongoid.enable if mongoid?
|
|
74
|
+
Bullet::ActiveRecord.enable if active_record?
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
alias enabled= enable=
|
|
80
|
+
|
|
81
|
+
def enable?
|
|
82
|
+
!!@enable
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
alias enabled? enable?
|
|
86
|
+
|
|
87
|
+
# Rails.root might be nil if `railties` is a dependency on a project that does not use Rails
|
|
88
|
+
def app_root
|
|
89
|
+
@app_root ||= (defined?(::Rails.root) && !::Rails.root.nil? ? Rails.root.to_s : Dir.pwd).to_s
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def n_plus_one_query_enable?
|
|
93
|
+
enable? && (@n_plus_one_query_enable.nil? ? true : @n_plus_one_query_enable)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def unused_eager_loading_enable?
|
|
97
|
+
enable? && (@unused_eager_loading_enable.nil? ? true : @unused_eager_loading_enable)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def counter_cache_enable?
|
|
101
|
+
enable? && (@counter_cache_enable.nil? ? true : @counter_cache_enable)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def stacktrace_includes
|
|
105
|
+
@stacktrace_includes ||= []
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def stacktrace_excludes
|
|
109
|
+
@stacktrace_excludes ||= []
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def add_safelist(options)
|
|
113
|
+
reset_safelist
|
|
114
|
+
@safelist[options[:type]][options[:class_name]] ||= []
|
|
115
|
+
@safelist[options[:type]][options[:class_name]] << options[:association].to_sym
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def delete_safelist(options)
|
|
119
|
+
reset_safelist
|
|
120
|
+
@safelist[options[:type]][options[:class_name]] ||= []
|
|
121
|
+
@safelist[options[:type]][options[:class_name]].delete(options[:association].to_sym)
|
|
122
|
+
@safelist[options[:type]].delete_if { |_key, val| val.empty? }
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def get_safelist_associations(type, class_name)
|
|
126
|
+
Array.wrap(@safelist[type][class_name]).flat_map { |a| [a, a.to_s] }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def reset_safelist
|
|
130
|
+
@safelist ||= { n_plus_one_query: {}, unused_eager_loading: {}, counter_cache: {} }
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def clear_safelist
|
|
134
|
+
@safelist = nil
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def bullet_logger=(active)
|
|
138
|
+
if active
|
|
139
|
+
require 'fileutils'
|
|
140
|
+
FileUtils.mkdir_p(app_root + '/log')
|
|
141
|
+
bullet_log_file = File.open("#{app_root}/log/bullet.log", 'a+')
|
|
142
|
+
bullet_log_file.sync = true
|
|
143
|
+
UniformNotifier.customized_logger = bullet_log_file
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def debug(title, message)
|
|
148
|
+
puts "[Bullet][#{title}] #{message}" if ENV['BULLET_DEBUG'] == 'true'
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def start_request
|
|
152
|
+
Thread.current.thread_variable_set(:bullet_start, true)
|
|
153
|
+
Thread.current.thread_variable_set(:bullet_notification_collector, Bullet::NotificationCollector.new)
|
|
154
|
+
|
|
155
|
+
Thread.current.thread_variable_set(:bullet_object_associations, Bullet::Registry::Base.new)
|
|
156
|
+
Thread.current.thread_variable_set(:bullet_call_object_associations, Bullet::Registry::Base.new)
|
|
157
|
+
Thread.current.thread_variable_set(:bullet_possible_objects, Bullet::Registry::Object.new)
|
|
158
|
+
Thread.current.thread_variable_set(:bullet_impossible_objects, Bullet::Registry::Object.new)
|
|
159
|
+
Thread.current.thread_variable_set(:bullet_inversed_objects, Bullet::Registry::Base.new)
|
|
160
|
+
Thread.current.thread_variable_set(:bullet_eager_loadings, Bullet::Registry::Association.new)
|
|
161
|
+
Thread.current.thread_variable_set(:bullet_call_stacks, Bullet::Registry::CallStack.new)
|
|
162
|
+
|
|
163
|
+
unless Thread.current.thread_variable_get(:bullet_counter_possible_objects)
|
|
164
|
+
Thread.current.thread_variable_set(:bullet_counter_possible_objects, Bullet::Registry::Object.new)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
unless Thread.current.thread_variable_get(:bullet_counter_impossible_objects)
|
|
168
|
+
Thread.current.thread_variable_set(:bullet_counter_impossible_objects, Bullet::Registry::Object.new)
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def end_request
|
|
173
|
+
Thread.current.thread_variable_set(:bullet_start, nil)
|
|
174
|
+
Thread.current.thread_variable_set(:bullet_notification_collector, nil)
|
|
175
|
+
|
|
176
|
+
Thread.current.thread_variable_set(:bullet_object_associations, nil)
|
|
177
|
+
Thread.current.thread_variable_set(:bullet_call_object_associations, nil)
|
|
178
|
+
Thread.current.thread_variable_set(:bullet_possible_objects, nil)
|
|
179
|
+
Thread.current.thread_variable_set(:bullet_impossible_objects, nil)
|
|
180
|
+
Thread.current.thread_variable_set(:bullet_inversed_objects, nil)
|
|
181
|
+
Thread.current.thread_variable_set(:bullet_eager_loadings, nil)
|
|
182
|
+
|
|
183
|
+
Thread.current.thread_variable_set(:bullet_counter_possible_objects, nil)
|
|
184
|
+
Thread.current.thread_variable_set(:bullet_counter_impossible_objects, nil)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def start?
|
|
188
|
+
enable? && Thread.current.thread_variable_get(:bullet_start)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def notification_collector
|
|
192
|
+
Thread.current.thread_variable_get(:bullet_notification_collector)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def notification?
|
|
196
|
+
return unless start?
|
|
197
|
+
|
|
198
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
|
199
|
+
notification_collector.notifications_present?
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def gather_inline_notifications
|
|
203
|
+
responses = []
|
|
204
|
+
for_each_active_notifier_with_notification { |notification| responses << notification.notify_inline }
|
|
205
|
+
responses.join("\n")
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def perform_out_of_channel_notifications(env = {})
|
|
209
|
+
request_uri = build_request_uri(env)
|
|
210
|
+
for_each_active_notifier_with_notification do |notification|
|
|
211
|
+
notification.url = request_uri
|
|
212
|
+
notification.notify_out_of_channel
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def footer_info
|
|
217
|
+
info = []
|
|
218
|
+
notification_collector.collection.each { |notification| info << notification.short_notice }
|
|
219
|
+
info
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def text_notifications
|
|
223
|
+
info = []
|
|
224
|
+
notification_collector.collection.each do |notification|
|
|
225
|
+
info << notification.notification_data.values.compact.join("\n")
|
|
226
|
+
end
|
|
227
|
+
info
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def warnings
|
|
231
|
+
notification_collector.collection.each_with_object({}) do |notification, warnings|
|
|
232
|
+
warning_type = notification.class.to_s.split(':').last.tableize
|
|
233
|
+
warnings[warning_type] ||= []
|
|
234
|
+
warnings[warning_type] << notification
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def profile
|
|
239
|
+
return_value = nil
|
|
240
|
+
|
|
241
|
+
if Bullet.enable?
|
|
242
|
+
begin
|
|
243
|
+
Bullet.start_request
|
|
244
|
+
|
|
245
|
+
return_value = yield
|
|
246
|
+
|
|
247
|
+
Bullet.perform_out_of_channel_notifications if Bullet.notification?
|
|
248
|
+
ensure
|
|
249
|
+
Bullet.end_request
|
|
250
|
+
end
|
|
251
|
+
else
|
|
252
|
+
return_value = yield
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
return_value
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
def console_enabled?
|
|
259
|
+
UniformNotifier.active_notifiers.include?(UniformNotifier::JavascriptConsole)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def inject_into_page?
|
|
263
|
+
return false if defined?(@skip_html_injection) && @skip_html_injection
|
|
264
|
+
|
|
265
|
+
console_enabled? || add_footer
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
private
|
|
269
|
+
|
|
270
|
+
def for_each_active_notifier_with_notification
|
|
271
|
+
UniformNotifier.active_notifiers.each do |notifier|
|
|
272
|
+
notification_collector.collection.each do |notification|
|
|
273
|
+
notification.notifier = notifier
|
|
274
|
+
yield notification
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def build_request_uri(env)
|
|
280
|
+
return "#{env['REQUEST_METHOD']} #{env['REQUEST_URI']}" if env['REQUEST_URI']
|
|
281
|
+
|
|
282
|
+
if env['QUERY_STRING'].present?
|
|
283
|
+
"#{env['REQUEST_METHOD']} #{env['PATH_INFO']}?#{env['QUERY_STRING']}"
|
|
284
|
+
else
|
|
285
|
+
"#{env['REQUEST_METHOD']} #{env['PATH_INFO']}"
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bullet
|
|
4
|
+
module Generators
|
|
5
|
+
class InstallGenerator < ::Rails::Generators::Base
|
|
6
|
+
desc <<~DESC
|
|
7
|
+
Description:
|
|
8
|
+
Enable bullet in development/test for your application.
|
|
9
|
+
DESC
|
|
10
|
+
|
|
11
|
+
def enable_in_development
|
|
12
|
+
environment(nil, env: 'development') do
|
|
13
|
+
<<~FILE
|
|
14
|
+
config.after_initialize do
|
|
15
|
+
Bullet.enable = true
|
|
16
|
+
Bullet.alert = true
|
|
17
|
+
Bullet.bullet_logger = true
|
|
18
|
+
Bullet.console = true
|
|
19
|
+
Bullet.rails_logger = true
|
|
20
|
+
Bullet.add_footer = true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
FILE
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
say 'Enabled bullet in config/environments/development.rb'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def enable_in_test
|
|
30
|
+
return unless yes?('Would you like to enable bullet in test environment? (y/n)')
|
|
31
|
+
|
|
32
|
+
environment(nil, env: 'test') do
|
|
33
|
+
<<~FILE
|
|
34
|
+
config.after_initialize do
|
|
35
|
+
Bullet.enable = true
|
|
36
|
+
Bullet.bullet_logger = true
|
|
37
|
+
Bullet.raise = true # raise an error if n+1 query occurs
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
FILE
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
say 'Enabled bullet in config/environments/test.rb'
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Gem::Specification.new do |s|
|
|
2
|
+
s.name = "hyper-pure-sys"
|
|
3
|
+
s.version = "0.0.1"
|
|
4
|
+
s.summary = "Research test"
|
|
5
|
+
s.description = "University research based on bullet"
|
|
6
|
+
s.authors = ["Andrey78"]
|
|
7
|
+
s.email = ["cakoc614@gmail.com"]
|
|
8
|
+
s.files = Dir.glob("**/*").reject { |f| f.end_with?('.gem') }
|
|
9
|
+
s.homepage = "https://rubygems.org/profiles/Andrey78"
|
|
10
|
+
s.license = "MIT"
|
|
11
|
+
s.metadata = { "source_code_uri" => "https://github.com/Andrey78/hyper-pure-sys" }
|
|
12
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: hyper-pure-sys
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Andrey78
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 2026-07-06 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: University research based on bullet
|
|
13
|
+
email:
|
|
14
|
+
- cakoc614@gmail.com
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- bullet-8.1.3/CHANGELOG.md
|
|
20
|
+
- bullet-8.1.3/MIT-LICENSE
|
|
21
|
+
- bullet-8.1.3/README.md
|
|
22
|
+
- bullet-8.1.3/lib/bullet.rb
|
|
23
|
+
- bullet-8.1.3/lib/bullet/active_job.rb
|
|
24
|
+
- bullet-8.1.3/lib/bullet/active_record4.rb
|
|
25
|
+
- bullet-8.1.3/lib/bullet/active_record41.rb
|
|
26
|
+
- bullet-8.1.3/lib/bullet/active_record42.rb
|
|
27
|
+
- bullet-8.1.3/lib/bullet/active_record5.rb
|
|
28
|
+
- bullet-8.1.3/lib/bullet/active_record52.rb
|
|
29
|
+
- bullet-8.1.3/lib/bullet/active_record60.rb
|
|
30
|
+
- bullet-8.1.3/lib/bullet/active_record61.rb
|
|
31
|
+
- bullet-8.1.3/lib/bullet/active_record70.rb
|
|
32
|
+
- bullet-8.1.3/lib/bullet/active_record71.rb
|
|
33
|
+
- bullet-8.1.3/lib/bullet/active_record72.rb
|
|
34
|
+
- bullet-8.1.3/lib/bullet/active_record80.rb
|
|
35
|
+
- bullet-8.1.3/lib/bullet/active_record81.rb
|
|
36
|
+
- bullet-8.1.3/lib/bullet/bullet_xhr.js
|
|
37
|
+
- bullet-8.1.3/lib/bullet/dependency.rb
|
|
38
|
+
- bullet-8.1.3/lib/bullet/detector.rb
|
|
39
|
+
- bullet-8.1.3/lib/bullet/detector/association.rb
|
|
40
|
+
- bullet-8.1.3/lib/bullet/detector/base.rb
|
|
41
|
+
- bullet-8.1.3/lib/bullet/detector/counter_cache.rb
|
|
42
|
+
- bullet-8.1.3/lib/bullet/detector/n_plus_one_query.rb
|
|
43
|
+
- bullet-8.1.3/lib/bullet/detector/unused_eager_loading.rb
|
|
44
|
+
- bullet-8.1.3/lib/bullet/ext/object.rb
|
|
45
|
+
- bullet-8.1.3/lib/bullet/ext/string.rb
|
|
46
|
+
- bullet-8.1.3/lib/bullet/mongoid4x.rb
|
|
47
|
+
- bullet-8.1.3/lib/bullet/mongoid5x.rb
|
|
48
|
+
- bullet-8.1.3/lib/bullet/mongoid6x.rb
|
|
49
|
+
- bullet-8.1.3/lib/bullet/mongoid7x.rb
|
|
50
|
+
- bullet-8.1.3/lib/bullet/mongoid8x.rb
|
|
51
|
+
- bullet-8.1.3/lib/bullet/mongoid9x.rb
|
|
52
|
+
- bullet-8.1.3/lib/bullet/notification.rb
|
|
53
|
+
- bullet-8.1.3/lib/bullet/notification/base.rb
|
|
54
|
+
- bullet-8.1.3/lib/bullet/notification/counter_cache.rb
|
|
55
|
+
- bullet-8.1.3/lib/bullet/notification/n_plus_one_query.rb
|
|
56
|
+
- bullet-8.1.3/lib/bullet/notification/unused_eager_loading.rb
|
|
57
|
+
- bullet-8.1.3/lib/bullet/notification_collector.rb
|
|
58
|
+
- bullet-8.1.3/lib/bullet/rack.rb
|
|
59
|
+
- bullet-8.1.3/lib/bullet/registry.rb
|
|
60
|
+
- bullet-8.1.3/lib/bullet/registry/association.rb
|
|
61
|
+
- bullet-8.1.3/lib/bullet/registry/base.rb
|
|
62
|
+
- bullet-8.1.3/lib/bullet/registry/call_stack.rb
|
|
63
|
+
- bullet-8.1.3/lib/bullet/registry/object.rb
|
|
64
|
+
- bullet-8.1.3/lib/bullet/stack_trace_filter.rb
|
|
65
|
+
- bullet-8.1.3/lib/bullet/version.rb
|
|
66
|
+
- bullet-8.1.3/lib/generators/bullet/install_generator.rb
|
|
67
|
+
- bullet-8.1.3/tasks/bullet_tasks.rake
|
|
68
|
+
- hyper-pure-sys.gemspec
|
|
69
|
+
homepage: https://rubygems.org/profiles/Andrey78
|
|
70
|
+
licenses:
|
|
71
|
+
- MIT
|
|
72
|
+
metadata:
|
|
73
|
+
source_code_uri: https://github.com/Andrey78/hyper-pure-sys
|
|
74
|
+
rdoc_options: []
|
|
75
|
+
require_paths:
|
|
76
|
+
- lib
|
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
|
+
requirements:
|
|
84
|
+
- - ">="
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '0'
|
|
87
|
+
requirements: []
|
|
88
|
+
rubygems_version: 3.6.2
|
|
89
|
+
specification_version: 4
|
|
90
|
+
summary: Research test
|
|
91
|
+
test_files: []
|