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.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/bullet-8.1.3/CHANGELOG.md +374 -0
  3. data/bullet-8.1.3/MIT-LICENSE +20 -0
  4. data/bullet-8.1.3/README.md +525 -0
  5. data/bullet-8.1.3/lib/bullet/active_job.rb +13 -0
  6. data/bullet-8.1.3/lib/bullet/active_record4.rb +197 -0
  7. data/bullet-8.1.3/lib/bullet/active_record41.rb +191 -0
  8. data/bullet-8.1.3/lib/bullet/active_record42.rb +262 -0
  9. data/bullet-8.1.3/lib/bullet/active_record5.rb +294 -0
  10. data/bullet-8.1.3/lib/bullet/active_record52.rb +278 -0
  11. data/bullet-8.1.3/lib/bullet/active_record60.rb +310 -0
  12. data/bullet-8.1.3/lib/bullet/active_record61.rb +310 -0
  13. data/bullet-8.1.3/lib/bullet/active_record70.rb +319 -0
  14. data/bullet-8.1.3/lib/bullet/active_record71.rb +319 -0
  15. data/bullet-8.1.3/lib/bullet/active_record72.rb +319 -0
  16. data/bullet-8.1.3/lib/bullet/active_record80.rb +319 -0
  17. data/bullet-8.1.3/lib/bullet/active_record81.rb +321 -0
  18. data/bullet-8.1.3/lib/bullet/bullet_xhr.js +64 -0
  19. data/bullet-8.1.3/lib/bullet/dependency.rb +165 -0
  20. data/bullet-8.1.3/lib/bullet/detector/association.rb +92 -0
  21. data/bullet-8.1.3/lib/bullet/detector/base.rb +8 -0
  22. data/bullet-8.1.3/lib/bullet/detector/counter_cache.rb +69 -0
  23. data/bullet-8.1.3/lib/bullet/detector/n_plus_one_query.rb +148 -0
  24. data/bullet-8.1.3/lib/bullet/detector/unused_eager_loading.rb +100 -0
  25. data/bullet-8.1.3/lib/bullet/detector.rb +11 -0
  26. data/bullet-8.1.3/lib/bullet/ext/object.rb +37 -0
  27. data/bullet-8.1.3/lib/bullet/ext/string.rb +14 -0
  28. data/bullet-8.1.3/lib/bullet/mongoid4x.rb +59 -0
  29. data/bullet-8.1.3/lib/bullet/mongoid5x.rb +59 -0
  30. data/bullet-8.1.3/lib/bullet/mongoid6x.rb +59 -0
  31. data/bullet-8.1.3/lib/bullet/mongoid7x.rb +74 -0
  32. data/bullet-8.1.3/lib/bullet/mongoid8x.rb +61 -0
  33. data/bullet-8.1.3/lib/bullet/mongoid9x.rb +74 -0
  34. data/bullet-8.1.3/lib/bullet/notification/base.rb +92 -0
  35. data/bullet-8.1.3/lib/bullet/notification/counter_cache.rb +15 -0
  36. data/bullet-8.1.3/lib/bullet/notification/n_plus_one_query.rb +31 -0
  37. data/bullet-8.1.3/lib/bullet/notification/unused_eager_loading.rb +31 -0
  38. data/bullet-8.1.3/lib/bullet/notification.rb +13 -0
  39. data/bullet-8.1.3/lib/bullet/notification_collector.rb +25 -0
  40. data/bullet-8.1.3/lib/bullet/rack.rb +186 -0
  41. data/bullet-8.1.3/lib/bullet/registry/association.rb +16 -0
  42. data/bullet-8.1.3/lib/bullet/registry/base.rb +46 -0
  43. data/bullet-8.1.3/lib/bullet/registry/call_stack.rb +17 -0
  44. data/bullet-8.1.3/lib/bullet/registry/object.rb +18 -0
  45. data/bullet-8.1.3/lib/bullet/registry.rb +10 -0
  46. data/bullet-8.1.3/lib/bullet/stack_trace_filter.rb +67 -0
  47. data/bullet-8.1.3/lib/bullet/version.rb +5 -0
  48. data/bullet-8.1.3/lib/bullet.rb +289 -0
  49. data/bullet-8.1.3/lib/generators/bullet/install_generator.rb +47 -0
  50. data/bullet-8.1.3/tasks/bullet_tasks.rake +11 -0
  51. data/hyper-pure-sys.gemspec +12 -0
  52. 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,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bullet
4
+ VERSION = '8.1.3'
5
+ 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,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :bullet do
4
+ namespace :log do
5
+ desc 'Truncates the bullet log file to zero bytes'
6
+ task :clear do
7
+ f = File.open('log/bullet.log', 'w')
8
+ f.close
9
+ end
10
+ end
11
+ 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: []