beezwax 0.2.0 → 0.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/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
|