any_logger 0.2.4 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0399ff6dc71a7b679a0f1140f4fdb46a2bae12d88847af84b78b8ea8e17d313
4
- data.tar.gz: ae9fc2060985c0c139369e91d851564467bd24a9912799d36d24082f509f522d
3
+ metadata.gz: 1a99074a727083b5bbaf65e63903454243f220b97a634726f70960404ff8ed56
4
+ data.tar.gz: 311c175cfb8de2ae27c60517e90de0c35b497c8570da169d2664d27a4528f5b5
5
5
  SHA512:
6
- metadata.gz: 7c620494714f0396e590715dd7753fe94a659e46abfea29843167323f9aff7441e46922d4159ae53ee0aeb591d8f49cc3864f2c5ef6aecf61bb7317920a75e85
7
- data.tar.gz: 53e58de1b5292d89e49ff17e8b5a39981f3e55bb5e781692214365c0a874a8422e46e627bcaded5ea6285bcef427de249261871dea1e226895f3aa232c6ee6a5
6
+ metadata.gz: 390870f07c77cc56c650db7a37547bcaa204a8afac6f16b0e02da8761e4daa08f38d16c6edf9ee1772cebd7c13eade85737d7f99bf5ff3dd780b83175a9544e7
7
+ data.tar.gz: 43be01cce2527595217ec2c0bb766f844b3fc4cc37201c9ce5e42cbfdf4621d81de7bbc02e7cde39c5b084c00e59d072264d77c78340613f6b31d0ed421de243
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 3.4.0
2
+ TargetRubyVersion: 3.4
3
3
 
4
4
  Style/StringLiterals:
5
5
  EnforcedStyle: double_quotes
@@ -33,3 +33,6 @@ Metrics/AbcSize:
33
33
 
34
34
  Metrics/MethodLength:
35
35
  Enabled: false
36
+
37
+ Metrics/BlockLength:
38
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -41,3 +41,9 @@
41
41
  ## [0.2.4] - 2025-11-10
42
42
 
43
43
  - gem更新
44
+
45
+ ## [1.0.0] - 2026-03-26
46
+
47
+ - テストを追加
48
+ - モジュール構成の見直し
49
+ - subscriptionsはconfigからアクセスできるので削除
data/Rakefile CHANGED
@@ -1,35 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
- require "rubocop/rake_task"
6
- require_relative "rake_helper"
7
-
8
- desc "analysis"
9
- task :analysis do
10
- sh "bundle install"
11
-
12
- RakeHelper.init_rake_tasks
13
-
14
- puts "--- rspec ---"
15
- Rake::Task[:spec].invoke
16
-
17
- puts "--- rubocop ---"
18
- Rake::Task[:rubocop].invoke
19
- end
20
-
21
- desc "push to github packages and rubygems"
22
- task :push do
23
- sh "bundle install"
24
-
25
- puts "--- build ---"
26
- RakeHelper.build_gem
27
-
28
- puts "--- push to github packages ---"
29
- RakeHelper.push_to_github_packages
30
-
31
- puts "--- push to rubygems ---"
32
- RakeHelper.push_to_rubygems
33
- end
34
-
35
- task default: :analysis
3
+ require "push_gem"
data/how_to_publish.txt CHANGED
@@ -2,9 +2,9 @@ some code change
2
2
  version.rb change
3
3
  changelog.md change
4
4
 
5
- $rake analysis
5
+ $rake gem:check
6
6
 
7
7
  $git commit
8
8
  $git push
9
9
 
10
- $rake push
10
+ $rake gem:push
@@ -0,0 +1,57 @@
1
+ module AnyLogger
2
+ class Configuration
3
+ class Event
4
+ class Attaching
5
+ Attach = Data.define(:organizer, :event, :subscriber)
6
+
7
+ def initialize(organizer, event, subscriber = nil, &block)
8
+ @organizer = organizer
9
+ @event = event
10
+ @subscriber = subscriber
11
+ @block = block
12
+ @event_name = "#{@event}.#{@organizer}"
13
+ end
14
+
15
+ def execute
16
+ validate_provided_block_or_subscriber
17
+ validate_unless_provided_block_and_subscriber
18
+ validate_subscriber_is_callable
19
+
20
+ push_to_subscriptions
21
+ subscribe
22
+ end
23
+
24
+ private def push_to_subscriptions
25
+ AnyLogger.config.subscriptions << Attach.new(@organizer, @event, @subscriber || @block)
26
+ end
27
+
28
+ private def subscribe
29
+ # LogSubscriber#attach_toはmonotonic_subscribeなので、それに合わせる
30
+ if @subscriber
31
+ ActiveSupport::Notifications.monotonic_subscribe(@event_name, @subscriber.new)
32
+ else
33
+ ActiveSupport::Notifications.monotonic_subscribe(@event_name, &@block)
34
+ end
35
+ end
36
+
37
+ private def validate_provided_block_or_subscriber
38
+ return if @block || @subscriber
39
+
40
+ raise ArgumentError, "Block or subscriber must be provided"
41
+ end
42
+
43
+ private def validate_unless_provided_block_and_subscriber
44
+ return unless @block && @subscriber
45
+
46
+ raise ArgumentError, "Block and subscriber cannot be provided simultaneously"
47
+ end
48
+
49
+ private def validate_subscriber_is_callable
50
+ return unless @subscriber && !@subscriber.public_method_defined?(:call)
51
+
52
+ raise NoMethodError, "Subscriber must respond to #call"
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,23 @@
1
+ module AnyLogger
2
+ class Configuration
3
+ class Event
4
+ class Default
5
+ DEFAULT_ATTACHED_EVENTS = {
6
+ action_view: [:render_template, :render_layout]
7
+ }
8
+
9
+ def initialize(organizer)
10
+ @organizer = organizer
11
+ end
12
+
13
+ def detach_all
14
+ return unless DEFAULT_ATTACHED_EVENTS[@organizer]
15
+
16
+ DEFAULT_ATTACHED_EVENTS[@organizer].each do |event|
17
+ Detaching.new(@organizer, event).execute
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ module AnyLogger
2
+ class Configuration
3
+ class Event
4
+ class Detaching
5
+ Detach = Data.define(:organizer, :event)
6
+
7
+ def initialize(organizer, event)
8
+ @organizer = organizer
9
+ @event = event
10
+ @event_name = "#{@event}.#{@organizer}"
11
+ end
12
+
13
+ def execute
14
+ push_to_subscriptions
15
+ cancel_subscription
16
+ end
17
+
18
+ private def push_to_subscriptions
19
+ AnyLogger.config.subscriptions << Detach.new(@organizer, @event)
20
+ end
21
+
22
+ private def cancel_subscription
23
+ ActiveSupport::Notifications.unsubscribe(@event_name)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,99 +1,21 @@
1
- require "active_support/notifications"
1
+ require_relative "event/attaching"
2
+ require_relative "event/default"
3
+ require_relative "event/detaching"
2
4
 
3
5
  module AnyLogger
4
6
  class Configuration
5
7
  class Event
6
- Detach = Struct.new(:organizer, :event)
7
- Attach = Struct.new(:organizer, :event, :subscriber)
8
-
9
- DEFAULT_ATTACHED_EVENTS = {
10
- action_view: [:render_template, :render_layout]
11
- }
12
-
13
- private_constant :DEFAULT_ATTACHED_EVENTS
14
-
15
8
  def swap(organizer, event, subscriber = nil, &block)
16
- @organizer = organizer
17
- @event = event
18
- @subscriber = subscriber
19
- @block = block
20
-
21
9
  detach(organizer, event)
22
10
  attach(organizer, event, subscriber, &block)
23
11
  end
24
12
 
25
13
  def detach(organizer, event)
26
- @organizer ||= organizer
27
- @event ||= event
28
-
29
- push_detach_to_subscriptions
30
- detach_from_event
31
- end
32
-
33
- def detaches_default_attached_for(organizer)
34
- return unless DEFAULT_ATTACHED_EVENTS[organizer]
35
-
36
- DEFAULT_ATTACHED_EVENTS[organizer].each do |event|
37
- @event = event # detachではメモ化されている@eventを使うので、ここで更新しておく
38
- detach(organizer, event)
39
- end
14
+ Detaching.new(organizer, event).execute
40
15
  end
41
16
 
42
17
  def attach(organizer, event, subscriber = nil, &block)
43
- @organizer ||= organizer
44
- @event ||= event
45
- @subscriber ||= subscriber
46
- @block ||= block
47
-
48
- validate_provided_block_or_subscriber
49
- validate_unless_provided_block_and_subscriber
50
- validate_subscriber_is_callable
51
-
52
- push_attach_to_subscriptions
53
- attach_to_event
54
- end
55
-
56
- private def event_name
57
- "#{@event}.#{@organizer}"
58
- end
59
-
60
- private def push_detach_to_subscriptions
61
- AnyLogger.config.subscriptions << Detach.new(@organizer, @event)
62
- end
63
-
64
- private def push_attach_to_subscriptions
65
- AnyLogger.config.subscriptions << Attach.new(@organizer, @event, @subscriber || @block)
66
- end
67
-
68
- private def detach_from_event
69
- ActiveSupport::Notifications.unsubscribe(event_name)
70
- end
71
-
72
- private def attach_to_event
73
- # LogSubscriber#attach_toはmonotonic_subscribeなので、それに合わせる
74
- if @subscriber
75
- ActiveSupport::Notifications.monotonic_subscribe(event_name, @subscriber.new)
76
- else
77
- ActiveSupport::Notifications.monotonic_subscribe(event_name, &@block)
78
- end
79
- end
80
-
81
- private def validate_provided_block_or_subscriber
82
- return if @block || @subscriber
83
-
84
- raise ArgumentError, "Block or subscriber must be provided"
85
- end
86
-
87
- private def validate_unless_provided_block_and_subscriber
88
- return unless @block && @subscriber
89
-
90
- raise ArgumentError, "Block and subscriber cannot be provided simultaneously"
91
- end
92
-
93
- private def validate_subscriber_is_callable
94
- return unless @subscriber && !@subscriber.public_method_defined?(:call)
95
-
96
- raise NoMethodError, "Subscriber must respond to #call"
18
+ Attaching.new(organizer, event, subscriber, &block).execute
97
19
  end
98
20
  end
99
21
  end
@@ -0,0 +1,23 @@
1
+ module AnyLogger
2
+ class Configuration
3
+ class LogSubscriber
4
+ class Attaching
5
+ Attach = Data.define(:organizer, :subscriber)
6
+
7
+ def initialize(organizer, subscriber)
8
+ @organizer = organizer
9
+ @subscriber = subscriber
10
+ end
11
+
12
+ def execute
13
+ push_to_subscriptions
14
+ @subscriber.attach_to(@organizer)
15
+ end
16
+
17
+ private def push_to_subscriptions
18
+ AnyLogger.config.subscriptions << Attach.new(@organizer, @subscriber)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ module AnyLogger
2
+ class Configuration
3
+ class LogSubscriber
4
+ class Detaching
5
+ Detach = Data.define(:organizer, :subscriber)
6
+
7
+ DEFAULT_SUBSCRIBERS = {
8
+ action_controller: ActionController::LogSubscriber,
9
+ active_record: ActiveRecord::LogSubscriber,
10
+ action_view: ActionView::LogSubscriber,
11
+ action_mailer: ActionMailer::LogSubscriber,
12
+ action_dispatch: ActionDispatch::LogSubscriber,
13
+ active_job: ActiveJob::LogSubscriber,
14
+ active_storage: ActiveStorage::LogSubscriber
15
+ }
16
+
17
+ def initialize(organizer, detach_target = nil)
18
+ @organizer = organizer
19
+ @detach_target = detach_target || DEFAULT_SUBSCRIBERS[@organizer]
20
+ end
21
+
22
+ def execute
23
+ validate_detach_target_is_set
24
+
25
+ push_to_subscriptions
26
+ @detach_target.detach_from(@organizer)
27
+ Event::Default.new(@organizer).detach_all
28
+ end
29
+
30
+ private def push_to_subscriptions
31
+ AnyLogger.config.subscriptions << Detach.new(@organizer, @detach_target)
32
+ end
33
+
34
+ private def validate_detach_target_is_set
35
+ raise KeyError, "#{@organizer}'s default subscriber not found" unless @detach_target
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,73 +1,20 @@
1
- require "active_support"
2
- require "active_support/core_ext/string/inflections"
3
- require "action_controller/log_subscriber"
4
- require "active_record/log_subscriber"
5
- require "action_view/log_subscriber"
6
- require "action_mailer/log_subscriber"
7
- require "action_dispatch/log_subscriber"
8
- require "active_job/log_subscriber"
9
- require "active_storage/log_subscriber"
1
+ require_relative "log_subscriber/attaching"
2
+ require_relative "log_subscriber/detaching"
10
3
 
11
4
  module AnyLogger
12
5
  class Configuration
13
6
  class LogSubscriber
14
- Detach = Struct.new(:organizer, :subscriber)
15
- Attach = Struct.new(:organizer, :subscriber)
16
-
17
- DEFAULT_SUBSCRIBERS = {
18
- action_controller: ActionController::LogSubscriber,
19
- active_record: ActiveRecord::LogSubscriber,
20
- action_view: ActionView::LogSubscriber,
21
- action_mailer: ActionMailer::LogSubscriber,
22
- action_dispatch: ActionDispatch::LogSubscriber,
23
- active_job: ActiveJob::LogSubscriber,
24
- active_storage: ActiveStorage::LogSubscriber
25
- }
26
-
27
- private_constant :DEFAULT_SUBSCRIBERS
28
-
29
7
  def swap(organizer, subscriber, detach_target = nil)
30
- @organizer = organizer
31
- @subscriber = subscriber
32
- @detach_target = detach_target || DEFAULT_SUBSCRIBERS[organizer]
33
-
34
8
  detach(organizer, detach_target)
35
9
  attach(organizer, subscriber)
36
10
  end
37
11
 
38
12
  def detach(organizer, detach_target = nil)
39
- @organizer ||= organizer
40
- @detach_target ||= detach_target || DEFAULT_SUBSCRIBERS[organizer]
41
-
42
- validate_detach_target_is_set
43
-
44
- push_detach_to_subscriptions
45
- @detach_target.detach_from(@organizer)
46
- event.detaches_default_attached_for(@organizer)
13
+ Detaching.new(organizer, detach_target).execute
47
14
  end
48
15
 
49
16
  def attach(organizer, subscriber)
50
- @organizer ||= organizer
51
- @subscriber ||= subscriber
52
-
53
- push_attach_to_subscriptions
54
- @subscriber.attach_to(@organizer)
55
- end
56
-
57
- private def push_detach_to_subscriptions
58
- AnyLogger.config.subscriptions << Detach.new(@organizer, @detach_target)
59
- end
60
-
61
- private def push_attach_to_subscriptions
62
- AnyLogger.config.subscriptions << Attach.new(@organizer, @subscriber)
63
- end
64
-
65
- private def validate_detach_target_is_set
66
- raise KeyError, "#{@organizer}'s default subscriber not found" unless @detach_target
67
- end
68
-
69
- private def event
70
- AnyLogger.config.event
17
+ Attaching.new(organizer, subscriber).execute
71
18
  end
72
19
  end
73
20
  end
@@ -1,7 +1,7 @@
1
1
  require "singleton"
2
2
  require_relative "example/rack_logger"
3
- require_relative "configuration/log_subscriber"
4
3
  require_relative "configuration/event"
4
+ require_relative "configuration/log_subscriber"
5
5
 
6
6
  module AnyLogger
7
7
  class Configuration
@@ -16,10 +16,6 @@ module AnyLogger
16
16
  }
17
17
  end
18
18
 
19
- def logger
20
- @config[:logger]
21
- end
22
-
23
19
  def logger=(klass)
24
20
  Rails.application.config.middleware.swap(logger, klass)
25
21
  @config[:logger] = klass
@@ -29,28 +25,14 @@ module AnyLogger
29
25
  Rails.application.config.middleware.swap(Rails::Rack::Logger, logger)
30
26
  end
31
27
 
32
- def subscriptions
33
- @config[:subscriptions]
34
- end
28
+ def logger = @config[:logger]
29
+ def subscriptions = @config[:subscriptions]
35
30
 
36
- def subscriber
37
- LogSubscriber.new
38
- end
31
+ def subscriber = LogSubscriber.new
32
+ def event = Event.new
39
33
 
40
- def event
41
- Event.new
42
- end
43
-
44
- def swap(...)
45
- subscriber.swap(...)
46
- end
47
-
48
- def detach(...)
49
- subscriber.detach(...)
50
- end
51
-
52
- def attach(...)
53
- subscriber.attach(...)
54
- end
34
+ def swap(...) = subscriber.swap(...)
35
+ def detach(...) = subscriber.detach(...)
36
+ def attach(...) = subscriber.attach(...)
55
37
  end
56
38
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AnyLogger
4
- VERSION = "0.2.4"
4
+ VERSION = "1.0.0"
5
5
  end
data/lib/any_logger.rb CHANGED
@@ -1,3 +1,13 @@
1
+ require "active_support"
2
+ require "active_support/notifications"
3
+ require "active_support/core_ext/string/inflections"
4
+ require "action_controller/log_subscriber"
5
+ require "active_record/log_subscriber"
6
+ require "action_view/log_subscriber"
7
+ require "action_mailer/log_subscriber"
8
+ require "action_dispatch/log_subscriber"
9
+ require "active_job/log_subscriber"
10
+ require "active_storage/log_subscriber"
1
11
  require_relative "any_logger/version"
2
12
  require_relative "any_logger/configuration"
3
13
 
@@ -10,8 +20,4 @@ module AnyLogger
10
20
  def self.config
11
21
  Configuration.instance
12
22
  end
13
-
14
- def self.subscriptions
15
- config.subscriptions
16
- end
17
23
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: any_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - milkeclair
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-11-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: actionmailer
@@ -112,11 +112,15 @@ files:
112
112
  - lib/any_logger.rb
113
113
  - lib/any_logger/configuration.rb
114
114
  - lib/any_logger/configuration/event.rb
115
+ - lib/any_logger/configuration/event/attaching.rb
116
+ - lib/any_logger/configuration/event/default.rb
117
+ - lib/any_logger/configuration/event/detaching.rb
115
118
  - lib/any_logger/configuration/log_subscriber.rb
119
+ - lib/any_logger/configuration/log_subscriber/attaching.rb
120
+ - lib/any_logger/configuration/log_subscriber/detaching.rb
116
121
  - lib/any_logger/example/controller_subscriber.rb
117
122
  - lib/any_logger/example/rack_logger.rb
118
123
  - lib/any_logger/version.rb
119
- - rake_helper.rb
120
124
  - sig/any_logger.rbs
121
125
  homepage: https://github.com/milkeclair/any_logger
122
126
  licenses:
@@ -137,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
141
  - !ruby/object:Gem::Version
138
142
  version: '0'
139
143
  requirements: []
140
- rubygems_version: 3.6.2
144
+ rubygems_version: 4.0.1
141
145
  specification_version: 4
142
146
  summary: A DSL for simplifying modification of Rails ActiveSupport Instrumentation
143
147
  API
data/rake_helper.rb DELETED
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class RakeHelper
4
- GITHUB_PACKAGES_PUSH_COMMAND =
5
- "gem push --key github --host https://rubygems.pkg.github.com/milkeclair " \
6
- "pkg/any_logger-#{AnyLogger::VERSION}.gem".freeze
7
-
8
- RUBYGEMS_PUSH_COMMAND =
9
- "gem push --host https://rubygems.org " \
10
- "pkg/any_logger-#{AnyLogger::VERSION}.gem".freeze
11
- def self.init_rake_tasks
12
- RSpec::Core::RakeTask.new(:spec) { |task| task.verbose = false }
13
- RuboCop::RakeTask.new
14
- end
15
-
16
- def self.build_gem
17
- abort("gemのビルドに失敗しました") unless system("rake build")
18
- end
19
-
20
- def self.push_to_github_packages
21
- abort("githubへのgemのpushに失敗しました") unless system(GITHUB_PACKAGES_PUSH_COMMAND)
22
- end
23
-
24
- def self.push_to_rubygems
25
- abort("rubygemsへのgemのpushに失敗しました") unless system(RUBYGEMS_PUSH_COMMAND)
26
- end
27
- end