setonce 1.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 +7 -0
- data/README.md +41 -0
- data/lib/setonce.rb +32 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f595482684cdea69750a95cc080a3b488e53e0a13f211ff9567d195409bb50c3
|
4
|
+
data.tar.gz: 6973b484f241a2fef78a4692d66e065dca5776544a334cdc0553845d381a1b07
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0a894e4e4adfaafab468dcfb3d03ff44b8935c91fb30b6daf6ab11b02d9ea145d003e99827a594893ae443ecaf081e7c7053d50df2a7d976a4a3eb672a286e81
|
7
|
+
data.tar.gz: 7b189a3e2244e1b1334ac49823e0246881cf3580159d671ba2193048c2a6714338395ed7ddd75b7d693fce089afad12e2ef2910baffbf7d2ec4a4857ccb6288c
|
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# attr_set_once
|
2
|
+
|
3
|
+
This gem adds a `attr_set_once` to the Class class. Use `attr_set_once` like
|
4
|
+
`attr_accessor`.
|
5
|
+
|
6
|
+
```ruby
|
7
|
+
class MyClass
|
8
|
+
attr_set_once :hsa
|
9
|
+
end
|
10
|
+
```
|
11
|
+
|
12
|
+
The attribute can be set as usual:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
myob = MyClass.new
|
16
|
+
myob.hsa = 'x'
|
17
|
+
myob.hsa #=> x
|
18
|
+
```
|
19
|
+
|
20
|
+
However, once the attribute has been set, it cannot be set again.
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
myob.hsa = 'y' # raises 'set-once-instance-variable-already-set: hsa'
|
24
|
+
```
|
25
|
+
|
26
|
+
## Install
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
gem install setonce
|
30
|
+
```
|
31
|
+
|
32
|
+
## Author
|
33
|
+
|
34
|
+
Mike O'Sullivan
|
35
|
+
mike@idocs.com
|
36
|
+
|
37
|
+
## History
|
38
|
+
|
39
|
+
| version | date | notes |
|
40
|
+
|---------|-------------|-------------------------------------------------------|
|
41
|
+
| 1.0 | Mar 2, 2020 | Initial upload. |
|
data/lib/setonce.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#===============================================================================
|
2
|
+
# Class
|
3
|
+
#
|
4
|
+
class Class
|
5
|
+
# attr_set_once
|
6
|
+
def attr_set_once(*atts)
|
7
|
+
atts.each do |att|
|
8
|
+
att = att.to_s
|
9
|
+
|
10
|
+
# set
|
11
|
+
define_method("#{att}=") do |val|
|
12
|
+
if instance_variable_defined?("@#{att}")
|
13
|
+
raise 'set-once-instance-variable-already-set: ' + att
|
14
|
+
else
|
15
|
+
instance_variable_set "@#{att}", val
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# get
|
20
|
+
define_method("#{att}") do
|
21
|
+
if instance_variable_defined?("@#{att}")
|
22
|
+
return instance_variable_get("@#{att}")
|
23
|
+
else
|
24
|
+
return nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
#
|
31
|
+
# Class
|
32
|
+
#===============================================================================
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: setonce
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike O'Sullivan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-03-02 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Like attr_accessor, but attribute can only be set once
|
14
|
+
email: mike@idocs.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- README.md
|
20
|
+
- lib/setonce.rb
|
21
|
+
homepage: https://rubygems.org/gems/setonce
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.7.6
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: Object attribute that can only be set once
|
45
|
+
test_files: []
|