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
@@ -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.