attr_required 0.0.2 → 0.0.3
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/README.rdoc +17 -5
- data/VERSION +1 -1
- data/lib/attr_optional.rb +7 -12
- data/lib/attr_required.rb +22 -27
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
= attr_required
|
2
2
|
|
3
|
-
|
3
|
+
This gem provide <code>attr_required</code> and <code>attr_optional</code> like <code>attr_accessor</code>.
|
4
|
+
|
5
|
+
REQUIRED and OPTIONAL are common terminology in RFCs, and used for protocol parameters.
|
6
|
+
This gem helps RFC library developers to define which parameters (attributes in Ruby world) are REQUIRED and which are OPTIONAL.
|
7
|
+
It might be also helpful for other developers.
|
8
|
+
|
9
|
+
I've developed this gem to use for rack-oauth2, a Rack-based OAuth 2.0 library.
|
10
|
+
http://github.com/nov/rack-oauth2
|
4
11
|
|
5
12
|
== Installation
|
6
13
|
|
@@ -8,10 +15,11 @@ Provide attr_required and attr_optional
|
|
8
15
|
|
9
16
|
== Usage
|
10
17
|
|
11
|
-
Include <code>AttrRequired</code>, and use <code>attr_required</code> like <code>attr_accessor</code>
|
12
|
-
|
13
18
|
# Attributes Definitions
|
14
19
|
|
20
|
+
require 'attr_required'
|
21
|
+
require 'attr_optional'
|
22
|
+
|
15
23
|
class A
|
16
24
|
include AttrRequired, AttrOptional
|
17
25
|
attr_required :required_a
|
@@ -27,8 +35,11 @@ Include <code>AttrRequired</code>, and use <code>attr_required</code> like <code
|
|
27
35
|
|
28
36
|
A.required_attributes #=> [:required_a]
|
29
37
|
B.required_attributes #=> [:required_a, :required_b]
|
30
|
-
A.
|
31
|
-
B.
|
38
|
+
A.optional_attributes #=> [:optional_a]
|
39
|
+
B.optional_attributes #=> [:optional_a, :optional_b]
|
40
|
+
|
41
|
+
A.attr_required?(:required_a) #=> true
|
42
|
+
B.attr_optional?(:optional_b) #=> true
|
32
43
|
|
33
44
|
# Instance Methods
|
34
45
|
|
@@ -42,6 +53,7 @@ Include <code>AttrRequired</code>, and use <code>attr_required</code> like <code
|
|
42
53
|
|
43
54
|
@a.attr_required?(:required_a) #=> true
|
44
55
|
@a.attr_optional?(:optiona_a) #=> true
|
56
|
+
|
45
57
|
@a.attr_missing? #=> true
|
46
58
|
@a.attr_missing #=> [:required_a]
|
47
59
|
@a.attr_missing! #=> raise AttrRequired::AttrMissing
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/lib/attr_optional.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
module AttrOptional
|
2
2
|
|
3
3
|
def self.included(klass)
|
4
|
-
klass.send :
|
5
|
-
klass.send :extend, Extendable
|
4
|
+
klass.send :extend, ClassMethods
|
6
5
|
end
|
7
6
|
|
8
|
-
module
|
7
|
+
module ClassMethods
|
9
8
|
|
10
9
|
def inherited(klass)
|
11
10
|
super
|
@@ -30,16 +29,12 @@ module AttrOptional
|
|
30
29
|
|
31
30
|
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
self.class.optional_attributes
|
37
|
-
end
|
38
|
-
|
39
|
-
def attr_optional?(key)
|
40
|
-
self.class.attr_optional? key
|
41
|
-
end
|
32
|
+
def optional_attributes
|
33
|
+
self.class.optional_attributes
|
34
|
+
end
|
42
35
|
|
36
|
+
def attr_optional?(key)
|
37
|
+
self.class.attr_optional? key
|
43
38
|
end
|
44
39
|
|
45
40
|
end
|
data/lib/attr_required.rb
CHANGED
@@ -3,11 +3,10 @@ module AttrRequired
|
|
3
3
|
class AttrMissing < StandardError; end
|
4
4
|
|
5
5
|
def self.included(klass)
|
6
|
-
klass.send :
|
7
|
-
klass.send :extend, Extendable
|
6
|
+
klass.send :extend, ClassMethods
|
8
7
|
end
|
9
8
|
|
10
|
-
module
|
9
|
+
module ClassMethods
|
11
10
|
|
12
11
|
def inherited(klass)
|
13
12
|
super
|
@@ -32,37 +31,33 @@ module AttrRequired
|
|
32
31
|
|
33
32
|
end
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
self.class.required_attributes
|
39
|
-
end
|
34
|
+
def required_attributes
|
35
|
+
self.class.required_attributes
|
36
|
+
end
|
40
37
|
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
def attr_required?(key)
|
39
|
+
self.class.attr_required? key
|
40
|
+
end
|
44
41
|
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
def attr_missing?
|
43
|
+
!attr_missing.empty?
|
44
|
+
end
|
48
45
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
46
|
+
def attr_missing!
|
47
|
+
if attr_missing?
|
48
|
+
raise AttrMissing.new("'#{attr_missing.join('\', \'')}' required.")
|
53
49
|
end
|
50
|
+
end
|
54
51
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
end
|
52
|
+
def attr_missing
|
53
|
+
required_attributes.select do |key|
|
54
|
+
value = send(key)
|
55
|
+
if value.respond_to?(:empty?)
|
56
|
+
value.empty?
|
57
|
+
else
|
58
|
+
value.nil?
|
63
59
|
end
|
64
60
|
end
|
65
|
-
|
66
61
|
end
|
67
62
|
|
68
63
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attr_required
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- nov matake
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-06 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|