ruby_peter_v 0.0.3 → 0.0.4
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.
- data/HISTORY.txt +5 -1
- data/README.md +9 -0
- data/lib/ruby_peter_v/set_once.rb +16 -0
- data/lib/ruby_peter_v/version.rb +1 -1
- data/lib/ruby_peter_v.rb +1 -0
- data/spec/set_once_spec.rb +30 -0
- metadata +5 -2
data/HISTORY.txt
CHANGED
data/README.md
CHANGED
@@ -34,6 +34,15 @@ Or install it yourself as:
|
|
34
34
|
This is similar to the behavior ios nil would be considered
|
35
35
|
smaller than all other objects.
|
36
36
|
|
37
|
+
* #set_once(attribute, value) on Object
|
38
|
+
|
39
|
+
Setting the instance variable with name attribute (a symbol),
|
40
|
+
once to a value value. This acts as a simple form of an
|
41
|
+
immutable attribute. After initialization of the object, it
|
42
|
+
can still be set once from nil to a specific value, but after
|
43
|
+
that, it can never be changed to a different value. Writing
|
44
|
+
it twice with the same value does not trow an exception.
|
45
|
+
|
37
46
|
## Contributing
|
38
47
|
|
39
48
|
1. Fork it
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class SetOnceError < StandardError ; end
|
2
|
+
|
3
|
+
class Object
|
4
|
+
|
5
|
+
def set_once(attribute, value)
|
6
|
+
ivar_symbol = :"@#{attribute}"
|
7
|
+
instance_value = instance_variable_get(ivar_symbol)
|
8
|
+
if (instance_value && instance_value != value)
|
9
|
+
raise(
|
10
|
+
SetOnceError,
|
11
|
+
"Value of #{attribute} was #{instance_value}, trying to set it to #{value}")
|
12
|
+
end
|
13
|
+
instance_variable_set(:"@#{attribute}", value)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/lib/ruby_peter_v/version.rb
CHANGED
data/lib/ruby_peter_v.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "set_once" do
|
4
|
+
|
5
|
+
let(:subject) { Object.new }
|
6
|
+
|
7
|
+
it "can be set when nil" do
|
8
|
+
subject.instance_variable_get(:@attr).should be_nil # assert pre-condition
|
9
|
+
value = 10
|
10
|
+
subject.set_once(:attr, value)
|
11
|
+
subject.instance_variable_get(:@attr).should == value
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "setting it two times" do
|
15
|
+
it "with the same value just works" do
|
16
|
+
value = 10
|
17
|
+
subject.set_once(:attr, value)
|
18
|
+
subject.set_once(:attr, value)
|
19
|
+
subject.instance_variable_get(:@attr).should == value
|
20
|
+
end
|
21
|
+
|
22
|
+
it "with a different value raises a SetOnceError" do
|
23
|
+
value = 10
|
24
|
+
subject.set_once(:attr, value)
|
25
|
+
lambda { subject.set_once(:attr, value+1) } . should raise_error(
|
26
|
+
SetOnceError,
|
27
|
+
"Value of attr was 10, trying to set it to 11")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_peter_v
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -43,10 +43,12 @@ files:
|
|
43
43
|
- Rakefile
|
44
44
|
- lib/ruby_peter_v.rb
|
45
45
|
- lib/ruby_peter_v/max_with_nil.rb
|
46
|
+
- lib/ruby_peter_v/set_once.rb
|
46
47
|
- lib/ruby_peter_v/single.rb
|
47
48
|
- lib/ruby_peter_v/version.rb
|
48
49
|
- ruby_peter_v.gemspec
|
49
50
|
- spec/max_with_nil_spec.rb
|
51
|
+
- spec/set_once_spec.rb
|
50
52
|
- spec/single_spec.rb
|
51
53
|
- spec/spec_helper.rb
|
52
54
|
homepage: https://github.com/petervandenabeele/ruby_peter_v
|
@@ -75,5 +77,6 @@ specification_version: 3
|
|
75
77
|
summary: Ruby helpers for @peter_v
|
76
78
|
test_files:
|
77
79
|
- spec/max_with_nil_spec.rb
|
80
|
+
- spec/set_once_spec.rb
|
78
81
|
- spec/single_spec.rb
|
79
82
|
- spec/spec_helper.rb
|