activeitem 0.0.4 → 0.0.5
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +12 -0
- data/README.md +7 -0
- data/certs/stowzilla.pem +31 -0
- data/lib/active_item/base.rb +1 -3
- data/lib/active_item/relation.rb +4 -0
- data/lib/active_item/validations.rb +7 -0
- data/lib/active_item/version.rb +1 -2
- data.tar.gz.sig +0 -0
- metadata +36 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eb93b14273a49d3d4c7fa9c9ffb51164eaa504f031f66cafeec853cabda2742d
|
|
4
|
+
data.tar.gz: b94e92229ce16523f029d7695a70cfcb1db2c90b6e4d0641ccb865b5e84a5301
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c5a15aa9fdfd5b8079f53d3a57225ed3622559256f6df129a44c1d822b6d0cdf5b380e130f28cd34ba328baa4113bda48dfcf4c0e9949a4f5d1bbab922060ad
|
|
7
|
+
data.tar.gz: 2d66cf596eb64088d2e0758e9d967947e26708188e7b1fe4d0dddded8290a2e0b03c4a691668414b7e29a2b4310f25cb592b77430c6855e9bc5af87e2b1fb86f
|
checksums.yaml.gz.sig
ADDED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.0.5
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Fix RuboCop offenses: merge nested conditional in `Base`, remove trailing newline in `version.rb`
|
|
8
|
+
|
|
9
|
+
### Infrastructure
|
|
10
|
+
|
|
11
|
+
- Fix CI workflow to trigger on `master` branch (was incorrectly set to `main`)
|
|
12
|
+
- Add bundler-audit security scanning to CI pipeline
|
|
13
|
+
- Add gem signing with certificate chain for consumer verification
|
|
14
|
+
|
|
3
15
|
## 0.0.4
|
|
4
16
|
|
|
5
17
|
### Fixed
|
data/README.md
CHANGED
|
@@ -8,6 +8,13 @@ ActiveRecord-like ORM for AWS DynamoDB.
|
|
|
8
8
|
gem 'activeitem'
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
To install with signature verification:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
gem cert --add <(curl -Ls https://raw.githubusercontent.com/stowzilla/activeitem/master/certs/stowzilla.pem)
|
|
15
|
+
gem install activeitem -P MediumSecurity
|
|
16
|
+
```
|
|
17
|
+
|
|
11
18
|
## Configuration
|
|
12
19
|
|
|
13
20
|
```ruby
|
data/certs/stowzilla.pem
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
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
|
|
31
|
+
-----END CERTIFICATE-----
|
data/lib/active_item/base.rb
CHANGED
|
@@ -105,9 +105,7 @@ module ActiveItem
|
|
|
105
105
|
|
|
106
106
|
define_method("#{attr_name}=") do |value|
|
|
107
107
|
old_value = instance_variable_get("@#{attr_name}")
|
|
108
|
-
if old_value != value
|
|
109
|
-
send("#{attr_name}_will_change!") unless changed_attributes.key?(attr_name)
|
|
110
|
-
end
|
|
108
|
+
send("#{attr_name}_will_change!") if (old_value != value) && !changed_attributes.key?(attr_name)
|
|
111
109
|
instance_variable_set("@#{attr_name}", value)
|
|
112
110
|
end
|
|
113
111
|
end
|
data/lib/active_item/relation.rb
CHANGED
|
@@ -1346,6 +1346,10 @@ module ActiveItem
|
|
|
1346
1346
|
# Each query is a lightweight indexed count — no data transfer, just a number.
|
|
1347
1347
|
# Uses thread pool for parallel execution when multiple parent IDs exist.
|
|
1348
1348
|
#
|
|
1349
|
+
# Thread safety: Aws::DynamoDB::Client is thread-safe — it uses internal
|
|
1350
|
+
# connection pooling (Net::HTTP persistent connections per thread). The Mutex
|
|
1351
|
+
# here protects only the shared `counts` hash, not the client itself.
|
|
1352
|
+
#
|
|
1349
1353
|
# @param assoc_class [Class] The associated model class
|
|
1350
1354
|
# @param index_name [String] GSI index name
|
|
1351
1355
|
# @param dynamo_fk [String] The DynamoDB attribute name for the foreign key
|
|
@@ -5,6 +5,13 @@ require 'active_model'
|
|
|
5
5
|
module ActiveItem
|
|
6
6
|
# ActiveModel validator that checks attribute uniqueness by querying
|
|
7
7
|
# DynamoDB, with optional scope and custom condition support.
|
|
8
|
+
#
|
|
9
|
+
# IMPORTANT LIMITATIONS:
|
|
10
|
+
# - TOCTOU race condition: DynamoDB is eventually consistent, so a check-then-write
|
|
11
|
+
# cannot guarantee uniqueness under concurrent writes. For strong uniqueness, use
|
|
12
|
+
# a DynamoDB conditional put (attribute_not_exists) at the persistence layer instead.
|
|
13
|
+
# - DoS vector: without an index, uniqueness checks fall back to table scans. Always
|
|
14
|
+
# ensure validated attributes have a GSI to avoid full-table scans on write paths.
|
|
8
15
|
class UniquenessValidator < ActiveModel::EachValidator
|
|
9
16
|
def validate_each(record, attribute, value)
|
|
10
17
|
return if value.nil? || value.to_s.empty?
|
data/lib/active_item/version.rb
CHANGED
data.tar.gz.sig
ADDED
|
Binary file
|
metadata
CHANGED
|
@@ -1,15 +1,47 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activeitem
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andy Davis
|
|
8
8
|
- Adam Dalton
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
|
-
cert_chain:
|
|
12
|
-
|
|
11
|
+
cert_chain:
|
|
12
|
+
- |
|
|
13
|
+
-----BEGIN CERTIFICATE-----
|
|
14
|
+
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
|
|
43
|
+
-----END CERTIFICATE-----
|
|
44
|
+
date: 2026-05-26 00:00:00.000000000 Z
|
|
13
45
|
dependencies:
|
|
14
46
|
- !ruby/object:Gem::Dependency
|
|
15
47
|
name: activemodel
|
|
@@ -135,6 +167,7 @@ files:
|
|
|
135
167
|
- CHANGELOG.md
|
|
136
168
|
- LICENSE.txt
|
|
137
169
|
- README.md
|
|
170
|
+
- certs/stowzilla.pem
|
|
138
171
|
- lib/active_item/associations.rb
|
|
139
172
|
- lib/active_item/base.rb
|
|
140
173
|
- lib/active_item/composed_of.rb
|
metadata.gz.sig
ADDED
|
Binary file
|