dm-metamapper 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
@@ -17,10 +17,6 @@ module DataMapper
|
|
17
17
|
generates_file :model, "T_%model%.hpp", :template => "class.hpp"
|
18
18
|
|
19
19
|
setup_model do
|
20
|
-
key_to_parent = many_to_one.inject({}) do |hash, (r,m)|
|
21
|
-
hash[m.child_key.first.name] = decolonize(m.parent_model_name.to_const_string)
|
22
|
-
hash
|
23
|
-
end
|
24
20
|
enums = {}
|
25
21
|
model.properties.each do |prop|
|
26
22
|
cpp_name = if prop.serial?
|
@@ -41,6 +37,19 @@ module DataMapper
|
|
41
37
|
(class << model; self; end).instance_eval{ attr_accessor :enums }
|
42
38
|
model.enums = enums
|
43
39
|
end
|
40
|
+
|
41
|
+
def key_to_parent
|
42
|
+
many_to_one.inject({}) do |hash, (r,m)|
|
43
|
+
hash[m.child_key.first.name] = decolonize(m.parent_model_name.to_const_string)
|
44
|
+
hash
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def child_key(child_model)
|
49
|
+
child_model.relationships.select {|m|
|
50
|
+
m.class.name == 'DataMapper::Associations::ManyToOne::Relationship' && m.parent_model_name == model.name
|
51
|
+
}.first.child_key.first.name.to_s
|
52
|
+
end
|
44
53
|
|
45
54
|
def output_path(model, template)
|
46
55
|
name = model ? template.name.sub("%model%", decolonize(model.name)) : template.name
|
@@ -67,6 +76,20 @@ module DataMapper
|
|
67
76
|
|
68
77
|
@many_to_one
|
69
78
|
end
|
79
|
+
def one_to_many
|
80
|
+
return unless model
|
81
|
+
@one_to_many ||= model.relationships.select {|m|
|
82
|
+
m.class.name == 'DataMapper::Associations::OneToMany::Relationship'
|
83
|
+
}
|
84
|
+
#in case of ruby < 1.9
|
85
|
+
if Array === @one_to_many
|
86
|
+
temp = @one_to_many
|
87
|
+
@one_to_many = {}
|
88
|
+
temp.each{|t| @one_to_many[t.name] = t}
|
89
|
+
end
|
90
|
+
|
91
|
+
@one_to_many
|
92
|
+
end
|
70
93
|
end
|
71
94
|
end
|
72
95
|
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
#ifndef T_<%= all_caps_name %>
|
4
4
|
#define T_<%= all_caps_name %>
|
5
5
|
#include "O_<%= class_name %>.hpp"
|
6
|
+
|
7
|
+
|
6
8
|
namespace DMMM {
|
7
9
|
|
8
10
|
class T_<%= class_name %>{
|
@@ -25,16 +27,6 @@ public:
|
|
25
27
|
|
26
28
|
<%- many_to_one.each do |r| -%>
|
27
29
|
<%- parent = decolonize(r[1].parent_model_name) -%>
|
28
|
-
T_<%= class_name %>(const T_<%= parent %>& parent)
|
29
|
-
{
|
30
|
-
_tables.push_back("<%= model.storage_name %>");
|
31
|
-
_tables.insert(_tables.end(),
|
32
|
-
parent._tables.begin(), parent._tables.end());
|
33
|
-
|
34
|
-
_constraint._cond = "(<%= model.storage_name + "." + r[1].child_key.first.name.to_s %> = " + parent._tables[0] + ".<%= r[1].parent_key.first.name.to_s %>)";
|
35
|
-
if (!parent._constraint.nil())
|
36
|
-
_constraint._cond += " AND " + parent._constraint._cond;
|
37
|
-
}
|
38
30
|
|
39
31
|
T_<%= class_name %>(const I_<%= parent %>& parentId)
|
40
32
|
{
|
@@ -71,8 +63,7 @@ public:
|
|
71
63
|
}
|
72
64
|
|
73
65
|
std::vector<O_<%= class_name %>>
|
74
|
-
select(const Condition& c,
|
75
|
-
const std::string& additional)
|
66
|
+
select(const Condition& c, const std::string& additional)
|
76
67
|
{
|
77
68
|
std::vector<O_<%= class_name %>> ret;
|
78
69
|
Condition c1 = _constraint.nil() ? c : _constraint && c;
|
@@ -10,8 +10,8 @@
|
|
10
10
|
#include "dmmm_identifiers.hpp"
|
11
11
|
#include "dmmm_fields.hpp"
|
12
12
|
#include "dmmm_comparators.hpp"
|
13
|
-
<%-
|
14
|
-
#include "T_<%= decolonize(relative[1].
|
13
|
+
<%- one_to_many.each do |relative| -%>
|
14
|
+
#include "T_<%= decolonize(relative[1].child_model.to_s) %>.hpp"
|
15
15
|
<%- end -%>
|
16
16
|
|
17
17
|
<%- model.enums.each do |name, property| -%>
|
@@ -26,9 +26,6 @@ public:
|
|
26
26
|
O_<%= class_name %>() {}
|
27
27
|
<%- many_to_one.each do |r| -%>
|
28
28
|
<%- parent = decolonize(r[1].parent_model_name) -%>
|
29
|
-
O_<%= class_name %>(const O_<%= parent %>& parent)
|
30
|
-
: _f_<%= r[1].child_key.first.name.to_s %>(parent._<%= r[1].parent_key.first.name.to_s %>())
|
31
|
-
{}
|
32
29
|
O_<%= class_name %>(const I_<%= parent %>& parent_id)
|
33
30
|
: _f_<%= r[1].child_key.first.name.to_s %>(parent_id)
|
34
31
|
{}
|
@@ -40,6 +37,19 @@ public:
|
|
40
37
|
{}
|
41
38
|
<%- end -%>
|
42
39
|
|
40
|
+
<%- one_to_many.each do |relative| -%>
|
41
|
+
std::vector<O_<%= decolonize(relative[1].child_model.to_s) %>> _<%= decolonize(relative[1].child_model.storage_name) %>() const
|
42
|
+
{
|
43
|
+
T_<%= decolonize(relative[1].child_model.to_s) %> table;
|
44
|
+
return table.select(table._<%= child_key(relative[1].child_model) %>() == _id());
|
45
|
+
}
|
46
|
+
std::vector<O_<%= decolonize(relative[1].child_model.to_s) %>>
|
47
|
+
_<%= decolonize(relative[1].child_model.storage_name) %>(const T_<%= decolonize(relative[1].child_model.to_s) %>::Condition& c) const
|
48
|
+
{
|
49
|
+
T_<%= decolonize(relative[1].child_model.to_s) %> table(c);
|
50
|
+
return table.select(table._<%= child_key(relative[1].child_model) %>() == _id());
|
51
|
+
}
|
52
|
+
<%- end -%>
|
43
53
|
|
44
54
|
<%- model.generated_properties.each do |property| -%>
|
45
55
|
const <%= property.cpp_name %>::Base& _<%= property.name %>() const {
|
@@ -101,15 +111,6 @@ public:
|
|
101
111
|
return false;
|
102
112
|
|
103
113
|
}
|
104
|
-
|
105
|
-
<%- many_to_one.each do |r| -%>
|
106
|
-
<%- parent = decolonize(r[1].parent_model_name) -%>
|
107
|
-
std::pair<O_<%= parent %>, bool> <%= r[0] %>(){
|
108
|
-
T_<%= parent %> T(T_<%= parent %>::E_<%= r[1].parent_key.first.name.to_s %>() == _<%= r[1].child_key.first.name.to_s %>());
|
109
|
-
return T.first();
|
110
|
-
}
|
111
|
-
<%- end -%>
|
112
|
-
|
113
114
|
private:
|
114
115
|
<%- model.generated_properties.each do |property| -%>
|
115
116
|
<%= property.cpp_name %> _f_<%= property.name %>;
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-metamapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jonah Honeyman
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-01-
|
19
|
+
date: 2012-01-31 00:00:00 Z
|
20
20
|
dependencies: []
|
21
21
|
|
22
22
|
description: C++ API for databases created with DM. Hard typing, compile time checked queries.
|