dm-metamapper 0.0.7 → 0.0.9

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