attr_required 0.0.3 → 0.0.4
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/.travis.yml +5 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +10 -9
- data/Rakefile +1 -9
- data/VERSION +1 -1
- data/lib/attr_optional.rb +14 -3
- data/lib/attr_required.rb +15 -4
- data/spec/attr_optional_spec.rb +50 -40
- data/spec/attr_required_spec.rb +82 -84
- data/spec/spec_helper.rb +7 -3
- metadata +47 -77
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
attr_required (0.0.
|
4
|
+
attr_required (0.0.3)
|
5
5
|
|
6
6
|
GEM
|
7
|
+
remote: http://rubygems.org/
|
7
8
|
specs:
|
8
9
|
diff-lcs (1.1.2)
|
9
|
-
rake (0.
|
10
|
+
rake (0.9.0)
|
10
11
|
rcov (0.9.9)
|
11
|
-
rspec (2.
|
12
|
-
rspec-core (~> 2.
|
13
|
-
rspec-expectations (~> 2.
|
14
|
-
rspec-mocks (~> 2.
|
15
|
-
rspec-core (2.
|
16
|
-
rspec-expectations (2.
|
12
|
+
rspec (2.6.0)
|
13
|
+
rspec-core (~> 2.6.0)
|
14
|
+
rspec-expectations (~> 2.6.0)
|
15
|
+
rspec-mocks (~> 2.6.0)
|
16
|
+
rspec-core (2.6.3)
|
17
|
+
rspec-expectations (2.6.0)
|
17
18
|
diff-lcs (~> 1.1.2)
|
18
|
-
rspec-mocks (2.
|
19
|
+
rspec-mocks (2.6.0)
|
19
20
|
|
20
21
|
PLATFORMS
|
21
22
|
ruby
|
data/Rakefile
CHANGED
@@ -9,12 +9,4 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
|
|
9
9
|
spec.rcov_opts = ['-Ilib -Ispec --exclude spec,gems']
|
10
10
|
end
|
11
11
|
|
12
|
-
task :default => :spec
|
13
|
-
|
14
|
-
require 'rake/rdoctask'
|
15
|
-
Rake::RDocTask.new do |rdoc|
|
16
|
-
rdoc.rdoc_dir = 'rdoc'
|
17
|
-
rdoc.title = "attr_required #{File.read('VERSION')}"
|
18
|
-
rdoc.rdoc_files.include('README*')
|
19
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
20
|
-
end
|
12
|
+
task :default => :spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/lib/attr_optional.rb
CHANGED
@@ -14,8 +14,10 @@ module AttrOptional
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def attr_optional(*keys)
|
17
|
-
|
18
|
-
|
17
|
+
if defined?(:undef_required_attributes)
|
18
|
+
undef_required_attributes *keys
|
19
|
+
end
|
20
|
+
optional_attributes.concat(keys)
|
19
21
|
attr_accessor *keys
|
20
22
|
end
|
21
23
|
|
@@ -24,7 +26,16 @@ module AttrOptional
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def optional_attributes
|
27
|
-
|
29
|
+
@optional_attributes ||= []
|
30
|
+
end
|
31
|
+
|
32
|
+
def undef_optional_attributes(*keys)
|
33
|
+
keys.each do |key|
|
34
|
+
if attr_optional?(key)
|
35
|
+
undef_method key, :"#{key}="
|
36
|
+
optional_attributes.delete key
|
37
|
+
end
|
38
|
+
end
|
28
39
|
end
|
29
40
|
|
30
41
|
end
|
data/lib/attr_required.rb
CHANGED
@@ -16,17 +16,28 @@ module AttrRequired
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def attr_required(*keys)
|
19
|
-
|
20
|
-
|
19
|
+
if defined?(:undef_optional_attributes)
|
20
|
+
undef_optional_attributes *keys
|
21
|
+
end
|
22
|
+
required_attributes.concat keys
|
21
23
|
attr_accessor *keys
|
22
24
|
end
|
23
25
|
|
24
26
|
def attr_required?(key)
|
25
|
-
required_attributes.include?
|
27
|
+
required_attributes.include? key
|
26
28
|
end
|
27
29
|
|
28
30
|
def required_attributes
|
29
|
-
|
31
|
+
@required_attributes ||= []
|
32
|
+
end
|
33
|
+
|
34
|
+
def undef_required_attributes(*keys)
|
35
|
+
keys.each do |key|
|
36
|
+
if attr_required?(key)
|
37
|
+
undef_method key, :"#{key}="
|
38
|
+
required_attributes.delete key
|
39
|
+
end
|
40
|
+
end
|
30
41
|
end
|
31
42
|
|
32
43
|
end
|
data/spec/attr_optional_spec.rb
CHANGED
@@ -1,59 +1,69 @@
|
|
1
1
|
require 'spec_helper.rb'
|
2
2
|
|
3
|
-
describe AttrOptional
|
3
|
+
describe AttrOptional do
|
4
4
|
before do
|
5
|
-
@a, @b = A.new, B.new
|
5
|
+
@a, @b, @c = A.new, B.new, C.new
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
describe '.attr_optional' do
|
9
|
+
it 'should define accessible attributes' do
|
10
|
+
@a.should respond_to :attr_optional_a
|
11
|
+
@a.should respond_to :attr_optional_a=
|
12
|
+
@b.should respond_to :attr_optional_b
|
13
|
+
@b.should respond_to :attr_optional_b=
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
16
|
+
it 'should be inherited' do
|
17
|
+
@b.should respond_to :attr_optional_a
|
18
|
+
@b.should respond_to :attr_optional_a=
|
19
|
+
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
context 'when already required' do
|
22
|
+
it 'should be optional' do
|
23
|
+
@c.attr_required?(:attr_required_b).should be_false
|
24
|
+
@c.attr_optional?(:attr_required_b).should be_true
|
25
|
+
end
|
26
|
+
end
|
27
27
|
end
|
28
|
-
end
|
29
28
|
|
30
|
-
describe
|
31
|
-
|
32
|
-
|
29
|
+
describe '.attr_optional?' do
|
30
|
+
it 'should answer whether the attributes is optional or not' do
|
31
|
+
A.attr_optional?(:attr_optional_a).should be_true
|
32
|
+
B.attr_optional?(:attr_optional_a).should be_true
|
33
|
+
B.attr_optional?(:attr_optional_b).should be_true
|
34
|
+
B.attr_optional?(:to_s).should be_false
|
35
|
+
end
|
33
36
|
end
|
34
37
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
describe '#attr_optional?' do
|
39
|
+
it 'should answer whether the attributes is optional or not' do
|
40
|
+
@a.attr_optional?(:attr_optional_a).should be_true
|
41
|
+
@b.attr_optional?(:attr_optional_a).should be_true
|
42
|
+
@b.attr_optional?(:attr_optional_b).should be_true
|
43
|
+
@b.attr_optional?(:to_s).should be_false
|
44
|
+
end
|
40
45
|
end
|
41
|
-
end
|
42
46
|
|
43
|
-
describe
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
+
describe '.optional_attributes' do
|
48
|
+
it 'should return all optional attributes keys' do
|
49
|
+
A.optional_attributes.should == [:attr_optional_a]
|
50
|
+
B.optional_attributes.should == [:attr_optional_a, :attr_optional_b]
|
51
|
+
end
|
47
52
|
end
|
48
|
-
end
|
49
53
|
|
50
|
-
describe
|
51
|
-
|
52
|
-
|
54
|
+
describe '#optional_attributes' do
|
55
|
+
it 'should return optional attributes keys' do
|
56
|
+
@a.optional_attributes.should == [:attr_optional_a]
|
57
|
+
@b.optional_attributes.should == [:attr_optional_a, :attr_optional_b]
|
58
|
+
end
|
53
59
|
end
|
54
60
|
|
55
|
-
|
56
|
-
|
57
|
-
|
61
|
+
describe '.undef_optional_attributes' do
|
62
|
+
it 'should undefine accessors and remove from optional attributes' do
|
63
|
+
C.optional_attributes.should_not include :attr_optional_a
|
64
|
+
@c.optional_attributes.should_not include :attr_optional_a
|
65
|
+
@c.should_not respond_to :attr_optional_a
|
66
|
+
@c.should_not respond_to :attr_optional_a=
|
67
|
+
end
|
58
68
|
end
|
59
69
|
end
|
data/spec/attr_required_spec.rb
CHANGED
@@ -1,109 +1,107 @@
|
|
1
1
|
require 'spec_helper.rb'
|
2
2
|
|
3
|
-
describe AttrRequired
|
3
|
+
describe AttrRequired do
|
4
4
|
before do
|
5
|
-
@a, @b = A.new, B.new
|
5
|
+
@a, @b, @c = A.new, B.new, C.new
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
it 'should be inherited' do
|
16
|
-
@b.should respond_to(:attr_required_a)
|
17
|
-
@b.should respond_to(:attr_required_a=)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe AttrRequired, '.attr_required?' do
|
22
|
-
it 'should answer whether the attributes is required or not' do
|
23
|
-
A.attr_required?(:attr_required_a).should be_true
|
24
|
-
B.attr_required?(:attr_required_a).should be_true
|
25
|
-
B.attr_required?(:attr_required_b).should be_true
|
26
|
-
B.attr_required?(:to_s).should be_false
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe AttrRequired, '#attr_required?' do
|
31
|
-
before do
|
32
|
-
@a, @b = A.new, B.new
|
33
|
-
end
|
8
|
+
describe '.attr_required' do
|
9
|
+
it 'should define accessible attributes' do
|
10
|
+
@a.should respond_to :attr_required_a
|
11
|
+
@a.should respond_to :attr_required_a=
|
12
|
+
@b.should respond_to :attr_required_b
|
13
|
+
@b.should respond_to :attr_required_b=
|
14
|
+
end
|
34
15
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
@a.attr_required?(:attr_required_b).should be_false
|
40
|
-
@b.attr_required?(:to_s).should be_false
|
41
|
-
end
|
42
|
-
end
|
16
|
+
it 'should be inherited' do
|
17
|
+
@b.should respond_to :attr_required_a
|
18
|
+
@b.should respond_to :attr_required_a=
|
19
|
+
end
|
43
20
|
|
44
|
-
|
45
|
-
|
46
|
-
|
21
|
+
context 'when already optional' do
|
22
|
+
it 'should be optional' do
|
23
|
+
@c.attr_required?(:attr_optional_b).should be_true
|
24
|
+
@c.attr_optional?(:attr_optional_b).should be_false
|
25
|
+
end
|
26
|
+
end
|
47
27
|
end
|
48
28
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
@b.attr_required_b = 'attr_required_b'
|
57
|
-
@b.attr_missing?.should be_false
|
29
|
+
describe '.attr_required?' do
|
30
|
+
it 'should answer whether the attributes is required or not' do
|
31
|
+
A.attr_required?(:attr_required_a).should be_true
|
32
|
+
B.attr_required?(:attr_required_a).should be_true
|
33
|
+
B.attr_required?(:attr_required_b).should be_true
|
34
|
+
B.attr_required?(:to_s).should be_false
|
35
|
+
end
|
58
36
|
end
|
59
|
-
end
|
60
37
|
|
61
|
-
describe
|
62
|
-
|
63
|
-
|
38
|
+
describe '#attr_required?' do
|
39
|
+
it 'should answer whether the attributes is required or not' do
|
40
|
+
@a.attr_required?(:attr_required_a).should be_true
|
41
|
+
@b.attr_required?(:attr_required_a).should be_true
|
42
|
+
@b.attr_required?(:attr_required_b).should be_true
|
43
|
+
@a.attr_required?(:attr_required_b).should be_false
|
44
|
+
@b.attr_required?(:to_s).should be_false
|
45
|
+
end
|
64
46
|
end
|
65
47
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
48
|
+
describe '#attr_missing?' do
|
49
|
+
it 'should answer whether any attributes are missing' do
|
50
|
+
@a.attr_missing?.should be_true
|
51
|
+
@b.attr_missing?.should be_true
|
52
|
+
@a.attr_required_a = 'attr_required_a'
|
53
|
+
@b.attr_required_a = 'attr_required_a'
|
54
|
+
@a.attr_missing?.should be_false
|
55
|
+
@b.attr_missing?.should be_true
|
56
|
+
@b.attr_required_b = 'attr_required_b'
|
57
|
+
@b.attr_missing?.should be_false
|
58
|
+
end
|
75
59
|
end
|
76
|
-
end
|
77
60
|
|
78
|
-
describe
|
79
|
-
|
80
|
-
|
61
|
+
describe '#attr_missing!' do
|
62
|
+
it 'should raise AttrMissing error when any attributes are missing' do
|
63
|
+
lambda { @a.attr_missing! }.should raise_error(AttrRequired::AttrMissing)
|
64
|
+
lambda { @b.attr_missing! }.should raise_error(AttrRequired::AttrMissing)
|
65
|
+
@a.attr_required_a = 'attr_required_a'
|
66
|
+
@b.attr_required_a = 'attr_required_a'
|
67
|
+
lambda { @a.attr_missing! }.should_not raise_error(AttrRequired::AttrMissing)
|
68
|
+
lambda { @b.attr_missing! }.should raise_error(AttrRequired::AttrMissing)
|
69
|
+
@b.attr_required_b = 'attr_required_b'
|
70
|
+
lambda { @b.attr_missing! }.should_not raise_error(AttrRequired::AttrMissing)
|
71
|
+
end
|
81
72
|
end
|
82
73
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
74
|
+
describe '#attr_missing' do
|
75
|
+
it 'should return missing attributes keys' do
|
76
|
+
@a.attr_missing.should == [:attr_required_a]
|
77
|
+
@b.attr_missing.should == [:attr_required_a, :attr_required_b]
|
78
|
+
@a.attr_required_a = 'attr_required_a'
|
79
|
+
@b.attr_required_a = 'attr_required_a'
|
80
|
+
@a.attr_missing.should == []
|
81
|
+
@b.attr_missing.should == [:attr_required_b]
|
82
|
+
end
|
90
83
|
end
|
91
|
-
end
|
92
84
|
|
93
|
-
describe
|
94
|
-
|
95
|
-
|
96
|
-
|
85
|
+
describe '.required_attributes' do
|
86
|
+
it 'should return all required attributes keys' do
|
87
|
+
A.required_attributes.should == [:attr_required_a]
|
88
|
+
B.required_attributes.should == [:attr_required_a, :attr_required_b]
|
89
|
+
end
|
97
90
|
end
|
98
|
-
end
|
99
91
|
|
100
|
-
describe
|
101
|
-
|
102
|
-
|
92
|
+
describe '#required_attributes' do
|
93
|
+
it 'should return required attributes keys' do
|
94
|
+
@a.required_attributes.should == [:attr_required_a]
|
95
|
+
@b.required_attributes.should == [:attr_required_a, :attr_required_b]
|
96
|
+
end
|
103
97
|
end
|
104
98
|
|
105
|
-
|
106
|
-
|
107
|
-
|
99
|
+
describe '.undef_required_attributes' do
|
100
|
+
it 'should undefine accessors and remove from required attributes' do
|
101
|
+
C.required_attributes.should_not include :attr_required_a
|
102
|
+
@c.required_attributes.should_not include :attr_required_a
|
103
|
+
@c.should_not respond_to :attr_required_a
|
104
|
+
@c.should_not respond_to :attr_required_a=
|
105
|
+
end
|
108
106
|
end
|
109
107
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
|
4
1
|
require 'attr_required'
|
5
2
|
require 'attr_optional'
|
6
3
|
require 'rspec'
|
@@ -15,3 +12,10 @@ class B < A
|
|
15
12
|
attr_required :attr_required_b
|
16
13
|
attr_optional :attr_optional_b
|
17
14
|
end
|
15
|
+
|
16
|
+
class C < B
|
17
|
+
undef_required_attributes :attr_required_a
|
18
|
+
undef_optional_attributes :attr_optional_a
|
19
|
+
attr_optional :attr_required_b
|
20
|
+
attr_required :attr_optional_b
|
21
|
+
end
|
metadata
CHANGED
@@ -1,79 +1,60 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: attr_required
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 3
|
10
|
-
version: 0.0.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- nov matake
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-02-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rake
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70189917584400 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 8
|
33
|
-
version: "0.8"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.8'
|
34
22
|
type: :development
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: rcov
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: *70189917584400
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rcov
|
27
|
+
requirement: &70189917581600 !ruby/object:Gem::Requirement
|
40
28
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
- 9
|
48
|
-
version: "0.9"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0.9'
|
49
33
|
type: :development
|
50
|
-
version_requirements: *id002
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: rspec
|
53
34
|
prerelease: false
|
54
|
-
|
35
|
+
version_requirements: *70189917581600
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70189917580580 !ruby/object:Gem::Requirement
|
55
39
|
none: false
|
56
|
-
requirements:
|
57
|
-
- -
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
|
60
|
-
segments:
|
61
|
-
- 2
|
62
|
-
version: "2"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2'
|
63
44
|
type: :development
|
64
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70189917580580
|
65
47
|
description: attr_required and attr_optional
|
66
48
|
email: nov@matake.jp
|
67
49
|
executables: []
|
68
|
-
|
69
50
|
extensions: []
|
70
|
-
|
71
|
-
extra_rdoc_files:
|
51
|
+
extra_rdoc_files:
|
72
52
|
- LICENSE
|
73
53
|
- README.rdoc
|
74
|
-
files:
|
54
|
+
files:
|
75
55
|
- .gitignore
|
76
56
|
- .rspec
|
57
|
+
- .travis.yml
|
77
58
|
- Gemfile
|
78
59
|
- Gemfile.lock
|
79
60
|
- LICENSE
|
@@ -86,43 +67,32 @@ files:
|
|
86
67
|
- spec/attr_optional_spec.rb
|
87
68
|
- spec/attr_required_spec.rb
|
88
69
|
- spec/spec_helper.rb
|
89
|
-
has_rdoc: true
|
90
70
|
homepage: http://github.com/nov/attr_required
|
91
71
|
licenses: []
|
92
|
-
|
93
72
|
post_install_message:
|
94
|
-
rdoc_options:
|
73
|
+
rdoc_options:
|
95
74
|
- --charset=UTF-8
|
96
|
-
require_paths:
|
75
|
+
require_paths:
|
97
76
|
- lib
|
98
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
78
|
none: false
|
100
|
-
requirements:
|
101
|
-
- -
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
|
104
|
-
|
105
|
-
- 0
|
106
|
-
version: "0"
|
107
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
84
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
hash: 23
|
113
|
-
segments:
|
114
|
-
- 1
|
115
|
-
- 3
|
116
|
-
- 6
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
117
88
|
version: 1.3.6
|
118
89
|
requirements: []
|
119
|
-
|
120
90
|
rubyforge_project:
|
121
|
-
rubygems_version: 1.
|
91
|
+
rubygems_version: 1.8.12
|
122
92
|
signing_key:
|
123
93
|
specification_version: 3
|
124
94
|
summary: attr_required and attr_optional
|
125
|
-
test_files:
|
95
|
+
test_files:
|
126
96
|
- spec/attr_optional_spec.rb
|
127
97
|
- spec/attr_required_spec.rb
|
128
98
|
- spec/spec_helper.rb
|