tins 1.50.0 → 1.51.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 +4 -4
- data/CHANGES.md +17 -0
- data/Rakefile +5 -0
- data/lib/tins/dslkit.rb +65 -0
- data/lib/tins/lru_cache.rb +5 -13
- data/lib/tins/version.rb +1 -1
- data/tests/lru_cache_test.rb +2 -1
- data/tins.gemspec +5 -4
- metadata +20 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dce6e60b660a0f614d5e3964270e99aaff36fa473a54efa387de8e17fc0e331b
|
|
4
|
+
data.tar.gz: f6f4c1fcad05d874d6e20897c42f211cd1d7ed6892ef9d539816b7641d56129c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3e33a9d1241117807d6dcba8fa72087d57fa70587015e2fb6988f6221ac00054149c5770ef856a83a1b1a478a6cc27aca117b9f0f23cf582867200159d4d486b
|
|
7
|
+
data.tar.gz: 6a3310dec353f33acf140b4e971e7be1269bb413fd2b3b13d29fc777573d69b14a932a35977832c58d87b80cab90cd4f326542030c7d422aa8bf0df53830940a
|
data/CHANGES.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changes
|
|
2
2
|
|
|
3
|
+
## 2026-01-14 v1.51.1
|
|
4
|
+
|
|
5
|
+
- Simplified `lru_cache` implementation to not need `NOT_EXIST`
|
|
6
|
+
- Updated `rubygems_version` from **4.0.2** to **4.0.3**
|
|
7
|
+
- Changed `gem_hadar` development dependency from "~> 2.10" to ">= 2.16.3"
|
|
8
|
+
- Updated Ruby image version from 4.0-rc-alpine to 4.0-alpine in CI pipeline
|
|
9
|
+
- Added comprehensive module documentation for `DSLKit` explaining its purpose
|
|
10
|
+
and features
|
|
11
|
+
- Added `CHANGES.md` file to gem release process using `GemHadar`
|
|
12
|
+
|
|
13
|
+
## 2025-12-20 v1.51.0
|
|
14
|
+
|
|
15
|
+
- Added `readline` as a runtime dependency in both `Rakefile` and
|
|
16
|
+
`tins.gemspec`
|
|
17
|
+
- The `readline` dependency version is set to `>= 0` in `tins.gemspec`
|
|
18
|
+
- The `readline` dependency is added to the `GemHadar` block in `Rakefile`
|
|
19
|
+
|
|
3
20
|
## 2025-12-19 v1.50.0
|
|
4
21
|
|
|
5
22
|
- Updated `gem_hadar` development dependency version to **2.10**
|
data/Rakefile
CHANGED
|
@@ -22,6 +22,10 @@ GemHadar do
|
|
|
22
22
|
licenses << 'MIT'
|
|
23
23
|
clean << 'coverage'
|
|
24
24
|
|
|
25
|
+
changelog do
|
|
26
|
+
filename 'CHANGES.md'
|
|
27
|
+
end
|
|
28
|
+
|
|
25
29
|
github_workflows(
|
|
26
30
|
'static.yml' => {}
|
|
27
31
|
)
|
|
@@ -30,6 +34,7 @@ GemHadar do
|
|
|
30
34
|
|
|
31
35
|
dependency 'sync'
|
|
32
36
|
dependency 'bigdecimal'
|
|
37
|
+
dependency 'readline'
|
|
33
38
|
dependency 'mize', '~> 0.6'
|
|
34
39
|
development_dependency 'all_images'
|
|
35
40
|
development_dependency 'debug'
|
data/lib/tins/dslkit.rb
CHANGED
|
@@ -1137,4 +1137,69 @@ module Tins
|
|
|
1137
1137
|
end
|
|
1138
1138
|
end
|
|
1139
1139
|
end
|
|
1140
|
+
# DSLKit provides a comprehensive framework for building Domain Specific Languages
|
|
1141
|
+
# and configuration systems in Ruby.
|
|
1142
|
+
#
|
|
1143
|
+
# DSLKit is designed to make it easy to create clean, expressive APIs that feel
|
|
1144
|
+
# natural to Ruby developers. It provides a collection of utilities for:
|
|
1145
|
+
#
|
|
1146
|
+
# - Creating method-based accessors and constants
|
|
1147
|
+
# - Working with singleton classes and eigenclasses
|
|
1148
|
+
# - Building thread-safe global variables
|
|
1149
|
+
# - Implementing dynamic code evaluation
|
|
1150
|
+
# - Creating symbolic method handling
|
|
1151
|
+
# - Deflecting method calls for interception
|
|
1152
|
+
# - Providing delegate patterns for method forwarding
|
|
1153
|
+
# - Building blank slates for clean API surfaces
|
|
1154
|
+
#
|
|
1155
|
+
# The framework is organized around several key modules:
|
|
1156
|
+
#
|
|
1157
|
+
# - Tins::DSLAccessor: For creating configurable accessors with default values
|
|
1158
|
+
# - Tins::Constant: For creating method-based constants
|
|
1159
|
+
# - Tins::Eigenclass: For working with singleton classes
|
|
1160
|
+
# - Tins::ClassMethod: For defining class methods dynamically
|
|
1161
|
+
# - Tins::ThreadGlobal: For thread-safe global variables
|
|
1162
|
+
# - Tins::Interpreter: For dynamic code evaluation
|
|
1163
|
+
# - Tins::SymbolMaker: For symbolic method handling
|
|
1164
|
+
# - Tins::ConstantMaker: For symbolic constant handling
|
|
1165
|
+
# - Tins::Deflect: For method call interception
|
|
1166
|
+
# - Tins::Delegate: For method delegation patterns
|
|
1167
|
+
# - Tins::BlankSlate: For creating clean API surfaces
|
|
1168
|
+
#
|
|
1169
|
+
# @example Basic DSL usage
|
|
1170
|
+
# class Config
|
|
1171
|
+
# extend Tins::DSLAccessor
|
|
1172
|
+
# dsl_accessor :port, 8080
|
|
1173
|
+
# dsl_accessor :host, 'localhost'
|
|
1174
|
+
# end
|
|
1175
|
+
#
|
|
1176
|
+
# config = Config.new
|
|
1177
|
+
# config.port # => 8080
|
|
1178
|
+
# config.port 8081 # Sets port to 8081
|
|
1179
|
+
#
|
|
1180
|
+
# @example Method deflection
|
|
1181
|
+
# class Calculator
|
|
1182
|
+
# def add(a, b)
|
|
1183
|
+
# a + b
|
|
1184
|
+
# end
|
|
1185
|
+
# end
|
|
1186
|
+
#
|
|
1187
|
+
# calc = Calculator.new
|
|
1188
|
+
# Tins::Deflect.deflect(Calculator, :add) do |obj, method, *args|
|
|
1189
|
+
# # Custom behavior for add method
|
|
1190
|
+
# args.sum
|
|
1191
|
+
# end
|
|
1192
|
+
#
|
|
1193
|
+
# calc.add(1, 2, 3) # => 6 (sum instead of addition)
|
|
1194
|
+
#
|
|
1195
|
+
# @see Tins::DSLAccessor
|
|
1196
|
+
# @see Tins::Constant
|
|
1197
|
+
# @see Tins::Eigenclass
|
|
1198
|
+
# @see Tins::ClassMethod
|
|
1199
|
+
# @see Tins::ThreadGlobal
|
|
1200
|
+
# @see Tins::Interpreter
|
|
1201
|
+
# @see Tins::SymbolMaker
|
|
1202
|
+
# @see Tins::Deflect
|
|
1203
|
+
# @see Tins::Delegate
|
|
1204
|
+
# @see Tins::BlankSlate
|
|
1140
1205
|
DSLKit = Tins
|
data/lib/tins/lru_cache.rb
CHANGED
|
@@ -3,15 +3,10 @@ module Tins
|
|
|
3
3
|
#
|
|
4
4
|
# This cache maintains a fixed-size collection of key-value pairs,
|
|
5
5
|
# automatically removing the least recently accessed item when the capacity
|
|
6
|
-
# is exceeded.
|
|
6
|
+
# is exceeded. Both read and write are considered access.
|
|
7
7
|
class LRUCache
|
|
8
8
|
include Enumerable
|
|
9
9
|
|
|
10
|
-
# Our "nil" value if it wasn' set by clients
|
|
11
|
-
NOT_EXIST = Object.new.freeze
|
|
12
|
-
|
|
13
|
-
private_constant :NOT_EXIST
|
|
14
|
-
|
|
15
10
|
# Initializes a new LRU cache with the specified capacity.
|
|
16
11
|
#
|
|
17
12
|
# @param capacity [Integer] maximum number of items the cache can hold
|
|
@@ -19,7 +14,7 @@ module Tins
|
|
|
19
14
|
@capacity = Integer(capacity)
|
|
20
15
|
@capacity >= 1 or
|
|
21
16
|
raise ArgumentError, "capacity should be >= 1, was #@capacity"
|
|
22
|
-
@data = {}
|
|
17
|
+
@data = {} # Least-recently used will always be the first element
|
|
23
18
|
end
|
|
24
19
|
|
|
25
20
|
# Returns the maximum capacity of the cache.
|
|
@@ -35,11 +30,8 @@ module Tins
|
|
|
35
30
|
# @param key [Object] the key to look up
|
|
36
31
|
# @return [Object, nil] the value for the key or nil if not found
|
|
37
32
|
def [](key)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
nil
|
|
41
|
-
else
|
|
42
|
-
@data[key] = value
|
|
33
|
+
if @data.has_key?(key)
|
|
34
|
+
@data[key] = @data.delete(key)
|
|
43
35
|
end
|
|
44
36
|
end
|
|
45
37
|
|
|
@@ -56,7 +48,7 @@ module Tins
|
|
|
56
48
|
@data.delete(key)
|
|
57
49
|
@data[key] = value
|
|
58
50
|
if @data.size > @capacity
|
|
59
|
-
@data.
|
|
51
|
+
@data.shift
|
|
60
52
|
end
|
|
61
53
|
value
|
|
62
54
|
end
|
data/lib/tins/version.rb
CHANGED
data/tests/lru_cache_test.rb
CHANGED
data/tins.gemspec
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
# stub: tins 1.
|
|
2
|
+
# stub: tins 1.51.1 ruby lib
|
|
3
3
|
|
|
4
4
|
Gem::Specification.new do |s|
|
|
5
5
|
s.name = "tins".freeze
|
|
6
|
-
s.version = "1.
|
|
6
|
+
s.version = "1.51.1".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]
|
|
@@ -17,13 +17,13 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
s.licenses = ["MIT".freeze]
|
|
18
18
|
s.rdoc_options = ["--title".freeze, "Tins - Useful stuff.".freeze, "--main".freeze, "README.md".freeze]
|
|
19
19
|
s.required_ruby_version = Gem::Requirement.new(">= 3.1".freeze)
|
|
20
|
-
s.rubygems_version = "4.0.
|
|
20
|
+
s.rubygems_version = "4.0.3".freeze
|
|
21
21
|
s.summary = "Useful stuff.".freeze
|
|
22
22
|
s.test_files = ["tests/annotate_test.rb".freeze, "tests/ask_and_send_test.rb".freeze, "tests/attempt_test.rb".freeze, "tests/bijection_test.rb".freeze, "tests/blank_full_test.rb".freeze, "tests/case_predicate_test.rb".freeze, "tests/concern_test.rb".freeze, "tests/date_dummy_test.rb".freeze, "tests/date_time_dummy_test.rb".freeze, "tests/deep_dup_test.rb".freeze, "tests/delegate_test.rb".freeze, "tests/deprecate_test.rb".freeze, "tests/dslkit_test.rb".freeze, "tests/duration_test.rb".freeze, "tests/dynamic_scope_test.rb".freeze, "tests/expose_test.rb".freeze, "tests/extract_last_argument_options_test.rb".freeze, "tests/file_binary_test.rb".freeze, "tests/find_test.rb".freeze, "tests/from_module_test.rb".freeze, "tests/generator_test.rb".freeze, "tests/go_test.rb".freeze, "tests/hash_bfs_test.rb".freeze, "tests/hash_symbolize_keys_recursive_test.rb".freeze, "tests/hash_union_test.rb".freeze, "tests/if_predicate_test.rb".freeze, "tests/implement_test.rb".freeze, "tests/limited_test.rb".freeze, "tests/lines_file_test.rb".freeze, "tests/lru_cache_test.rb".freeze, "tests/memoize_test.rb".freeze, "tests/method_description_test.rb".freeze, "tests/minimize_test.rb".freeze, "tests/module_group_test.rb".freeze, "tests/named_set_test.rb".freeze, "tests/named_test.rb".freeze, "tests/null_test.rb".freeze, "tests/p_test.rb".freeze, "tests/partial_application_test.rb".freeze, "tests/proc_compose_test.rb".freeze, "tests/proc_prelude_test.rb".freeze, "tests/range_plus_test.rb".freeze, "tests/require_maybe_test.rb".freeze, "tests/responding_test.rb".freeze, "tests/rotate_test.rb".freeze, "tests/scope_test.rb".freeze, "tests/secure_write_test.rb".freeze, "tests/sexy_singleton_test.rb".freeze, "tests/string_byte_order_mark_test.rb".freeze, "tests/string_camelize_test.rb".freeze, "tests/string_named_placeholders.rb".freeze, "tests/string_underscore_test.rb".freeze, "tests/string_version_test.rb".freeze, "tests/subhash_test.rb".freeze, "tests/temp_io_test.rb".freeze, "tests/test_helper.rb".freeze, "tests/time_dummy_test.rb".freeze, "tests/time_freezer_test.rb".freeze, "tests/to_test.rb".freeze, "tests/token_test.rb".freeze, "tests/unit_test.rb".freeze, "tests/annotate_test.rb".freeze, "tests/ask_and_send_test.rb".freeze, "tests/attempt_test.rb".freeze, "tests/bijection_test.rb".freeze, "tests/blank_full_test.rb".freeze, "tests/case_predicate_test.rb".freeze, "tests/concern_test.rb".freeze, "tests/date_dummy_test.rb".freeze, "tests/date_time_dummy_test.rb".freeze, "tests/deep_dup_test.rb".freeze, "tests/delegate_test.rb".freeze, "tests/deprecate_test.rb".freeze, "tests/dslkit_test.rb".freeze, "tests/duration_test.rb".freeze, "tests/dynamic_scope_test.rb".freeze, "tests/expose_test.rb".freeze, "tests/extract_last_argument_options_test.rb".freeze, "tests/file_binary_test.rb".freeze, "tests/find_test.rb".freeze, "tests/from_module_test.rb".freeze, "tests/generator_test.rb".freeze, "tests/go_test.rb".freeze, "tests/hash_bfs_test.rb".freeze, "tests/hash_symbolize_keys_recursive_test.rb".freeze, "tests/hash_union_test.rb".freeze, "tests/if_predicate_test.rb".freeze, "tests/implement_test.rb".freeze, "tests/limited_test.rb".freeze, "tests/lines_file_test.rb".freeze, "tests/lru_cache_test.rb".freeze, "tests/memoize_test.rb".freeze, "tests/method_description_test.rb".freeze, "tests/minimize_test.rb".freeze, "tests/module_group_test.rb".freeze, "tests/named_set_test.rb".freeze, "tests/named_test.rb".freeze, "tests/null_test.rb".freeze, "tests/p_test.rb".freeze, "tests/partial_application_test.rb".freeze, "tests/proc_compose_test.rb".freeze, "tests/proc_prelude_test.rb".freeze, "tests/range_plus_test.rb".freeze, "tests/require_maybe_test.rb".freeze, "tests/responding_test.rb".freeze, "tests/rotate_test.rb".freeze, "tests/scope_test.rb".freeze, "tests/secure_write_test.rb".freeze, "tests/sexy_singleton_test.rb".freeze, "tests/string_byte_order_mark_test.rb".freeze, "tests/string_camelize_test.rb".freeze, "tests/string_underscore_test.rb".freeze, "tests/string_version_test.rb".freeze, "tests/subhash_test.rb".freeze, "tests/temp_io_test.rb".freeze, "tests/time_dummy_test.rb".freeze, "tests/time_freezer_test.rb".freeze, "tests/to_test.rb".freeze, "tests/token_test.rb".freeze, "tests/unit_test.rb".freeze]
|
|
23
23
|
|
|
24
24
|
s.specification_version = 4
|
|
25
25
|
|
|
26
|
-
s.add_development_dependency(%q<gem_hadar>.freeze, ["
|
|
26
|
+
s.add_development_dependency(%q<gem_hadar>.freeze, [">= 2.16.3".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<simplecov>.freeze, [">= 0".freeze])
|
|
@@ -31,5 +31,6 @@ Gem::Specification.new do |s|
|
|
|
31
31
|
s.add_development_dependency(%q<test-unit>.freeze, ["~> 3.7".freeze])
|
|
32
32
|
s.add_runtime_dependency(%q<sync>.freeze, [">= 0".freeze])
|
|
33
33
|
s.add_runtime_dependency(%q<bigdecimal>.freeze, [">= 0".freeze])
|
|
34
|
+
s.add_runtime_dependency(%q<readline>.freeze, [">= 0".freeze])
|
|
34
35
|
s.add_runtime_dependency(%q<mize>.freeze, ["~> 0.6".freeze])
|
|
35
36
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tins
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.51.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Florian Frank
|
|
@@ -13,16 +13,16 @@ dependencies:
|
|
|
13
13
|
name: gem_hadar
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version:
|
|
18
|
+
version: 2.16.3
|
|
19
19
|
type: :development
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
|
-
- - "
|
|
23
|
+
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version:
|
|
25
|
+
version: 2.16.3
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: all_images
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -121,6 +121,20 @@ dependencies:
|
|
|
121
121
|
- - ">="
|
|
122
122
|
- !ruby/object:Gem::Version
|
|
123
123
|
version: '0'
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: readline
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - ">="
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '0'
|
|
131
|
+
type: :runtime
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - ">="
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '0'
|
|
124
138
|
- !ruby/object:Gem::Dependency
|
|
125
139
|
name: mize
|
|
126
140
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -484,7 +498,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
484
498
|
- !ruby/object:Gem::Version
|
|
485
499
|
version: '0'
|
|
486
500
|
requirements: []
|
|
487
|
-
rubygems_version: 4.0.
|
|
501
|
+
rubygems_version: 4.0.3
|
|
488
502
|
specification_version: 4
|
|
489
503
|
summary: Useful stuff.
|
|
490
504
|
test_files:
|