tins 1.51.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 +10 -0
- data/Rakefile +4 -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 +4 -4
- metadata +6 -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,15 @@
|
|
|
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
|
+
|
|
3
13
|
## 2025-12-20 v1.51.0
|
|
4
14
|
|
|
5
15
|
- Added `readline` as a runtime dependency in both `Rakefile` and
|
data/Rakefile
CHANGED
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.51.
|
|
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.51.
|
|
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])
|
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.51.
|
|
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
|
|
@@ -498,7 +498,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
498
498
|
- !ruby/object:Gem::Version
|
|
499
499
|
version: '0'
|
|
500
500
|
requirements: []
|
|
501
|
-
rubygems_version: 4.0.
|
|
501
|
+
rubygems_version: 4.0.3
|
|
502
502
|
specification_version: 4
|
|
503
503
|
summary: Useful stuff.
|
|
504
504
|
test_files:
|