pod4 0.6.2

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.
@@ -0,0 +1,494 @@
1
+ require 'pod4/tds_interface'
2
+
3
+ require 'date'
4
+
5
+ require_relative 'shared_examples_for_interface'
6
+ require_relative 'fixtures/database'
7
+
8
+
9
+ class TestTdsInterface < TdsInterface
10
+ set_db :pod4_test
11
+ set_table :customer
12
+ set_id_fld :id
13
+ end
14
+
15
+ class SchemaTdsInterface < TdsInterface
16
+ set_db :pod4_test
17
+ set_schema :public
18
+ set_table :customer
19
+ set_id_fld :id
20
+ end
21
+
22
+ class BadTdsInterface1 < TdsInterface
23
+ set_db :pod4_test
24
+ set_table :customer
25
+ end
26
+
27
+ class BadTdsInterface2 < TdsInterface
28
+ set_db :pod4_test
29
+ set_id_fld :id
30
+ end
31
+
32
+
33
+ describe TestTdsInterface do
34
+
35
+ def db_setup(connect)
36
+ client = TinyTds::Client.new(connect)
37
+ client.execute(%Q|use [pod4_test];|).do
38
+
39
+ # Our SQL Server does not support DROP TABLE IF EXISTS !
40
+ # This is apparently an SQL-agnostic way of doing it:
41
+ client.execute(%Q|
42
+ if exists (select * from INFORMATION_SCHEMA.TABLES
43
+ where TABLE_NAME = 'customer'
44
+ AND TABLE_SCHEMA = 'dbo' )
45
+ drop table dbo.customer;| ).do
46
+
47
+ client.execute(%Q|
48
+ create table dbo.customer (
49
+ id int identity(1,1) not null,
50
+ name nvarchar(max),
51
+ level real null,
52
+ day date null,
53
+ timestamp datetime null,
54
+ price money null,
55
+ qty numeric(5,2) null );| ).do
56
+
57
+ ensure
58
+ client.close if client
59
+ end
60
+
61
+
62
+ def fill_data(ifce)
63
+ @data.each{|r| ifce.create(r) }
64
+ end
65
+
66
+
67
+ before(:all) do
68
+ @connect_hash = DB[:tds]
69
+ db_setup(@connect_hash)
70
+
71
+ @data = []
72
+ @data << { name: 'Barney',
73
+ level: 1.23,
74
+ day: Date.parse("2016-01-01"),
75
+ timestamp: Time.parse('2015-01-01 12:11'),
76
+ price: BigDecimal.new("1.24"),
77
+ qty: BigDecimal.new("1.25") }
78
+
79
+ @data << { name: 'Fred',
80
+ level: 2.34,
81
+ day: Date.parse("2016-02-02"),
82
+ timestamp: Time.parse('2015-01-02 12:22'),
83
+ price: BigDecimal.new("2.35"),
84
+ qty: BigDecimal.new("2.36") }
85
+
86
+ @data << { name: 'Betty',
87
+ level: 3.45,
88
+ day: Date.parse("2016-03-03"),
89
+ timestamp: Time.parse('2015-01-03 12:33'),
90
+ price: BigDecimal.new("3.46"),
91
+ qty: BigDecimal.new("3.47") }
92
+
93
+ end
94
+
95
+
96
+ before do
97
+ # TRUNCATE TABLE also resets the identity counter
98
+ interface.execute(%Q|truncate table customer;|)
99
+ end
100
+
101
+
102
+ let(:interface) do
103
+ TestTdsInterface.new(@connect_hash)
104
+ end
105
+
106
+ #####
107
+
108
+
109
+ it_behaves_like 'an interface' do
110
+
111
+ let(:interface) do
112
+ TestTdsInterface.new(@connect_hash)
113
+ end
114
+
115
+ let(:record) { {name: 'Barney'} }
116
+
117
+ end
118
+ ##
119
+
120
+
121
+ describe 'TdsInterface.set_db' do
122
+ it 'takes one argument' do
123
+ expect( TdsInterface ).to respond_to(:set_db).with(1).argument
124
+ end
125
+ end
126
+ ##
127
+
128
+
129
+ describe 'TdsInterface.db' do
130
+ it 'returns the table' do
131
+ expect( TestTdsInterface.db ).to eq :pod4_test
132
+ end
133
+ end
134
+ ##
135
+
136
+
137
+ describe 'TdsInterface.set_schema' do
138
+ it 'takes one argument' do
139
+ expect( TdsInterface ).to respond_to(:set_schema).with(1).argument
140
+ end
141
+ end
142
+ ##
143
+
144
+
145
+ describe 'TdsInterface.schema' do
146
+ it 'returns the schema' do
147
+ expect( SchemaTdsInterface.schema ).to eq :public
148
+ end
149
+
150
+ it 'is optional' do
151
+ expect{ TestTdsInterface.schema }.not_to raise_exception
152
+ expect( TestTdsInterface.schema ).to eq nil
153
+ end
154
+ end
155
+ ##
156
+
157
+
158
+ describe 'TdsInterface.set_table' do
159
+ it 'takes one argument' do
160
+ expect( TdsInterface ).to respond_to(:set_table).with(1).argument
161
+ end
162
+ end
163
+ ##
164
+
165
+
166
+ describe 'TdsInterface.table' do
167
+ it 'returns the table' do
168
+ expect( TestTdsInterface.table ).to eq :customer
169
+ end
170
+ end
171
+ ##
172
+
173
+
174
+ describe 'TdsInterface.set_id_fld' do
175
+ it 'takes one argument' do
176
+ expect( TdsInterface ).to respond_to(:set_id_fld).with(1).argument
177
+ end
178
+ end
179
+ ##
180
+
181
+
182
+ describe 'TdsInterface.id_fld' do
183
+ it 'returns the ID field name' do
184
+ expect( TestTdsInterface.id_fld ).to eq :id
185
+ end
186
+ end
187
+ ##
188
+
189
+
190
+ describe '#new' do
191
+
192
+ it 'requires a TinyTds connection string' do
193
+ expect{ TestTdsInterface.new }.to raise_exception ArgumentError
194
+ expect{ TestTdsInterface.new(nil) }.to raise_exception ArgumentError
195
+ expect{ TestTdsInterface.new('foo') }.to raise_exception ArgumentError
196
+
197
+ expect{ TestTdsInterface.new(@connect_hash) }.not_to raise_exception
198
+ end
199
+
200
+ it 'requires the table and id field to be defined in the class' do
201
+ expect{ TdsInterface.new(@connect_hash) }.to raise_exception Pod4Error
202
+
203
+ expect{ BadTdsInterface1.new(@connect_hash) }.
204
+ to raise_exception Pod4Error
205
+
206
+ expect{ BadTdsInterface2.new(@connect_hash) }.
207
+ to raise_exception Pod4Error
208
+
209
+ end
210
+
211
+ end
212
+ ##
213
+
214
+
215
+ describe '#quoted_table' do
216
+
217
+ it 'returns just the table when the schema is not set' do
218
+ expect( interface.quoted_table ).to eq( %Q|[customer]| )
219
+ end
220
+
221
+ it 'returns the schema plus table when the schema is set' do
222
+ ifce = SchemaTdsInterface.new(@connect_hash)
223
+ expect( ifce.quoted_table ).to eq( %|[public].[customer]| )
224
+ end
225
+
226
+ end
227
+ ##
228
+
229
+
230
+ describe '#create' do
231
+
232
+ let(:hash) { {name: 'Bam-Bam', price: 4.44} }
233
+ let(:ot) { Octothorpe.new(name: 'Wilma', price: 5.55) }
234
+
235
+ it 'raises a Pod4::DatabaseError if anything goes wrong' do
236
+ expect{ interface.create(one: 'two') }.to raise_exception DatabaseError
237
+ end
238
+
239
+ it 'creates the record when given a hash' do
240
+ # kinda impossible to seperate these two tests
241
+ id = interface.create(hash)
242
+
243
+ expect{ interface.read(id) }.not_to raise_exception
244
+ expect( interface.read(id).to_h ).to include hash
245
+ end
246
+
247
+ it 'creates the record when given an Octothorpe' do
248
+ id = interface.create(ot)
249
+
250
+ expect{ interface.read(id) }.not_to raise_exception
251
+ expect( interface.read(id).to_h ).to include ot.to_h
252
+ end
253
+
254
+ it 'shouldnt have a problem with record values of nil' do
255
+ hash2 = {name: 'Ranger', price: nil}
256
+ expect{ interface.create(hash2) }.not_to raise_exception
257
+ id = interface.create(hash2)
258
+ expect( interface.read(id).to_h ).to include(hash2)
259
+ end
260
+
261
+ end
262
+ ##
263
+
264
+
265
+ describe '#read' do
266
+ before { fill_data(interface) }
267
+
268
+ it 'returns the record for the id as an Octothorpe' do
269
+ rec = interface.read(2)
270
+ expect( rec ).to be_a_kind_of Octothorpe
271
+ expect( rec.>>.name ).to eq 'Fred'
272
+ end
273
+
274
+ it 'raises a Pod4::CantContinue if anything goes wrong with the ID' do
275
+ expect{ interface.read(:foo) }.to raise_exception CantContinue
276
+ end
277
+
278
+ it 'returns an empty Octothorpe if no record matches the ID' do
279
+ expect{ interface.read(99) }.not_to raise_exception
280
+ expect( interface.read(99) ).to be_a_kind_of Octothorpe
281
+ expect( interface.read(99) ).to be_empty
282
+ end
283
+
284
+ it 'returns real fields as Float' do
285
+ level = interface.read(1).>>.level
286
+
287
+ expect( level ).to be_a_kind_of Float
288
+ expect( level ).to be_within(0.001).of( @data.first[:level] )
289
+ end
290
+
291
+ it 'returns date fields as Date' do
292
+ pending "not supported by TinyTds ¬_¬ "
293
+ date = interface.read(1).>>.day
294
+
295
+ expect( date ).to be_a_kind_of Date
296
+ expect( date ).to eq @data.first[:day]
297
+ end
298
+
299
+ it 'returns datetime fields as Time' do
300
+ timestamp = interface.read(1).>>.timestamp
301
+
302
+ expect( timestamp ).to be_a_kind_of Time
303
+ expect( timestamp ).to eq @data.first[:timestamp]
304
+ end
305
+
306
+ it 'returns numeric fields as BigDecimal' do
307
+ qty = interface.read(1).>>.qty
308
+
309
+ expect( qty ).to be_a_kind_of BigDecimal
310
+ expect( qty ).to eq @data.first[:qty]
311
+ end
312
+
313
+ it 'returns money fields as BigDecimal' do
314
+ price = interface.read(1).>>.price
315
+
316
+ expect( price ).to be_a_kind_of BigDecimal
317
+ expect( price ).to eq @data.first[:price]
318
+ end
319
+
320
+ end
321
+ ##
322
+
323
+
324
+ describe '#list' do
325
+ before { fill_data(interface) }
326
+
327
+ it 'has an optional selection parameter, a hash' do
328
+ # Actually it does not have to be a hash, but FTTB we only support that.
329
+ expect{ interface.list(name: 'Barney') }.not_to raise_exception
330
+ end
331
+
332
+ it 'returns an array of Octothorpes that match the records' do
333
+ list = interface.list
334
+
335
+ expect( list.first ).to be_a_kind_of Octothorpe
336
+ expect( list.map{|x| x.>>.name} ).to match_array @data.map{|y| y[:name]}
337
+ end
338
+
339
+ it 'returns a subset of records based on the selection parameter' do
340
+ expect( interface.list(name: 'Fred').size ).to eq 1
341
+
342
+ expect( interface.list(name: 'Betty').first.to_h ).
343
+ to include(name: 'Betty', price: 3.46)
344
+
345
+ end
346
+
347
+ it 'returns an empty Array if nothing matches' do
348
+ expect( interface.list(name: 'Yogi') ).to eq([])
349
+ end
350
+
351
+ it 'raises DatabaseError if the selection criteria is nonsensical' do
352
+ expect{ interface.list('foo') }.to raise_exception Pod4::DatabaseError
353
+ end
354
+
355
+ end
356
+ ##
357
+
358
+
359
+ describe '#update' do
360
+ before { fill_data(interface) }
361
+
362
+ let(:id) { interface.list.first[:id] }
363
+
364
+ def float_price(row)
365
+ row[:price] = row[:price].to_f
366
+ row
367
+ end
368
+
369
+ it 'updates the record at ID with record parameter' do
370
+ record = {name: 'Booboo', price: 99.99}
371
+ interface.update(id, record)
372
+
373
+ # It so happens that TinyTds returns money as BigDecimal --
374
+ # this is a really good thing, even though it screws with our test.
375
+ expect( float_price( interface.read(id).to_h ) ).to include(record)
376
+ end
377
+
378
+ it 'raises a CantContinue if anything weird happens with the ID' do
379
+ expect{ interface.update(99, name: 'Booboo') }.
380
+ to raise_exception CantContinue
381
+
382
+ end
383
+
384
+ it 'raises a DatabaseError if anything weird happens with the record' do
385
+ expect{ interface.update(id, smarts: 'more') }.
386
+ to raise_exception DatabaseError
387
+
388
+ end
389
+
390
+ it 'shouldnt have a problem with record values of nil' do
391
+ record = {name: 'Ranger', price: nil}
392
+ expect{ interface.update(id, record) }.not_to raise_exception
393
+ expect( interface.read(id).to_h ).to include(record)
394
+ end
395
+
396
+ end
397
+ ##
398
+
399
+
400
+ describe '#delete' do
401
+
402
+ def list_contains(id)
403
+ interface.list.find {|x| x[interface.id_fld] == id }
404
+ end
405
+
406
+ let(:id) { interface.list.first[:id] }
407
+
408
+ before { fill_data(interface) }
409
+
410
+ it 'raises CantContinue if anything hinky happens with the ID' do
411
+ expect{ interface.delete(:foo) }.to raise_exception CantContinue
412
+ expect{ interface.delete(99) }.to raise_exception CantContinue
413
+ end
414
+
415
+ it 'makes the record at ID go away' do
416
+ expect( list_contains(id) ).to be_truthy
417
+ interface.delete(id)
418
+ expect( list_contains(id) ).to be_falsy
419
+ end
420
+
421
+ end
422
+ ##
423
+
424
+
425
+ describe '#execute' do
426
+
427
+ let(:sql) { 'delete from customer where price < 2.0;' }
428
+
429
+ before { fill_data(interface) }
430
+
431
+ it 'requires an SQL string' do
432
+ expect{ interface.execute }.to raise_exception ArgumentError
433
+ expect{ interface.execute(nil) }.to raise_exception ArgumentError
434
+ expect{ interface.execute(14) }.to raise_exception ArgumentError
435
+ end
436
+
437
+ it 'raises some sort of Pod4 error if it runs into problems' do
438
+ expect{ interface.execute('delete from not_a_table') }.
439
+ to raise_exception Pod4Error
440
+
441
+ end
442
+
443
+ it 'executes the string' do
444
+ expect{ interface.execute(sql) }.not_to raise_exception
445
+ expect( interface.list.size ).to eq(@data.size - 1)
446
+ expect( interface.list.map{|r| r[:name] } ).not_to include 'Barney'
447
+ end
448
+
449
+ end
450
+ ##
451
+
452
+
453
+ describe '#select' do
454
+
455
+ before { fill_data(interface) }
456
+
457
+ it 'requires an SQL string' do
458
+ expect{ interface.select }.to raise_exception ArgumentError
459
+ expect{ interface.select(nil) }.to raise_exception ArgumentError
460
+ expect{ interface.select(14) }.to raise_exception ArgumentError
461
+ end
462
+
463
+ it 'raises some sort of Pod4 error if it runs into problems' do
464
+ expect{ interface.select('select * from not_a_table') }.
465
+ to raise_exception Pod4Error
466
+
467
+ end
468
+
469
+ it 'returns the result of the sql' do
470
+ sql1 = 'select name from customer where price < 2.0;'
471
+ sql2 = 'select name from customer where price < 0.0;'
472
+
473
+ expect{ interface.select(sql1) }.not_to raise_exception
474
+ expect( interface.select(sql1) ).to eq( [{name: 'Barney'}] )
475
+ expect( interface.select(sql2) ).to eq( [] )
476
+ end
477
+
478
+ it 'works if you pass a non-select' do
479
+ # By which I mean: still executes the SQL; returns []
480
+ sql = 'delete from customer where price < 2.0;'
481
+ ret = interface.select(sql)
482
+
483
+ expect( interface.list.size ).to eq(@data.size - 1)
484
+ expect( interface.list.map{|r| r[:name] } ).not_to include 'Barney'
485
+ expect( ret ).to eq( [] )
486
+ end
487
+
488
+
489
+ end
490
+ ##
491
+
492
+
493
+ end
494
+
data/tags ADDED
@@ -0,0 +1,106 @@
1
+ !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2
+ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3
+ <=> lib/pod4/alert.rb /^ def <=>(other)$/;" f class:Pod4.Alert
4
+ ACTIONS lib/pod4/interface.rb /^ ACTIONS = [ :list, :create, :read, :update, :delete ]$/;" C class:Pod4.Interface
5
+ ALERTTYPES lib/pod4/alert.rb /^ ALERTTYPES = [:error, :warning, :info, :success]$/;" C class:Pod4.Alert
6
+ Alert lib/pod4/alert.rb /^ class Alert$/;" c class:Pod4
7
+ DatabaseError lib/pod4/errors.rb /^ class DatabaseError < Pod4Error; end$/;" c class:Pod4 inherits:Pod4Error
8
+ DocNoPending spec/doc_no_pending.rb /^class DocNoPending < RSpec::Core:;FOrmatters::DocumentationFormatter$/;" c
9
+ Interface lib/pod4/interface.rb /^ class Interface$/;" c class:Pod4
10
+ Model lib/pod4/model.rb /^ class Model$/;" c class:Pod4
11
+ NebulousInterface lib/pod4/nebulous_interface.rb /^ class NebulousInterface < Interface$/;" c class:Pod4 inherits:Interface
12
+ NotImplemented lib/pod4/errors.rb /^ class NotImplemented < Error; end$/;" c class:Pod4 inherits:Error
13
+ Param lib/pod4/param.rb /^ module Param$/;" m class:Pod4
14
+ Pod4 lib/pod4.rb /^module Pod4$/;" m
15
+ Pod4 lib/pod4/alert.rb /^module Pod4$/;" m
16
+ Pod4 lib/pod4/errors.rb /^module Pod4$/;" m
17
+ Pod4 lib/pod4/interface.rb /^module Pod4$/;" m
18
+ Pod4 lib/pod4/model.rb /^module Pod4$/;" m
19
+ Pod4 lib/pod4/nebulous_interface.rb /^module Pod4$/;" m
20
+ Pod4 lib/pod4/param.rb /^module Pod4$/;" m
21
+ Pod4 lib/pod4/sequel_interface.rb /^module Pod4$/;" m
22
+ Pod4 lib/pod4/version.rb /^module Pod4 $/;" m
23
+ Pod4Error lib/pod4/errors.rb /^ class Pod4Error < StandardError$/;" c class:Pod4 inherits:StandardError
24
+ STATII lib/pod4/model.rb /^ STATII = %i|error warning okay empty|$/;" C class:Pod4.Model
25
+ SequelInterface lib/pod4/sequel_interface.rb /^ class SequelInterface < Interface$/;" c class:Pod4 inherits:Interface
26
+ VERSION lib/pod4/version.rb /^ VERSION = 0.1$/;" C class:Pod4
27
+ ValidationError lib/pod4/errors.rb /^ class ValidationError < Pod4Error$/;" c class:Pod4 inherits:Pod4Error
28
+ ["@id_fld", 26] lib/pod4/sequel_interface.rb /^ attr_reader :table, @id_fld$/;" F class:Pod4.SequelInterface
29
+ add_alert lib/pod4/model.rb /^ def add_alert(type, field=nil, message)$/;" f class:Pod4.Model
30
+ alerts lib/pod4/model.rb /^ attr_reader :id, :alerts, :model_status$/;" f class:Pod4.Model
31
+ attr_columns lib/pod4/model.rb /^ def attr_columns(*cols)$/;" F class:Pod4.Model
32
+ bootstrap_class lib/pod4/alert.rb /^ def bootstrap_class$/;" f class:Pod4.Alert
33
+ clearing_cache lib/pod4/nebulous_interface.rb /^ def clearing_cache$/;" f class:Pod4.NebulousInterface
34
+ columns lib/pod4/model.rb /^ def columns $/;" F class:Pod4.Model
35
+ columns lib/pod4/model.rb /^ def columns; self.class.columns; end$/;" f class:Pod4.Model
36
+ create lib/pod4/interface.rb /^ def create(record)$/;" f class:Pod4.Interface
37
+ create lib/pod4/model.rb /^ def create$/;" f class:Pod4.Model
38
+ create lib/pod4/nebulous_interface.rb /^ def create(record)$/;" f class:Pod4.NebulousInterface
39
+ create lib/pod4/sequel_interface.rb /^ def create(record)$/;" f class:Pod4.SequelInterface
40
+ delete lib/pod4/interface.rb /^ def delete(id)$/;" f class:Pod4.Interface
41
+ delete lib/pod4/model.rb /^ def delete$/;" f class:Pod4.Model
42
+ delete lib/pod4/nebulous_interface.rb /^ def delete(id)$/;" f class:Pod4.NebulousInterface
43
+ delete lib/pod4/sequel_interface.rb /^ def delete(id)$/;" f class:Pod4.SequelInterface
44
+ example_pending spec/doc_no_pending.rb /^ def example_pending(notifications); end$/;" f class:DocNoPending
45
+ exception lib/pod4/alert.rb /^ attr_reader :type, :exception$/;" f class:Pod4.Alert
46
+ execute lib/pod4/sequel_interface.rb /^ def execute(sql)$/;" f class:Pod4.SequelInterface
47
+ field lib/pod4/alert.rb /^ attr_accessor :field, :message$/;" f class:Pod4.Alert
48
+ field lib/pod4/errors.rb /^ attr_reader :field$/;" f class:Pod4.ValidationError
49
+ field= lib/pod4/alert.rb /^ attr_accessor :field, :message$/;" f class:Pod4.Alert
50
+ from_alert lib/pod4/errors.rb /^ def self.from_alert(alert)$/;" F class:Pod4.ValidationError
51
+ from_error lib/pod4/errors.rb /^ def self.from_error(error)$/;" F class:Pod4.Pod4Error
52
+ from_error lib/pod4/errors.rb /^ def self.from_error(error, field=nil)$/;" F class:Pod4.ValidationError
53
+ get lib/pod4/param.rb /^ def get(p); params[p.to_sym]; end$/;" f class:Pod4.Param
54
+ get_all lib/pod4/param.rb /^ def get_all; Octothorpe.new(params); end$/;" f class:Pod4.Param
55
+ handle_error lib/pod4/nebulous_interface.rb /^ def handle_error(err)$/;" f class:Pod4.NebulousInterface
56
+ handle_error lib/pod4/sequel_interface.rb /^ def handle_error(err)$/;" f class:Pod4.SequelInterface
57
+ id lib/pod4/model.rb /^ attr_reader :id, :alerts, :model_status$/;" f class:Pod4.Model
58
+ initialize lib/pod4/alert.rb /^ def initialize(type, field=nil, message)$/;" f class:Pod4.Alert
59
+ initialize lib/pod4/errors.rb /^ def initialize(message, field=nil)$/;" f class:Pod4.ValidationError
60
+ initialize lib/pod4/errors.rb /^ def initialize(message=nil); super; end$/;" f class:Pod4.Pod4Error
61
+ initialize lib/pod4/interface.rb /^ def initialize$/;" f class:Pod4.Interface
62
+ initialize lib/pod4/model.rb /^ def initialize(id=nil)$/;" f class:Pod4.Model
63
+ initialize lib/pod4/nebulous_interface.rb /^ def initialize(paramHash)$/;" f class:Pod4.NebulousInterface
64
+ initialize lib/pod4/sequel_interface.rb /^ def initialize(db)$/;" f class:Pod4.SequelInterface
65
+ interface lib/pod4/model.rb /^ def interface$/;" F class:Pod4.Model
66
+ interface lib/pod4/model.rb /^ def interface; self.class.interface; end$/;" f class:Pod4.Model
67
+ list lib/pod4/interface.rb /^ def list(selection=nil)$/;" f class:Pod4.Interface
68
+ list lib/pod4/model.rb /^ def list(params=nil)$/;" F class:Pod4.Model
69
+ list lib/pod4/nebulous_interface.rb /^ def list(selection=nil)$/;" f class:Pod4.NebulousInterface
70
+ list lib/pod4/sequel_interface.rb /^ def list(selection=nil)$/;" f class:Pod4.SequelInterface
71
+ logger lib/pod4.rb /^ def self.logger$/;" F class:Pod4
72
+ message lib/pod4/alert.rb /^ attr_accessor :field, :message$/;" f class:Pod4.Alert
73
+ message= lib/pod4/alert.rb /^ attr_accessor :field, :message$/;" f class:Pod4.Alert
74
+ model_status lib/pod4/model.rb /^ attr_reader :id, :alerts, :model_status$/;" f class:Pod4.Model
75
+ or_die lib/pod4/model.rb /^ alias :or_die :throw_exceptions$/;" a class:Pod4.Model
76
+ param_string lib/pod4/nebulous_interface.rb /^ def param_string(params)$/;" f class:Pod4.NebulousInterface
77
+ params lib/pod4/param.rb /^ def params; @params ||= {}; end$/;" f class:Pod4.Param
78
+ read lib/pod4/interface.rb /^ def read(id)$/;" f class:Pod4.Interface
79
+ read lib/pod4/model.rb /^ def read$/;" f class:Pod4.Model
80
+ read lib/pod4/nebulous_interface.rb /^ def read(id)$/;" f class:Pod4.NebulousInterface
81
+ read lib/pod4/sequel_interface.rb /^ def read(id)$/;" f class:Pod4.SequelInterface
82
+ response lib/pod4/nebulous_interface.rb /^ attr_reader :response$/;" f class:Pod4.NebulousInterface
83
+ select lib/pod4/sequel_interface.rb /^ def select(sql)$/;" f class:Pod4.SequelInterface
84
+ send_message lib/pod4/nebulous_interface.rb /^ def send_message(verb, paramStr, with_cache=true)$/;" f class:Pod4.NebulousInterface
85
+ set lib/pod4/model.rb /^ def set(ot)$/;" f class:Pod4.Model
86
+ set lib/pod4/param.rb /^ def set(p,v); params[p.to_sym] = v; end$/;" f class:Pod4.Param
87
+ set_id_fld lib/pod4/sequel_interface.rb /^ def set_id_fld(idFld); @id_fld = idFld; end$/;" F class:Pod4.SequelInterface
88
+ set_interface lib/pod4/model.rb /^ def set_interface(interface)$/;" F class:Pod4.Model
89
+ set_logger lib/pod4.rb /^ def self.set_logger(lg)$/;" F class:Pod4
90
+ set_status lib/pod4/nebulous_interface.rb /^ def set_status$/;" f class:Pod4.NebulousInterface
91
+ set_table lib/pod4/sequel_interface.rb /^ def set_table(table); @table = table; end$/;" F class:Pod4.SequelInterface
92
+ set_target lib/pod4/nebulous_interface.rb /^ def set_target(target); @target = target; end$/;" F class:Pod4.NebulousInterface
93
+ set_verb lib/pod4/nebulous_interface.rb /^ def set_verb(action, verb)$/;" F class:Pod4.NebulousInterface
94
+ status lib/pod4/nebulous_interface.rb /^ attr_reader :status$/;" f class:Pod4.NebulousInterface
95
+ table lib/pod4/sequel_interface.rb /^ attr_reader :table, @id_fld$/;" F class:Pod4.SequelInterface
96
+ target lib/pod4/nebulous_interface.rb /^ attr_reader :target, :verbs$/;" F class:Pod4.NebulousInterface
97
+ throw_exceptions lib/pod4/model.rb /^ def throw_exceptions$/;" f class:Pod4.Model
98
+ to_ot lib/pod4/model.rb /^ def to_ot$/;" f class:Pod4.Model
99
+ type lib/pod4/alert.rb /^ attr_reader :type, :exception$/;" f class:Pod4.Alert
100
+ update lib/pod4/interface.rb /^ def update(id, record)$/;" f class:Pod4.Interface
101
+ update lib/pod4/model.rb /^ def update$/;" f class:Pod4.Model
102
+ update lib/pod4/nebulous_interface.rb /^ def update(id, record)$/;" f class:Pod4.NebulousInterface
103
+ update lib/pod4/sequel_interface.rb /^ def update(id, record)$/;" f class:Pod4.SequelInterface
104
+ validate lib/pod4/model.rb /^ def validate$/;" f class:Pod4.Model
105
+ verb_for lib/pod4/nebulous_interface.rb /^ def verb_for(action)$/;" f class:Pod4.NebulousInterface
106
+ verbs lib/pod4/nebulous_interface.rb /^ attr_reader :target, :verbs$/;" F class:Pod4.NebulousInterface