makumba_import 0.1.0 → 0.2.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/README.md +11 -3
- data/lib/makumba_import/importer.rb +9 -9
- data/lib/makumba_import/key_handler.rb +52 -0
- data/lib/makumba_import/legacy.rb +19 -1
- data/lib/makumba_import.rb +1 -0
- metadata +4 -3
data/README.md
CHANGED
@@ -7,6 +7,9 @@ More specifically it generates a database schema and models matching what's desc
|
|
7
7
|
|
8
8
|
It supports all sorts of pointers, links, etc.
|
9
9
|
|
10
|
+
Update: now supports saving and creating new models. Keeps track of primary keys via Redis.
|
11
|
+
|
12
|
+
|
10
13
|
Usage
|
11
14
|
---
|
12
15
|
|
@@ -27,8 +30,13 @@ Dir["#{Gem.searcher.find('makumba_import').full_gem_path}/lib/tasks/*.rake"].eac
|
|
27
30
|
4. Generate a initializer called makumba_import.rb with the following contents:
|
28
31
|
|
29
32
|
```
|
30
|
-
MakumbaImport::Importer.
|
31
|
-
MakumbaImport::Importer.
|
33
|
+
MakumbaImport::Importer.set_mdd_path "/Users/marius/Projects/Cherry/cherry/web/WEB-INF/classes/dataDefinitions"
|
34
|
+
MakumbaImport::Importer.set_output_path "./" # where to generate the .rb files. Leave blank to import straight into the app folders
|
35
|
+
|
36
|
+
MakumbaImport::KeyHandler.set_dbsv 0
|
37
|
+
MakumbaImport::KeyHandler.init_redis REDIS # set this to your Redis class
|
38
|
+
|
39
|
+
#MakumbaImport::KeyHandler.update_redis_keys # uncomment once per server to store the latest keys per dbsv in redis
|
32
40
|
```
|
33
41
|
|
34
42
|
5. Run
|
@@ -43,7 +51,7 @@ Extra:
|
|
43
51
|
Use
|
44
52
|
|
45
53
|
```
|
46
|
-
SomeModel.first.
|
54
|
+
SomeModel.first.to_ptr
|
47
55
|
```
|
48
56
|
|
49
57
|
to get the makumba pointer
|
@@ -1,15 +1,15 @@
|
|
1
1
|
module MakumbaImport
|
2
2
|
class Importer
|
3
3
|
|
4
|
-
@
|
5
|
-
@
|
4
|
+
@mdd_path = ""
|
5
|
+
@output_path = ""
|
6
6
|
|
7
|
-
def self.
|
8
|
-
@
|
7
|
+
def self.set_mdd_path(mdd_path)
|
8
|
+
@mdd_path = mdd_path
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.
|
12
|
-
@
|
11
|
+
def self.set_output_path(output_path)
|
12
|
+
@output_path = output_path
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.get_data(lines, mdd)
|
@@ -108,7 +108,7 @@ module MakumbaImport
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def self.load_mdds
|
111
|
-
dir = @
|
111
|
+
dir = @mdd_path
|
112
112
|
|
113
113
|
@files = Dir.glob(dir+"/*/*.mdd")
|
114
114
|
@files |= Dir.glob(dir+"/*/*/*.mdd")
|
@@ -183,7 +183,7 @@ module MakumbaImport
|
|
183
183
|
|
184
184
|
txt << "end\n\n"
|
185
185
|
|
186
|
-
File.open(@
|
186
|
+
File.open(@output_path+"db/schema.rb", "w+") do |f|
|
187
187
|
f.write(txt)
|
188
188
|
end
|
189
189
|
end
|
@@ -236,7 +236,7 @@ module MakumbaImport
|
|
236
236
|
|
237
237
|
txt << "end\n\n"
|
238
238
|
|
239
|
-
File.open(@
|
239
|
+
File.open(@output_path+"app/models/"+filename, "w+") do |f|
|
240
240
|
f.write(txt)
|
241
241
|
end
|
242
242
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module MakumbaImport
|
2
|
+
class KeyHandler
|
3
|
+
|
4
|
+
@dbsv = 0
|
5
|
+
@redis = nil
|
6
|
+
|
7
|
+
def self.set_dbsv(dbsv)
|
8
|
+
@dbsv = dbsv
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.get_dbsv
|
12
|
+
@dbsv
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.init_redis(redis)
|
16
|
+
@redis = redis
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.next_primary_key(model)
|
20
|
+
@redis.incr "maxprimary_#{model}_#{@dbsv}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.update_redis_keys
|
24
|
+
Dir[Rails.root.to_s + '/app/models/**/*.rb'].each do |file|
|
25
|
+
begin
|
26
|
+
require file
|
27
|
+
rescue
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort
|
32
|
+
|
33
|
+
#p models
|
34
|
+
|
35
|
+
models.each do |model|
|
36
|
+
begin
|
37
|
+
object = Object.const_get(model)
|
38
|
+
primary_key = object.primary_key
|
39
|
+
current_max = object.unscoped.maximum(primary_key, :conditions => ["#{primary_key} > ? and #{primary_key} < ?", @dbsv << 24, (@dbsv + 1) << 24])
|
40
|
+
redis_key = "maxprimary_#{model}_#{@dbsv}"
|
41
|
+
|
42
|
+
@redis.set redis_key, current_max
|
43
|
+
rescue => e
|
44
|
+
p e
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -12,9 +12,12 @@ module LegacyMakumba
|
|
12
12
|
unless self.method_defined? new_name
|
13
13
|
self.send(:define_method, new_name) { self.send(old_name) }
|
14
14
|
self.send(:define_method, "#{new_name}=") { |value| self.send("#{old_name}=", value) }
|
15
|
+
self.send(:define_method, "find_by_#{new_name}") { |value| self.send("find_by_#{old_name}", value) }
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
19
|
+
|
20
|
+
self.send(:before_save, :update_makumba_fields)
|
18
21
|
end
|
19
22
|
|
20
23
|
def set_makumba_pointer_type(type)
|
@@ -22,7 +25,17 @@ module LegacyMakumba
|
|
22
25
|
end
|
23
26
|
end
|
24
27
|
|
25
|
-
def
|
28
|
+
def update_makumba_fields
|
29
|
+
self.id = next_primary_key if self.id.blank?
|
30
|
+
self.TS_create = Time.new if self.TS_create.blank?
|
31
|
+
self.TS_modify = Time.new
|
32
|
+
end
|
33
|
+
|
34
|
+
def next_primary_key
|
35
|
+
MakumbaImport::KeyHandler.next_primary_key(self.class.name)
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_pointer
|
26
39
|
def crc(v)
|
27
40
|
r = 0
|
28
41
|
32.times do
|
@@ -60,4 +73,9 @@ end
|
|
60
73
|
|
61
74
|
class ActiveRecord::Base
|
62
75
|
include LegacyMakumba
|
76
|
+
|
77
|
+
def self.last_primary_key(dbsv = MakumbaImport::KeyHandler.get_dbsv)
|
78
|
+
self.select("max(#{primary_key}) as biggest").where("#{primary_key} > ? and #{primary_key} < ?", dbsv << 24, (dbsv + 1) << 24).first.biggest || (dbsv << 24)
|
79
|
+
end
|
80
|
+
|
63
81
|
end
|
data/lib/makumba_import.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: makumba_import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-12 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Generate models matching your Makumba MDDs
|
15
15
|
email: marius.andra@gmail.com
|
@@ -18,6 +18,7 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- lib/makumba_import/importer.rb
|
21
|
+
- lib/makumba_import/key_handler.rb
|
21
22
|
- lib/makumba_import/legacy.rb
|
22
23
|
- lib/makumba_import.rb
|
23
24
|
- lib/tasks/makumba_import.rake
|
@@ -42,7 +43,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
43
|
version: '0'
|
43
44
|
requirements: []
|
44
45
|
rubyforge_project:
|
45
|
-
rubygems_version: 1.8.
|
46
|
+
rubygems_version: 1.8.24
|
46
47
|
signing_key:
|
47
48
|
specification_version: 3
|
48
49
|
summary: Makumba database integration with Rails applications
|