Checked 3.2.0 → 3.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.
data/lib/Checked/DSL.rb CHANGED
@@ -114,6 +114,18 @@ class Checked
114
114
  end
115
115
  true
116
116
  end
117
+
118
+ def get_or_set *args
119
+ Size! args, 1..2
120
+ name = args.shift
121
+ raise ArgumentError, "Instance variable #{name.inspect} has not been defined." unless instance_variable_defined?(name)
122
+
123
+ if args.empty?
124
+ instance_variable_get name
125
+ else
126
+ instance_variable_set name, args.first
127
+ end
128
+ end
117
129
 
118
130
  end # === module Ruby
119
131
 
@@ -162,6 +174,23 @@ class Checked
162
174
  n.Checked= v.Checked
163
175
  n
164
176
  end
177
+
178
+ def Size! arg, num_or_range
179
+ sizes = case num_or_range
180
+ when Fixnum
181
+ [num_or_range]
182
+ when Range
183
+ num_or_range.to_a
184
+ else
185
+ raise ArgumentError, "Wrong class for size: #{num_or_range.inspect}"
186
+ end
187
+
188
+ if not sizes.include?(arg.size)
189
+ raise ArgumentError, "Array, #{arg.inspect}, can only contain #{sizes.join ' or '} items."
190
+ end
191
+
192
+ arg
193
+ end
165
194
 
166
195
  end # === module Rack_Arch
167
196
 
@@ -1,3 +1,3 @@
1
1
  class Checked
2
- VERSION = "3.2.0"
2
+ VERSION = "3.3.0"
3
3
  end
data/spec/tests/DSL.rb CHANGED
@@ -35,6 +35,76 @@ describe "hash! " do
35
35
 
36
36
  end # === describe array! check!
37
37
 
38
+ describe "Size!" do
39
+
40
+ behaves_like :racked_dsl
41
+
42
+ it 'raises ArgumentError if size of array is not within range' do
43
+ target = [:a, :b, :c]
44
+ r = 1..2
45
+ lambda { Size!(target, r) }
46
+ .should.raise(ArgumentError)
47
+ .message.should == "Array, #{target.inspect}, can only contain #{r.to_a.join ' or '} items."
48
+ end
49
+
50
+ it 'raises ArgumentError if size is not a Fixnum or Range' do
51
+ lambda { Size!([], [0]) }
52
+ .should.raise(ArgumentError)
53
+ .message.should == "Wrong class for size: #{[0].inspect}"
54
+ end
55
+
56
+ it 'raises ArgumentError if missing size' do
57
+ lambda { Size!([:a, :b, :c]) }
58
+ .should.raise(ArgumentError)
59
+ end
60
+
61
+ it 'returns array' do
62
+ t = [:a, :b]
63
+ Size!( t, 1..2).object_id.should == t.object_id
64
+ end
65
+
66
+ end # === describe Sizes_0_1!
67
+
68
+ describe "get_or_set :@var" do
69
+
70
+ behaves_like :racked_dsl
71
+
72
+ it 'raises ArgumentError if instance variable has not been initialized.' do
73
+ lambda { get_or_set :@something }
74
+ .should.raise(ArgumentError)
75
+ .message.should.match %r!@something has not been defined!
76
+ end
77
+
78
+ it 'gets instance variable if array is empty.' do
79
+ @server = :hi
80
+ get_or_set( :@server ).should == @server
81
+ end
82
+
83
+ end # === describe get_or_set
84
+
85
+ describe "get_or_set :@var, var" do
86
+
87
+ behaves_like :racked_dsl
88
+
89
+ it 'raises ArgumentError if instance variable has not been initialized.' do
90
+ lambda { get_or_set :@someg, :hi}
91
+ .should.raise(ArgumentError)
92
+ .message.should.match %r!@someg has not been defined!
93
+ end
94
+
95
+ it 'sets instance variable.' do
96
+ @server = :hi
97
+ get_or_set( :@server, :bye)
98
+ @server.should == :bye
99
+ end
100
+
101
+ it 'returns last value' do
102
+ @server = :hi
103
+ get_or_set( :@server, :bye ).should == :bye
104
+ end
105
+
106
+ end # === describe get_or_set
107
+
38
108
  describe "string! " do
39
109
 
40
110
  behaves_like :ruby_dsl
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Checked
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-20 00:00:00.000000000 Z
12
+ date: 2012-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &11765620 !ruby/object:Gem::Requirement
16
+ requirement: &15476740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *11765620
24
+ version_requirements: *15476740
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bacon
27
- requirement: &11765040 !ruby/object:Gem::Requirement
27
+ requirement: &15412400 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *11765040
35
+ version_requirements: *15412400
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: Bacon_Colored
38
- requirement: &11764440 !ruby/object:Gem::Requirement
38
+ requirement: &15410880 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *11764440
46
+ version_requirements: *15410880
47
47
  description: ! "\n Various DSLs to clean, question (Ask), and validate (Demand)
48
48
  your objects,\n their classes (data types), and their properties.\n "
49
49
  email:
@@ -104,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  version: '0'
105
105
  requirements: []
106
106
  rubyforge_project: Checked
107
- rubygems_version: 1.8.11
107
+ rubygems_version: 1.8.15
108
108
  signing_key:
109
109
  specification_version: 3
110
110
  summary: Check your types and more.