dm-metamapper 0.2.1 → 0.2.2
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.
@@ -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.
|