rare_map 1.1.6 → 1.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/lib/rare_map/config_loader.rb +7 -7
- data/lib/rare_map/model_builder.rb +8 -10
- data/lib/rare_map/model_generator.rb +31 -5
- data/lib/rare_map/version.rb +2 -2
- data/lib/rare_map.rb +1 -0
- metadata +3 -3
@@ -18,9 +18,9 @@ module RareMap
|
|
18
18
|
case v.class.name
|
19
19
|
when 'Hash'
|
20
20
|
if v[OPTS_KEY]
|
21
|
-
db_profiles << DatabaseProfile.new(remove_opts(v), Options.new(v[OPTS_KEY]))
|
21
|
+
db_profiles << DatabaseProfile.new(k, remove_opts(v), Options.new(v[OPTS_KEY]))
|
22
22
|
else
|
23
|
-
db_profiles << DatabaseProfile.new(v, global_opts)
|
23
|
+
db_profiles << DatabaseProfile.new(k, v, global_opts)
|
24
24
|
end
|
25
25
|
when 'Array'
|
26
26
|
v = v.reduce(:merge)
|
@@ -28,9 +28,9 @@ module RareMap
|
|
28
28
|
|
29
29
|
v.each do |db, config|
|
30
30
|
if config[OPTS_KEY]
|
31
|
-
db_profiles << DatabaseProfile.new(remove_opts(config), Options.new(config[OPTS_KEY], k))
|
31
|
+
db_profiles << DatabaseProfile.new(db, remove_opts(config), Options.new(config[OPTS_KEY], k))
|
32
32
|
else
|
33
|
-
db_profiles << DatabaseProfile.new(config, group_opts)
|
33
|
+
db_profiles << DatabaseProfile.new(db, config, group_opts)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -45,11 +45,11 @@ module RareMap
|
|
45
45
|
end
|
46
46
|
|
47
47
|
class DatabaseProfile
|
48
|
-
attr_reader :connection, :options
|
48
|
+
attr_reader :name, :connection, :options
|
49
49
|
attr_accessor :schema, :tables
|
50
50
|
|
51
|
-
def initialize(connection, options)
|
52
|
-
@connection = connection
|
51
|
+
def initialize(name, connection, options)
|
52
|
+
@name, @connection = name, connection
|
53
53
|
@options = options || Options.new
|
54
54
|
@tables = []
|
55
55
|
end
|
@@ -5,7 +5,6 @@ module RareMap
|
|
5
5
|
def build_models(db_profiles)
|
6
6
|
models = []
|
7
7
|
|
8
|
-
default_id = 1
|
9
8
|
db_profiles.each do |db_prof|
|
10
9
|
db_prof.tables.each do |table|
|
11
10
|
opts = db_prof.options
|
@@ -13,12 +12,11 @@ module RareMap
|
|
13
12
|
set_foreign_keys_by_options(table, opts)
|
14
13
|
set_fk_suffix_by_options(table, opts)
|
15
14
|
if opts.group?
|
16
|
-
models << Model.new(db_prof.connection, table, opts.group)
|
15
|
+
models << Model.new(db_prof.connection, table, opts.group, db_prof.name)
|
17
16
|
else
|
18
|
-
models << Model.new(db_prof.connection, table, 'default',
|
17
|
+
models << Model.new(db_prof.connection, table, 'default', db_prof.name)
|
19
18
|
end
|
20
19
|
end
|
21
|
-
default_id += 1 unless db_prof.options.group?
|
22
20
|
end
|
23
21
|
|
24
22
|
build_relations models
|
@@ -29,7 +27,7 @@ module RareMap
|
|
29
27
|
private
|
30
28
|
def build_relations(models)
|
31
29
|
models.each do |model|
|
32
|
-
group_models = models.select { |m| m.group == model.group && m.
|
30
|
+
group_models = models.select { |m| m.group == model.group && m.db_name == model.db_name }
|
33
31
|
|
34
32
|
group_models.each do |gm|
|
35
33
|
model.table.columns.each do |col|
|
@@ -55,10 +53,10 @@ module RareMap
|
|
55
53
|
rel_from.table != rel_to.table
|
56
54
|
model_from = models.find { |m| m.table.name == rel_from.table &&
|
57
55
|
m.group == model.group &&
|
58
|
-
m.
|
56
|
+
m.db_name == model.db_name }
|
59
57
|
model_to = models.find { |m| m.table.name == rel_to.table &&
|
60
58
|
m.group == model.group &&
|
61
|
-
m.
|
59
|
+
m.db_name == model.db_name }
|
62
60
|
model_from.relations << Relation.new(:has_many_through, rel_to.foreign_key, model_to.table.name, model.table.name)
|
63
61
|
model_to.relations << Relation.new(:has_many_through, rel_from.foreign_key, model_from.table.name, model.table.name)
|
64
62
|
end
|
@@ -89,10 +87,10 @@ module RareMap
|
|
89
87
|
end
|
90
88
|
|
91
89
|
class Model
|
92
|
-
attr_reader :connection, :table, :group, :relations, :
|
90
|
+
attr_reader :connection, :table, :group, :relations, :db_name
|
93
91
|
|
94
|
-
def initialize(connection, table, group = 'default',
|
95
|
-
@connection, @table, @group, @
|
92
|
+
def initialize(connection, table, group = 'default', db_name)
|
93
|
+
@connection, @table, @group, @db_name = connection, table, group, db_name
|
96
94
|
@relations = []
|
97
95
|
end
|
98
96
|
|
@@ -5,12 +5,15 @@ module RareMap
|
|
5
5
|
def generate_models(models, root = './')
|
6
6
|
root ||= './'
|
7
7
|
path = root + 'app/models/'
|
8
|
+
Dir.mkdir root + 'app' unless Dir.exist? root + 'app'
|
9
|
+
Dir.mkdir path unless Dir.exist? path
|
10
|
+
|
11
|
+
group_db2conn = generate_connection_models(models, path)
|
8
12
|
|
9
13
|
models.each do |model|
|
10
14
|
output = ''
|
11
15
|
output <<
|
12
|
-
"class #{model.classify} <
|
13
|
-
" establish_connection #{model.connection.map { |k, v| ":#{k} => #{v.inspect}" }.join(', ')}\n" <<
|
16
|
+
"class #{model.classify} < #{group_db2conn[[model.group, model.db_name]]}\n" <<
|
14
17
|
" self.table_name = '#{model.table.name}'\n" <<
|
15
18
|
" self.inheritance_column = 'ruby_type'\n" <<
|
16
19
|
" #{ "self.primary_key = '#{model.table.primary_key}'\n" if model.table.primary_key }\n" <<
|
@@ -46,8 +49,6 @@ module RareMap
|
|
46
49
|
|
47
50
|
output << 'end'
|
48
51
|
|
49
|
-
Dir.mkdir root + 'app' unless Dir.exist? root + 'app'
|
50
|
-
Dir.mkdir path unless Dir.exist? path
|
51
52
|
Dir.mkdir path + "#{model.group}" unless Dir.exist? path + "#{model.group}"
|
52
53
|
f = File.new(path + "#{model.group}/#{model.classify.underscore}.rb", 'w')
|
53
54
|
f.write output
|
@@ -61,8 +62,33 @@ module RareMap
|
|
61
62
|
def classify_by_table(table, model, models)
|
62
63
|
model = models.find { |m| m.table.name == table &&
|
63
64
|
m.group == model.group &&
|
64
|
-
m.
|
65
|
+
m.db_name == model.db_name }
|
65
66
|
model.classify
|
66
67
|
end
|
68
|
+
|
69
|
+
def generate_connection_models(models, path)
|
70
|
+
group_db2conn = {}
|
71
|
+
|
72
|
+
group2connection = Hash[models.map { |model| [[model.group, model.db_name], model.connection] }]
|
73
|
+
group2connection.each do |(group, db_name), connection|
|
74
|
+
model = "#{group}_#{db_name}".camelize + 'Base'
|
75
|
+
|
76
|
+
output = ''
|
77
|
+
output <<
|
78
|
+
"class #{model} < ActiveRecord::Base\n" <<
|
79
|
+
" establish_connection #{connection.map { |k, v| ":#{k} => #{v.inspect}" }.join(', ')}\n" <<
|
80
|
+
'end'
|
81
|
+
|
82
|
+
|
83
|
+
Dir.mkdir path + "#{group}" unless Dir.exist? path + "#{group}"
|
84
|
+
f = File.new(path + "#{group}/#{model.underscore}.rb", 'w')
|
85
|
+
f.write output
|
86
|
+
f.close
|
87
|
+
|
88
|
+
group_db2conn[[group, db_name]] = model
|
89
|
+
end
|
90
|
+
|
91
|
+
group_db2conn
|
92
|
+
end
|
67
93
|
end
|
68
94
|
end
|
data/lib/rare_map/version.rb
CHANGED
data/lib/rare_map.rb
CHANGED
@@ -45,6 +45,7 @@ module RareMap
|
|
45
45
|
def generate_demo
|
46
46
|
f = File.new('demo.rb', 'w')
|
47
47
|
f.write "require 'active_record'\n"
|
48
|
+
f.write "Dir[File.dirname(__FILE__) + '/app/models/**/base*.rb'].each { |file| require file }\n"
|
48
49
|
f.write "Dir[File.dirname(__FILE__) + '/app/models/**/*.rb'].each { |file| require file }\n"
|
49
50
|
f.close
|
50
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rare_map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.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: 2013-01-
|
12
|
+
date: 2013-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -142,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
142
|
version: '0'
|
143
143
|
segments:
|
144
144
|
- 0
|
145
|
-
hash:
|
145
|
+
hash: -2379119052270473471
|
146
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
147
|
none: false
|
148
148
|
requirements:
|