beezwax 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/btrieve/btrieve_record.rb +57 -5
- data/lib/btrieve/btrieve_session.rb +1 -2
- data/lib/btrieve/btrieve_table.rb +30 -4
- metadata +4 -5
- data/lib/btrieve/btrieve_map.rb +0 -28
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -21,6 +21,61 @@ class BtrieveRecord
|
|
21
21
|
def delete
|
22
22
|
btr_op(@session, DELETE, @btrieve_table.pos_buffer, NULL_BUFFER, NULL_BUFFER, NULL_KEY)
|
23
23
|
end
|
24
|
+
|
25
|
+
def get_relation_bindings(key)
|
26
|
+
table_map=@session.relations[@btrieve_table.tablename]
|
27
|
+
raise Exception.new("No relations defined for table #{@btrieve_table.tablename}") if table_map.nil?
|
28
|
+
relation=table_map[key]
|
29
|
+
raise Exception.new("No relation found named #{key.to_s} in table #{@btrieve_table.tablename}") if relation.nil?
|
30
|
+
bindings=relation[:join].inject({}) do |map,join|
|
31
|
+
value=join[1][:match]
|
32
|
+
map[join[0]]=join[1][:source]==:table ? self[value] : value
|
33
|
+
map
|
34
|
+
end
|
35
|
+
{:table=>relation[:target],:index=>relation[:index],:bindings=>bindings}
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_relations_bindings(keys)
|
39
|
+
keys.inject({}){|map,key|map[key]=self.get_relation_bindings(key);map}
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_all_relations_bindings()
|
43
|
+
relations=@session.relations[@btrieve_table.tablename]||={}
|
44
|
+
get_relations_bindings(relations.keys)
|
45
|
+
end
|
46
|
+
|
47
|
+
def get_relation(key)
|
48
|
+
match=get_relation_bindings(key)
|
49
|
+
target_table=BtrieveTable.new(relation[:target], @session)
|
50
|
+
index_number=relation[:index]
|
51
|
+
target_table.find(match,index_number)
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_relations(keys)
|
55
|
+
keys.inject({}){|map,key|map[key]=self.get_relation(key);map}
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_all_relations()
|
59
|
+
relations=@session.relations[@btrieve_table.tablename]||={}
|
60
|
+
get_relations(relations.keys)
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_mapping(key)
|
64
|
+
table_map=@session.mappings[@btrieve_table.tablename]
|
65
|
+
raise Exception.new("No mappings defined for table #{@btrieve_table.tablename}") if table_map.nil?
|
66
|
+
mapping=table_map[key]
|
67
|
+
raise Exception.new("No mapping found named #{key.to_s} in table #{@btrieve_table.tablename}") if mapping.nil?
|
68
|
+
@session.mapping_functions[mapping[:transform]].call(self[mapping[:column]])
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_mappings(keys)
|
72
|
+
keys.inject({}){|map,key|map[key]=self.get_mapping(key);map}
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_all_mappings()
|
76
|
+
mappings=@session.mappings[@btrieve_table.tablename]||={}
|
77
|
+
get_mappings(mappings.keys)
|
78
|
+
end
|
24
79
|
|
25
80
|
def get_attributes(keys)
|
26
81
|
keys.inject({}){|vals, key| vals[key]=self[key]; vals}
|
@@ -60,13 +115,10 @@ class BtrieveRecord
|
|
60
115
|
def [](key_name)
|
61
116
|
schema_key=get_schema_key(key_name)
|
62
117
|
return nil if(schema_key.nil?)
|
63
|
-
|
64
|
-
btrieve_map = @session.btrieve_map
|
65
|
-
btrieve_map.up(@btrieve_table.tablename, key_name, raw_data)
|
118
|
+
@data_buffer.unpack(schema_key[:unpacker])[0]
|
66
119
|
end
|
67
120
|
|
68
|
-
def []=(key_name,
|
69
|
-
value=@session.btrieve_map.down(@btrieve_table.tablename, key_name, raw_data)
|
121
|
+
def []=(key_name, value)
|
70
122
|
schema_key = get_schema_key(key_name)
|
71
123
|
packer_string = schema_key[:unpacker]
|
72
124
|
match = packer_string.match(/@(\d+)([a-zA-Z]+)(\d*)/)
|
@@ -2,7 +2,7 @@ class BtrieveSession
|
|
2
2
|
SESSIONS = {}
|
3
3
|
include Btrieve
|
4
4
|
attr_reader :pathname, :client_id, :cache, :model_classes, :btrieve_schema
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :mappings, :mapping_functions, :relations
|
6
6
|
|
7
7
|
def self.set_context(pathname)
|
8
8
|
session = get_session
|
@@ -44,7 +44,6 @@ class BtrieveSession
|
|
44
44
|
@client_id = "#{0.chr*12}#{[0x5257].pack('S')}#{rand(65535)}"
|
45
45
|
btr_op(self, SET_DIRECTORY, NULL_BUFFER, NULL_BUFFER, @pathname, NULL_KEY)
|
46
46
|
@btrieve_schema = BtrieveSchema.new(self)
|
47
|
-
@btrieve_map = BtrieveMap.new()
|
48
47
|
end
|
49
48
|
end
|
50
49
|
|
@@ -4,7 +4,7 @@ class BtrieveTable
|
|
4
4
|
include Btrieve
|
5
5
|
attr_reader :tablename, :session, :pos_buffer, :schema
|
6
6
|
|
7
|
-
def initialize(tablename, session, schema
|
7
|
+
def initialize(tablename, session, schema=nil)
|
8
8
|
@tablename = tablename
|
9
9
|
@session = session
|
10
10
|
@pos_buffer = Btrieve.create_string_buffer(POS_BLOCK_SIZE)
|
@@ -14,6 +14,33 @@ class BtrieveTable
|
|
14
14
|
def open(mode = NORMAL_MODE)
|
15
15
|
btr_op(@session, OPEN, @pos_buffer, NULL_BUFFER, @schema[:filename], mode)
|
16
16
|
end
|
17
|
+
|
18
|
+
def mappings()
|
19
|
+
@session.mappings[@tablename] ||= {}
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_mapping(attr_name, mapping_name, transform)
|
23
|
+
mappings[mapping_name.to_sym]={:column=>attr_name.to_sym,:transform=>transform.to_sym}
|
24
|
+
end
|
25
|
+
|
26
|
+
def relations()
|
27
|
+
@session.relations[@tablename] ||= {}
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_relation(name, target_table, index, join)
|
31
|
+
relations[name.to_sym]={:target=>target_table.to_sym,:index=>index,:join=>join}
|
32
|
+
end
|
33
|
+
|
34
|
+
def find(match, index_number)
|
35
|
+
unique=schema[:index_flags].map{|f|f&1==1}[index_number]
|
36
|
+
result=nil
|
37
|
+
if(unique)
|
38
|
+
result=find_in_unique_index(match, index_numer)
|
39
|
+
else
|
40
|
+
result=find_in_index(match, index_numer)
|
41
|
+
end
|
42
|
+
result
|
43
|
+
end
|
17
44
|
|
18
45
|
def find_in_unique_index(match, index_number=nil)
|
19
46
|
finder(match, index_number) do |key_buffer, index|
|
@@ -77,7 +104,7 @@ class BtrieveTable
|
|
77
104
|
def self.url_to_tablename(url_tablename)
|
78
105
|
url_tablename.gsub('.and.', ' & ').gsub('ac.', 'a/c ').gsub('es.o','es - o').gsub('.',' ')
|
79
106
|
end
|
80
|
-
|
107
|
+
|
81
108
|
private
|
82
109
|
|
83
110
|
def step_next
|
@@ -101,8 +128,7 @@ class BtrieveTable
|
|
101
128
|
index = @schema[:indices][index_number]
|
102
129
|
columns = @schema[:columns]
|
103
130
|
key_components = index.inject([]) do |vals, key|
|
104
|
-
datatype = BtrieveSchema.lookup(columns[key][:datatype], columns[key][:size])[:name]
|
105
|
-
puts "#{key}=>#{datatype}"
|
131
|
+
datatype = BtrieveSchema.lookup(columns[key][:datatype], columns[key][:size])[:name]
|
106
132
|
value = match[key]
|
107
133
|
value = value.to_f if FLOAT_TYPES.include?(datatype)
|
108
134
|
value = value.to_i if INTEGER_TYPES.include?(datatype)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beezwax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Patrick Lardin
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-29 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -53,7 +53,6 @@ files:
|
|
53
53
|
- lib/beezwax.rb
|
54
54
|
- lib/btrieve/btrieve_const.rb
|
55
55
|
- lib/btrieve/btrieve_core.rb
|
56
|
-
- lib/btrieve/btrieve_map.rb
|
57
56
|
- lib/btrieve/btrieve_model.rb
|
58
57
|
- lib/btrieve/btrieve_record.rb
|
59
58
|
- lib/btrieve/btrieve_schema.rb
|
data/lib/btrieve/btrieve_map.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
class BtrieveMap
|
2
|
-
include Btrieve
|
3
|
-
|
4
|
-
attr_accessor :mapping
|
5
|
-
|
6
|
-
def initialize()
|
7
|
-
@mapping={}
|
8
|
-
end
|
9
|
-
|
10
|
-
def up(tablename, column_name, value)
|
11
|
-
db_cast(tablename, column_name, value, :up)
|
12
|
-
end
|
13
|
-
|
14
|
-
def down(tablename, column_name, value)
|
15
|
-
db_cast(tablename, column_name, value, :down)
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def db_cast(tablename, column_name, value, mode)
|
21
|
-
table=mapping[tablename.to_s]
|
22
|
-
return value if(table.nil?)
|
23
|
-
column=table[column_name.to_s]
|
24
|
-
return value if(column.nil?)
|
25
|
-
column[mode].call(value)
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|