values 1.3.0 → 1.4.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.
data/Gemfile CHANGED
@@ -6,8 +6,8 @@ source "http://rubygems.org"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "rspec", "~> 2.3.0"
10
- gem "bundler", "~> 1.0.0"
11
- gem "jeweler", "~> 1.5.2"
9
+ gem "rspec", "~> 2.11.0"
10
+ gem "bundler", "~> 1.0"
11
+ gem "jeweler", "~> 1.8.4"
12
12
  gem "rcov", ">= 0"
13
13
  end
data/Gemfile.lock CHANGED
@@ -1,28 +1,32 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- diff-lcs (1.1.2)
4
+ diff-lcs (1.1.3)
5
5
  git (1.2.5)
6
- jeweler (1.5.2)
7
- bundler (~> 1.0.0)
6
+ jeweler (1.8.4)
7
+ bundler (~> 1.0)
8
8
  git (>= 1.2.5)
9
9
  rake
10
- rake (0.8.7)
10
+ rdoc
11
+ json (1.7.5)
12
+ rake (0.9.2.2)
11
13
  rcov (0.9.9)
12
- rspec (2.3.0)
13
- rspec-core (~> 2.3.0)
14
- rspec-expectations (~> 2.3.0)
15
- rspec-mocks (~> 2.3.0)
16
- rspec-core (2.3.1)
17
- rspec-expectations (2.3.0)
18
- diff-lcs (~> 1.1.2)
19
- rspec-mocks (2.3.0)
14
+ rdoc (3.12)
15
+ json (~> 1.4)
16
+ rspec (2.11.0)
17
+ rspec-core (~> 2.11.0)
18
+ rspec-expectations (~> 2.11.0)
19
+ rspec-mocks (~> 2.11.0)
20
+ rspec-core (2.11.1)
21
+ rspec-expectations (2.11.3)
22
+ diff-lcs (~> 1.1.3)
23
+ rspec-mocks (2.11.3)
20
24
 
21
25
  PLATFORMS
22
26
  ruby
23
27
 
24
28
  DEPENDENCIES
25
- bundler (~> 1.0.0)
26
- jeweler (~> 1.5.2)
29
+ bundler (~> 1.0)
30
+ jeweler (~> 1.8.4)
27
31
  rcov
28
- rspec (~> 2.3.0)
32
+ rspec (~> 2.11.0)
data/README.md CHANGED
@@ -3,32 +3,38 @@ These mostly look like classes created using Struct, but fix two problems with t
3
3
 
4
4
  Struct constructors can take less than the default number of arguments and set other fields as nil:
5
5
 
6
- Point = Struct.new(:x,:y)
7
- Point.new(1)
8
- => #<struct Point x=1, y=nil>
6
+ ```ruby
7
+ Point = Struct.new(:x,:y)
8
+ Point.new(1)
9
+ # => #<struct Point x=1, y=nil>
10
+ ```
9
11
 
10
12
  Structs are also mutable:
11
13
 
12
- Point = Struct.new(:x,:y)
13
- p = Point.new(1,2)
14
- p.x = 2
15
- p.x
16
- => 2
14
+ ```ruby
15
+ Point = Struct.new(:x,:y)
16
+ p = Point.new(1,2)
17
+ p.x = 2
18
+ p.x
19
+ # => 2
20
+ ```
17
21
 
18
22
  Values fixes both of these:
19
23
 
20
- Point = Value.new(:x, :y)
21
- Point.new(1)
22
- => ArgumentError: wrong number of arguments, 1 for 2
23
- from /Users/tcrayford/Projects/ruby/values/lib/values.rb:7:in `block (2 levels) in new
24
- from (irb):5:in new
25
- from (irb):5
26
- from /usr/local/bin/irb:12:in `<main>
27
-
28
- p = Point.new(1,2)
29
- p.x = 1
30
- => NoMethodError: undefined method x= for #<Point:0x00000100943788 @x=0, @y=1>
31
- from (irb):6
32
- from /usr/local/bin/irb:12:in <main>
24
+ ```ruby
25
+ Point = Value.new(:x, :y)
26
+ Point.new(1)
27
+ # => ArgumentError: wrong number of arguments, 1 for 2
28
+ # from /Users/tcrayford/Projects/ruby/values/lib/values.rb:7:in `block (2 levels) in new
29
+ # from (irb):5:in new
30
+ # from (irb):5
31
+ # from /usr/local/bin/irb:12:in `<main>
32
+
33
+ p = Point.new(1,2)
34
+ p.x = 1
35
+ # => NoMethodError: undefined method x= for #<Point:0x00000100943788 @x=0, @y=1>
36
+ # from (irb):6
37
+ # from /usr/local/bin/irb:12:in <main>
38
+ ```
33
39
 
34
40
  Value does NOT have all the features of Struct (nor is it meant to).
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
1
+ 1.4.0
data/lib/values.rb CHANGED
@@ -17,13 +17,9 @@ class Value
17
17
  def self.with(hash)
18
18
  args = []
19
19
  self::VALUE_ATTRS.each do |field|
20
- val = hash[field]
21
- if val
22
- args << val
23
- else
24
- raise ArgumentError.new("Missing field: #{field}")
25
- end
20
+ args << hash.fetch(field)
26
21
  end
22
+
27
23
  unexpected_keys = hash.keys - self::VALUE_ATTRS
28
24
  if unexpected_keys.any?
29
25
  raise ArgumentError.new("Unexpected hash keys: #{unexpected_keys}")
data/spec/values_spec.rb CHANGED
@@ -71,6 +71,13 @@ describe 'values' do
71
71
  end.to raise_error
72
72
  end
73
73
 
74
+ it 'does not error when fields are explicitly nil' do
75
+ Money = Value.new(:amount, :denomination)
76
+ expect do
77
+ Money.with(:amount => 1, :denomination => nil)
78
+ end.not_to raise_error
79
+ end
80
+
74
81
  describe '#hash and equality' do
75
82
  Y = Value.new(:x, :y)
76
83
 
data/values.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "values"
8
- s.version = "1.3.0"
8
+ s.version = "1.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tom Crayford"]
12
- s.date = "2013-01-17"
12
+ s.date = "2013-02-03"
13
13
  s.description = "Simple immutable value objects for ruby.\n\n Make a new value class: Point = Value.new(:x, :y)\n And use it:\n p = Point.new(1,0)\n p.x\n => 1\n p.y\n => 0\n "
14
14
  s.email = "tcrayford@googlemail.com"
15
15
  s.extra_rdoc_files = [
@@ -35,29 +35,25 @@ Gem::Specification.new do |s|
35
35
  s.require_paths = ["lib"]
36
36
  s.rubygems_version = "1.8.15"
37
37
  s.summary = "Simple immutable value objects for ruby"
38
- s.test_files = [
39
- "spec/spec_helper.rb",
40
- "spec/values_spec.rb"
41
- ]
42
38
 
43
39
  if s.respond_to? :specification_version then
44
40
  s.specification_version = 3
45
41
 
46
42
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
- s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
48
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
49
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
43
+ s.add_development_dependency(%q<rspec>, ["~> 2.11.0"])
44
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
45
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
50
46
  s.add_development_dependency(%q<rcov>, [">= 0"])
51
47
  else
52
- s.add_dependency(%q<rspec>, ["~> 2.3.0"])
53
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
54
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
48
+ s.add_dependency(%q<rspec>, ["~> 2.11.0"])
49
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
50
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
55
51
  s.add_dependency(%q<rcov>, [">= 0"])
56
52
  end
57
53
  else
58
- s.add_dependency(%q<rspec>, ["~> 2.3.0"])
59
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
54
+ s.add_dependency(%q<rspec>, ["~> 2.11.0"])
55
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
56
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
61
57
  s.add_dependency(%q<rcov>, [">= 0"])
62
58
  end
63
59
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: values
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 1.3.0
10
+ version: 1.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tom Crayford
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-01-17 00:00:00 Z
18
+ date: 2013-02-03 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -23,12 +23,12 @@ dependencies:
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- hash: 3
26
+ hash: 35
27
27
  segments:
28
28
  - 2
29
- - 3
29
+ - 11
30
30
  - 0
31
- version: 2.3.0
31
+ version: 2.11.0
32
32
  prerelease: false
33
33
  type: :development
34
34
  requirement: *id001
@@ -39,12 +39,11 @@ dependencies:
39
39
  requirements:
40
40
  - - ~>
41
41
  - !ruby/object:Gem::Version
42
- hash: 23
42
+ hash: 15
43
43
  segments:
44
44
  - 1
45
45
  - 0
46
- - 0
47
- version: 1.0.0
46
+ version: "1.0"
48
47
  prerelease: false
49
48
  type: :development
50
49
  requirement: *id002
@@ -55,12 +54,12 @@ dependencies:
55
54
  requirements:
56
55
  - - ~>
57
56
  - !ruby/object:Gem::Version
58
- hash: 7
57
+ hash: 63
59
58
  segments:
60
59
  - 1
61
- - 5
62
- - 2
63
- version: 1.5.2
60
+ - 8
61
+ - 4
62
+ version: 1.8.4
64
63
  prerelease: false
65
64
  type: :development
66
65
  requirement: *id003
@@ -134,6 +133,5 @@ rubygems_version: 1.8.15
134
133
  signing_key:
135
134
  specification_version: 3
136
135
  summary: Simple immutable value objects for ruby
137
- test_files:
138
- - spec/spec_helper.rb
139
- - spec/values_spec.rb
136
+ test_files: []
137
+