dm-metamapper 0.0.7 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,6 +4,8 @@ dm_gems_version = "~> 0.10"
4
4
  do_gems_version = "~> 0.10"
5
5
 
6
6
  gem "dm-core", dm_gems_version
7
+ gem "dm-types", dm_gems_version
8
+
7
9
 
8
10
  group :test do
9
11
  gem "rspec"
data/Rakefile CHANGED
@@ -16,8 +16,9 @@ end
16
16
 
17
17
  desc "local gem build and install"
18
18
  task :local do
19
+ sh "rvm ree@drive"
19
20
  sh "gem uninstall -a dm-metamapper"
20
21
  sh "gem build dm-metamapper.gemspec"
21
22
  version = File.read("VERSION").chomp
22
23
  sh "gem install -l ./dm-metamapper-#{version}.gem"
23
- end
24
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.9
data/example/example.cpp CHANGED
@@ -30,6 +30,7 @@ int main(int argc, char* argv[])
30
30
  d1._user_id() = u1._id();
31
31
  d1._name() = "spot";
32
32
  d1._stinks() = true;
33
+ d1._color() = DOG_COLOR_WHITE;
33
34
  d1.insert();
34
35
 
35
36
  d1 = d.select(d1._id()).first;
data/example/example.rb CHANGED
@@ -3,12 +3,18 @@ require "rubygems"
3
3
  require "bundler"
4
4
  Bundler.setup(:default, :test)
5
5
  require "dm-core"
6
+ require "dm-types"
6
7
  require File.expand_path("../../lib/dm-metamapper.rb", __FILE__)
7
8
  require "dm-metamapper/generators/cpp"
8
9
 
9
10
  #DataMapper.setup(:default, "sqlite3::memory:")
10
11
  DataMapper.setup(:default, "mysql://root@localhost/dmmm")
11
12
 
13
+ COLORS = [
14
+ :blue,
15
+ :white
16
+ ]
17
+
12
18
  class User
13
19
  include DataMapper::Resource
14
20
 
@@ -29,6 +35,7 @@ class Dog
29
35
  property :id, Serial
30
36
  property :user_id, Integer
31
37
  property :name, String
38
+ property :color, Enum[*COLORS]
32
39
  property :stinks, Boolean
33
40
  end
34
41
 
@@ -21,11 +21,16 @@ module DataMapper
21
21
  hash[m.child_key.first.name] = decolonize(m.parent_model_name.to_const_string)
22
22
  hash
23
23
  end
24
+ enums = {}
24
25
  model.properties.each do |prop|
25
26
  cpp_name = if prop.serial?
26
27
  "Field<I_#{decolonize(model.name)}>"
27
28
  elsif key_to_parent[prop.name]
28
29
  "Field<I_#{key_to_parent[prop.name]}>"
30
+ elsif prop.type.ancestors.include?(DataMapper::Types::Enum)
31
+ name = prop.name.to_s.upcase
32
+ enums[name] = prop
33
+ "Field<Enum#{decolonize(model.name)}#{name}>"
29
34
  else
30
35
  "F_#{decolonize(prop.primitive.to_s)}"
31
36
  end
@@ -33,6 +38,8 @@ module DataMapper
33
38
  (class << prop; self; end).instance_eval{ attr_accessor :cpp_name }
34
39
  prop.cpp_name = cpp_name
35
40
  end
41
+ (class << model; self; end).instance_eval{ attr_accessor :enums }
42
+ model.enums = enums
36
43
  end
37
44
 
38
45
  def output_path(model, template)
@@ -74,8 +74,12 @@ public:
74
74
  for(size_t i = 0; i < res.size(); ++i){
75
75
  <% model.generated_properties.each do |property| %>
76
76
  r[i]._f_<%= property.name %>._base =
77
+ <% if property.type.ancestors.include?(DataMapper::Types::Enum) %>
78
+ (<%= property.cpp_name %>::Base)UTILS::fromString<char>(res[i]["<%= property.name %>"]);
79
+ <% else %>
77
80
  UTILS::fromString<<%= property.cpp_name %>::Base>(res[i]["<%= property.name %>"]);
78
81
  <% end %>
82
+ <% end %>
79
83
  }
80
84
  }
81
85
 
@@ -16,6 +16,11 @@
16
16
 
17
17
  <%# self.relationships.select{|r,m| m.class.name == 'DataMapper::Associations::OneToMany::Relationship'}.each do |relative| %>
18
18
  <%# end %>
19
+
20
+ <% model.enums.each do |name, property| %>
21
+ enum Enum<%= class_name %><%= name %> { <%= property.type.flag_map.map{|v, k| class_name.upcase + "_" + property.name.to_s.upcase + "_" + k.to_s.upcase + " = " + v.to_s}.join(", ") %> };
22
+ <% end %>
23
+
19
24
  namespace DMMM {
20
25
 
21
26
  class O_<%= class_name %>{
@@ -38,6 +43,7 @@ public:
38
43
  {}
39
44
  <% end %>
40
45
 
46
+
41
47
  <% model.generated_properties.each do |property| %>
42
48
  const <%= property.cpp_name %>::Base& _<%= property.name %>() const {
43
49
  return _f_<%= property.name %>._base;
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 7
9
- version: 0.0.7
8
+ - 9
9
+ version: 0.0.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jonah Honeyman
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-08 00:00:00 +03:00
18
+ date: 2010-07-21 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -34,7 +34,6 @@ files:
34
34
  - README.md
35
35
  - Rakefile
36
36
  - VERSION
37
- - dm-metamapper.gemspec
38
37
  - example/.gitignore
39
38
  - example/Makefile
40
39
  - example/example.cpp
@@ -1,74 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{dm-metamapper}
8
- s.version = "0.0.7"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Jonah Honeyman", "Omer Tamuz"]
12
- s.date = %q{2010-07-08}
13
- s.description = %q{C++ API for databases created with DM. Hard typing, compile time checked queries.}
14
- s.email = %q{jonah@honeyman.org}
15
- s.extra_rdoc_files = [
16
- "README.md"
17
- ]
18
- s.files = [
19
- ".autospec",
20
- ".gitignore",
21
- "Gemfile",
22
- "README.md",
23
- "Rakefile",
24
- "VERSION",
25
- "dm-metamapper.gemspec",
26
- "example/.gitignore",
27
- "example/Makefile",
28
- "example/example.cpp",
29
- "example/example.rb",
30
- "lib/dm-metamapper.rb",
31
- "lib/dm-metamapper/config.rb",
32
- "lib/dm-metamapper/generator.rb",
33
- "lib/dm-metamapper/generators/cpp.rb",
34
- "lib/dm-metamapper/metamapper.rb",
35
- "lib/dm-metamapper/model.rb",
36
- "lib/dm-metamapper/property.rb",
37
- "lib/dm-metamapper/template.rb",
38
- "lib/templates/cpp/class.hpp.erb",
39
- "lib/templates/cpp/dmmm_comparators.hpp.erb",
40
- "lib/templates/cpp/dmmm_dbface.cpp.erb",
41
- "lib/templates/cpp/dmmm_dbface.h.erb",
42
- "lib/templates/cpp/dmmm_fields.hpp.erb",
43
- "lib/templates/cpp/dmmm_id.hpp.erb",
44
- "lib/templates/cpp/dmmm_identifiers.hpp.erb",
45
- "lib/templates/cpp/dmmm_utils.cpp.erb",
46
- "lib/templates/cpp/dmmm_utils.hpp.erb",
47
- "lib/templates/cpp/instance.hpp.erb",
48
- "spec/dm-metamapper/generator_spec.rb",
49
- "spec/dm-metamapper/template_spec.rb",
50
- "spec/spec.opts",
51
- "spec/spec_helper.rb"
52
- ]
53
- s.homepage = %q{http://github.com/jonuts/dm-metamapper}
54
- s.rdoc_options = ["--charset=UTF-8"]
55
- s.require_paths = ["lib"]
56
- s.rubygems_version = %q{1.3.6}
57
- s.summary = %q{Code generating C++ ORM}
58
- s.test_files = [
59
- "spec/spec_helper.rb",
60
- "spec/dm-metamapper/generator_spec.rb",
61
- "spec/dm-metamapper/template_spec.rb"
62
- ]
63
-
64
- if s.respond_to? :specification_version then
65
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
66
- s.specification_version = 3
67
-
68
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
69
- else
70
- end
71
- else
72
- end
73
- end
74
-