merb_datamapper 0.9.3 → 0.9.4

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.
Files changed (37) hide show
  1. data/Manifest.txt +15 -17
  2. data/Rakefile +2 -2
  3. data/TODO +3 -3
  4. data/lib/generators/data_mapper_migration.rb +4 -0
  5. data/lib/generators/data_mapper_model.rb +15 -0
  6. data/lib/generators/data_mapper_resource_controller.rb +25 -0
  7. data/lib/generators/templates/migration.rb +7 -0
  8. data/lib/generators/templates/model.rb +9 -0
  9. data/lib/generators/templates/model_migration.rb +15 -0
  10. data/lib/generators/templates/resource_controller.rb +59 -0
  11. data/{datamapper_generators/resource_controller/templates/app/views/%controller_file_name% → lib/generators/templates/views}/edit.html.erb +3 -4
  12. data/{datamapper_generators/resource_controller/templates/app/views/%controller_file_name% → lib/generators/templates/views}/index.html.erb +2 -2
  13. data/{datamapper_generators/resource_controller/templates/app/views/%controller_file_name% → lib/generators/templates/views}/new.html.erb +3 -4
  14. data/{datamapper_generators/resource_controller/templates/app/views/%controller_file_name% → lib/generators/templates/views}/show.html.erb +2 -2
  15. data/lib/merb/session/data_mapper_session.rb +1 -1
  16. data/lib/merb_datamapper.rb +4 -0
  17. data/lib/merb_datamapper/merbtasks.rb +31 -0
  18. data/lib/merb_datamapper/version.rb +2 -2
  19. data/spec/generators/data_mapper_migration_spec.rb +31 -0
  20. data/spec/generators/data_mapper_model_spec.rb +38 -0
  21. data/spec/generators/data_mapper_resource_controller_spec.rb +24 -0
  22. data/spec/generators/spec_helper.rb +279 -0
  23. data/spec/spec_helper.rb +1 -1
  24. metadata +33 -25
  25. data/datamapper_generators/migration/USAGE +0 -4
  26. data/datamapper_generators/migration/migration_generator.rb +0 -64
  27. data/datamapper_generators/migration/templates/new_migration.erb +0 -7
  28. data/datamapper_generators/model/USAGE +0 -0
  29. data/datamapper_generators/model/model_generator.rb +0 -45
  30. data/datamapper_generators/model/templates/app/models/%model_file_name%.rb +0 -7
  31. data/datamapper_generators/resource_controller/USAGE +0 -0
  32. data/datamapper_generators/resource_controller/resource_controller_generator.rb +0 -109
  33. data/datamapper_generators/resource_controller/templates/app/controllers/%controller_file_name%.rb +0 -68
  34. data/datamapper_generators/resource_controller/templates/app/helpers/%controller_file_name%_helper.rb +0 -16
  35. data/datamapper_generators/resource_migration/USAGE +0 -4
  36. data/datamapper_generators/resource_migration/resource_migration_generator.rb +0 -122
  37. data/datamapper_generators/resource_migration/templates/class_migration.erb +0 -13
data/Manifest.txt CHANGED
@@ -4,23 +4,17 @@ Manifest.txt
4
4
  README.txt
5
5
  Rakefile
6
6
  TODO
7
- datamapper_generators/migration/USAGE
8
- datamapper_generators/migration/migration_generator.rb
9
- datamapper_generators/migration/templates/new_migration.erb
10
- datamapper_generators/model/USAGE
11
- datamapper_generators/model/model_generator.rb
12
- datamapper_generators/model/templates/app/models/%model_file_name%.rb
13
- datamapper_generators/resource_controller/USAGE
14
- datamapper_generators/resource_controller/resource_controller_generator.rb
15
- datamapper_generators/resource_controller/templates/app/controllers/%controller_file_name%.rb
16
- datamapper_generators/resource_controller/templates/app/helpers/%controller_file_name%_helper.rb
17
- datamapper_generators/resource_controller/templates/app/views/%controller_file_name%/edit.html.erb
18
- datamapper_generators/resource_controller/templates/app/views/%controller_file_name%/index.html.erb
19
- datamapper_generators/resource_controller/templates/app/views/%controller_file_name%/new.html.erb
20
- datamapper_generators/resource_controller/templates/app/views/%controller_file_name%/show.html.erb
21
- datamapper_generators/resource_migration/USAGE
22
- datamapper_generators/resource_migration/resource_migration_generator.rb
23
- datamapper_generators/resource_migration/templates/class_migration.erb
7
+ lib/generators/data_mapper_migration.rb
8
+ lib/generators/data_mapper_model.rb
9
+ lib/generators/data_mapper_resource_controller.rb
10
+ lib/generators/templates/migration.rb
11
+ lib/generators/templates/model.rb
12
+ lib/generators/templates/model_migration.rb
13
+ lib/generators/templates/resource_controller.rb
14
+ lib/generators/templates/views/edit.html.erb
15
+ lib/generators/templates/views/index.html.erb
16
+ lib/generators/templates/views/new.html.erb
17
+ lib/generators/templates/views/show.html.erb
24
18
  lib/merb/orms/data_mapper/connection.rb
25
19
  lib/merb/orms/data_mapper/database.yml.sample
26
20
  lib/merb/orms/data_mapper/resource.rb
@@ -29,5 +23,9 @@ lib/merb_datamapper.rb
29
23
  lib/merb_datamapper/merbtasks.rb
30
24
  lib/merb_datamapper/version.rb
31
25
  spec/connection_spec.rb
26
+ spec/generators/data_mapper_migration_spec.rb
27
+ spec/generators/data_mapper_model_spec.rb
28
+ spec/generators/data_mapper_resource_controller_spec.rb
29
+ spec/generators/spec_helper.rb
32
30
  spec/spec.opts
33
31
  spec/spec_helper.rb
data/Rakefile CHANGED
@@ -10,11 +10,11 @@ AUTHOR = "Jason Toy"
10
10
  EMAIL = "jtoy@rubynow.com"
11
11
  GEM_NAME = "merb_datamapper"
12
12
  GEM_VERSION = DataMapper::MerbDataMapper::VERSION
13
- GEM_DEPENDENCIES = [["dm-core", GEM_VERSION], ["dm-migrations", GEM_VERSION], ["merb-core", ">=0.9.3"]]
13
+ GEM_DEPENDENCIES = [["dm-core", GEM_VERSION], ["dm-migrations", GEM_VERSION], ["merb-core", ">=0.9.4"], ['templater', ">=0.1.5"]]
14
14
  GEM_CLEAN = ["log", "pkg", "coverage"]
15
15
  GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.txt LICENSE TODO ] }
16
16
 
17
- PROJECT_NAME = "datamapper"
17
+ PROJECT_NAME = "merb"
18
18
  PROJECT_URL = "http://github.com/sam/dm-more/tree/master/merb_datamapper"
19
19
  PROJECT_DESCRIPTION = PROJECT_SUMMARY = "DataMapper plugin providing DataMapper support for Merb"
20
20
 
data/TODO CHANGED
@@ -1,10 +1,10 @@
1
1
  TODO
2
2
  ====
3
3
 
4
- * Add proper migration support as soon as its released
5
4
  * Fix session support
6
- * Finish rake tasks
7
-
5
+ * Add in model migration generation
6
+ * Tidy up Resource Controller generator
7
+ * Add property interpolation for views
8
8
  ---
9
9
  TODO tickets may also be found in the DataMapper Issue Tracker:
10
10
  http://wm.lighthouseapp.com/projects/4819-datamapper/overview
@@ -0,0 +1,4 @@
1
+ Merb::Generators::MigrationGenerator.template :migration_datamapper, :orm => :datamapper do
2
+ source(File.dirname(__FILE__), 'templates/migration.rb')
3
+ destination("#{destination_directory}/#{file_name}.rb")
4
+ end
@@ -0,0 +1,15 @@
1
+ Merb::Generators::ModelGenerator.option :migration, :as => :boolean, :desc => 'Also generate a dm-migration for the model'
2
+
3
+ class Merb::Generators::ModelGenerator
4
+ ##
5
+ # Corrects case of common datamapper arguments.
6
+ def datamapper_type(type)
7
+ return 'DateTime' if type == 'datetime'
8
+ return type.camel_case
9
+ end
10
+ end
11
+
12
+ Merb::Generators::ModelGenerator.template :model_datamapper, :orm => :datamapper do
13
+ source(File.dirname(__FILE__), "templates", "model.rb")
14
+ destination("app/models", base_path, "#{file_name}.rb")
15
+ end
@@ -0,0 +1,25 @@
1
+ class Merb::Generators::ResourceControllerGenerator
2
+ # TODO: fix this for Datamapper, so that it returns the primary keys for the model
3
+ def params_for_get
4
+ "params[:id]"
5
+ end
6
+
7
+ # TODO: implement this for Datamapper so that we get the model properties
8
+ def properties
9
+ []
10
+ end
11
+ end
12
+
13
+
14
+ Merb::Generators::ResourceControllerGenerator.template :controller_datamapper, :orm => :datamapper do
15
+ source(File.dirname(__FILE__), "templates/resource_controller.rb")
16
+ destination("app/controllers", base_path, "#{file_name}.rb")
17
+ end
18
+
19
+ [:index, :show, :edit, :new].each do |view|
20
+ Merb::Generators::ResourceControllerGenerator.template "view_#{view}_datamapper".to_sym,
21
+ :orm => :datamapper, :template_engine => :erb do
22
+ source(File.dirname(__FILE__), "templates/views/#{view}.html.erb")
23
+ destination("app/views", base_path, "#{file_name}/#{view}.html.erb")
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ migration <%= current_migration_nr + 1 %>, :<%= migration_name %> do
2
+ up do
3
+ end
4
+
5
+ down do
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ <% with_modules(modules) do -%>
2
+ class <%= class_name %>
3
+ include DataMapper::Resource
4
+ <% attributes.each do |name, type| %>
5
+ property :<%= name -%>, <%= datamapper_type(type) -%>
6
+ <% end %>
7
+
8
+ end
9
+ <% end -%>
@@ -0,0 +1,15 @@
1
+ migration <%= current_migration_nr + 1 %>, :<%= migration_name %> do
2
+ up do
3
+ <% unless properties.empty? -%>
4
+ create_table :<%= table_name %> do
5
+ <% properties.each do |p| -%>
6
+ column :<%= p.name -%>, <%= p.type %>
7
+ <% end -%>
8
+ end
9
+ <% end -%>
10
+ end
11
+
12
+ down do
13
+ drop_table :<%= table_name %>
14
+ end
15
+ end
@@ -0,0 +1,59 @@
1
+ <% with_modules(modules) do -%>
2
+ class <%= class_name %> < Application
3
+ # provides :xml, :yaml, :js
4
+
5
+ def index
6
+ @<%= plural_model %> = <%= model_class_name %>.all
7
+ display @<%= plural_model %>
8
+ end
9
+
10
+ def show
11
+ @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
12
+ raise NotFound unless @<%= singular_model %>
13
+ display @<%= singular_model %>
14
+ end
15
+
16
+ def new
17
+ only_provides :html
18
+ @<%= singular_model %> = <%= model_class_name %>.new
19
+ render
20
+ end
21
+
22
+ def edit
23
+ only_provides :html
24
+ @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
25
+ raise NotFound unless @<%= singular_model %>
26
+ render
27
+ end
28
+
29
+ def create
30
+ @<%= singular_model %> = <%= model_class_name %>.new(params[:<%= singular_model %>])
31
+ if @<%= singular_model %>.save
32
+ redirect url(:<%= (modules.collect{|m| m.downcase} << singular_model).join("_") %>, @<%= singular_model %>)
33
+ else
34
+ render :new
35
+ end
36
+ end
37
+
38
+ def update
39
+ @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
40
+ raise NotFound unless @<%= singular_model %>
41
+ if @<%= singular_model %>.update_attributes(params[:<%= singular_model %>]) || !@<%= singular_model %>.dirty?
42
+ redirect url(:<%= (modules.collect{|m| m.downcase} << singular_model).join("_") %>, @<%= singular_model %>)
43
+ else
44
+ raise BadRequest
45
+ end
46
+ end
47
+
48
+ def destroy
49
+ @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
50
+ raise NotFound unless @<%= singular_model %>
51
+ if @<%= singular_model %>.destroy
52
+ redirect url(:<%= (modules.collect{|m| m.downcase} << singular_model).join("_") %>)
53
+ else
54
+ raise BadRequest
55
+ end
56
+ end
57
+
58
+ end # <%= class_name %>
59
+ <% end -%>
@@ -1,14 +1,13 @@
1
- <h1><%= full_controller_const %> controller, edit action</h1>
1
+ <h1><%= class_name %> controller, edit action</h1>
2
2
 
3
- <p>Edit this file in <tt>app/views/<%= controller_file_name %>/edit.html.erb</tt></p>
3
+ <p>Edit this file in <tt>app/views/<%= file_name %>/edit.html.erb</tt></p>
4
4
 
5
5
  <%%= error_messages_for :<%= singular_model %> %>
6
6
 
7
7
  <%% form_for(@<%= singular_model %>, :action => url(:<%= singular_model %>, @<%= singular_model %>)) do %>
8
8
  <% for property in properties.select{|p| !p.key?} -%>
9
9
  <p>
10
- <b><%= Extlib::Inflection.humanize(property.field) %></b><br />
11
- <%%= <%= field_from_type(property.type) %> :<%= property.getter %> %>
10
+ <%%= text_control :<%= property.getter %>, :label => "<%= Extlib::Inflection.humanize(property.field) %>" %>
12
11
  </p>
13
12
 
14
13
  <% end -%>
@@ -1,6 +1,6 @@
1
- <h1><%= full_controller_const %> controller, index action</h1>
1
+ <h1><%= class_name %> controller, index action</h1>
2
2
 
3
- <p>Edit this file in <tt>app/views/<%= controller_file_name %>/index.html.erb</tt></p>
3
+ <p>Edit this file in <tt>app/views/<%= file_name %>/index.html.erb</tt></p>
4
4
 
5
5
  <table>
6
6
  <tr>
@@ -1,14 +1,13 @@
1
- <h1><%= full_controller_const %> controller, new action</h1>
1
+ <h1><%= class_name %> controller, new action</h1>
2
2
 
3
- <p>Edit this file in <tt>app/views/<%= controller_file_name %>/new.html.erb</tt></p>
3
+ <p>Edit this file in <tt>app/views/<%= file_name %>/new.html.erb</tt></p>
4
4
 
5
5
  <%%= error_messages_for :<%= singular_model %> %>
6
6
 
7
7
  <%% form_for(@<%= singular_model %>, :action => url(:<%= plural_model %>) ) do |f| %>
8
8
  <% for property in properties.select{|p| !p.key?} -%>
9
9
  <p>
10
- <b><%= Extlib::Inflection.humanize(property.field) %></b><br />
11
- <%%= <%= field_from_type(property.type) %> :<%= property.getter %> %>
10
+ <%%= text_control :<%= property.getter %>, :label => "<%= Extlib::Inflection.humanize(property.field) %>" %>
12
11
  </p>
13
12
 
14
13
  <% end -%>
@@ -1,6 +1,6 @@
1
- <h1><%= full_controller_const %> controller, show action</h1>
1
+ <h1><%= class_name %> controller, show action</h1>
2
2
 
3
- <p>Edit this file in <tt>app/views/<%= controller_file_name %>/show.html.erb</tt></p>
3
+ <p>Edit this file in <tt>app/views/<%= file_name %>/show.html.erb</tt></p>
4
4
 
5
5
  <% for property in properties -%>
6
6
  <p>
@@ -1,5 +1,5 @@
1
1
  begin
2
- gem 'dm-core', '=0.9.3'
2
+ gem 'dm-core', '=0.9.4'
3
3
  require 'dm-core'
4
4
  rescue LoadError => e
5
5
  require 'data_mapper'
@@ -17,4 +17,8 @@ if defined?(Merb::Plugins)
17
17
  require File.join(File.dirname(__FILE__) / "merb" / "orms" / "data_mapper" / "resource")
18
18
 
19
19
  Merb::Plugins.add_rakefiles "merb_datamapper" / "merbtasks"
20
+
21
+ Merb.add_generators File.join(File.dirname(__FILE__), 'generators', 'data_mapper_model')
22
+ Merb.add_generators File.join(File.dirname(__FILE__), 'generators', 'data_mapper_resource_controller')
23
+ Merb.add_generators File.join(File.dirname(__FILE__), 'generators', 'data_mapper_migration')
20
24
  end
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'merb/orms/data_mapper/connection'
2
3
 
3
4
  namespace :dm do
4
5
 
@@ -43,6 +44,36 @@ namespace :dm do
43
44
  migrate_down!(version)
44
45
  end
45
46
  end
47
+
48
+ desc "Migrate the database to the latest version"
49
+ task :migrate => 'dm:db:migrate:up'
50
+
51
+ desc "Create the database (postgres only)"
52
+ task :create do
53
+ config = Merb::Orms::DataMapper.config
54
+ puts "Creating database '#{config[:database]}'"
55
+ case config[:adapter]
56
+ when 'postgres'
57
+ `createdb -U #{config[:username]} #{config[:database]}`
58
+ else
59
+ raise "Adapter #{config[:adapter]} not supported yet."
60
+ end
61
+ end
62
+
63
+ desc "Drop the database (postgres only)"
64
+ task :drop do
65
+ config = Merb::Orms::DataMapper.config
66
+ puts "Droping database '#{config[:database]}'"
67
+ case config[:adapter]
68
+ when 'postgres'
69
+ `dropdb -U #{config[:username]} #{config[:database]}`
70
+ else
71
+ raise "Adapter #{config[:adapter]} not supported yet."
72
+ end
73
+ end
74
+
75
+ desc "Drop the database, and migrate from scratch"
76
+ task :reset => [:drop, :create, :migrate]
46
77
  end
47
78
 
48
79
  namespace :sessions do
@@ -1,5 +1,5 @@
1
1
  module DataMapper
2
2
  module MerbDataMapper
3
- VERSION = "0.9.3"
3
+ VERSION = "0.9.4"
4
4
  end
5
- end
5
+ end
@@ -0,0 +1,31 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+ # many specs copied from merb-gen master branch
3
+ describe "Merb::Generators::MigrationGenerator for DataMapper" do
4
+ it "should complain if no name is specified" do
5
+ lambda {
6
+ @generator = Merb::Generators::MigrationGenerator.new('/tmp', {:orm => :datamapper})
7
+ }.should raise_error(::Templater::TooFewArgumentsError)
8
+ end
9
+
10
+
11
+ describe "with no options" do
12
+ before(:each) do
13
+ @base_dir = "/tmp/migrations"
14
+ FileUtils.mkdir_p @base_dir
15
+ @generator = Merb::Generators::MigrationGenerator.new(@base_dir, {:orm => :datamapper}, 'SomeMoreStuff')
16
+ end
17
+
18
+ after(:each) do
19
+ FileUtils.rm_r @base_dir
20
+ end
21
+
22
+ it "should render successfully" do
23
+ lambda { @generator.render! }.should_not raise_error
24
+ end
25
+
26
+ it "creates the file correctly" do
27
+ @generator.should create('/tmp/migrations/schema/migrations/001_some_more_stuff_migration.rb')
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,38 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+ describe "Merb::Generators::ModelGenerator for DataMapper" do
3
+ it "complains if no name is specified" do
4
+ lambda {
5
+ @generator = Merb::Generators::ModelGenerator.new('/tmp', {:orm => :datamapper})
6
+ }.should raise_error(::Templater::TooFewArgumentsError)
7
+ end
8
+
9
+
10
+ before do
11
+ @generator = Merb::Generators::ModelGenerator.new('/tmp',{:orm => :datamapper}, 'Stuff')
12
+ end
13
+
14
+ it_should_behave_like "namespaced generator"
15
+
16
+ it "should create a model" do
17
+ @generator.should create('/tmp/app/models/stuff.rb')
18
+ end
19
+
20
+ it "should render successfully" do
21
+ lambda { @generator.render! }.should_not raise_error
22
+ end
23
+
24
+ it "generates a resource" do
25
+ model_file = @generator.render!.detect { |file| file =~ /class/ }
26
+ model_file.should match(/include DataMapper::Resource/)
27
+ end
28
+ it "generates a resource with appropriate properties" do
29
+ @generator = Merb::Generators::ModelGenerator.new('/tmp',{:orm => :datamapper}, 'Stuff', 'id' => 'serial')
30
+ model_file = @generator.template(:model_datamapper).render
31
+ model_file.should match(/property :id, Serial/)
32
+ end
33
+ it "generates a resource with DateTime properties in the correct case when called with the common argument of datetime" do
34
+ @generator = Merb::Generators::ModelGenerator.new('/tmp',{:orm => :datamapper}, 'Stuff', 'created_at' => 'datetime')
35
+ model_file = @generator.template(:model_datamapper).render
36
+ model_file.should match(/property :created_at, DateTime/)
37
+ end
38
+ end
@@ -0,0 +1,24 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+ describe "Merb::Generators::ResourceControllerGenerator for DataMapper" do
3
+ it "complains if no name is specified" do
4
+ lambda {
5
+ @generator = Merb::Generators::ResourceControllerGenerator.new('/tmp', {:orm => :datamapper })
6
+ }.should raise_error(::Templater::TooFewArgumentsError)
7
+ end
8
+
9
+
10
+ before do
11
+ @generator = Merb::Generators::ResourceControllerGenerator.new('/tmp', { :orm => :datamapper }, 'Stuff')
12
+ end
13
+
14
+ it_should_behave_like "namespaced generator"
15
+
16
+ it "should create a model" do
17
+ @generator.should create('/tmp/app/controllers/stuff.rb')
18
+ end
19
+
20
+ it "should render successfully" do
21
+ lambda { @generator.render! }.should_not raise_error
22
+ end
23
+
24
+ end