minitag 0.4.0 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9aa792615d3b3d3022a0b1372c951f0f7394a184bd296f9ca760fb69d2be7b2d
4
- data.tar.gz: ca7add04befa59ab7141cfccc41475def049d1e3e7596bfcbaeecef55e909144
3
+ metadata.gz: 5cfcb59a8e761ef05e4520539a37892c772362685feab9ca2c9d98badbc155ee
4
+ data.tar.gz: e99d1e6784863d642564e69592d08d999218399951dbd346f484d63450358e19
5
5
  SHA512:
6
- metadata.gz: 62a382576471b5223651ab76083afda212b43820dad6e23cc59d095d153e85048d81d09f38f3ca4d2f57dd758316f49ccedc48afd8ad99f84aa2554886d3ec24
7
- data.tar.gz: 2fee9e38e0cfde38bdb4a71c806cee5c2395c5794aa4f3e46cfc863a8b634ee299163046693d671fc759e733b97d2fdd6b30d31ab370d77c36b549842c1a1e60
6
+ metadata.gz: 9e788f60ca4a42e8220ed07955b2c4f93a41791b4e9425b17f6785b3783e0cb88b002fc75d03baceb73984a65438df1ab041455243a11dfe480b1e6be8dce888
7
+ data.tar.gz: a8720ea668e10aa1c4d1fb58fb2c4fad8661c39e9fe33f8e35a69a57696c482ebf3c236074716764eef004225900e3fc11eb3d37e71dc93f904d98e380114f6f
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- minitag (0.4.0)
4
+ minitag (0.4.1)
5
5
  minitest (~> 5.0)
6
6
 
7
7
  GEM
@@ -4,6 +4,7 @@ require 'set'
4
4
  require 'minitest'
5
5
  require 'minitag/version'
6
6
  require 'minitag/context'
7
+ require 'minitag/extension_registry'
7
8
  require 'minitag/minitest_tag'
8
9
  require 'minitag/tag_extension'
9
10
 
@@ -11,6 +12,16 @@ require 'minitag/tag_extension'
11
12
  # to Minitest::Test
12
13
  module Minitag
13
14
  class << self
15
+ # Registry of classes that requires extension by Minitag::TagExtension.
16
+ def extension_registry
17
+ @extension_registry ||= ExtensionRegistry.new
18
+ end
19
+
20
+ # Register a class for extension.
21
+ def register_for_extension(klass)
22
+ extension_registry.register(klass)
23
+ end
24
+
14
25
  # Execution context of the test suite.
15
26
  def context
16
27
  @context ||= Context.new
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Minitag
4
+ # Stores and extends classes that relies on tags with the Minitag::TagExtension
5
+ # module.
6
+ class ExtensionRegistry
7
+ def initialize
8
+ @registry = {}
9
+ end
10
+
11
+ # Extends a class with Minitag::TagExtension and stores it as extended.
12
+ #
13
+ # Invariants:
14
+ # - Classes that were already extended will be ignored during this operation.
15
+ #
16
+ # @param [Class] klass a class that will be extended.
17
+ #
18
+ # @return [void]
19
+ def register(klass)
20
+ return if @registry.key?(klass)
21
+
22
+ @registry[klass] = true
23
+ klass.singleton_class.prepend(Minitag::TagExtension)
24
+ end
25
+ end
26
+ end
@@ -15,7 +15,7 @@ module Minitag
15
15
  # @return [void]
16
16
  def tag(*tags)
17
17
  Minitag.pending_tags = tags.map { |tag| tag.to_s.strip.downcase }
18
- singleton_class.prepend(Minitag::TagExtension)
18
+ Minitag.register_for_extension(self)
19
19
  end
20
20
  end
21
21
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minitag
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernardo de Araujo
@@ -86,6 +86,7 @@ files:
86
86
  - bin/setup
87
87
  - lib/minitag.rb
88
88
  - lib/minitag/context.rb
89
+ - lib/minitag/extension_registry.rb
89
90
  - lib/minitag/minitest_tag.rb
90
91
  - lib/minitag/tag_extension.rb
91
92
  - lib/minitag/tag_registry.rb