julewire-rails_support 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 68f0648998106bae9707f2cfe34910223ae1cf3825656fd9bc49a9ab2f11508e
4
+ data.tar.gz: 84a635009586818dc89491298b30749f8f57832165057839a4308f7ec9d45fe0
5
+ SHA512:
6
+ metadata.gz: 9d2ebd7fbd7e53e4c7e3b69db9fe5968ccf0e49de9e5f3f60f665ccb38e59ef5f3ee856fbb1a5b307d27be2f65b0e2c50a885d893f50d4c7c04bf829512160e5
7
+ data.tar.gz: e814a3dd62213fb1e2097db0301298aed89a8b8b53ae96a713444594e90e4133b4de393b45ec46aa0a0a869a77cb9a5a9b9cd8fffce4f1074b30a1abc49735d9
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ ## Unreleased
2
+
3
+ ## 1.0.0 - 2026-06-21
4
+
5
+ - Initial release: shared Rails-family EventReporter helpers for Rails and
6
+ ActiveJob adapters.
data/LICENSE.txt ADDED
@@ -0,0 +1,3 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Alexander Grebennik
data/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # Julewire Rails Support
2
+
3
+ Shared Rails-family support helpers for Julewire integrations. This gem keeps
4
+ Rails and ActiveSupport constants out of `julewire-core`.
5
+
6
+ It owns the small Rails edge pieces that are useful to more than one adapter:
7
+ EventReporter subscription helpers, log-subscriber silencing, and
8
+ framework-version probes. `julewire-rails` and `julewire-active_job` use it so
9
+ core stays Ruby-only.
10
+
11
+ Applications should not usually depend on this gem directly. Reach for
12
+ `julewire-rails` or `julewire-active_job`; use this only when building another
13
+ Rails-family integration.
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/julewire/rails_support/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "julewire-rails_support"
7
+ spec.version = Julewire::RailsSupport::VERSION
8
+ spec.authors = ["Alexander Grebennik"]
9
+ spec.email = ["slbug@users.noreply.github.com", "sl.bug.sl@gmail.com"]
10
+
11
+ spec.summary = "Shared Rails-family support helpers for Julewire integrations."
12
+ spec.description = "Small Rails and ActiveSupport helper surface used by Julewire Rails-family integrations."
13
+ spec.homepage = "https://github.com/slbug/julewire"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 3.4"
16
+ spec.metadata["homepage_uri"] = spec.homepage
17
+ spec.metadata["source_code_uri"] = "https://github.com/slbug/julewire/tree/main/gems/rails_support"
18
+ spec.metadata["changelog_uri"] = "https://github.com/slbug/julewire/blob/main/gems/rails_support/CHANGELOG.md"
19
+
20
+ spec.metadata["rubygems_mfa_required"] = "true"
21
+
22
+ spec.files = Dir.chdir(__dir__) do
23
+ Dir[
24
+ "CHANGELOG.md",
25
+ "LICENSE.txt",
26
+ "README.md",
27
+ "julewire-rails_support.gemspec",
28
+ "lib/**/*.rb"
29
+ ]
30
+ end
31
+ spec.executables = []
32
+ spec.require_paths = ["lib"]
33
+
34
+ spec.add_dependency "julewire-core", ">= 1.0"
35
+ spec.add_dependency "zeitwerk", ">= 2.8.1"
36
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Julewire
4
+ module RailsSupport
5
+ module EventReporter
6
+ class << self
7
+ def default
8
+ rails = top_level_constant(:Rails)
9
+ return rails.event if rails.respond_to?(:event)
10
+
11
+ active_support = top_level_constant(:ActiveSupport)
12
+ return unless active_support.respond_to?(:event_reporter)
13
+
14
+ active_support.event_reporter
15
+ end
16
+
17
+ def subscribe(reporter, subscriber, &)
18
+ return unless subscribable?(reporter)
19
+
20
+ reporter.subscribe(subscriber, &)
21
+ unsubscriber(reporter, subscriber)
22
+ end
23
+
24
+ def subscribable?(reporter)
25
+ reporter.respond_to?(:subscribe)
26
+ end
27
+
28
+ def unsubscriber(reporter, subscriber)
29
+ -> { reporter.unsubscribe(subscriber) if reporter.respond_to?(:unsubscribe) }
30
+ end
31
+
32
+ def unsubscribe_log_subscriber(subscriber_class, reporter: default)
33
+ return unless reporter.respond_to?(:unsubscribe)
34
+ return unless log_subscriber?(subscriber_class)
35
+
36
+ reporter.unsubscribe(subscriber_class)
37
+ end
38
+
39
+ private
40
+
41
+ def log_subscriber?(subscriber_class)
42
+ active_support = top_level_constant(:ActiveSupport)
43
+ event_reporter = active_support.const_get(:EventReporter, false)
44
+ subscriber_class < event_reporter.const_get(:LogSubscriber, false)
45
+ rescue StandardError
46
+ false
47
+ end
48
+
49
+ def top_level_constant(name)
50
+ Object.const_get(name, false)
51
+ rescue NameError
52
+ nil
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Julewire
4
+ module RailsSupport
5
+ VERSION = "1.0.0"
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "zeitwerk"
4
+ require "julewire/core"
5
+
6
+ module Julewire
7
+ module RailsSupport
8
+ class Error < Julewire::Error; end
9
+ end
10
+
11
+ loader = Zeitwerk::Loader.for_gem_extension(self)
12
+ loader.setup
13
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "julewire/rails_support"
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: julewire-rails_support
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Grebennik
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: julewire-core
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '1.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '1.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: zeitwerk
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.8.1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 2.8.1
40
+ description: Small Rails and ActiveSupport helper surface used by Julewire Rails-family
41
+ integrations.
42
+ email:
43
+ - slbug@users.noreply.github.com
44
+ - sl.bug.sl@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - CHANGELOG.md
50
+ - LICENSE.txt
51
+ - README.md
52
+ - julewire-rails_support.gemspec
53
+ - lib/julewire-rails_support.rb
54
+ - lib/julewire/rails_support.rb
55
+ - lib/julewire/rails_support/event_reporter.rb
56
+ - lib/julewire/rails_support/version.rb
57
+ homepage: https://github.com/slbug/julewire
58
+ licenses:
59
+ - MIT
60
+ metadata:
61
+ homepage_uri: https://github.com/slbug/julewire
62
+ source_code_uri: https://github.com/slbug/julewire/tree/main/gems/rails_support
63
+ changelog_uri: https://github.com/slbug/julewire/blob/main/gems/rails_support/CHANGELOG.md
64
+ rubygems_mfa_required: 'true'
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '3.4'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubygems_version: 4.0.14
80
+ specification_version: 4
81
+ summary: Shared Rails-family support helpers for Julewire integrations.
82
+ test_files: []