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
@@ -1,6 +1,6 @@
1
1
  module DataMapper
2
2
  module MetaMapper
3
- VERSION = "0.2.1" unless defined?(::DataMapper::MetaMapper::VERSION)
3
+ VERSION = "0.2.2" unless defined?(::DataMapper::MetaMapper::VERSION)
4
4
  end
5
5
 
6
6
  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
- <%- many_to_one.each do |relative| -%>
14
- #include "T_<%= decolonize(relative[1].parent_model.to_s) %>.hpp"
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: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
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-02 00:00:00 Z
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.