attr_extras 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/lib/attr_extras.rb +14 -8
- data/lib/attr_extras/version.rb +1 -1
- data/spec/attr_implement_spec.rb +30 -0
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZWFjODUyMWM5ZDQwYTllYzlkYWU4YjkwNzBkOWQ1YjY0NTE5MWY0ZQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NzI4N2YyZjcwN2ZkZDIzMmIyN2I2NmI3NDJjMGNlZTQyNjZkOGNmYw==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NTUxMDVlN2I2NzI4NzY4MjBkMGM4OWQ0OGM5M2NjNGRkYzdiNzRiOWNiYzQ5
|
10
|
+
YTEyZTFhMjkxNjg3YTU2ZWJkMTgxNjU0OTU5NjcxNzY2YjYzODA0NTNlZmY4
|
11
|
+
MzYxZTc2ZTE5YzdiMjg1OTEzMmE1ODNmYzJjYmQ5OTkxMzZiODI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YmRlYTAwYWQzMmJiODA2ZTk5YzEyMDVkNGVmY2JiODI5MGUxYTAxNWQzNDIx
|
14
|
+
MjAyZWM3OTUwOWMzN2Y0NDkxZjhkOGYwYmM0ZmNjM2JhMTg0MDQ1ZGM3NGQw
|
15
|
+
ZmE2YzM1MGE2ODU2YTExZGZmNGM5NmZhYzI3YzgwMTFjODNjMzQ=
|
data/lib/attr_extras.rb
CHANGED
@@ -66,17 +66,23 @@ module AttrExtras
|
|
66
66
|
arg_names = names.last.is_a?(Array) ? names.pop : []
|
67
67
|
arity = arg_names.length
|
68
68
|
|
69
|
-
|
70
|
-
define_method
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
69
|
+
mod = Module.new do
|
70
|
+
define_method :method_missing do |name, *args|
|
71
|
+
if names.include?(name)
|
72
|
+
provided_arity = args.length
|
73
|
+
|
74
|
+
if provided_arity != arity
|
75
|
+
raise ArgumentError, "wrong number of arguments (#{provided_arity} for #{arity})"
|
76
|
+
end
|
77
|
+
|
78
|
+
raise "Implement a '#{name}(#{arg_names.join(", ")})' method"
|
79
|
+
else
|
80
|
+
super(name, *args)
|
75
81
|
end
|
76
|
-
|
77
|
-
raise "Implement a '#{name}(#{arg_names.join(", ")})' method"
|
78
82
|
end
|
79
83
|
end
|
84
|
+
|
85
|
+
include mod
|
80
86
|
end
|
81
87
|
end
|
82
88
|
end
|
data/lib/attr_extras/version.rb
CHANGED
data/spec/attr_implement_spec.rb
CHANGED
@@ -23,4 +23,34 @@ describe Object, ".attr_implement" do
|
|
23
23
|
|
24
24
|
lambda { example.foo }.must_raise ArgumentError
|
25
25
|
end
|
26
|
+
|
27
|
+
it "does not raise if method is implemented in a subclass" do
|
28
|
+
klass = Class.new do
|
29
|
+
attr_implement :foo
|
30
|
+
end
|
31
|
+
|
32
|
+
subklass = Class.new(klass) do
|
33
|
+
def foo
|
34
|
+
"bar"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
subklass.new.foo.must_equal "bar"
|
39
|
+
end
|
40
|
+
|
41
|
+
# E.g. Active Record defines column query methods like "admin?"
|
42
|
+
# higher up in the ancestor chain.
|
43
|
+
it "does not raise if method is implemented in a superclass" do
|
44
|
+
superklass = Class.new do
|
45
|
+
def foo
|
46
|
+
"bar"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
klass = Class.new(superklass) do
|
51
|
+
attr_implement :foo
|
52
|
+
end
|
53
|
+
|
54
|
+
klass.new.foo.must_equal "bar"
|
55
|
+
end
|
26
56
|
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: 3.
|
4
|
+
version: 3.2.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:
|
13
|
+
date: 2015-01-10 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
|
-
-
|
37
|
-
-
|
38
|
-
-
|
36
|
+
- .gitignore
|
37
|
+
- .rvmrc
|
38
|
+
- .travis.yml
|
39
39
|
- Gemfile
|
40
40
|
- README.md
|
41
41
|
- Rakefile
|
@@ -67,12 +67,12 @@ require_paths:
|
|
67
67
|
- lib
|
68
68
|
required_ruby_version: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
|
-
- -
|
70
|
+
- - ! '>='
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '0'
|
73
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
requirements: []
|