values 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
+