template_class 1.1.0 → 1.2.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: d10dcbdc76cd1f1ffddb70a98ee133e5686acb67ce73583715aeeaa9b10d4e70
4
- data.tar.gz: 5f293dcd3eaf2e54882052e83f2eef8abd2c1fa71792a38f27cd688cbb641072
3
+ metadata.gz: e4c0985a84c4d73b07449fea319cd108c0a78477fa0975a0a946dcb82d05dbda
4
+ data.tar.gz: 35cc326a7341985c9d3a416fcad8b58a9465f4e72a083d7c4e9d153ed4f312d4
5
5
  SHA512:
6
- metadata.gz: d536399259e30cc20e4c6352410092aed9b4044a7ab42d4fcfab77b82589d25e64a66a9cccd073da9fbf01a022276e05c4b0acf5afa46dc9e94dc5c04ab94f3d
7
- data.tar.gz: 3ba7a56886ab200f11f827b2078ffb8994b01456215cc6ff8c0c3d45475da06a2d2c19018d1f1f9af6005d190c1c326e1d3a29846b168b2e847a4b7888ad8a71
6
+ metadata.gz: 1cc67fea8a072fd2fcf64a7bb7b17d22ae801b1547dd92cccd27a0e6f4c939870b032112bf845dc0974d8860d797f4e12c104f19437be369de70e8d0009ff21a
7
+ data.tar.gz: f756b227610d4503557b949dde1ed5f908fac9da1f3353a7dd55a7772f84e145eb419a1fad568f0a497d08d772a29a340b20fc839910ceee92baeedda9cc8065
data/CHANGELOG.md CHANGED
@@ -8,6 +8,12 @@
8
8
  ### Bug fixes
9
9
  )-->
10
10
 
11
+ ## 1.2.0 2024-08-19
12
+
13
+ ### New features
14
+
15
+ - Bulk instantiation
16
+
11
17
  ## 1.1.0 2023-08-31
12
18
 
13
19
  ### New features
data/README.md CHANGED
@@ -82,6 +82,32 @@ List[:any] = Array
82
82
 
83
83
  Notice that the parameter isn't constrained to classes: you can use any object.
84
84
 
85
+ ### Bulk Instantiation
86
+
87
+ A module (or class) containing multiple templates can include `TemplateClass::BulkInstanceable` to be able to instantiate them in bulk using the same parameter.
88
+
89
+ ```ruby
90
+ module Templates
91
+ include TemplateClass::BulkInstantiable
92
+
93
+ class Template1
94
+ ...
95
+ end
96
+
97
+ class Template2
98
+ ...
99
+ end
100
+ end
101
+
102
+ module Instances
103
+ Templates.bulk_instance Integer, into: self
104
+ end
105
+ ```
106
+
107
+ The new constants `Instances::Template1` and `Instances::Template2` are now defined, and they point respectively to `Templates::Template1[Integer]` and `Templates::Template2[Integer]`.
108
+
109
+ The optional keyword argument `with_overrides`, which defaults to `true` if `Zeitwerk` is defined and to `false` otherwise, allows you to automatically access and reopen the instances in files that follow the Zeitwerk naming conventions (eg. you can reopen `Instances::Template1` in the file `instances/template1.rb`). If `with_overrides` is `false`, you can still reopen the instances, but you need to manually handle the appropriate `requires` in the appropriate order.
110
+
85
111
  ## Plans for future development
86
112
 
87
113
  - Multiple specialization parameters
@@ -0,0 +1,21 @@
1
+ module TemplateClass
2
+ module BulkInstantiable
3
+ extend ActiveSupport::Concern
4
+
5
+ class_methods do
6
+ def bulk_instantiate(*args, into:, with_overrides: defined?(Zeitwerk))
7
+ constants(false)
8
+ .map { |constant_name| const_get(constant_name) }
9
+ .map do |constant|
10
+ into.const_set constant.name.demodulize.to_sym, constant[*args]
11
+ end
12
+ .tap { return unless with_overrides } # rubocop:disable Lint/NonLocalExitFromIterator
13
+ .each do |instance|
14
+ require instance.name.underscore
15
+ rescue LoadError
16
+ nil
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TemplateClass
4
- VERSION = '1.1.0'
4
+ VERSION = '1.2.0'
5
5
  end
@@ -1,2 +1,3 @@
1
1
  require_relative 'template_class/version'
2
2
  require_relative 'template_class/template'
3
+ require_relative 'template_class/bulk_instantiable'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: template_class
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Moku S.r.l.
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-08-31 00:00:00.000000000 Z
12
+ date: 2024-08-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -47,6 +47,7 @@ files:
47
47
  - README.md
48
48
  - Rakefile
49
49
  - lib/template_class.rb
50
+ - lib/template_class/bulk_instantiable.rb
50
51
  - lib/template_class/template.rb
51
52
  - lib/template_class/version.rb
52
53
  - sig/lib/template_class/template.rbs
@@ -72,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
73
  - !ruby/object:Gem::Version
73
74
  version: '0'
74
75
  requirements: []
75
- rubygems_version: 3.4.6
76
+ rubygems_version: 3.5.11
76
77
  signing_key:
77
78
  specification_version: 4
78
79
  summary: A way to define templated classes, in a similar fashion to C++ templates.