brood 0.1.0 → 0.2.0
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/CHANGELOG.md +16 -0
- data/Gemfile.lock +1 -1
- data/README.md +12 -5
- data/lib/brood/version.rb +1 -1
- data/lib/brood.rb +33 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67a821f02646dcebab0406b3d433d07684aa885e15b0d4afaf949266b566e1b8
|
4
|
+
data.tar.gz: 90d006c03c5d65347e13054a049bc5fd72aeb504739253feb75cfb40b8c8eccb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ad830243d5546ab2fc48fb399219d075b97b1f416d3f8b39bfb9dd2d4eb2468f402a8e30cacc8b30d1b730cd7ec93ccbfe5572656230dd3b92e49325dec0b91
|
7
|
+
data.tar.gz: e91dc6348451eb1d3f05707ccba10e18c155a76682b97e62306b49c9854c1c9c96a7cc624bf235f1d122ea93476fb532f97db21a99c893c34d9eb67f1c7a8586
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
## [0.2.0] - 2024-07-18
|
2
|
+
### Replace method :set with :create and :build
|
3
|
+
|
4
|
+
Features:
|
5
|
+
|
6
|
+
* Add method `Brood#create` (calls `Fabricate`)
|
7
|
+
* Add method `Brood#build` (calls `Fabricate.build`)
|
8
|
+
|
9
|
+
Breaking changes:
|
10
|
+
|
11
|
+
* Remove method `Brood#set`
|
12
|
+
|
13
|
+
Misc:
|
14
|
+
|
15
|
+
* Update README.md
|
16
|
+
|
1
17
|
## [0.1.0] - 2024-07-18
|
2
18
|
### Initial release
|
3
19
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -50,20 +50,27 @@ end
|
|
50
50
|
@brood = Brood.new
|
51
51
|
|
52
52
|
# Fabricate objects:
|
53
|
-
gizmos = @brood.
|
54
|
-
@brood.
|
55
|
-
@brood.
|
53
|
+
gizmos = @brood.create([:department, :gizmos], {name: "Gizmos"}) # => Department instance
|
54
|
+
@brood.create([:user, :bar], {id: 12, name: "Bar"}) # => User instance
|
55
|
+
@brood.create([:user, :baaz], {name: "Baaz"}) # => User instance
|
56
56
|
|
57
57
|
# Pass a block to customize the object (forwarded to the Fabricator block argument):
|
58
|
-
@brood.
|
58
|
+
@brood.create([:user, :baar], {name: "Baar"}) do |user|
|
59
59
|
user.department = gizmos
|
60
60
|
end
|
61
61
|
|
62
|
+
# Skip persistence (calls Fabricate.build)
|
63
|
+
gadgets = @brood.build([:department, :gadgets], {name: "Gadgets"}) # => Department instance
|
64
|
+
foobar = @brood.build([:user, :foobar], {name: "Foobar"}) do |user|
|
65
|
+
user.department = gadgets
|
66
|
+
end # => User instance
|
67
|
+
|
62
68
|
# Retrieve objects:
|
63
69
|
@brood.get([:user, :bar]) # => User instance
|
64
70
|
@brood.get([:user, :baaz]) # => User instance
|
71
|
+
@brood.get([:user, :foobar]) # => User instance
|
72
|
+
@brood.get([:bogus, :bar]) # raises Brood::UnknownObjectTypeError
|
65
73
|
@brood.get([:user, :quux]) # raises Brood::ObjectNotFoundError
|
66
|
-
@brood.get([:bogus, :bar]) # raises ArgumentError
|
67
74
|
|
68
75
|
# Pass a block to customize and lock the object:
|
69
76
|
@brood.get([:user, :bar]) do |user|
|
data/lib/brood/version.rb
CHANGED
data/lib/brood.rb
CHANGED
@@ -16,15 +16,12 @@ class Brood
|
|
16
16
|
# Error raised when attempting to re-define an object for the given key.
|
17
17
|
class ObjectAlreadyDefinedError < Error; end
|
18
18
|
|
19
|
-
# Error raised when an object is not found for the given key.
|
20
|
-
class ObjectNotFoundError < Error; end
|
21
|
-
|
22
|
-
# Error raised when an object does not match its specified type.
|
23
|
-
class ObjectTypeError < Error; end
|
24
|
-
|
25
19
|
# Error raised when attempting to retrieve an unknown object-type.
|
26
20
|
class UnknownObjectTypeError < Error; end
|
27
21
|
|
22
|
+
# Error raised when an object is not found for the given key.
|
23
|
+
class ObjectNotFoundError < Error; end
|
24
|
+
|
28
25
|
def initialize
|
29
26
|
@store = {}
|
30
27
|
@object_mutexes = {}
|
@@ -38,18 +35,34 @@ class Brood
|
|
38
35
|
# @raise [ArgumentError] If the arguments are invalid.
|
39
36
|
# @raise [ObjectAlreadyDefinedError] If an object is already defined for the key.
|
40
37
|
# @return [Object] The fabricated object.
|
41
|
-
def
|
38
|
+
def create(key, attributes, &)
|
42
39
|
object_type, object_name = key
|
43
40
|
validate_arguments(object_type, object_name)
|
44
41
|
|
45
42
|
create_object(object_type, object_name, attributes, &)
|
46
43
|
end
|
47
44
|
|
45
|
+
# Adds an object to the store, skipping persistence.
|
46
|
+
#
|
47
|
+
# @param key [Array<Symbol, Symbol>] The key representing the object type and name.
|
48
|
+
# @param attributes [Hash] Optional attributes for the object.
|
49
|
+
# @yield Optional block to customize the object.
|
50
|
+
# @raise [ArgumentError] If the arguments are invalid.
|
51
|
+
# @raise [ObjectAlreadyDefinedError] If an object is already defined for the key.
|
52
|
+
# @return [Object] The fabricated object.
|
53
|
+
def build(key, attributes, &)
|
54
|
+
object_type, object_name = key
|
55
|
+
validate_arguments(object_type, object_name)
|
56
|
+
|
57
|
+
build_object(object_type, object_name, attributes, &)
|
58
|
+
end
|
59
|
+
|
48
60
|
# Retrieves an object from the store.
|
49
61
|
#
|
50
62
|
# @param key [Array<Symbol, Symbol>] The key representing the object type and name.
|
51
|
-
# @yield Optional block to customize the object; the object is
|
63
|
+
# @yield Optional block to customize the object; access to the object is protected by a thread lock.
|
52
64
|
# @raise [ArgumentError] If the arguments are invalid.
|
65
|
+
# @raise [UnknownObjectTypeError] If the object-type keyword has no entries.
|
53
66
|
# @raise [ObjectNotFoundError] If the object is not found.
|
54
67
|
# @return [Object] The fabricated object.
|
55
68
|
def get(key, &block)
|
@@ -89,6 +102,18 @@ class Brood
|
|
89
102
|
)
|
90
103
|
end
|
91
104
|
|
105
|
+
def build_object(object_type, object_name, attributes, &)
|
106
|
+
@store[object_type] ||= {}
|
107
|
+
@store[object_type][:objects] ||= {}
|
108
|
+
if @store[object_type][:objects].key?(object_name)
|
109
|
+
raise ObjectAlreadyDefinedError,
|
110
|
+
"A object is already defined: (#{object_type} #{object_name})"
|
111
|
+
end
|
112
|
+
@store[object_type][:objects][object_name] = Fabricate.build(
|
113
|
+
object_type, **attributes, &
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
92
117
|
def retrieve_object(object_type, object_name, &block)
|
93
118
|
unless @store.key?(object_type)
|
94
119
|
raise UnknownObjectTypeError,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brood
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Newton
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-07-
|
11
|
+
date: 2024-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fabrication
|