magic-decorator 0.3.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +45 -0
- data/lib/magic/decorator/base.rb +2 -0
- data/lib/magic/decorator/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84b46e61d09d011e36bfd527b1e99bf9b83a7d3d4844f9afcd11304abd5c7990
|
4
|
+
data.tar.gz: 22f50120c5b4b8b2887d28b3e909f698128c04a37293c9409d93411dddb1f2e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ad5fc1e9e7cf8fab9a75a792cc31f027e113e95f7968ee2f6502b113c4f8f943bf7f111fa599929896e6bf7a3a77cf7cf13d46c6fe58dd52e770fc109278d42
|
7
|
+
data.tar.gz: 743f50f6835be84d59028240ec9c306df79f8647c90d4b4c34d39eb9e462741cbfc3f0ebde4bea447c0a94b731e61a8e370c497d84821bfe9dfa4272771f3d8b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## [1.0.0] — 2024-11-23
|
2
|
+
|
3
|
+
This release marks the gem to be stable enough.
|
4
|
+
|
5
|
+
> [!NOTE]
|
6
|
+
> Nothing notable was changed in the code since the last version.
|
7
|
+
|
8
|
+
### Documentation
|
9
|
+
|
10
|
+
- Added a section about overriding the defaults.
|
11
|
+
- Added a section about testing.
|
12
|
+
|
13
|
+
|
1
14
|
## [0.3.0] — 2024-10-27
|
2
15
|
|
3
16
|
### Added
|
data/README.md
CHANGED
@@ -165,6 +165,51 @@ It automagically decorates all its decoratable items.
|
|
165
165
|
- enables _double-splat_ operator: `**decorated`,
|
166
166
|
- enumerating methods yield decorated items.
|
167
167
|
|
168
|
+
## Overriding the magic
|
169
|
+
|
170
|
+
When one needs more complicated behavior than the default one or feels like [_explicit is better than implicit_](
|
171
|
+
https://peps.python.org/pep-0020/#the-zen-of-python
|
172
|
+
).
|
173
|
+
|
174
|
+
### Decorator class inference
|
175
|
+
|
176
|
+
One may override `#decorator` for any decoratable class, to be used instead of Magic Lookup.
|
177
|
+
|
178
|
+
- That could be as straightforward as a constant:
|
179
|
+
|
180
|
+
```ruby
|
181
|
+
class Guest
|
182
|
+
private
|
183
|
+
|
184
|
+
def decorator = UserDecorator
|
185
|
+
end
|
186
|
+
|
187
|
+
guest.decorate # => instance of UserDecorator
|
188
|
+
```
|
189
|
+
|
190
|
+
- Or, that could be virtually any logic:
|
191
|
+
|
192
|
+
```ruby
|
193
|
+
class User
|
194
|
+
private
|
195
|
+
|
196
|
+
def decorator = admin? ? AdminDecorator : super
|
197
|
+
end
|
198
|
+
|
199
|
+
user.decorate # => instance of UserDecorator
|
200
|
+
admin.decorate # => instance of AdminDecorator
|
201
|
+
```
|
202
|
+
|
203
|
+
## Testing decorators
|
204
|
+
|
205
|
+
Testing a decorator is much like testing any other class.
|
206
|
+
|
207
|
+
To test whether an object is decorated one can use `#decorated?` method.
|
208
|
+
|
209
|
+
> [!NOTE]
|
210
|
+
> A decorated object equals the original one (`object.decorated == object`).
|
211
|
+
> Thus, any existing tests shouldn’t break when the objects being tested get decorated.
|
212
|
+
|
168
213
|
## Development
|
169
214
|
|
170
215
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/magic/decorator/base.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magic-decorator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Senko
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2024-
|
10
|
+
date: 2024-11-23 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: magic-lookup
|
@@ -69,7 +69,7 @@ licenses:
|
|
69
69
|
metadata:
|
70
70
|
homepage_uri: https://github.com/Alexander-Senko/magic-decorator
|
71
71
|
source_code_uri: https://github.com/Alexander-Senko/magic-decorator
|
72
|
-
changelog_uri: https://github.com/Alexander-Senko/magic-decorator/blob/
|
72
|
+
changelog_uri: https://github.com/Alexander-Senko/magic-decorator/blob/v1.0.0/CHANGELOG.md
|
73
73
|
rdoc_options: []
|
74
74
|
require_paths:
|
75
75
|
- lib
|