ckuru-tools 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,39 @@
1
+ module CkuruTools
2
+ # A typed Array guarantees that all elements of an array conform to a certain signature
3
+ #
4
+ # Instantion requires that the first argument be the type:
5
+ #
6
+ # new = CkuruTools::TypedArray.new(AuraVisualize::SqlConstruct,
7
+ # AuraVisualize::SelectConstruct.new(:name => "1"),
8
+ # AuraVisualize::SelectConstruct.new(:name => "2"))
9
+ class TypedArray < Array
10
+ # required
11
+ attr_accessor :required_type
12
+
13
+ def validate
14
+ self.each do |e|
15
+ raise ArgumentError.new("all elements of this Array must be of type #{required_type}, not #{e.class}") unless e.is_a? required_type
16
+ end
17
+ end
18
+
19
+ def <<(val)
20
+ super
21
+ validate
22
+ end
23
+
24
+ def push(val)
25
+ super
26
+ validate
27
+ end
28
+
29
+ def initialize(*args)
30
+ args.reverse!
31
+ @required_type = args.pop
32
+ args.reverse!
33
+ raise ArgumentError.new("argument must be a class not #{required_type.class}") unless required_type.is_a? Class
34
+ @required_type = required_type
35
+ super(args)
36
+ validate
37
+ end
38
+ end
39
+ end
data/lib/ckuru-tools.rb CHANGED
@@ -142,7 +142,7 @@ EOF
142
142
  "argument :#{name} to #{calling_method} must be an instance of class #{instance_of}, not #{val.class}")
143
143
  end
144
144
  elsif klass_that_inherits_from
145
- unless val.inherits_from? klass
145
+ unless val.inherits_from? klass_that_inherits_from
146
146
  raise ArgumentError.new("argument :#{name} to #{calling_method} must inherits from class #{klass_that_inherits_from}, #{val} does not")
147
147
  end
148
148
  elsif klass_of
data/lib/ckuru-tools.rb~ CHANGED
@@ -44,9 +44,76 @@ EOF
44
44
 
45
45
  module CkuruTools
46
46
 
47
+ def self.parameters(h,*args)
48
+ raise ArgumentError.new("argument to #{self.class}##{current_method} must be of class Hash; you may get this error if you don't call a function with a hash; check the initial call") unless h.is_a? Hash
49
+ ret = []
50
+ args.each do |a|
51
+ name,options = a
52
+ options = options || {}
53
+ unless h[:no_recurse]
54
+ vals = only_these_parameters(
55
+ options.merge!(:no_recurse => true),
56
+ [:instance_that_inherits_from, {:instance_of => Class}],
57
+ [:instance_of, {:instance_of => Class}],
58
+ [:klass_that_inherits_from, {:instance_of => Class}],
59
+ [:klass_of, {:instance_of => Class}],
60
+ [:no_recurse, {:instance_of => TrueClass}],
61
+ [:required, {:instance_of => TrueClass}],
62
+ [:default, {:instance_of => TrueClass}]
63
+ )
64
+ instance_that_inherits_from, instance_of, klass_that_inherits_from, klass_of, no_recurse, required, default = vals
65
+ end
66
+
67
+ if val = h[name]
68
+ if instance_that_inherits_from
69
+ unless val.class.inherits_from? instance_that_inherits_from
70
+ raise ArgumentError.new(
71
+ "argument :#{name} to #{self.class}##{calling_method} must be an instance that inherits from #{instance_that_inherits_from}, #{val.class} does not")
72
+ end
73
+ elsif instance_of
74
+ unless val.class == instance_of
75
+ raise ArgumentError.new(
76
+ "argument :#{name} to #{self.class}##{calling_method} must be an instance of class #{instance_of}, not #{val.class}")
77
+ end
78
+ elsif klass_that_inherits_from
79
+ unless val.inherits_from? klass_that_inherits_from
80
+ raise ArgumentError.new("argument :#{name} to #{self.class}##{calling_method} must inherits from class #{klass_that_inherits_from}, #{val} does not")
81
+ end
82
+ elsif klass_of
83
+ unless val == klass_to
84
+ raise ArgumentError.new("argument :#{name} to #{self.class}##{calling_method} must be of class #{klass_of}, not #{val}")
85
+ end
86
+ end
87
+ else
88
+ if options[:default]
89
+ val = options[:default]
90
+ elsif options[:required]
91
+ raise ArgumentError.new("argument :#{name} to #{self.class}##{calling_method} is required")
92
+ end
93
+ end
94
+ ret.push val
95
+ end
96
+ ret
97
+ end
98
+
99
+
100
+ def self.only_these_parameters(h,*args)
101
+ ret = parameters(h,*args)
102
+ keys = h.keys
103
+ args.each do |a|
104
+ name,options = a
105
+ keys.delete name
106
+ end
107
+ if keys.length > 0
108
+ raise ArgumentError.new("unknown parameters #{keys.inspect} passed to #{self.class}##{calling_method}")
109
+ end
110
+ ret
111
+ end
112
+
47
113
  def self.validate_hash_arguments(h,*args)
48
114
  raise ArgumentError.new("argument to #{current_method} must be of class Hash") unless h.is_a? Hash
49
115
  ret = []
116
+ _calling_method = calling_method
50
117
  args.each do |a|
51
118
  name,options = a
52
119
  options = options || {}
@@ -68,27 +135,41 @@ EOF
68
135
  if instance_that_inherits_from
69
136
  unless val.class.inherits_from? instance_that_inherits_from
70
137
  raise ArgumentError.new(
71
- "argument :#{name} to #{calling_method} must be an instance that inherits from #{instance_that_inherits_from}, #{val.class} does not")
138
+ "argument :#{name} to #{_calling_method} must be an instance that inherits from #{instance_that_inherits_from}, #{val.class} does not")
72
139
  end
73
140
  elsif instance_of
74
- unless val.class == instance_of
75
- raise ArgumentError.new(
76
- "argument :#{name} to #{calling_method} must be an instance of class #{instance_of}, not #{val.class}")
141
+ if instance_of.is_a? Array
142
+ good = false
143
+ instance_of.each do |_instance_of|
144
+ if val.class == _instance_of
145
+ good = true
146
+ break
147
+ end
148
+ end
149
+ unless good
150
+ raise ArgumentError.new(
151
+ "argument :#{name} to #{_calling_method} must be an instance of class #{instance_of.join(',')}, not #{val.class}")
152
+ end
153
+ else
154
+ unless val.class == instance_of
155
+ raise ArgumentError.new(
156
+ "argument :#{name} to #{_calling_method} must be an instance of class #{instance_of}, not #{val.class}")
157
+ end
77
158
  end
78
159
  elsif klass_that_inherits_from
79
160
  unless val.inherits_from? klass
80
- raise ArgumentError.new("argument :#{name} to #{calling_method} must inherits from class #{klass_that_inherits_from}, #{val} does not")
161
+ raise ArgumentError.new("argument :#{name} to #{_calling_method} must inherits from class #{klass_that_inherits_from}, #{val} does not")
81
162
  end
82
163
  elsif klass_of
83
164
  unless val == klass_of
84
- raise ArgumentError.new("argument :#{name} to #{calling_method} must be of class #{klass_of}, not #{val}")
165
+ raise ArgumentError.new("argument :#{name} to #{_calling_method} must be of class #{klass_of}, not #{val}")
85
166
  end
86
167
  end
87
168
  else
88
169
  if options[:default]
89
170
  val = options[:default]
90
171
  elsif options[:required]
91
- raise ArgumentError.new("argument :#{name} to #{calling_method} is required")
172
+ raise ArgumentError.new("argument :#{name} to #{_calling_method} is required")
92
173
  end
93
174
  end
94
175
  ret.push val
@@ -175,69 +256,12 @@ EOF
175
256
  # view = parameters(h,[:view,{:klass => View,:required => true}])
176
257
 
177
258
  def parameters(h,*args)
178
- raise ArgumentError.new("argument to #{self.class}##{current_method} must be of class Hash; you may get this error if you don't call a function with a hash; check the initial call") unless h.is_a? Hash
179
- ret = []
180
- args.each do |a|
181
- name,options = a
182
- options = options || {}
183
- unless h[:no_recurse]
184
- vals = only_these_parameters(
185
- options.merge!(:no_recurse => true),
186
- [:instance_that_inherits_from, {:instance_of => Class}],
187
- [:instance_of, {:instance_of => Class}],
188
- [:klass_that_inherits_from, {:instance_of => Class}],
189
- [:klass_of, {:instance_of => Class}],
190
- [:no_recurse, {:instance_of => TrueClass}],
191
- [:required, {:instance_of => TrueClass}],
192
- [:default, {:instance_of => TrueClass}]
193
- )
194
- instance_that_inherits_from, instance_of, klass_that_inherits_from, klass_of, no_recurse, required, default = vals
195
- end
196
-
197
- if val = h[name]
198
- if instance_that_inherits_from
199
- unless val.class.inherits_from? instance_that_inherits_from
200
- raise ArgumentError.new(
201
- "argument :#{name} to #{self.class}##{calling_method} must be an instance that inherits from #{instance_that_inherits_from}, #{val.class} does not")
202
- end
203
- elsif instance_of
204
- unless val.class == instance_of
205
- raise ArgumentError.new(
206
- "argument :#{name} to #{self.class}##{calling_method} must be an instance of class #{instance_of}, not #{val.class}")
207
- end
208
- elsif klass_that_inherits_from
209
- unless val.inherits_from? klass_that_inherits_from
210
- raise ArgumentError.new("argument :#{name} to #{self.class}##{calling_method} must inherits from class #{klass_that_inherits_from}, #{val} does not")
211
- end
212
- elsif klass_of
213
- unless val == klass_to
214
- raise ArgumentError.new("argument :#{name} to #{self.class}##{calling_method} must be of class #{klass_of}, not #{val}")
215
- end
216
- end
217
- else
218
- if options[:default]
219
- val = options[:default]
220
- elsif options[:required]
221
- raise ArgumentError.new("argument :#{name} to #{self.class}##{calling_method} is required")
222
- end
223
- end
224
- ret.push val
225
- end
226
- ret
259
+ CkuruTools.parameters(h,args)
227
260
  end
228
261
 
229
262
  # insure that only the defined parameters have been passed to a function
230
263
  def only_these_parameters(h,*args)
231
- ret = parameters(h,*args)
232
- keys = h.keys
233
- args.each do |a|
234
- name,options = a
235
- keys.delete name
236
- end
237
- if keys.length > 0
238
- raise ArgumentError.new("unknown parameters #{keys.inspect} passed to #{self.class}##{calling_method}")
239
- end
240
- ret
264
+ CkuruTools.only_these_parameters(h,args)
241
265
  end
242
266
 
243
267
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ckuru-tools
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 9
10
- version: 0.0.9
9
+ - 10
10
+ version: 0.0.10
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bret Weinraub
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-05 00:00:00 Z
18
+ date: 2011-06-16 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: The infamous ckuru-tools gem. A miscellaneous grab bag of ruby class extensions, utility classes, etc.
@@ -49,6 +49,7 @@ files:
49
49
  - ./bin/ckuru-tools
50
50
  - ./bin/generate_as_controller
51
51
  - ./bin/ckuru-arg-tester
52
+ - ./lib/ckuru-tools/typed_array.rb
52
53
  homepage: http://www.aura-software.com
53
54
  licenses: []
54
55