esse-hooks 0.0.1 → 0.0.2

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: d17c36e6f5299e422b6b65e84204deea95ab23f89f0f1c5a39aa46ed0c246cfc
4
- data.tar.gz: 243c154fdd148e9c590d2abfcf3eceb9e9e43b6f2bce7ef233690f40a1bfe09c
3
+ metadata.gz: 0a624309b6a101c9851b395b04d27dd3a473798daf816e32d9f62e818903de20
4
+ data.tar.gz: d240584283579d9368fede1891c6185d07da9c67fd58abcf414125ef27b81ee4
5
5
  SHA512:
6
- metadata.gz: 44aac481d768876024d98ab30f6f0b52c07c958213786366d4291aeea369dd118c497cf5128c1357359d260e0585f269797567e488a88b1f691940e624abca44
7
- data.tar.gz: 3fe30da0ea11194ad756d91ada37efa6f7ac272b7aa7e9d9a559e9e1c829ed3042be1540180295332ada0df3ebdbc71a3a4819dab68aba0d5ee83f55fe5a8c9b
6
+ metadata.gz: f75b1bf6b5ab19272f7e01ffbd71363f7ff80c48a7ca9f481837dc3b8645f9f3203cbbb7fd0527ded597cb69bae32d079b69461b91b0976fbd57020873988af7
7
+ data.tar.gz: 01ab42d51c7e6a31862295acccfba1555c90e9113f45f5177457eba6bb864b2b32d6847abecf833cde154ff9ab36b4ecddc871451269f4febd8c83e9a57a221c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- esse-hooks (0.0.1)
4
+ esse-hooks (0.0.2)
5
5
  esse (>= 0.3.0)
6
6
 
7
7
  GEM
@@ -36,7 +36,7 @@ class Esse::Hooks::Mixin < Module
36
36
  # @return [void]
37
37
  def enable!(*repos)
38
38
  filter_repositories(*repos).each do |repo|
39
- state[:repos][repo] = true
39
+ state[:repos][repo_state_key(repo)] = true
40
40
  end
41
41
  end
42
42
 
@@ -45,7 +45,7 @@ class Esse::Hooks::Mixin < Module
45
45
  # @return [void]
46
46
  def disable!(*repos)
47
47
  filter_repositories(*repos).each do |repo|
48
- state[:repos][repo] = false
48
+ state[:repos][repo_state_key(repo)] = false
49
49
  end
50
50
  end
51
51
 
@@ -54,7 +54,7 @@ class Esse::Hooks::Mixin < Module
54
54
  # @param repos [Array<String, Esse::Index, Esse::Repo>]
55
55
  # @return [Boolean]
56
56
  def disabled?(*repos)
57
- filter_repositories(*repos).all? { |repo| !state[:repos][repo] }
57
+ filter_repositories(*repos).all? { |repo| !state[:repos][repo_state_key(repo)] }
58
58
  end
59
59
 
60
60
  # Check if the given repository is enabled for indexing. If no repository is specified, all repositories will be checked.
@@ -62,7 +62,7 @@ class Esse::Hooks::Mixin < Module
62
62
  # @param repos [Array<String, Esse::Index, Esse::Repo>]
63
63
  # @return [Boolean]
64
64
  def enabled?(*repos)
65
- filter_repositories(*repos).all? { |repo| state[:repos][repo] }
65
+ filter_repositories(*repos).all? { |repo| state[:repos][repo_state_key(repo)] }
66
66
  end
67
67
 
68
68
  # Enable model indexing callbacks for the given model. If no repository is specified, all repositories will be enabled.
@@ -74,7 +74,7 @@ class Esse::Hooks::Mixin < Module
74
74
  def enable_model!(model_class, *repos)
75
75
  ensure_registered_model_class!(model_class)
76
76
  filter_model_repositories(model_class, *repos).each do |repo|
77
- state[:models][model_class][repo] = true
77
+ state[:models][model_class][repo_state_key(repo)] = true
78
78
  end
79
79
  end
80
80
 
@@ -87,7 +87,7 @@ class Esse::Hooks::Mixin < Module
87
87
  def disable_model!(model_class, *repos)
88
88
  ensure_registered_model_class!(model_class)
89
89
  filter_model_repositories(model_class, *repos).each do |repo|
90
- state[:models][model_class][repo] = false
90
+ state[:models][model_class][repo_state_key(repo)] = false
91
91
  end
92
92
  end
93
93
 
@@ -106,7 +106,7 @@ class Esse::Hooks::Mixin < Module
106
106
  return false unless registered_model_class?(model_class)
107
107
 
108
108
  filter_model_repositories(model_class, *repos).all? do |repo|
109
- state.dig(:models, model_class, repo) != false
109
+ state.dig(:models, model_class, repo_state_key(repo)) != false
110
110
  end
111
111
  end
112
112
 
@@ -169,11 +169,11 @@ class Esse::Hooks::Mixin < Module
169
169
  end
170
170
 
171
171
  def resolve_index_repository(name)
172
- index_name, repo_name = Esse::Hooks::Primitives::String.new(name).underscore.split("::").join("/").split(":", 2)
172
+ index_name, repo_name = Esse::Hooks::Primitive::String.new(name).underscore.split("::").join("/").split(":", 2)
173
173
  if index_name !~ /(I|_i)ndex$/ && index_name !~ /_index\/([\w_]+)$/
174
174
  index_name = format("%<index_name>s_index", index_name: index_name)
175
175
  end
176
- klass = Esse::Hooks::Primitives::String.new(index_name).classify.constantize
176
+ klass = Esse::Hooks::Primitive::String.new(index_name).classify.constantize
177
177
  return klass if klass <= Esse::Repository
178
178
 
179
179
  repo_name ? klass.repo(repo_name) : klass.repo
@@ -239,15 +239,40 @@ class Esse::Hooks::Mixin < Module
239
239
  # }
240
240
  def state
241
241
  global_store[store_key] ||= {
242
- repos: all_repos.map { |k| [k, true] }.to_h, # Control global state of the index repository level
242
+ repos: all_repos.map { |k| [repo_state_key(k), true] }.to_h, # Control global state of the index repository level
243
243
  models: Hash.new { |h, k| h[k] = {} } # Control the state of the model & index repository level
244
244
  }
245
+ normalize_state!(global_store[store_key])
245
246
  end
246
247
 
247
248
  def global_store
248
249
  Thread.current
249
250
  end
250
251
 
252
+ def repo_state_key(repo)
253
+ repo.to_s
254
+ end
255
+
256
+ def normalize_state!(raw_state)
257
+ repos = raw_state[:repos]
258
+ unless repos.empty? || repos.keys.all?(String)
259
+ raw_state[:repos] = repos.each_with_object({}) do |(k, v), h|
260
+ h[repo_state_key(k)] = v
261
+ end
262
+ end
263
+
264
+ models_state = raw_state[:models]
265
+ models_state.each_value do |per_model|
266
+ next if per_model.empty? || per_model.keys.all?(String)
267
+
268
+ per_model.replace(per_model.each_with_object({}) do |(k, v), h|
269
+ h[repo_state_key(k)] = v
270
+ end)
271
+ end
272
+
273
+ raw_state
274
+ end
275
+
251
276
  private
252
277
 
253
278
  def store_key
@@ -12,7 +12,7 @@ rescue LoadError
12
12
  # noop
13
13
  end
14
14
 
15
- module Esse::Hooks::Primitives
15
+ module Esse::Hooks::Primitive
16
16
  class String < ::String
17
17
  def classify
18
18
  new_str = if defined?(Dry::Inflector)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Esse
4
4
  module Hooks
5
- VERSION = "0.0.1"
5
+ VERSION = "0.0.2"
6
6
  end
7
7
  end
data/lib/esse/hooks.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require "esse"
4
4
  require_relative "hooks/version"
5
5
  require_relative "hooks/mixin"
6
- require_relative "hooks/primitives/string"
6
+ require_relative "hooks/primitive/string"
7
7
 
8
8
  module Esse
9
9
  # Esse::Hooks is a module that extends Esse with hooks capabilities.
data/mise.toml CHANGED
@@ -1,2 +1,2 @@
1
1
  [tools]
2
- ruby = "2.7.7"
2
+ ruby = "3.2"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: esse-hooks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcos G. Zimmermann
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-01-21 00:00:00.000000000 Z
11
+ date: 2026-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: esse
@@ -42,7 +42,7 @@ files:
42
42
  - lib/esse-hooks.rb
43
43
  - lib/esse/hooks.rb
44
44
  - lib/esse/hooks/mixin.rb
45
- - lib/esse/hooks/primitives/string.rb
45
+ - lib/esse/hooks/primitive/string.rb
46
46
  - lib/esse/hooks/version.rb
47
47
  - mise.toml
48
48
  homepage: https://github.com/marcosgz/esse-hooks
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  requirements: []
70
- rubygems_version: 3.1.6
70
+ rubygems_version: 3.4.10
71
71
  signing_key:
72
72
  specification_version: 4
73
73
  summary: Hooks extensions for Esse