attr_extras 2.2.3 → 2.3.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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NDkyMTUzNDhkY2Q0NjFiMmQ5ZGNhMWM5MGJkOGNmOWYzMTE4MTkyOA==
5
- data.tar.gz: !binary |-
6
- ZTVhMmQ4NDc3YTExMjY1Y2NkYzkzNjk5ZGRmOWM4OTVhMmQwODlkMA==
2
+ SHA1:
3
+ metadata.gz: bfeb7ee3f02c3e7a249a3a76041fa4faf1604b36
4
+ data.tar.gz: f976af63159f1beaa0f951652a8ea15220c9b650
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YzdkMDZhODUyNzZlZTA5OTYwYjI5NzlhMjUyZTVkMTBlZDgyNGZiNzcyNmU2
10
- ZTEwYTRkZTJmZTcyNWYzZWEzMWQyYmZkMzhiZjc5ZTZjMjM4ODM2NjJjODhk
11
- OWRkZTUyYjk0Y2M1ZTEzOWMxZjQyMjk2ODA0NjdkMGRiYWQyMzg=
12
- data.tar.gz: !binary |-
13
- MTc0YWQ0Y2EwODQwOTczOWMwNGY3MTMxMDE5OWZmYWNkMTgzNDFmYTUxZDA4
14
- Y2M1YjU3ZTcwYzkwMmI4NGNiM2ZhNWNiMGY1ODE4ZmEyZWQ4OTE3MWE5OGNj
15
- ZGE2ODUyYzM4MTAzMDIwYzVhZmNlYzUzMjJiNjE5Yzg4Yzg4MWI=
6
+ metadata.gz: 49df99f90b8667b4926a30af53e23e50a2327e0305cbf0c81956fba1223773c46e3714e3c29e70cf8a049c21398edd6adb18abe562048346e72baa1a3c7eb7e9
7
+ data.tar.gz: c3875dd5d15e08ebaca8941a7624839dca8fcbb4c0acaf607108aae231303204c17d076b9ff0bf2beb12477d78fc0cb30b81e70820723211d3f61e8ac2915b7b
data/README.md CHANGED
@@ -141,6 +141,10 @@ Defines query methods like `foo?`, which is true if (and only if) `foo_id` is tr
141
141
 
142
142
  Defines query methods like `foo?`, which is true if (and only if) `foo` is truthy.
143
143
 
144
+ ### `attr_implement :foo, :bar`<br>
145
+
146
+ Defines methods `foo` and `bar` that raise e.g. `"Implement a 'foo' method"`, suitable for abstract base classes.
147
+
144
148
 
145
149
  ## Philosophy
146
150
 
@@ -195,6 +199,7 @@ Or to see warnings (try not to have any):
195
199
  * [Joakim Kolsjö](https://github.com/joakimk)
196
200
  * [Victor Arias](https://github.com/victorarias)
197
201
  * [Teo Ljungberg](https://github.com/teoljungberg)
202
+ * [Kim Persson](https://github.com/lavinia)
198
203
 
199
204
 
200
205
  ## License
data/lib/attr_extras.rb CHANGED
@@ -32,7 +32,7 @@ module AttrExtras
32
32
  alias_method :eql?, :==
33
33
 
34
34
  define_method(:hash) do
35
- [self.class, *names.map { |attr| public_send(attr) }].hash
35
+ [ self.class, *names.map { |attr| public_send(attr) } ].hash
36
36
  end
37
37
  end
38
38
 
@@ -61,6 +61,14 @@ module AttrExtras
61
61
  def attr_id_query(*names)
62
62
  AttrQuery.define_with_suffix(self, "_id", *names)
63
63
  end
64
+
65
+ def attr_implement(*names)
66
+ names.each do |name|
67
+ define_method(name) do |*_|
68
+ raise "Implement a '#{name}' method"
69
+ end
70
+ end
71
+ end
64
72
  end
65
73
  end
66
74
 
@@ -49,7 +49,7 @@ class AttrExtras::AttrInitialize
49
49
  value = hash.fetch(actual_name)
50
50
  else
51
51
  actual_name = name
52
- value = hash[name]
52
+ value = hash[actual_name]
53
53
  end
54
54
 
55
55
  instance.instance_variable_set("@#{actual_name}", value)
@@ -1,3 +1,3 @@
1
1
  module AttrExtras
2
- VERSION = "2.2.3"
2
+ VERSION = "2.3.0"
3
3
  end
@@ -0,0 +1,23 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe Object, ".attr_implement" do
4
+ it "creates methods that raise" do
5
+ klass = Class.new do
6
+ attr_implement :foo, :bar
7
+ end
8
+
9
+ example = klass.new
10
+ exception = lambda { example.foo }.must_raise RuntimeError
11
+ exception.message.must_equal "Implement a 'foo' method"
12
+ end
13
+
14
+ it "accepts any number of arguments" do
15
+ klass = Class.new do
16
+ attr_implement :foo
17
+ end
18
+
19
+ example = klass.new
20
+ exception = lambda { example.foo(1, 2, 3) }.must_raise RuntimeError
21
+ exception.message.must_equal "Implement a 'foo' method"
22
+ end
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attr_extras
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrik Nyh
@@ -10,20 +10,20 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-03-22 00:00:00.000000000 Z
13
+ date: 2014-05-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ! '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ! '>='
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
28
  version: '0'
29
29
  description:
@@ -33,9 +33,9 @@ executables: []
33
33
  extensions: []
34
34
  extra_rdoc_files: []
35
35
  files:
36
- - .gitignore
37
- - .rvmrc
38
- - .travis.yml
36
+ - ".gitignore"
37
+ - ".rvmrc"
38
+ - ".travis.yml"
39
39
  - Gemfile
40
40
  - README.md
41
41
  - Rakefile
@@ -48,6 +48,7 @@ files:
48
48
  - script/test
49
49
  - spec/attr_extras_spec.rb
50
50
  - spec/attr_id_query_spec.rb
51
+ - spec/attr_implement_spec.rb
51
52
  - spec/attr_initialize_spec.rb
52
53
  - spec/attr_private_spec.rb
53
54
  - spec/attr_query_spec.rb
@@ -66,23 +67,24 @@ require_paths:
66
67
  - lib
67
68
  required_ruby_version: !ruby/object:Gem::Requirement
68
69
  requirements:
69
- - - ! '>='
70
+ - - ">="
70
71
  - !ruby/object:Gem::Version
71
72
  version: '0'
72
73
  required_rubygems_version: !ruby/object:Gem::Requirement
73
74
  requirements:
74
- - - ! '>='
75
+ - - ">="
75
76
  - !ruby/object:Gem::Version
76
77
  version: '0'
77
78
  requirements: []
78
79
  rubyforge_project:
79
- rubygems_version: 2.2.1
80
+ rubygems_version: 2.2.2
80
81
  signing_key:
81
82
  specification_version: 4
82
83
  summary: Takes some boilerplate out of Ruby with methods like attr_initialize.
83
84
  test_files:
84
85
  - spec/attr_extras_spec.rb
85
86
  - spec/attr_id_query_spec.rb
87
+ - spec/attr_implement_spec.rb
86
88
  - spec/attr_initialize_spec.rb
87
89
  - spec/attr_private_spec.rb
88
90
  - spec/attr_query_spec.rb