merb_datamapper 0.9.3 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
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