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
@@ -1,7 +0,0 @@
1
- migration(<%= number %>, :<%= class_name.snake_case %>) do
2
- up do
3
- end
4
-
5
- down do
6
- end
7
- end
File without changes
@@ -1,45 +0,0 @@
1
- class ModelGenerator < Merb::GeneratorBase
2
- attr_reader :model_attributes, :model_class_name, :model_file_name
3
-
4
- def initialize(args, runtime_args = {})
5
- @base = File.dirname(__FILE__)
6
- super
7
- @model_file_name = args.shift.snake_case
8
- @model_class_name = @model_file_name.to_const_string
9
- @model_attributes = normalize_attributes(args)
10
- @model_file_name = "#{@model_class_name.snake_case}"
11
-
12
- end
13
-
14
- def manifest
15
- record do |m|
16
- @m = m
17
-
18
- @assigns = { :model_file_name => model_file_name,
19
- :model_attributes => model_attributes,
20
- :model_class_name => model_class_name
21
- }
22
- copy_dirs
23
- copy_files
24
-
25
- m.dependency "merb_model_test", [model_file_name], @assigns
26
- end
27
- end
28
-
29
- protected
30
- def banner
31
- <<-EOS.split("\n").map{|x| x.strip}.join("\n")
32
- Creates a Datamapper Model stub..
33
-
34
- USAGE: #{spec.name}"
35
- EOS
36
- end
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,7 +0,0 @@
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
File without changes
@@ -1,109 +0,0 @@
1
- class ResourceControllerGenerator < Merb::GeneratorBase
2
-
3
- attr_reader :controller_class_name,
4
- :controller_file_name,
5
- :controller_base_path,
6
- :controller_modules,
7
- :model_class_name,
8
- :full_controller_const,
9
- :singular_model,
10
- :plural_model,
11
- :properties
12
-
13
- def initialize(args, runtime_args = {})
14
- @base = File.dirname(__FILE__)
15
-
16
- super
17
-
18
- name = args.shift
19
- nfp = name.snake_case.gsub("::", "/").split("/")
20
-
21
- @model_class_name = nfp.pop.singularize.to_const_string
22
- @model_class_name = runtime_args[:model_class_name] if runtime_args[:model_class_name]
23
- @singular_model = @model_class_name.snake_case
24
- @plural_model = @singular_model.pluralize
25
-
26
- nfp << @plural_model
27
-
28
- @controller_file_name = nfp.join("/")
29
-
30
- # Need to setup the directories
31
- unless @controller_file_name == File.basename(@controller_file_name)
32
- @controller_base_path = controller_file_name.split("/")[0..-2].join("/")
33
- end
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
37
-
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
48
- end
49
-
50
- def manifest
51
- record do |m|
52
- @m = m
53
-
54
- # Create the controller directory
55
- m.directory File.join("app/controllers", controller_base_path) if controller_base_path
56
-
57
- # Create the helpers directory
58
- m.directory File.join("app/helpers", controller_base_path) if controller_base_path
59
-
60
- @assigns = {
61
- :controller_modules => controller_modules,
62
- :controller_class_name => controller_class_name,
63
- :controller_file_name => controller_file_name,
64
- :controller_base_path => controller_base_path,
65
- :full_controller_const => full_controller_const,
66
- :model_class_name => model_class_name,
67
- :singular_model => singular_model,
68
- :plural_model => plural_model,
69
- :properties => properties
70
- }
71
- copy_dirs
72
- copy_files
73
-
74
- m.dependency "merb_resource_controller_test", [@controller_class_name], @assigns
75
- end
76
- end
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
-
101
- protected
102
- def banner
103
- <<-EOS.split("\n").map{|x| x.strip}.join("\n")
104
- Creates a basic Merb resource controller.
105
-
106
- USAGE: #{spec.name} my_resource
107
- EOS
108
- end
109
- end
@@ -1,68 +0,0 @@
1
- <% counter = 0 -%>
2
- <% controller_modules.each_with_index do |mod, i| -%>
3
- <%= " " * i %>module <%= mod %>
4
- <% counter = i -%>
5
- <% end -%>
6
- <% counter = counter == 0 ? 0 : (counter + 1) -%>
7
- <%= " " * counter %>class <%= controller_class_name %> < Application
8
- <%= " " * counter %> # provides :xml, :yaml, :js
9
-
10
- <%= " " * counter %> def index
11
- <%= " " * counter %> @<%= plural_model %> = <%= model_class_name %>.all
12
- <%= " " * counter %> display @<%= plural_model %>
13
- <%= " " * counter %> end
14
-
15
- <%= " " * counter %> def show
16
- <%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
17
- <%= " " * counter %> raise NotFound unless @<%= singular_model %>
18
- <%= " " * counter %> display @<%= singular_model %>
19
- <%= " " * counter %> end
20
-
21
- <%= " " * counter %> def new
22
- <%= " " * counter %> only_provides :html
23
- <%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.new
24
- <%= " " * counter %> render
25
- <%= " " * counter %> end
26
-
27
- <%= " " * counter %> def edit
28
- <%= " " * counter %> only_provides :html
29
- <%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
30
- <%= " " * counter %> raise NotFound unless @<%= singular_model %>
31
- <%= " " * counter %> render
32
- <%= " " * counter %> end
33
-
34
- <%= " " * counter %> def create
35
- <%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.new(params[:<%= singular_model %>])
36
- <%= " " * counter %> if @<%= singular_model %>.save
37
- <%= " " * counter %> redirect url(:<%= (controller_modules.collect{|m| m.downcase} << singular_model).join("_") %>, @<%= singular_model %>)
38
- <%= " " * counter %> else
39
- <%= " " * counter %> render :new
40
- <%= " " * counter %> end
41
- <%= " " * counter %> end
42
-
43
- <%= " " * counter %> def update
44
- <%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
45
- <%= " " * counter %> raise NotFound unless @<%= singular_model %>
46
- <%= " " * counter %> if @<%= singular_model %>.update_attributes(params[:<%= singular_model %>]) || !@<%= singular_model %>.dirty?
47
- <%= " " * counter %> redirect url(:<%= (controller_modules.collect{|m| m.downcase} << singular_model).join("_") %>, @<%= singular_model %>)
48
- <%= " " * counter %> else
49
- <%= " " * counter %> raise BadRequest
50
- <%= " " * counter %> end
51
- <%= " " * counter %> end
52
-
53
- <%= " " * counter %> def destroy
54
- <%= " " * counter %> @<%= singular_model %> = <%= model_class_name %>.get(<%= params_for_get %>)
55
- <%= " " * counter %> raise NotFound unless @<%= singular_model %>
56
- <%= " " * counter %> if @<%= singular_model %>.destroy
57
- <%= " " * counter %> redirect url(:<%= (controller_modules.collect{|m| m.downcase} << singular_model).join("_") %>)
58
- <%= " " * counter %> else
59
- <%= " " * counter %> raise BadRequest
60
- <%= " " * counter %> end
61
- <%= " " * counter %> end
62
-
63
- <%= " " * counter %>end
64
- <% counter = counter == 0 ? 0 : (counter - 1) -%>
65
- <% controller_modules.reverse.each_with_index do |mod, i| -%>
66
- <%= " " * counter %>end # <%= mod %>
67
- <% counter = counter - 1 -%>
68
- <% end -%>
@@ -1,16 +0,0 @@
1
- <% counter = 1 -%>
2
- module Merb
3
- <% controller_modules.each_with_index do |mod, i| -%>
4
- <%= " " * i %>module <%= mod %>
5
- <% counter = i -%>
6
- <% end -%>
7
- <% counter = counter == 0 ? 0 : (counter + 1) -%>
8
- <%= " " * counter %>module <%= controller_class_name %>Helper
9
-
10
- <%= " " * counter %>end
11
- <% counter = counter == 0 ? 0 : (counter - 1) -%>
12
- <% controller_modules.reverse.each_with_index do |mod, i| -%>
13
- <%= " " * counter %>end # <%= mod %>
14
- <% counter = counter - 1 -%>
15
- <% end -%>
16
- end
@@ -1,4 +0,0 @@
1
- Description:
2
-
3
-
4
- Usage:
@@ -1,122 +0,0 @@
1
- # require 'merb'
2
- class ResourceMigrationGenerator < RubiGen::Base
3
-
4
- # these define datamapper specific properties, not general database concepts
5
- UNWANTED_PROPERTIES = [:public, :protected, :private, :accessor,
6
- :reader, :writer, :lazy, :lock, :field, :ordinal,
7
- :track, :auto_validation, :validates]
8
-
9
- default_options :author => nil
10
-
11
- attr_reader :name, :klass
12
-
13
- def initialize(runtime_args, runtime_options = {})
14
- super
15
- usage if args.empty?
16
- @name = args.shift
17
- extract_options
18
- end
19
-
20
- def manifest
21
- unless @name
22
- puts banner
23
- exit 1
24
- end
25
-
26
- # first see if we can find our model file where it should be!
27
- model_file = File.join(Dir.pwd, "app/models","#{@name.snake_case}.rb")
28
- unless File.exist?(model_file)
29
- puts "Couldn't find the model file for #{@name}"
30
- exit 1
31
- end
32
-
33
- # next, check we actually have a class!
34
- require model_file
35
- @klass = Module.const_get(@name.camel_case)
36
- if @klass.nil?
37
- puts "File didn't seem to include the model #{@name.camel_case}"
38
- exit 1
39
- end
40
-
41
-
42
-
43
-
44
- record do |m|
45
- # Ensure appropriate folders exists
46
- m.directory 'schema/migrations'
47
-
48
- @migration_name = "create_%s_table" % @name.snake_case.pluralize
49
-
50
- filename = format("%03d_%s", (highest_migration+1), @migration_name)
51
-
52
- m.template "class_migration.erb", "schema/migrations/#{filename}.rb",
53
- :assigns => {
54
- :migration_name => @migration_name ,
55
- :number => (highest_migration+1),
56
- :klass_name => klass.storage_name,
57
- :properties => properties_as_strings
58
- }
59
-
60
- end
61
- end
62
-
63
- protected
64
- def banner
65
- <<-EOS
66
- Creates a new migration for merb using DataMapper
67
-
68
- USAGE: #{$0} #{spec.name} ResourceClass
69
-
70
- Example:
71
- #{$0} #{spec.name} Post
72
-
73
- If you already have 3 migrations, this will create the Post migration in
74
- schema/migration/004_create_posts_table.rb
75
-
76
- NB: Currently the generator doesn't make any columns for 'belongs_to'-type
77
- associations.
78
- EOS
79
- end
80
-
81
- def add_options!(opts)
82
- # opts.separator ''
83
- # opts.separator 'Options:'
84
- # For each option below, place the default
85
- # at the top of the file next to "default_options"
86
- # opts.on("-a", "--author=\"Your Name\"", String,
87
- # "Some comment about this option",
88
- # "Default: none") { |options[:author]| }
89
- # opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
90
- end
91
-
92
- def extract_options
93
- # for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
94
- # Templates can access these value via the attr_reader-generated methods, but not the
95
- # raw instance variable value.
96
- # @author = options[:author]
97
- end
98
-
99
- def highest_migration
100
- @highest_migration ||= Dir[Dir.pwd+'/schema/migrations/*'].map{ |f|
101
- File.basename(f) =~ /^(\d+)/
102
- $1}.max.to_i
103
- end
104
-
105
- def property_as_string(p)
106
- name = p.field
107
- type = p.type.to_s
108
- # clear out non-db related properties
109
- options = p.options.reject { |key, value| UNWANTED_PROPERTIES.include? key }
110
- options_as_array = []
111
- options.each do |key, value|
112
- options_as_array << ":#{key} => #{value}"
113
- end
114
-
115
- (options_as_array.empty?) ? ":#{name}, #{type}" :
116
- ":#{name}, #{type}, #{options_as_array.join(', ')}"
117
- end
118
-
119
- def properties_as_strings
120
- @properties_as_strings ||= klass.properties.map {|p| property_as_string(p) }
121
- end
122
- end
@@ -1,13 +0,0 @@
1
- migration(<%= number %>, :<%= migration_name %>) do
2
- up do
3
- create_table :<%= klass_name %> do
4
- <% properties.each do |p| %>
5
- column <%= p -%>
6
- <% end %>
7
- end
8
- end
9
-
10
- down do
11
- drop_table :<%= klass_name %>
12
- end
13
- end