tins 1.36.1 → 1.37.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74ccd9381ab74305d467c86810271be1033c7f68b777cdb4c561b3b5bfb5152a
4
- data.tar.gz: 977fa807b40ee00176d7ecde2c363d871acc8c476988e34b682d3d8b19e7ef20
3
+ metadata.gz: '049e3bf81de447eec53664f5555656602906bbd44a5f98b2e0e953318aadff77'
4
+ data.tar.gz: 14debef966e248366ec1ef72b39b8ccc094a91049ed6cd44e9ee2550c607ae02
5
5
  SHA512:
6
- metadata.gz: c689f798c3679f290db513c4203b4c19b92696606e76feee88b27d0959b0d4ec09d9f7aac80c1d502d3e44d205da82715678b5b629ba51f669264a75bb8c77ce
7
- data.tar.gz: 5bf30172063f7b6406247b15ff340fd65e2421799fa93c9d52ab69de315ba71b12550ffdabff42d0d6dc801a69c1bcc5679afdcaec090558886890d05edd7bf2
6
+ metadata.gz: c93d9b5b23c3305f422f0efd81e0828591682331532b51f4de1a84e305f77bb3f9374abcf8b725cd665a74ef352cabb525f49b4dfa68fc78f5568e87a5e78012
7
+ data.tar.gz: 4b8d5d1da5bffb1b26449f96aa0f292a28582e5409d734ba5cdc18c428a2e6b57f577662773b776abcbb5464d505ae6726b60bba54f2142ddf5a32faae5fd9e9
data/CHANGES.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changes
2
2
 
3
+ ## 2024-10-19 v1.37.0
4
+
5
+ * Add support for module prepended blocks in **Tins::Concern**:
6
+ * Added `prepend_features` method to Tins concern
7
+ * Updated ConcernTest to test prepend feature
8
+ * Raise StandardError for duplicate block definitions for included and
9
+ prepended blocks
10
+ * Added `class_methods` method to Tins concern:
11
+ * Added `class_methods` method to lib/tins/concern.rb
12
+ - Creates or retrieves ClassMethods module for defining class-level methods
13
+ * Updated tests in `tests/concern_test.rb`
14
+ - Added test for new `baz1` and `baz2` methods
15
+ + Tested availability of `bar`, `baz1`, and `baz2` methods on A
16
+
3
17
  ## 2024-10-11 v1.36.1
4
18
 
5
19
  * Fixed a typo in the code
data/lib/tins/concern.rb CHANGED
@@ -19,12 +19,48 @@ module Tins
19
19
  end
20
20
  end
21
21
 
22
+ def prepend_features(base)
23
+ if base.instance_variable_defined?("@_dependencies")
24
+ base.instance_variable_get("@_dependencies") << self
25
+ false
26
+ else
27
+ return false if base < self
28
+ @_dependencies.each { |dep| base.send(:include, dep) }
29
+ super
30
+ base.extend const_get("ClassMethods") if const_defined?("ClassMethods")
31
+ base.class_eval(&@_prepended_block) if instance_variable_defined?("@_prepended_block")
32
+ Thread.current[:tin_concern_args] = nil
33
+ true
34
+ end
35
+ end
36
+
22
37
  def included(base = nil, &block)
23
38
  if base.nil?
39
+ instance_variable_defined?(:@_included_block) and
40
+ raise StandardError, "included block already defined"
24
41
  @_included_block = block
25
42
  else
26
43
  super
27
44
  end
28
45
  end
46
+
47
+ def prepended(base = nil, &block)
48
+ if base.nil?
49
+ instance_variable_defined?(:@_prepended_block) and
50
+ raise StandardError, "prepended block already defined"
51
+ @_prepended_block = block
52
+ else
53
+ super
54
+ end
55
+ end
56
+
57
+ def class_methods(&block)
58
+ modul = const_get(:ClassMethods) if const_defined?(:ClassMethods, false)
59
+ unless modul
60
+ modul = Module.new
61
+ const_set(:ClassMethods, modul)
62
+ end
63
+ modul.module_eval(&block)
64
+ end
29
65
  end
30
66
  end
data/lib/tins/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Tins
2
2
  # Tins version
3
- VERSION = '1.36.1'
3
+ VERSION = '1.37.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -8,27 +8,65 @@ class ConcernTest < Test::Unit::TestCase
8
8
  $included = self
9
9
  end
10
10
 
11
+ prepended do
12
+ $prepended = self
13
+ end
14
+
11
15
  def foo
12
16
  :foo
13
17
  end
14
18
 
19
+ class_methods do
20
+ def baz1
21
+ :baz1
22
+ end
23
+ end
24
+
15
25
  module ClassMethods
16
26
  def bar
17
27
  :bar
18
28
  end
19
29
  end
30
+
31
+ class_methods do
32
+ def baz2
33
+ :baz2
34
+ end
35
+ end
20
36
  end
21
37
 
22
38
  $included = nil
39
+ $prepended = nil
23
40
 
24
41
  class A
25
42
  include AC
26
43
  end
27
44
 
28
- def test_concern
45
+ class B
46
+ prepend AC
47
+ end
48
+
49
+ def test_concern_include
29
50
  a = A.new
30
51
  assert_equal A, $included
31
52
  assert_equal :foo, a.foo
32
53
  assert_equal :bar, A.bar
54
+ assert_equal :baz1, A.baz1
55
+ assert_equal :baz2, A.baz2
56
+ assert_raise(StandardError) do
57
+ AC.module_eval { included {} }
58
+ end
59
+ end
60
+
61
+ def test_concern_prepend
62
+ a = B.new
63
+ assert_equal B, $prepended
64
+ assert_equal :foo, a.foo
65
+ assert_equal :bar, B.bar
66
+ assert_equal :baz1, B.baz1
67
+ assert_equal :baz2, B.baz2
68
+ assert_raise(StandardError) do
69
+ AC.module_eval { prepended {} }
70
+ end
33
71
  end
34
72
  end
data/tins.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: tins 1.36.1 ruby lib
2
+ # stub: tins 1.37.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "tins".freeze
6
- s.version = "1.36.1".freeze
6
+ s.version = "1.37.0".freeze
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2024-10-11"
11
+ s.date = "2024-10-19"
12
12
  s.description = "All the stuff that isn't good/big enough for a real library.".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.extra_rdoc_files = ["README.md".freeze, "lib/dslkit.rb".freeze, "lib/dslkit/polite.rb".freeze, "lib/dslkit/rude.rb".freeze, "lib/spruz.rb".freeze, "lib/tins.rb".freeze, "lib/tins/alias.rb".freeze, "lib/tins/annotate.rb".freeze, "lib/tins/ask_and_send.rb".freeze, "lib/tins/attempt.rb".freeze, "lib/tins/bijection.rb".freeze, "lib/tins/case_predicate.rb".freeze, "lib/tins/complete.rb".freeze, "lib/tins/concern.rb".freeze, "lib/tins/count_by.rb".freeze, "lib/tins/date_dummy.rb".freeze, "lib/tins/date_time_dummy.rb".freeze, "lib/tins/deep_const_get.rb".freeze, "lib/tins/deep_dup.rb".freeze, "lib/tins/deprecate.rb".freeze, "lib/tins/dslkit.rb".freeze, "lib/tins/duration.rb".freeze, "lib/tins/expose.rb".freeze, "lib/tins/extract_last_argument_options.rb".freeze, "lib/tins/file_binary.rb".freeze, "lib/tins/find.rb".freeze, "lib/tins/generator.rb".freeze, "lib/tins/go.rb".freeze, "lib/tins/hash_bfs.rb".freeze, "lib/tins/hash_symbolize_keys_recursive.rb".freeze, "lib/tins/hash_union.rb".freeze, "lib/tins/if_predicate.rb".freeze, "lib/tins/implement.rb".freeze, "lib/tins/limited.rb".freeze, "lib/tins/lines_file.rb".freeze, "lib/tins/lru_cache.rb".freeze, "lib/tins/memoize.rb".freeze, "lib/tins/method_description.rb".freeze, "lib/tins/minimize.rb".freeze, "lib/tins/module_group.rb".freeze, "lib/tins/named_set.rb".freeze, "lib/tins/null.rb".freeze, "lib/tins/once.rb".freeze, "lib/tins/p.rb".freeze, "lib/tins/partial_application.rb".freeze, "lib/tins/proc_compose.rb".freeze, "lib/tins/proc_prelude.rb".freeze, "lib/tins/range_plus.rb".freeze, "lib/tins/require_maybe.rb".freeze, "lib/tins/responding.rb".freeze, "lib/tins/secure_write.rb".freeze, "lib/tins/sexy_singleton.rb".freeze, "lib/tins/string_byte_order_mark.rb".freeze, "lib/tins/string_camelize.rb".freeze, "lib/tins/string_underscore.rb".freeze, "lib/tins/string_version.rb".freeze, "lib/tins/subhash.rb".freeze, "lib/tins/temp_io.rb".freeze, "lib/tins/temp_io_enum.rb".freeze, "lib/tins/terminal.rb".freeze, "lib/tins/thread_local.rb".freeze, "lib/tins/time_dummy.rb".freeze, "lib/tins/timed_cache.rb".freeze, "lib/tins/to.rb".freeze, "lib/tins/to_proc.rb".freeze, "lib/tins/token.rb".freeze, "lib/tins/uniq_by.rb".freeze, "lib/tins/unit.rb".freeze, "lib/tins/version.rb".freeze, "lib/tins/write.rb".freeze, "lib/tins/xt.rb".freeze, "lib/tins/xt/annotate.rb".freeze, "lib/tins/xt/ask_and_send.rb".freeze, "lib/tins/xt/attempt.rb".freeze, "lib/tins/xt/blank.rb".freeze, "lib/tins/xt/case_predicate.rb".freeze, "lib/tins/xt/complete.rb".freeze, "lib/tins/xt/concern.rb".freeze, "lib/tins/xt/count_by.rb".freeze, "lib/tins/xt/date_dummy.rb".freeze, "lib/tins/xt/date_time_dummy.rb".freeze, "lib/tins/xt/deep_const_get.rb".freeze, "lib/tins/xt/deep_dup.rb".freeze, "lib/tins/xt/deprecate.rb".freeze, "lib/tins/xt/dslkit.rb".freeze, "lib/tins/xt/expose.rb".freeze, "lib/tins/xt/extract_last_argument_options.rb".freeze, "lib/tins/xt/file_binary.rb".freeze, "lib/tins/xt/full.rb".freeze, "lib/tins/xt/hash_bfs.rb".freeze, "lib/tins/xt/hash_symbolize_keys_recursive.rb".freeze, "lib/tins/xt/hash_union.rb".freeze, "lib/tins/xt/if_predicate.rb".freeze, "lib/tins/xt/implement.rb".freeze, "lib/tins/xt/irb.rb".freeze, "lib/tins/xt/method_description.rb".freeze, "lib/tins/xt/named.rb".freeze, "lib/tins/xt/null.rb".freeze, "lib/tins/xt/p.rb".freeze, "lib/tins/xt/partial_application.rb".freeze, "lib/tins/xt/proc_compose.rb".freeze, "lib/tins/xt/proc_prelude.rb".freeze, "lib/tins/xt/range_plus.rb".freeze, "lib/tins/xt/require_maybe.rb".freeze, "lib/tins/xt/responding.rb".freeze, "lib/tins/xt/secure_write.rb".freeze, "lib/tins/xt/sexy_singleton.rb".freeze, "lib/tins/xt/string.rb".freeze, "lib/tins/xt/string_byte_order_mark.rb".freeze, "lib/tins/xt/string_camelize.rb".freeze, "lib/tins/xt/string_underscore.rb".freeze, "lib/tins/xt/string_version.rb".freeze, "lib/tins/xt/subhash.rb".freeze, "lib/tins/xt/temp_io.rb".freeze, "lib/tins/xt/time_dummy.rb".freeze, "lib/tins/xt/time_freezer.rb".freeze, "lib/tins/xt/to.rb".freeze, "lib/tins/xt/uniq_by.rb".freeze, "lib/tins/xt/write.rb".freeze]
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.specification_version = 4
25
25
 
26
- s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.18.0".freeze])
26
+ s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.19".freeze])
27
27
  s.add_development_dependency(%q<all_images>.freeze, [">= 0".freeze])
28
28
  s.add_development_dependency(%q<debug>.freeze, [">= 0".freeze])
29
29
  s.add_development_dependency(%q<term-ansicolor>.freeze, [">= 0".freeze])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tins
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.36.1
4
+ version: 1.37.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-11 00:00:00.000000000 Z
11
+ date: 2024-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.18.0
19
+ version: '1.19'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.18.0
26
+ version: '1.19'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: all_images
29
29
  requirement: !ruby/object:Gem::Requirement