any_logger 0.2.3 → 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: f98001845d3d41ecb5621293b778be949d6fbb03d0d9090c6b291eb84d298f12
4
- data.tar.gz: 81e273e472c2763fc4083f3837f513e6ad5b50e081580855ffd56383c4bf1c7b
3
+ metadata.gz: 1a99074a727083b5bbaf65e63903454243f220b97a634726f70960404ff8ed56
4
+ data.tar.gz: 311c175cfb8de2ae27c60517e90de0c35b497c8570da169d2664d27a4528f5b5
5
5
  SHA512:
6
- metadata.gz: 9aa44a18d030c2e74fd7cfe5aa93118de5b35154e63a072f27e416f0601033fe39fd2fe84d3e7232656470ac01f1377274f5a3dcc3c9e223cafbc78b953eed77
7
- data.tar.gz: f61783dfdda725502559d93cdedd9b222d2b084ddf9ee3eede64fe5e0e609896269a63491232bc0c5f38b8fd1b4c7ab8840f0919bd78d124f19362ea501ee8e8
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
@@ -36,4 +36,14 @@
36
36
 
37
37
  ## [0.2.3] - 2025-03-31
38
38
 
39
- - ライブラリを更新
39
+ - ライブラリを更新
40
+
41
+ ## [0.2.4] - 2025-11-10
42
+
43
+ - gem更新
44
+
45
+ ## [1.0.0] - 2026-03-26
46
+
47
+ - テストを追加
48
+ - モジュール構成の見直し
49
+ - subscriptionsはconfigからアクセスできるので削除
data/Rakefile CHANGED
@@ -1,12 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- require "rubocop/rake_task"
9
-
10
- RuboCop::RakeTask.new
11
-
12
- task default: %i[spec rubocop]
3
+ require "push_gem"
@@ -0,0 +1,10 @@
1
+ some code change
2
+ version.rb change
3
+ changelog.md change
4
+
5
+ $rake gem:check
6
+
7
+ $git commit
8
+ $git push
9
+
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.3"
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.3
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-03-30 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
@@ -108,10 +108,16 @@ files:
108
108
  - LICENSE.txt
109
109
  - README.md
110
110
  - Rakefile
111
+ - how_to_publish.txt
111
112
  - lib/any_logger.rb
112
113
  - lib/any_logger/configuration.rb
113
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
114
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
115
121
  - lib/any_logger/example/controller_subscriber.rb
116
122
  - lib/any_logger/example/rack_logger.rb
117
123
  - lib/any_logger/version.rb
@@ -135,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
141
  - !ruby/object:Gem::Version
136
142
  version: '0'
137
143
  requirements: []
138
- rubygems_version: 3.6.2
144
+ rubygems_version: 4.0.1
139
145
  specification_version: 4
140
146
  summary: A DSL for simplifying modification of Rails ActiveSupport Instrumentation
141
147
  API