merb_datamapper 0.9.2 → 0.9.3
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/History.txt +1 -0
- data/Manifest.txt +33 -0
- data/README.txt +13 -0
- data/Rakefile +47 -35
- data/TODO +10 -4
- data/datamapper_generators/migration/USAGE +2 -3
- data/datamapper_generators/migration/migration_generator.rb +6 -6
- data/datamapper_generators/migration/templates/new_migration.erb +3 -3
- data/datamapper_generators/model/model_generator.rb +17 -10
- data/datamapper_generators/model/templates/app/models/%model_file_name%.rb +7 -5
- data/datamapper_generators/resource_controller/resource_controller_generator.rb +62 -27
- data/datamapper_generators/resource_controller/templates/app/controllers/%controller_file_name%.rb +6 -6
- data/datamapper_generators/resource_controller/templates/app/helpers/%controller_file_name%_helper.rb +1 -1
- data/datamapper_generators/resource_controller/templates/app/views/%controller_file_name%/edit.html.erb +19 -1
- data/datamapper_generators/resource_controller/templates/app/views/%controller_file_name%/index.html.erb +22 -1
- data/datamapper_generators/resource_controller/templates/app/views/%controller_file_name%/new.html.erb +18 -1
- data/datamapper_generators/resource_controller/templates/app/views/%controller_file_name%/show.html.erb +12 -1
- data/datamapper_generators/resource_migration/USAGE +4 -0
- data/datamapper_generators/resource_migration/resource_migration_generator.rb +122 -0
- data/datamapper_generators/resource_migration/templates/class_migration.erb +13 -0
- data/lib/merb/orms/data_mapper/connection.rb +61 -26
- data/lib/merb/orms/data_mapper/database.yml.sample +32 -12
- data/lib/merb/orms/data_mapper/resource.rb +12 -0
- data/lib/merb/session/data_mapper_session.rb +47 -40
- data/lib/merb_datamapper.rb +15 -11
- data/lib/merb_datamapper/merbtasks.rb +42 -13
- data/lib/merb_datamapper/version.rb +5 -0
- data/spec/connection_spec.rb +67 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +15 -0
- metadata +58 -45
- data/README +0 -10
- data/lib/merb/orms/data_mapper/base.rb +0 -6
- data/specs/merb_sequel_spec.rb +0 -0
- data/specs/spec_helper.rb +0 -2
data/History.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
|
data/Manifest.txt
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
History.txt
|
2
|
+
LICENSE
|
3
|
+
Manifest.txt
|
4
|
+
README.txt
|
5
|
+
Rakefile
|
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
|
24
|
+
lib/merb/orms/data_mapper/connection.rb
|
25
|
+
lib/merb/orms/data_mapper/database.yml.sample
|
26
|
+
lib/merb/orms/data_mapper/resource.rb
|
27
|
+
lib/merb/session/data_mapper_session.rb
|
28
|
+
lib/merb_datamapper.rb
|
29
|
+
lib/merb_datamapper/merbtasks.rb
|
30
|
+
lib/merb_datamapper/version.rb
|
31
|
+
spec/connection_spec.rb
|
32
|
+
spec/spec.opts
|
33
|
+
spec/spec_helper.rb
|
data/README.txt
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
= merb_datamapper
|
2
|
+
|
3
|
+
A plugin for the Merb framework that provides DataMapper access
|
4
|
+
|
5
|
+
To use sessions:
|
6
|
+
|
7
|
+
1. set the session store to datamapper in init.rb:
|
8
|
+
Merb::Config.use { |c|
|
9
|
+
c[:session_store] = 'datamapper'
|
10
|
+
}
|
11
|
+
|
12
|
+
2. add the dependency in init.rb:
|
13
|
+
use_orm :datamapper
|
data/Rakefile
CHANGED
@@ -1,46 +1,58 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require '
|
2
|
+
require 'spec'
|
3
|
+
require 'spec/rake/spectask'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
ROOT = Pathname(__FILE__).dirname.expand_path
|
7
|
+
require ROOT + 'lib/merb_datamapper/version'
|
3
8
|
|
4
|
-
PLUGIN = "merb_datamapper"
|
5
|
-
NAME = "merb_datamapper"
|
6
|
-
VERSION = "0.9.2"
|
7
9
|
AUTHOR = "Jason Toy"
|
8
|
-
EMAIL
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
s.author = AUTHOR
|
21
|
-
s.email = EMAIL
|
22
|
-
s.homepage = HOMEPAGE
|
23
|
-
s.add_dependency('merb-core', '>= 0.9.2')
|
24
|
-
s.add_dependency('datamapper', '>= 0.2.3')
|
25
|
-
s.require_path = 'lib'
|
26
|
-
s.autorequire = PLUGIN
|
27
|
-
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,specs,datamapper_generators}/**/*")
|
28
|
-
end
|
10
|
+
EMAIL = "jtoy@rubynow.com"
|
11
|
+
GEM_NAME = "merb_datamapper"
|
12
|
+
GEM_VERSION = DataMapper::MerbDataMapper::VERSION
|
13
|
+
GEM_DEPENDENCIES = [["dm-core", GEM_VERSION], ["dm-migrations", GEM_VERSION], ["merb-core", ">=0.9.3"]]
|
14
|
+
GEM_CLEAN = ["log", "pkg", "coverage"]
|
15
|
+
GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.txt LICENSE TODO ] }
|
16
|
+
|
17
|
+
PROJECT_NAME = "datamapper"
|
18
|
+
PROJECT_URL = "http://github.com/sam/dm-more/tree/master/merb_datamapper"
|
19
|
+
PROJECT_DESCRIPTION = PROJECT_SUMMARY = "DataMapper plugin providing DataMapper support for Merb"
|
20
|
+
|
21
|
+
require ROOT.parent + 'tasks/hoe'
|
29
22
|
|
30
|
-
|
23
|
+
task :default => [ :spec ]
|
31
24
|
|
32
|
-
|
25
|
+
WIN32 = (RUBY_PLATFORM =~ /win32|mingw|cygwin/) rescue nil
|
26
|
+
SUDO = WIN32 ? '' : ('sudo' unless ENV['SUDOLESS'])
|
33
27
|
|
34
|
-
|
35
|
-
|
28
|
+
desc "Install #{GEM_NAME} #{GEM_VERSION} (default ruby)"
|
29
|
+
task :install => [ :package ] do
|
30
|
+
sh "#{SUDO} gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources", :verbose => false
|
36
31
|
end
|
37
32
|
|
38
|
-
desc "
|
39
|
-
task :
|
40
|
-
sh
|
33
|
+
desc "Uninstall #{GEM_NAME} #{GEM_VERSION} (default ruby)"
|
34
|
+
task :uninstall => [ :clobber ] do
|
35
|
+
sh "#{SUDO} gem uninstall #{GEM_NAME} -v#{GEM_VERSION} -I -x", :verbose => false
|
41
36
|
end
|
42
37
|
|
43
|
-
|
44
|
-
|
45
|
-
|
38
|
+
namespace :jruby do
|
39
|
+
desc "Install #{GEM_NAME} #{GEM_VERSION} with JRuby"
|
40
|
+
task :install => [ :package ] do
|
41
|
+
sh %{#{SUDO} jruby -S gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}, :verbose => false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
desc 'Run specifications'
|
46
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
47
|
+
t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
48
|
+
t.spec_files = Pathname.glob(Pathname.new(__FILE__).dirname + 'spec/**/*_spec.rb')
|
49
|
+
|
50
|
+
begin
|
51
|
+
t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
|
52
|
+
t.rcov_opts << '--exclude' << 'spec'
|
53
|
+
t.rcov_opts << '--text-summary'
|
54
|
+
t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
|
55
|
+
rescue Exception
|
56
|
+
# rcov not installed
|
57
|
+
end
|
46
58
|
end
|
data/TODO
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
TODO
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
TODO
|
2
|
+
====
|
3
|
+
|
4
|
+
* Add proper migration support as soon as its released
|
5
|
+
* Fix session support
|
6
|
+
* Finish rake tasks
|
7
|
+
|
8
|
+
---
|
9
|
+
TODO tickets may also be found in the DataMapper Issue Tracker:
|
10
|
+
http://wm.lighthouseapp.com/projects/4819-datamapper/overview
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# require 'merb'
|
2
2
|
class MigrationGenerator < RubiGen::Base
|
3
|
-
|
3
|
+
|
4
4
|
default_options :author => nil
|
5
|
-
|
5
|
+
|
6
6
|
attr_reader :name
|
7
|
-
|
7
|
+
|
8
8
|
def initialize(runtime_args, runtime_options = {})
|
9
9
|
super
|
10
10
|
usage if args.empty?
|
@@ -24,7 +24,7 @@ class MigrationGenerator < RubiGen::Base
|
|
24
24
|
# Create stubs
|
25
25
|
highest_migration = Dir[Dir.pwd+'/schema/migrations/*'].map{|f| File.basename(f) =~ /^(\d+)/; $1}.max
|
26
26
|
filename = format("%03d_%s", (highest_migration.to_i+1), @name.snake_case)
|
27
|
-
m.template "new_migration.erb", "schema/migrations/#{filename}.rb", :assigns => { :class_name => @name }
|
27
|
+
m.template "new_migration.erb", "schema/migrations/#{filename}.rb", :assigns => { :class_name => @name , :number => (highest_migration.to_i+1) }
|
28
28
|
|
29
29
|
end
|
30
30
|
end
|
@@ -54,11 +54,11 @@ EOS
|
|
54
54
|
# "Default: none") { |options[:author]| }
|
55
55
|
# opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
def extract_options
|
59
59
|
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
60
60
|
# Templates can access these value via the attr_reader-generated methods, but not the
|
61
61
|
# raw instance variable value.
|
62
62
|
# @author = options[:author]
|
63
63
|
end
|
64
|
-
end
|
64
|
+
end
|
@@ -1,31 +1,31 @@
|
|
1
1
|
class ModelGenerator < Merb::GeneratorBase
|
2
2
|
attr_reader :model_attributes, :model_class_name, :model_file_name
|
3
|
-
|
3
|
+
|
4
4
|
def initialize(args, runtime_args = {})
|
5
5
|
@base = File.dirname(__FILE__)
|
6
6
|
super
|
7
7
|
@model_file_name = args.shift.snake_case
|
8
8
|
@model_class_name = @model_file_name.to_const_string
|
9
|
-
@model_attributes =
|
9
|
+
@model_attributes = normalize_attributes(args)
|
10
10
|
@model_file_name = "#{@model_class_name.snake_case}"
|
11
|
-
|
11
|
+
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def manifest
|
15
15
|
record do |m|
|
16
16
|
@m = m
|
17
|
-
|
18
|
-
@assigns = { :model_file_name => model_file_name,
|
17
|
+
|
18
|
+
@assigns = { :model_file_name => model_file_name,
|
19
19
|
:model_attributes => model_attributes,
|
20
20
|
:model_class_name => model_class_name
|
21
21
|
}
|
22
22
|
copy_dirs
|
23
23
|
copy_files
|
24
|
-
|
24
|
+
|
25
25
|
m.dependency "merb_model_test", [model_file_name], @assigns
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
protected
|
30
30
|
def banner
|
31
31
|
<<-EOS.split("\n").map{|x| x.strip}.join("\n")
|
@@ -34,5 +34,12 @@ class ModelGenerator < Merb::GeneratorBase
|
|
34
34
|
USAGE: #{spec.name}"
|
35
35
|
EOS
|
36
36
|
end
|
37
|
-
|
38
|
-
|
37
|
+
|
38
|
+
def normalize_attributes(attributes_input)
|
39
|
+
attributes_input.map do |a|
|
40
|
+
name, type = a.split(":")
|
41
|
+
[name.snake_case, type.to_const_string]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
|
-
class <%= model_class_name %>
|
2
|
-
|
3
|
-
|
4
|
-
<%
|
5
|
-
|
1
|
+
class <%= model_class_name %>
|
2
|
+
include DataMapper::Resource
|
3
|
+
|
4
|
+
<% model_attributes.each do |name,type| -%>
|
5
|
+
property :<%=name-%>, <%=type%>
|
6
|
+
<% end %>
|
7
|
+
end
|
@@ -1,51 +1,62 @@
|
|
1
1
|
class ResourceControllerGenerator < Merb::GeneratorBase
|
2
|
-
|
3
|
-
attr_reader :controller_class_name,
|
4
|
-
:controller_file_name,
|
2
|
+
|
3
|
+
attr_reader :controller_class_name,
|
4
|
+
:controller_file_name,
|
5
5
|
:controller_base_path,
|
6
6
|
:controller_modules,
|
7
7
|
:model_class_name,
|
8
8
|
:full_controller_const,
|
9
9
|
:singular_model,
|
10
|
-
:plural_model
|
11
|
-
|
10
|
+
:plural_model,
|
11
|
+
:properties
|
12
|
+
|
12
13
|
def initialize(args, runtime_args = {})
|
13
|
-
@base =
|
14
|
-
|
14
|
+
@base = File.dirname(__FILE__)
|
15
|
+
|
15
16
|
super
|
17
|
+
|
16
18
|
name = args.shift
|
17
|
-
nfp
|
18
|
-
|
19
|
+
nfp = name.snake_case.gsub("::", "/").split("/")
|
20
|
+
|
19
21
|
@model_class_name = nfp.pop.singularize.to_const_string
|
20
22
|
@model_class_name = runtime_args[:model_class_name] if runtime_args[:model_class_name]
|
21
|
-
@singular_model
|
22
|
-
@plural_model
|
23
|
-
|
23
|
+
@singular_model = @model_class_name.snake_case
|
24
|
+
@plural_model = @singular_model.pluralize
|
25
|
+
|
24
26
|
nfp << @plural_model
|
25
|
-
|
27
|
+
|
26
28
|
@controller_file_name = nfp.join("/")
|
27
|
-
|
29
|
+
|
28
30
|
# Need to setup the directories
|
29
31
|
unless @controller_file_name == File.basename(@controller_file_name)
|
30
|
-
@controller_base_path
|
32
|
+
@controller_base_path = controller_file_name.split("/")[0..-2].join("/")
|
31
33
|
end
|
32
|
-
|
33
|
-
@controller_modules
|
34
|
-
@controller_class_name
|
34
|
+
|
35
|
+
@controller_modules = @controller_file_name.to_const_string.split("::")[0..-2]
|
36
|
+
@controller_class_name = @controller_file_name.to_const_string.split("::").last
|
35
37
|
|
36
38
|
@full_controller_const = ((@controller_modules.dup || []) << @controller_class_name).join("::")
|
39
|
+
|
40
|
+
# Gets the properties of the model
|
41
|
+
# FIXME: the model file needs to be required
|
42
|
+
@properties = if Object.const_defined?(@model_class_name)
|
43
|
+
model_class = Object.const_get(@model_class_name)
|
44
|
+
model_class.properties if model_class.respond_to?(:properties)
|
45
|
+
else
|
46
|
+
[]
|
47
|
+
end
|
37
48
|
end
|
38
|
-
|
49
|
+
|
39
50
|
def manifest
|
40
51
|
record do |m|
|
41
52
|
@m = m
|
42
|
-
|
53
|
+
|
43
54
|
# Create the controller directory
|
44
55
|
m.directory File.join("app/controllers", controller_base_path) if controller_base_path
|
45
|
-
|
56
|
+
|
46
57
|
# Create the helpers directory
|
47
58
|
m.directory File.join("app/helpers", controller_base_path) if controller_base_path
|
48
|
-
|
59
|
+
|
49
60
|
@assigns = {
|
50
61
|
:controller_modules => controller_modules,
|
51
62
|
:controller_class_name => controller_class_name,
|
@@ -54,15 +65,39 @@ class ResourceControllerGenerator < Merb::GeneratorBase
|
|
54
65
|
:full_controller_const => full_controller_const,
|
55
66
|
:model_class_name => model_class_name,
|
56
67
|
:singular_model => singular_model,
|
57
|
-
:plural_model => plural_model
|
58
|
-
|
68
|
+
:plural_model => plural_model,
|
69
|
+
:properties => properties
|
70
|
+
}
|
59
71
|
copy_dirs
|
60
72
|
copy_files
|
61
|
-
|
73
|
+
|
62
74
|
m.dependency "merb_resource_controller_test", [@controller_class_name], @assigns
|
63
75
|
end
|
64
76
|
end
|
65
|
-
|
77
|
+
|
78
|
+
# methods used by the templates
|
79
|
+
|
80
|
+
def field_from_type(type)
|
81
|
+
case type.name.to_sym
|
82
|
+
when :String
|
83
|
+
"text_control"
|
84
|
+
when :TrueClass
|
85
|
+
"checkbox_control"
|
86
|
+
when :"DataMapper::Types::Text"
|
87
|
+
"text_area_control"
|
88
|
+
else
|
89
|
+
"text_control"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
#returns the params needed for getting the object.
|
94
|
+
# uses params[:id] as a default if no keys has been set in the model.
|
95
|
+
def params_for_get
|
96
|
+
params = properties.select{|p| p.key?}.map{|p| "params[:#{p.field}]"}.join(', ')
|
97
|
+
@params_for_get ||= (params == "" ? "params[:id]" : params)
|
98
|
+
end
|
99
|
+
|
100
|
+
|
66
101
|
protected
|
67
102
|
def banner
|
68
103
|
<<-EOS.split("\n").map{|x| x.strip}.join("\n")
|
@@ -71,4 +106,4 @@ class ResourceControllerGenerator < Merb::GeneratorBase
|
|
71
106
|
USAGE: #{spec.name} my_resource
|
72
107
|
EOS
|
73
108
|
end
|
74
|
-
end
|
109
|
+
end
|
data/datamapper_generators/resource_controller/templates/app/controllers/%controller_file_name%.rb
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
<%= " " * counter %> end
|
14
14
|
|
15
15
|
<%= " " * counter %> def show
|
16
|
-
<%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.
|
16
|
+
<%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
|
17
17
|
<%= " " * counter %> raise NotFound unless @<%= singular_model %>
|
18
18
|
<%= " " * counter %> display @<%= singular_model %>
|
19
19
|
<%= " " * counter %> end
|
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
<%= " " * counter %> def edit
|
28
28
|
<%= " " * counter %> only_provides :html
|
29
|
-
<%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.
|
29
|
+
<%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
|
30
30
|
<%= " " * counter %> raise NotFound unless @<%= singular_model %>
|
31
31
|
<%= " " * counter %> render
|
32
32
|
<%= " " * counter %> end
|
@@ -41,9 +41,9 @@
|
|
41
41
|
<%= " " * counter %> end
|
42
42
|
|
43
43
|
<%= " " * counter %> def update
|
44
|
-
<%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.
|
44
|
+
<%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
|
45
45
|
<%= " " * counter %> raise NotFound unless @<%= singular_model %>
|
46
|
-
<%= " " * counter %> if @<%= singular_model %>.update_attributes(params[:<%= singular_model %>])
|
46
|
+
<%= " " * counter %> if @<%= singular_model %>.update_attributes(params[:<%= singular_model %>]) || !@<%= singular_model %>.dirty?
|
47
47
|
<%= " " * counter %> redirect url(:<%= (controller_modules.collect{|m| m.downcase} << singular_model).join("_") %>, @<%= singular_model %>)
|
48
48
|
<%= " " * counter %> else
|
49
49
|
<%= " " * counter %> raise BadRequest
|
@@ -51,9 +51,9 @@
|
|
51
51
|
<%= " " * counter %> end
|
52
52
|
|
53
53
|
<%= " " * counter %> def destroy
|
54
|
-
<%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.
|
54
|
+
<%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
|
55
55
|
<%= " " * counter %> raise NotFound unless @<%= singular_model %>
|
56
|
-
<%= " " * counter %> if @<%= singular_model %>.destroy
|
56
|
+
<%= " " * counter %> if @<%= singular_model %>.destroy
|
57
57
|
<%= " " * counter %> redirect url(:<%= (controller_modules.collect{|m| m.downcase} << singular_model).join("_") %>)
|
58
58
|
<%= " " * counter %> else
|
59
59
|
<%= " " * counter %> raise BadRequest
|