activetokyocabinet 0.1.2 → 0.1.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/lib/active_record/connection_adapters/abstract_tokyocabinet_adapter.rb +1 -1
- data/lib/active_tokyocabinet/sqlparser.tab.rb +2 -2
- data/lib/active_tokyocabinet/sqlparser.y +2 -2
- data/lib/active_tokyocabinet/tdb.rb +20 -20
- data/spec/activetokyocabinet_spec.rb +260 -0
- data/spec/models/department.rb +7 -0
- data/spec/models/employee.rb +12 -0
- data/spec/spec_helper.rb +196 -0
- metadata +6 -2
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
module ActiveTokyoCabinet
|
|
2
|
-
module TDB
|
|
3
|
-
def self.included(mod)
|
|
4
|
-
{:string => :to_s, :int => :to_i, :float => :
|
|
5
|
-
mod.instance_eval %{
|
|
6
|
-
def #{type}(name)
|
|
7
|
-
unless @columns
|
|
8
|
-
primary_key = ActiveRecord::ConnectionAdapters::Column.new('id', nil)
|
|
9
|
-
primary_key.primary = true
|
|
10
|
-
@columns = [primary_key]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
@columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, nil)
|
|
14
|
-
class_eval "def \#{name}; v = self[:\#{name}]; v
|
|
15
|
-
end
|
|
16
|
-
}
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
1
|
+
module ActiveTokyoCabinet
|
|
2
|
+
module TDB
|
|
3
|
+
def self.included(mod)
|
|
4
|
+
{:string => :to_s, :int => :to_i, :float => :to_f}.each do |type, conv|
|
|
5
|
+
mod.instance_eval %{
|
|
6
|
+
def #{type}(name)
|
|
7
|
+
unless @columns
|
|
8
|
+
primary_key = ActiveRecord::ConnectionAdapters::Column.new('id', nil)
|
|
9
|
+
primary_key.primary = true
|
|
10
|
+
@columns = [primary_key]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
@columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, nil)
|
|
14
|
+
class_eval "def \#{name}; v = self[:\#{name}]; (v.nil? || v.empty?) ? nil : v.#{conv}; end"
|
|
15
|
+
end
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
$wd = File.dirname(File.expand_path(__FILE__))
|
|
2
|
+
ENV['RUBYLIB'] = "#{$wd}/../lib"
|
|
3
|
+
|
|
4
|
+
require 'spec_helper'
|
|
5
|
+
include SpecHelper
|
|
6
|
+
include ActiveTokyoCabinetSpec
|
|
7
|
+
|
|
8
|
+
describe 'tokyocabinet:' do
|
|
9
|
+
before do
|
|
10
|
+
TokyoCabinetSpec.establish_connection
|
|
11
|
+
TokyoCabinetSpec.create_tables
|
|
12
|
+
TokyoCabinetSpec.setup_employee
|
|
13
|
+
TokyoCabinetSpec.setup_department
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "employees length > 0" do
|
|
17
|
+
employees = Employee.find(:all)
|
|
18
|
+
employees.length.should == employee_data.length
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "employees has a one data (ename = 'SMITH')" do
|
|
22
|
+
employees = Employee.find(:all, :conditions => ['ename = ?', 'SMITH'])
|
|
23
|
+
employees.length.should == 1
|
|
24
|
+
data = employee_data.find {|i| i[EMP_ENAME] == 'SMITH' }
|
|
25
|
+
validate_employee(data, employees[0])
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "employees has a one data (empno = 7521)" do
|
|
29
|
+
employees = Employee.find(:all, :conditions => ['empno = ?', 7521])
|
|
30
|
+
employees.length.should == 1
|
|
31
|
+
data = employee_data.find {|i| i[EMP_EMPNO] == 7521 }
|
|
32
|
+
validate_employee(data, employees[0])
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "employees has no data (ename = 'SMITH' and job = 'SALESMAN')" do
|
|
36
|
+
employees = Employee.find(:all, :conditions => ['ename = ? and job = ?', 'SMITH', 'SALESMAN'])
|
|
37
|
+
employees.should be_empty
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "employees a one data (ename = 'TURNER' and job = 'SALESMAN')" do
|
|
41
|
+
employees = Employee.find(:all, :conditions => ['ename = ? and job = ?', 'TURNER', 'SALESMAN'])
|
|
42
|
+
employees.length.should == 1
|
|
43
|
+
data = employee_data.find {|i| i[EMP_ENAME] == 'TURNER' and i[EMP_JOB] == 'SALESMAN' }
|
|
44
|
+
validate_employee(data, employees[0])
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "employees a one data ({:ename => 'TURNER', :job => 'SALESMAN'})" do
|
|
48
|
+
employees = Employee.find(:all, :conditions => {:ename => 'TURNER', :job => 'SALESMAN'})
|
|
49
|
+
employees.length.should == 1
|
|
50
|
+
data = employee_data.find {|i| i[EMP_ENAME] == 'TURNER' and i[EMP_JOB] == 'SALESMAN' }
|
|
51
|
+
validate_employee(data, employees[0])
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "employees has any data" do
|
|
55
|
+
employee_data.each_with_index do |data, i|
|
|
56
|
+
employee_id = i + 1
|
|
57
|
+
employee = Employee.find(employee_id)
|
|
58
|
+
|
|
59
|
+
employee.should_not be_nil
|
|
60
|
+
employee.id.should == employee_id
|
|
61
|
+
validate_employee(data, employee)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "employees has any data (job = 'SALESMAN')" do
|
|
66
|
+
employees = Employee.find(:all, :conditions => ['job = ?', 'SALESMAN'])
|
|
67
|
+
|
|
68
|
+
employees.each do |employee|
|
|
69
|
+
data = employee_data[employee.id - 1]
|
|
70
|
+
|
|
71
|
+
data.should_not be_nil
|
|
72
|
+
data[EMP_JOB].should == 'SALESMAN'
|
|
73
|
+
validate_employee(data, employee)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "employees has any data (id=1,2,3)" do
|
|
78
|
+
employees = Employee.find([1, 2, 3])
|
|
79
|
+
employees.length.should == 3
|
|
80
|
+
|
|
81
|
+
employee_data[0..2].each_with_index do |data, i|
|
|
82
|
+
empno, ename, job, mgr, hiredate, sal, comm, deptno = data
|
|
83
|
+
employee_id = i + 1
|
|
84
|
+
employee = employees.find {|i| i.id == employee_id }
|
|
85
|
+
|
|
86
|
+
employee.should_not be_nil
|
|
87
|
+
employee.id.should == employee_id
|
|
88
|
+
validate_employee(data, employee)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "employees has any data (order by ename desc limit 3)" do
|
|
93
|
+
employees = Employee.find(:all, :order => 'ename desc', :limit => 3)
|
|
94
|
+
employees.length.should == 3
|
|
95
|
+
|
|
96
|
+
employee_data.sort_by {|i| i[EMP_ENAME] || '' }.reverse[0..2].each do |data|
|
|
97
|
+
employee = employees.find {|i| i.id == data.id }
|
|
98
|
+
employee.should_not be_nil
|
|
99
|
+
validate_employee(data, employee)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "employees has any data (order by ename desc limit 4 offset 5)" do
|
|
104
|
+
employees = Employee.find(:all, :order => 'ename desc', :limit => 4, :offset => 5)
|
|
105
|
+
employees.length.should == 4
|
|
106
|
+
|
|
107
|
+
employee_data.sort_by {|i| i[EMP_ENAME] || '' }.reverse[5..8].each do |data|
|
|
108
|
+
employee = employees.find {|i| i.id == data.id }
|
|
109
|
+
employee.should_not be_nil
|
|
110
|
+
validate_employee(data, employee)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "employees has any data ([])" do
|
|
115
|
+
employee_data.each_with_index do |data, i|
|
|
116
|
+
empno, ename, job, mgr, hiredate, sal, comm, deptno = data
|
|
117
|
+
employee_id = i + 1
|
|
118
|
+
employee = Employee.find(employee_id)
|
|
119
|
+
|
|
120
|
+
employee.should_not be_nil
|
|
121
|
+
employee[:id].should == employee_id
|
|
122
|
+
employee[:empno].should == empno.to_s
|
|
123
|
+
employee[:ename].should == ename.to_s
|
|
124
|
+
employee[:job].should == job.to_s
|
|
125
|
+
employee[:mgr].should == mgr.to_s
|
|
126
|
+
employee[:hiredate].should == hiredate.to_s
|
|
127
|
+
employee[:sal].should == sal.to_s
|
|
128
|
+
employee[:comm].should == comm.to_s
|
|
129
|
+
employee[:deptno].should == deptno.to_s
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# -------------------------------------------------------------------
|
|
134
|
+
|
|
135
|
+
it "departments length > 0" do
|
|
136
|
+
departments = Department.find(:all)
|
|
137
|
+
departments.length.should == department_data.length
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "departments has a one data (dname = 'SALES')" do
|
|
141
|
+
departments = Department.find(:all, :conditions => ['dname = ?', 'SALES'])
|
|
142
|
+
departments.length.should == 1
|
|
143
|
+
data = department_data.find {|i| i[DEPT_DNAME] == 'SALES' }
|
|
144
|
+
validate_department(data, departments[0])
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "departments has a one data (deptno = 20)" do
|
|
148
|
+
departments = Department.find(:all, :conditions => ['deptno = ?', 20])
|
|
149
|
+
departments.length.should == 1
|
|
150
|
+
data = department_data.find {|i| i[DEPT_DEPTNO] == 20 }
|
|
151
|
+
validate_department(data, departments[0])
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it "departments has no data (deptno = 20 and loc = 'BOSTON')" do
|
|
155
|
+
departments = Department.find(:all, :conditions => ['deptno = ? and loc = ?', 20, 'BOSTON'])
|
|
156
|
+
departments.should be_empty
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it "departments has a one data (deptno = 40 and loc = 'BOSTON')" do
|
|
160
|
+
departments = Department.find(:all, :conditions => ['deptno = ? and loc = ?', 40, 'BOSTON'])
|
|
161
|
+
departments.length.should == 1
|
|
162
|
+
data = department_data.find {|i| i[DEPT_DEPTNO] == 40 and i[DEPT_LOC] == 'BOSTON' }
|
|
163
|
+
validate_department(data, departments[0])
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "departments has a one data ({:deptno => 40. :loc => 'BOSTON'})" do
|
|
167
|
+
departments = Department.find(:all, :conditions => {:deptno => 40, :loc => 'BOSTON'})
|
|
168
|
+
departments.length.should == 1
|
|
169
|
+
data = department_data.find {|i| i[DEPT_DEPTNO] == 40 and i[DEPT_LOC] == 'BOSTON' }
|
|
170
|
+
validate_department(data, departments[0])
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "departments has any data" do
|
|
174
|
+
department_data.each_with_index do |data, i|
|
|
175
|
+
department_id = i + 1
|
|
176
|
+
department = Department.find(department_id)
|
|
177
|
+
|
|
178
|
+
department.should_not be_nil
|
|
179
|
+
department.id.should == department_id
|
|
180
|
+
validate_department(data, department)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it "departments has any data ([])" do
|
|
185
|
+
department_data.each_with_index do |data, i|
|
|
186
|
+
deptno, dname, loc = data
|
|
187
|
+
department_id = i + 1
|
|
188
|
+
department = Department.find(department_id)
|
|
189
|
+
|
|
190
|
+
department.should_not be_nil
|
|
191
|
+
department[:id].should == department_id
|
|
192
|
+
department[:deptno].should == deptno.to_s
|
|
193
|
+
department[:dname].should == dname.to_s
|
|
194
|
+
department[:loc].should == loc.to_s
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it "department has any data (loc in ('NEW YORK', 'CHICAGO'))" do
|
|
199
|
+
departments = Department.find(:all, :conditions => ['loc in (?)', ['NEW YORK', 'CHICAGO']])
|
|
200
|
+
|
|
201
|
+
departments.each do |department|
|
|
202
|
+
data = department_data[department.id - 1]
|
|
203
|
+
|
|
204
|
+
data.should_not be_nil
|
|
205
|
+
validate_department(data, department)
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
it "department has any data ({:loc => ['NEW YORK', 'CHICAGO']})" do
|
|
210
|
+
departments = Department.find(:all, :conditions => {:loc => ['NEW YORK', 'CHICAGO']})
|
|
211
|
+
|
|
212
|
+
departments.each do |department|
|
|
213
|
+
data = department_data[department.id - 1]
|
|
214
|
+
|
|
215
|
+
data.should_not be_nil
|
|
216
|
+
['NEW YORK', 'CHICAGO'].should include(data[DEPT_LOC])
|
|
217
|
+
validate_department(data, department)
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
it "departments has any data (id=1,2,3)" do
|
|
222
|
+
departments = Department.find([1, 2, 3])
|
|
223
|
+
departments.length.should == 3
|
|
224
|
+
|
|
225
|
+
department_data[0..2].each_with_index do |data, i|
|
|
226
|
+
deptno, dname, loc = data
|
|
227
|
+
department_id = i + 1
|
|
228
|
+
department = departments.find {|i| i.id == department_id }
|
|
229
|
+
|
|
230
|
+
department.should_not be_nil
|
|
231
|
+
validate_department(data, department)
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it "departments has any data (order by deptno numdesc limit 65535 offset 1)" do
|
|
236
|
+
departments = Department.find(:all, :order => 'deptno numdesc', :limit => 65535, :offset => 1)
|
|
237
|
+
departments.length.should == department_data.length - 1
|
|
238
|
+
|
|
239
|
+
department_data.sort_by {|i| i[DEPT_DEPTNO] || 0 }.reverse[1..-1].each do |data|
|
|
240
|
+
department = departments.find {|i| i.id == data.id }
|
|
241
|
+
department.should_not be_nil
|
|
242
|
+
validate_department(data, department)
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
it "departments has any data (order by deptno numasc)" do
|
|
247
|
+
departments = Department.find(:all, :order => 'deptno numasc')
|
|
248
|
+
departments.length.should == department_data.length
|
|
249
|
+
|
|
250
|
+
department_data.sort_by {|i| i[DEPT_DEPTNO] || 0 }.each do |data|
|
|
251
|
+
department = departments.find {|i| i.id == data.id }
|
|
252
|
+
department.should_not be_nil
|
|
253
|
+
validate_department(data, department)
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
after do
|
|
258
|
+
TokyoCabinetSpec.clean
|
|
259
|
+
end
|
|
260
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'logger'
|
|
4
|
+
require 'pp'
|
|
5
|
+
require 'tokyocabinet'
|
|
6
|
+
require 'tokyotyrant'
|
|
7
|
+
require 'active_record'
|
|
8
|
+
require 'active_tokyocabinet/tdb'
|
|
9
|
+
require "#{$wd}/models/employee"
|
|
10
|
+
require "#{$wd}/models/department"
|
|
11
|
+
|
|
12
|
+
ActiveRecord::Base.logger = Logger.new($stderr)
|
|
13
|
+
ActiveRecord::Base.logger.level = Logger::INFO
|
|
14
|
+
|
|
15
|
+
module SpecHelper
|
|
16
|
+
EMP_EMPNO = 0
|
|
17
|
+
EMP_ENAME = 1
|
|
18
|
+
EMP_JOB = 2
|
|
19
|
+
EMP_MGR = 3
|
|
20
|
+
EMP_HIREDATE = 4
|
|
21
|
+
EMP_SAL = 5
|
|
22
|
+
EMP_COMM = 6
|
|
23
|
+
EMP_DEPTNO = 7
|
|
24
|
+
|
|
25
|
+
DEPT_DEPTNO = 0
|
|
26
|
+
DEPT_DNAME = 1
|
|
27
|
+
DEPT_LOC = 2
|
|
28
|
+
|
|
29
|
+
def show_sql
|
|
30
|
+
begin
|
|
31
|
+
ActiveRecord::Base.logger.level = Logger::DEBUG
|
|
32
|
+
yield
|
|
33
|
+
ensure
|
|
34
|
+
ActiveRecord::Base.logger.level = Logger::INFO
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def desc(klass, out = $stdout)
|
|
39
|
+
if klass.kind_of?(Array)
|
|
40
|
+
rows = klass
|
|
41
|
+
else
|
|
42
|
+
rows = klass.find(:all)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
if rows.empty?
|
|
46
|
+
out.puts "Empty set"
|
|
47
|
+
return
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if klass.kind_of?(Array)
|
|
51
|
+
klass = rows.first.class
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
cols = {}
|
|
55
|
+
|
|
56
|
+
klass.instance_variable_get(:@columns).each do |col|
|
|
57
|
+
cols[col.name] = col.name.to_s.length
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
rows.each do |row|
|
|
61
|
+
row.attributes.each do |col, val|
|
|
62
|
+
val = val.to_s
|
|
63
|
+
cols[col] = val.length if val.length > cols[col]
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
id_len = cols.delete('id')
|
|
68
|
+
cols = cols.map {|k, v| [k, v] }
|
|
69
|
+
cols.unshift ['id', id_len]
|
|
70
|
+
|
|
71
|
+
line = cols.map {|col, len| '+' + '-' * (len + 2) }.join + '+'
|
|
72
|
+
head = cols.map {|col, len| "| %-*s " % [len, col] }.join + '|'
|
|
73
|
+
|
|
74
|
+
body = rows.map do |row|
|
|
75
|
+
cols.map {|col, len| "| %-*s " % [len, row[col]] }.join + '|'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
out.puts <<EOS
|
|
79
|
+
#{line}
|
|
80
|
+
#{head}
|
|
81
|
+
#{line}
|
|
82
|
+
#{body.join "\n"}
|
|
83
|
+
#{line}
|
|
84
|
+
EOS
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def employee_data
|
|
88
|
+
data = [
|
|
89
|
+
[7369, 'SMITH' , 'CLERK' , 7902, '17-DEC-1980', 800.0, nil, 20],
|
|
90
|
+
[7499, 'ALLEN' , 'SALESMAN' , 7698, '20-FEB-1981', 1600.0, 300.0, 30],
|
|
91
|
+
[7521, 'WARD' , 'SALESMAN' , 7698, '22-FEB-1981', 1250.0, 500.0, 30],
|
|
92
|
+
[7566, 'JONES' , 'MANAGER' , 7839, '2-APR-1981' , 2975.0, nil, 20],
|
|
93
|
+
[7654, 'MARTIN', 'SALESMAN' , 7698, '28-SEP-1981', 1250.0, 1400.0, 30],
|
|
94
|
+
[7698, 'BLAKE' , 'MANAGER' , 7839, '1-MAY-1981' , 2850.0, nil, 30],
|
|
95
|
+
[7782, 'CLARK' , 'MANAGER' , 7839, '9-JUN-1981' , 2450.0, nil, 10],
|
|
96
|
+
[7788, 'SCOTT' , 'ANALYST' , 7566, '09-DEC-1982', 3000.0, nil, 20],
|
|
97
|
+
[7839, 'KING' , 'PRESIDENT', nil, '17-NOV-1981', 5000.0, nil, 10],
|
|
98
|
+
[7844, 'TURNER', 'SALESMAN' , 7698, '8-SEP-1981' , 1500.0, 0.0, 30],
|
|
99
|
+
[7876, 'ADAMS' , 'CLERK' , 7788, '12-JAN-1983', 1100.0, nil, 20],
|
|
100
|
+
[7900, 'JAMES' , 'CLERK' , 7698, '3-DEC-1981' , 950.0, nil, 30],
|
|
101
|
+
[7902, 'FORD' , 'ANALYST' , 7566, '3-DEC-1981' , 3000.0, nil, 20],
|
|
102
|
+
[7934, 'MILLER', 'CLERK' , 7782, '23-JAN-1982', 1300.0, nil, 10],
|
|
103
|
+
[ nil, nil , nil , nil, nil , nil, nil, nil],
|
|
104
|
+
]
|
|
105
|
+
|
|
106
|
+
data.each_with_index do |i, n|
|
|
107
|
+
i.instance_eval "def id; #{n + 1}; end"
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
return data
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def department_data
|
|
114
|
+
data = [
|
|
115
|
+
[ 10, 'ACCOUNTING', 'NEW YORK'],
|
|
116
|
+
[ 20, 'RESEARCH' , 'DALLAS' ],
|
|
117
|
+
[ 30, 'SALES' , 'CHICAGO' ],
|
|
118
|
+
[ 40, 'OPERATIONS', 'BOSTON' ],
|
|
119
|
+
[nil, nil , nil ],
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
data.each_with_index do |i, n|
|
|
123
|
+
i.instance_eval "def id; #{n + 1}; end"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
return data
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def validate_employee(expected, employee)
|
|
130
|
+
employee.empno.should == expected[EMP_EMPNO]
|
|
131
|
+
employee.ename.should == expected[EMP_ENAME]
|
|
132
|
+
employee.job.should == expected[EMP_JOB]
|
|
133
|
+
employee.mgr.should == expected[EMP_MGR]
|
|
134
|
+
employee.hiredate.should == expected[EMP_HIREDATE]
|
|
135
|
+
employee.sal.should == expected[EMP_SAL]
|
|
136
|
+
employee.comm.should == expected[EMP_COMM]
|
|
137
|
+
employee.deptno.should == expected[EMP_DEPTNO]
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def validate_department(expected, department)
|
|
141
|
+
department.deptno.should == expected[DEPT_DEPTNO]
|
|
142
|
+
department.dname.should == expected[DEPT_DNAME]
|
|
143
|
+
department.loc.should == expected[DEPT_LOC]
|
|
144
|
+
end
|
|
145
|
+
end # SpecHelper
|
|
146
|
+
|
|
147
|
+
module ActiveTokyoCabinetSpec
|
|
148
|
+
module Base
|
|
149
|
+
def create_row(klass, vals)
|
|
150
|
+
cols = klass.instance_variable_get(:@columns).map {|col| col.name.to_sym }
|
|
151
|
+
cols.delete(:id)
|
|
152
|
+
row = {}
|
|
153
|
+
cols.zip(vals).each {|col, val| row[col] = val }
|
|
154
|
+
klass.create!(row)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def setup_employee
|
|
158
|
+
establish_connection
|
|
159
|
+
employee_data.each {|row| create_row(Employee, row) }
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def setup_department
|
|
163
|
+
establish_connection
|
|
164
|
+
department_data.each {|row| create_row(Department, row) }
|
|
165
|
+
end
|
|
166
|
+
end # module Base
|
|
167
|
+
end # module ActiveTokyoCabinetSpec
|
|
168
|
+
|
|
169
|
+
module ActiveTokyoCabinetSpec
|
|
170
|
+
module TokyoCabinetSpec
|
|
171
|
+
extend ActiveTokyoCabinetSpec::Base
|
|
172
|
+
|
|
173
|
+
class << self
|
|
174
|
+
def establish_connection
|
|
175
|
+
ActiveRecord::Base.establish_connection(
|
|
176
|
+
:adapter => 'tokyocabinet',
|
|
177
|
+
:database => $wd
|
|
178
|
+
)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def tctmgr_create(path)
|
|
182
|
+
`tctmgr create #{path}`
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def create_tables
|
|
186
|
+
tctmgr_create "#{$wd}/employees.tct"
|
|
187
|
+
tctmgr_create "#{$wd}/departments.tct"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def clean
|
|
191
|
+
FileUtils.rm_f "#{$wd}/employees.tct"
|
|
192
|
+
FileUtils.rm_f "#{$wd}/departments.tct"
|
|
193
|
+
end
|
|
194
|
+
end # class << self
|
|
195
|
+
end # module TokyoCabinetSpec
|
|
196
|
+
end # module ActiveTokyoCabinetSpec
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activetokyocabinet
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- winebarrel
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2010-01-
|
|
12
|
+
date: 2010-01-10 00:00:00 +09:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
@@ -37,6 +37,10 @@ files:
|
|
|
37
37
|
- lib/active_tokyocabinet/tdb.rb
|
|
38
38
|
- lib/active_tokyocabinet/sqlparser.y
|
|
39
39
|
- lib/active_tokyocabinet/sqlparser.tab.rb
|
|
40
|
+
- spec/activetokyocabinet_spec.rb
|
|
41
|
+
- spec/models/department.rb
|
|
42
|
+
- spec/models/employee.rb
|
|
43
|
+
- spec/spec_helper.rb
|
|
40
44
|
- README
|
|
41
45
|
has_rdoc: true
|
|
42
46
|
homepage: http://activetokyocabi.rubyforge.org/
|