padrino-gen 0.6.3 → 0.6.7
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/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/padrino-gen +2 -2
- data/lib/padrino-gen/generators/actions.rb +50 -30
- data/lib/padrino-gen/generators/app/Gemfile +1 -0
- data/lib/padrino-gen/generators/app/config/boot.rb +1 -1
- data/lib/padrino-gen/generators/app.rb +7 -6
- data/lib/padrino-gen/generators/components/actions.rb +55 -56
- data/lib/padrino-gen/generators/components/orms/activerecord_gen.rb +48 -31
- data/lib/padrino-gen/generators/components/orms/couchrest_gen.rb +7 -9
- data/lib/padrino-gen/generators/components/orms/datamapper_gen.rb +16 -12
- data/lib/padrino-gen/generators/components/orms/mongomapper_gen.rb +6 -20
- data/lib/padrino-gen/generators/components/orms/sequel_gen.rb +6 -9
- data/lib/padrino-gen/generators/components/renderers/haml_gen.rb +1 -2
- data/lib/padrino-gen/generators/components/scripts/jquery_gen.rb +2 -2
- data/lib/padrino-gen/generators/components/scripts/prototype_gen.rb +3 -3
- data/lib/padrino-gen/generators/components/scripts/rightjs_gen.rb +2 -4
- data/lib/padrino-gen/generators/components/tests/bacon_test_gen.rb +3 -3
- data/lib/padrino-gen/generators/components/tests/riot_test_gen.rb +3 -3
- data/lib/padrino-gen/generators/components/tests/rspec_test_gen.rb +3 -3
- data/lib/padrino-gen/generators/components/tests/shoulda_test_gen.rb +3 -3
- data/lib/padrino-gen/generators/components/tests/testspec_test_gen.rb +3 -3
- data/lib/padrino-gen/generators/controller.rb +9 -8
- data/lib/padrino-gen/generators/mailer.rb +6 -5
- data/lib/padrino-gen/generators/migration.rb +5 -5
- data/lib/padrino-gen/generators/model.rb +5 -5
- data/lib/padrino-gen/generators.rb +12 -8
- data/lib/padrino-gen/padrino-tasks/activerecord.rb +33 -32
- data/lib/padrino-gen.rb +3 -0
- data/padrino-gen.gemspec +5 -5
- data/test/helper.rb +1 -1
- data/test/test_app_generator.rb +38 -39
- data/test/test_controller_generator.rb +11 -11
- data/test/test_mailer_generator.rb +4 -4
- data/test/test_migration_generator.rb +21 -21
- data/test/test_model_generator.rb +29 -31
- metadata +3 -3
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.7
|
data/bin/padrino-gen
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
%w[rubygems thor].each { |gem| require gem }
|
3
|
-
|
3
|
+
$:.unshift File.dirname(__FILE__) + "/../lib"
|
4
4
|
|
5
5
|
# We try to load the vendored padrino-core if exist
|
6
6
|
if File.exist?(File.dirname(__FILE__) + "/../../padrino-core/lib")
|
7
|
-
|
7
|
+
$:.unshift File.dirname(__FILE__) + "/../../padrino-core/lib"
|
8
8
|
end
|
9
9
|
|
10
10
|
require 'padrino-gen'
|
@@ -15,16 +15,35 @@ module Padrino
|
|
15
15
|
self.class.send(:include, generator_module_for(choice, component))
|
16
16
|
send("setup_#{component}") if respond_to?("setup_#{component}")
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
|
+
# Returns the related module for a given component and option
|
20
|
+
# generator_module_for('rr', :mock)
|
21
|
+
def generator_module_for(choice, component)
|
22
|
+
"Padrino::Generators::Components::#{component.to_s.capitalize.pluralize}::#{choice.to_s.capitalize}Gen".constantize
|
23
|
+
end
|
24
|
+
|
19
25
|
# Includes the component module for the given component and choice
|
20
26
|
# Determines the choice using .components file
|
21
27
|
# include_component_module_for(:mock)
|
22
28
|
# include_component_module_for(:mock, 'rr')
|
23
|
-
def include_component_module_for(component,
|
24
|
-
choice = fetch_component_choice(component
|
29
|
+
def include_component_module_for(component, choice=nil)
|
30
|
+
choice = fetch_component_choice(component) unless choice
|
25
31
|
self.class.send(:include, generator_module_for(choice, component))
|
26
32
|
end
|
27
33
|
|
34
|
+
|
35
|
+
# Returns the component choice stored within the .component file of an application
|
36
|
+
# fetch_component_choice(:mock)
|
37
|
+
def fetch_component_choice(component)
|
38
|
+
retrieve_component_config(destination_root('.components'))[component]
|
39
|
+
end
|
40
|
+
|
41
|
+
# Loads the component config back into a hash
|
42
|
+
# i.e retrieve_component_config(...) => { :mock => 'rr', :test => 'riot', ... }
|
43
|
+
def retrieve_component_config(target)
|
44
|
+
YAML.load_file(target)
|
45
|
+
end
|
46
|
+
|
28
47
|
# Prompts the user if necessary until a valid choice is returned for the component
|
29
48
|
# resolve_valid_choice(:mock) => 'rr'
|
30
49
|
def resolve_valid_choice(component)
|
@@ -43,12 +62,6 @@ module Padrino
|
|
43
62
|
self.class.available_choices_for(component).include? choice.to_sym
|
44
63
|
end
|
45
64
|
|
46
|
-
# Returns the related module for a given component and option
|
47
|
-
# generator_module_for('rr', :mock)
|
48
|
-
def generator_module_for(choice, component)
|
49
|
-
"Padrino::Generators::Components::#{component.to_s.capitalize.pluralize}::#{choice.to_s.capitalize}Gen".constantize
|
50
|
-
end
|
51
|
-
|
52
65
|
# Creates a component_config file at the destination containing all component options
|
53
66
|
# Content is a yamlized version of a hash containing component name mapping to chosen value
|
54
67
|
def store_component_config(destination)
|
@@ -59,38 +72,45 @@ module Padrino
|
|
59
72
|
end
|
60
73
|
end
|
61
74
|
|
62
|
-
#
|
63
|
-
|
64
|
-
|
65
|
-
YAML.load_file(target)
|
66
|
-
end
|
67
|
-
|
68
|
-
# Returns the component choice stored within the .component file of an application
|
69
|
-
# fetch_component_choice(:mock)
|
70
|
-
def fetch_component_choice(component, root=nil)
|
71
|
-
comp_path = root ? File.join(root, '.components') : '.components'
|
72
|
-
retrieve_component_config(comp_path)[component]
|
75
|
+
# Returns the root for this thor class (also aliased as destination root).
|
76
|
+
def destination_root(*paths)
|
77
|
+
File.join(@destination_stack.last, paths)
|
73
78
|
end
|
74
|
-
|
79
|
+
|
75
80
|
# Returns true if inside a Padrino application
|
76
|
-
def in_app_root?
|
77
|
-
|
81
|
+
def in_app_root?
|
82
|
+
File.exist?(destination_root('config/boot.rb'))
|
78
83
|
end
|
79
|
-
|
84
|
+
|
80
85
|
# Returns the app_name for the application at root
|
81
86
|
def fetch_app_name(root=nil)
|
82
87
|
app_path = root ? File.join(root, 'app/app.rb') : 'app/app.rb'
|
83
88
|
@app_name ||= File.read(app_path).scan(/class\s(.*?)\s</).flatten[0]
|
84
89
|
end
|
85
|
-
|
86
|
-
#
|
87
|
-
#
|
88
|
-
|
89
|
-
|
90
|
-
|
90
|
+
|
91
|
+
# Adds all the specified gems into the Gemfile for bundler
|
92
|
+
# require_dependencies 'active_record'
|
93
|
+
# require_dependencies 'mocha', 'bacon', :only => :testing
|
94
|
+
def require_dependencies(*gem_names)
|
95
|
+
options = gem_names.extract_options!
|
96
|
+
gem_names.reverse.each { |lib| insert_into_gemfile(lib, options) }
|
97
|
+
end
|
98
|
+
|
99
|
+
# Inserts a required gem into the Gemfile to add the bundler dependency
|
100
|
+
# insert_into_gemfile(name)
|
101
|
+
# insert_into_gemfile(name, :only => :testing, :require_as => 'foo')
|
102
|
+
def insert_into_gemfile(name, options={})
|
103
|
+
after_pattern = options[:only] ? "#{options[:only].to_s.capitalize} requirements\n" : "Component requirements\n"
|
104
|
+
gem_options = options.slice(:only, :require_as).collect { |k, v| "#{k.inspect} => #{v.inspect}" }.join(", ")
|
105
|
+
include_text = "gem '#{name}'" << (gem_options.present? ? ", #{gem_options}" : "") << "\n"
|
106
|
+
options.merge!(:content => include_text, :after => after_pattern)
|
107
|
+
if behavior == :revoke || !File.read(destination_root('Gemfile')).include?(options[:content])
|
108
|
+
inject_into_file('Gemfile', options[:content], :after => options[:after])
|
109
|
+
end
|
91
110
|
end
|
92
111
|
|
93
112
|
module ClassMethods
|
113
|
+
|
94
114
|
# Defines a class option to allow a component to be chosen and add to component type list
|
95
115
|
# Also builds the available_choices hash of which component choices are supported
|
96
116
|
# component_option :test, "Testing framework", :aliases => '-t', :choices => [:bacon, :shoulda]
|
@@ -9,7 +9,7 @@ module Padrino
|
|
9
9
|
|
10
10
|
# Define the source template root
|
11
11
|
def self.source_root; File.dirname(__FILE__); end
|
12
|
-
def self.banner; "padrino-gen project [name] [
|
12
|
+
def self.banner; "padrino-gen project [name] [options]"; end
|
13
13
|
|
14
14
|
# Include related modules
|
15
15
|
include Thor::Actions
|
@@ -19,15 +19,16 @@ module Padrino
|
|
19
19
|
desc "Description:\n\n\tpadrino-gen project generates a new Padrino project"
|
20
20
|
|
21
21
|
argument :name, :desc => "The name of your padrino project"
|
22
|
-
|
22
|
+
|
23
23
|
class_option :run_bundler, :aliases => '-b', :default => false, :type => :boolean
|
24
|
+
class_option :root, :desc => "The root destination", :aliases => '-r', :default => ".", :type => :string
|
24
25
|
|
25
26
|
# Definitions for the available customizable components
|
26
27
|
component_option :orm, "database engine", :aliases => '-d', :choices => [:datamapper, :mongomapper, :activerecord, :sequel, :couchrest]
|
27
28
|
component_option :test, "testing framework", :aliases => '-t', :choices => [:bacon, :shoulda, :rspec, :testspec, :riot]
|
28
29
|
component_option :mock, "mocking library", :aliases => '-m', :choices => [:mocha, :rr]
|
29
30
|
component_option :script, "javascript library", :aliases => '-s', :choices => [:jquery, :prototype, :rightjs]
|
30
|
-
component_option :renderer, "template engine", :aliases => '-
|
31
|
+
component_option :renderer, "template engine", :aliases => '-e', :choices => [:erb, :haml]
|
31
32
|
|
32
33
|
# Show help if no argv given
|
33
34
|
def self.start(given_args=ARGV, config={})
|
@@ -37,9 +38,9 @@ module Padrino
|
|
37
38
|
|
38
39
|
# Copies over the Padrino base application App
|
39
40
|
def setup_app
|
40
|
-
|
41
|
-
|
42
|
-
directory("app/",
|
41
|
+
@class_name = name.underscore.classify
|
42
|
+
self.destination_root = File.join(options[:root], name)
|
43
|
+
directory("app/", destination_root)
|
43
44
|
store_component_config('.components')
|
44
45
|
end
|
45
46
|
|
@@ -3,46 +3,31 @@ module Padrino
|
|
3
3
|
module Components
|
4
4
|
module Actions
|
5
5
|
BASE_TEST_HELPER = (<<-TEST).gsub(/^ {8}/, '')
|
6
|
-
|
6
|
+
PADRINO_ENV = 'test' unless defined?(PADRINO_ENV)
|
7
7
|
require File.dirname(__FILE__) + "/../config/boot"
|
8
|
-
Bundler.require_env(:testing)
|
9
8
|
TEST
|
10
9
|
|
11
|
-
# Adds all the specified gems into the Gemfile for bundler
|
12
|
-
# require_dependencies 'active_record'
|
13
|
-
# require_dependencies 'mocha', 'bacon', :only => :testing
|
14
|
-
def require_dependencies(*gem_names)
|
15
|
-
options = gem_names.extract_options!
|
16
|
-
gem_names.reverse.each { |lib| insert_into_gemfile(lib, options) }
|
17
|
-
end
|
18
|
-
|
19
|
-
# Inserts a required gem into the Gemfile to add the bundler dependency
|
20
|
-
# insert_into_gemfile(name)
|
21
|
-
# insert_into_gemfile(name, :only => :testing, :require_as => 'foo')
|
22
|
-
def insert_into_gemfile(name, options={})
|
23
|
-
after_pattern = options[:only] ? "#{options[:only].to_s.capitalize} requirements\n" : "Component requirements\n"
|
24
|
-
gem_options = options.slice(:only, :require_as).collect { |k, v| "#{k.inspect} => #{v.inspect}" }.join(", ")
|
25
|
-
include_text = "gem '#{name}'" << (gem_options.present? ? ", #{gem_options}" : "") << "\n"
|
26
|
-
options.merge!(:content => include_text, :after => after_pattern)
|
27
|
-
inject_into_file('Gemfile', options[:content], :after => options[:after])
|
28
|
-
end
|
29
|
-
|
30
10
|
# For orm database components
|
31
11
|
# Generates the model migration file created when generating a new model
|
32
12
|
# options => { :base => "....text...", :up => "..text...",
|
33
13
|
# :down => "..text...", column_format => "t.column :#{field}, :#{kind}" }
|
34
14
|
def output_model_migration(filename, name, columns, options={})
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
15
|
+
if behavior == :revoke
|
16
|
+
remove_migration(name)
|
17
|
+
else
|
18
|
+
return if migration_exist?(filename)
|
19
|
+
model_name = name.to_s.pluralize
|
20
|
+
field_tuples = fields.collect { |value| value.split(":") }
|
21
|
+
field_tuples.collect! { |field, kind| kind =~ /datetime/i ? [field, 'DateTime'] : [field, kind] } # fix datetime
|
22
|
+
column_declarations = field_tuples.collect(&options[:column_format]).join("\n ")
|
23
|
+
contents = options[:base].dup.gsub(/\s{4}!UP!\n/m, options[:up]).gsub(/!DOWN!\n/m, options[:down])
|
24
|
+
contents = contents.gsub(/!NAME!/, model_name.camelize).gsub(/!TABLE!/, model_name.underscore)
|
25
|
+
contents = contents.gsub(/!FILENAME!/, filename.underscore).gsub(/!FILECLASS!/, filename.camelize)
|
26
|
+
current_migration_number = return_last_migration_number
|
27
|
+
contents = contents.gsub(/!FIELDS!/, column_declarations).gsub(/!VERSION!/, (current_migration_number + 1).to_s)
|
28
|
+
migration_filename = "#{format("%03d", current_migration_number+1)}_#{filename.underscore}.rb"
|
29
|
+
create_file(destination_root('db/migrate/', migration_filename), contents, :skip => true)
|
30
|
+
end
|
46
31
|
end
|
47
32
|
|
48
33
|
# For orm database components
|
@@ -51,33 +36,42 @@ module Padrino
|
|
51
36
|
# :add => lambda { |field, kind| "add_column :#{table_name}, :#{field}, :#{kind}" },
|
52
37
|
# :remove => lambda { |field, kind| "remove_column :#{table_name}, :#{field}" }
|
53
38
|
def output_migration_file(filename, name, columns, options={})
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
39
|
+
if behavior == :revoke
|
40
|
+
remove_migration(name)
|
41
|
+
else
|
42
|
+
return if migration_exist?(filename)
|
43
|
+
change_format = options[:change_format]
|
44
|
+
migration_scan = filename.camelize.scan(/(Add|Remove)(?:.*?)(?:To|From)(.*?)$/).flatten
|
45
|
+
direction, table_name = migration_scan[0].downcase, migration_scan[1].downcase.pluralize if migration_scan.any?
|
46
|
+
tuples = direction ? columns.collect { |value| value.split(":") } : []
|
47
|
+
tuples.collect! { |field, kind| kind =~ /datetime/i ? [field, 'DateTime'] : [field, kind] } # fix datetime
|
48
|
+
add_columns = tuples.collect(&options[:add]).join("\n ")
|
49
|
+
remove_columns = tuples.collect(&options[:remove]).join("\n ")
|
50
|
+
forward_text = change_format.gsub(/!TABLE!/, table_name).gsub(/!COLUMNS!/, add_columns) if tuples.any?
|
51
|
+
back_text = change_format.gsub(/!TABLE!/, table_name).gsub(/!COLUMNS!/, remove_columns) if tuples.any?
|
52
|
+
contents = options[:base].dup.gsub(/\s{4}!UP!\n/m, (direction == 'add' ? forward_text.to_s : back_text.to_s))
|
53
|
+
contents.gsub!(/\s{4}!DOWN!\n/m, (direction == 'add' ? back_text.to_s : forward_text.to_s))
|
54
|
+
contents = contents.gsub(/!FILENAME!/, filename.underscore).gsub(/!FILECLASS!/, filename.camelize)
|
55
|
+
current_migration_number = return_last_migration_number
|
56
|
+
contents.gsub!(/!VERSION!/, (current_migration_number + 1).to_s)
|
57
|
+
migration_filename = "#{format("%03d", current_migration_number+1)}_#{filename.underscore}.rb"
|
58
|
+
create_file(destination_root('db/migrate/', migration_filename), contents, :skip => true)
|
59
|
+
end
|
71
60
|
end
|
72
61
|
|
73
62
|
# For migration files
|
74
63
|
# returns the number of the latest(most current) migration file
|
75
64
|
def return_last_migration_number
|
76
|
-
Dir[
|
65
|
+
Dir[destination_root('db/migrate/*.rb')].map do |f|
|
77
66
|
File.basename(f).match(/^(\d+)/)[0].to_i
|
78
67
|
end.max.to_i || 0
|
79
68
|
end
|
80
69
|
|
70
|
+
# Return true if the migration already exist
|
71
|
+
def migration_exist?(filename)
|
72
|
+
Dir[destination_root("db/migrate/*_#{filename.underscore}.rb")].size > 0
|
73
|
+
end
|
74
|
+
|
81
75
|
# For model destroy option
|
82
76
|
# removes the initial migration file of model
|
83
77
|
def remove_model_migration(name)
|
@@ -87,10 +81,15 @@ module Padrino
|
|
87
81
|
# For the removal of migration files
|
88
82
|
# removes the migration file based on the migration name
|
89
83
|
def remove_migration(name)
|
90
|
-
migration_path = Dir[
|
91
|
-
File.basename(f)
|
92
|
-
end
|
93
|
-
|
84
|
+
migration_path = Dir[destination_root('db/migrate/*.rb')].find do |f|
|
85
|
+
File.basename(f) =~ /#{name.to_s.underscore}/
|
86
|
+
end
|
87
|
+
return unless migration_path
|
88
|
+
if behavior == :revoke # we need to reverse the operation for revoke
|
89
|
+
create_file migration_path
|
90
|
+
else
|
91
|
+
remove_file migration_path
|
92
|
+
end
|
94
93
|
end
|
95
94
|
|
96
95
|
# For testing components
|
@@ -109,8 +108,8 @@ module Padrino
|
|
109
108
|
# => inject_into_file("test/test_config.rb", " include Mocha::API\n", :after => /class.*?\n/)
|
110
109
|
def insert_mocking_include(library_name, options={})
|
111
110
|
options.reverse_merge!(:indent => 2, :after => /class.*?\n/, :path => "test/test_config.rb")
|
112
|
-
return unless File.exist?(
|
113
|
-
include_text = indent_spaces(
|
111
|
+
return unless File.exist?(destination_root(options[:path]))
|
112
|
+
include_text = indent_spaces(2) + "include #{library_name}\n"
|
114
113
|
inject_into_file(options[:path], include_text, :after => options[:after])
|
115
114
|
end
|
116
115
|
|
@@ -6,31 +6,50 @@ module Padrino
|
|
6
6
|
module ActiverecordGen
|
7
7
|
|
8
8
|
AR = (<<-AR).gsub(/^ {10}/, '')
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
9
|
+
##
|
10
|
+
# You can use other adapters like:
|
11
|
+
#
|
12
|
+
# ActiveRecord::Base.configurations[:development] = {
|
13
|
+
# :adapter => "mysql",
|
14
|
+
# :host => "localhost",
|
15
|
+
# :username => "myuser",
|
16
|
+
# :password => "mypass",
|
17
|
+
# :database => "somedatabase"
|
18
|
+
# )
|
19
|
+
#
|
20
|
+
ActiveRecord::Base.configurations[:development] = {
|
21
|
+
:adapter => 'sqlite3',
|
22
|
+
:database => Padrino.root('db', "development.db")
|
23
|
+
}
|
24
|
+
|
25
|
+
ActiveRecord::Base.configurations[:production] = {
|
26
|
+
:adapter => 'sqlite3',
|
27
|
+
:database => Padrino.root('db', "production.db")
|
28
|
+
}
|
29
|
+
|
30
|
+
ActiveRecord::Base.configurations[:test] = {
|
31
|
+
:adapter => 'sqlite3',
|
32
|
+
:database => Padrino.root('db', "test.db")
|
33
|
+
}
|
34
|
+
|
35
|
+
# Setup our logger
|
36
|
+
ActiveRecord::Base.logger = logger
|
37
|
+
|
38
|
+
# Include Active Record class name as root for JSON serialized output.
|
39
|
+
ActiveRecord::Base.include_root_in_json = true
|
40
|
+
|
41
|
+
# Store the full class name (including module namespace) in STI type column.
|
42
|
+
ActiveRecord::Base.store_full_sti_class = true
|
43
|
+
|
44
|
+
# Use ISO 8601 format for JSON serialized times and dates.
|
45
|
+
ActiveSupport.use_standard_json_time_format = true
|
46
|
+
|
47
|
+
# Don't escape HTML entities in JSON, leave that for the #json_escape helper.
|
48
|
+
# if you're including raw json in an HTML page.
|
49
|
+
ActiveSupport.escape_html_entities_in_json = false
|
50
|
+
|
51
|
+
# Now we can estabilish connection with our db
|
52
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Padrino.env])
|
34
53
|
AR
|
35
54
|
|
36
55
|
RAKE = (<<-RAKE).gsub(/^ {10}/, '')
|
@@ -51,7 +70,7 @@ module Padrino
|
|
51
70
|
|
52
71
|
|
53
72
|
def setup_orm
|
54
|
-
require_dependencies '
|
73
|
+
require_dependencies 'active_record'
|
55
74
|
create_file("config/database.rb", AR)
|
56
75
|
create_file("Rakefile", RAKE.gsub(/APP_CLASS/, @class_name))
|
57
76
|
empty_directory('app/models')
|
@@ -64,7 +83,7 @@ module Padrino
|
|
64
83
|
MODEL
|
65
84
|
|
66
85
|
def create_model_file(name, fields)
|
67
|
-
model_path =
|
86
|
+
model_path = destination_root('app/models/', "#{name.to_s.underscore}.rb")
|
68
87
|
model_contents = AR_MODEL.gsub(/!NAME!/, name.to_s.downcase.camelize)
|
69
88
|
create_file(model_path, model_contents,:skip => true)
|
70
89
|
end
|
@@ -83,8 +102,6 @@ module Padrino
|
|
83
102
|
|
84
103
|
AR_MODEL_UP_MG = (<<-MIGRATION).gsub(/^ {6}/, '')
|
85
104
|
create_table :!TABLE! do |t|
|
86
|
-
# t.column <name>, <type>
|
87
|
-
# t.column :age, :integer
|
88
105
|
!FIELDS!
|
89
106
|
end
|
90
107
|
MIGRATION
|
@@ -96,7 +113,7 @@ module Padrino
|
|
96
113
|
def create_model_migration(migration_name, name, columns)
|
97
114
|
output_model_migration(migration_name, name, columns,
|
98
115
|
:base => AR_MIGRATION,
|
99
|
-
:column_format => lambda { |field, kind| "t
|
116
|
+
:column_format => lambda { |field, kind| "t.#{kind.underscore.gsub(/_/, '')} :#{field}" },
|
100
117
|
:up => AR_MODEL_UP_MG, :down => AR_MODEL_DOWN_MG)
|
101
118
|
end
|
102
119
|
|
@@ -109,7 +126,7 @@ module Padrino
|
|
109
126
|
def create_migration_file(migration_name, name, columns)
|
110
127
|
output_migration_file(migration_name, name, columns,
|
111
128
|
:base => AR_MIGRATION, :change_format => AR_CHANGE_MG,
|
112
|
-
:add => lambda { |field, kind| "t
|
129
|
+
:add => lambda { |field, kind| "t.#{kind.underscore.gsub(/_/, '')} :#{field}" },
|
113
130
|
:remove => lambda { |field, kind| "t.remove :#{field}" })
|
114
131
|
end
|
115
132
|
|
@@ -6,13 +6,12 @@ module Padrino
|
|
6
6
|
module CouchrestGen
|
7
7
|
|
8
8
|
COUCHREST = (<<-COUCHREST).gsub(/^ {10}/, '')
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
app.configure(:test) { set :couchdb, CouchRest.database!("your_test_db_here") }
|
14
|
-
end
|
9
|
+
case Padrino.env
|
10
|
+
when :development then COUCHDB = "your_db_name_development"
|
11
|
+
when :production then COUCHDB = "your_db_name_production"
|
12
|
+
when :test then COUCHDB = "your_db_name_test"
|
15
13
|
end
|
14
|
+
CouchRest.database!(COUCHDB)
|
16
15
|
COUCHREST
|
17
16
|
|
18
17
|
def setup_orm
|
@@ -25,7 +24,7 @@ module Padrino
|
|
25
24
|
class !NAME! < CouchRest::ExtendedDocument
|
26
25
|
include CouchRest::Validation
|
27
26
|
|
28
|
-
use_database
|
27
|
+
use_database COUCHDB
|
29
28
|
|
30
29
|
unique_id :id
|
31
30
|
# property <name>
|
@@ -34,8 +33,7 @@ module Padrino
|
|
34
33
|
MODEL
|
35
34
|
|
36
35
|
def create_model_file(name, fields)
|
37
|
-
model_path =
|
38
|
-
return false if File.exist?(model_path)
|
36
|
+
model_path = destination_root('app/models/', "#{name.to_s.underscore}.rb")
|
39
37
|
field_tuples = fields.collect { |value| value.split(":") }
|
40
38
|
column_declarations = field_tuples.collect { |field, kind| "property :#{field}" }.join("\n ")
|
41
39
|
model_contents = CR_MODEL.gsub(/!NAME!/, name.to_s.camelize)
|
@@ -5,20 +5,25 @@ module Padrino
|
|
5
5
|
|
6
6
|
module DatamapperGen
|
7
7
|
DM = (<<-DM).gsub(/^ {10}/, '')
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
##
|
9
|
+
# A MySQL connection:
|
10
|
+
# DataMapper.setup(:default, 'mysql://user:password@localhost/the_database_name')
|
11
|
+
#
|
12
|
+
# # A Postgres connection:
|
13
|
+
# DataMapper.setup(:default, 'postgres://user:password@localhost/the_database_name')
|
14
|
+
#
|
15
|
+
|
16
|
+
DataMapper.logger = logger
|
17
|
+
|
18
|
+
case Padrino.env
|
19
|
+
when :development then DataMapper.setup(:default, "sqlite3://" + Padrino.root('db', "development.db"))
|
20
|
+
when :production then DataMapper.setup(:default, "sqlite3://" + Padrino.root('db', "production.db"))
|
21
|
+
when :test then DataMapper.setup(:default, "sqlite3://" + Padrino.root('db', "test.db"))
|
17
22
|
end
|
18
23
|
DM
|
19
24
|
|
20
25
|
def setup_orm
|
21
|
-
require_dependencies 'dm-core', 'dm-validations'
|
26
|
+
require_dependencies 'dm-core', 'dm-validations', 'dm-aggregates', 'dm-timestamps'
|
22
27
|
create_file("config/database.rb", DM)
|
23
28
|
empty_directory('app/models')
|
24
29
|
end
|
@@ -34,8 +39,7 @@ module Padrino
|
|
34
39
|
MODEL
|
35
40
|
|
36
41
|
def create_model_file(name, fields)
|
37
|
-
model_path =
|
38
|
-
return false if File.exist?(model_path)
|
42
|
+
model_path = destination_root('app/models/', "#{name.to_s.underscore}.rb")
|
39
43
|
model_contents = DM_MODEL.gsub(/!NAME!/, name.to_s.downcase.camelize)
|
40
44
|
field_tuples = fields.collect { |value| value.split(":") }
|
41
45
|
field_tuples.collect! { |field, kind| kind =~ /datetime/i ? [field, 'DateTime'] : [field, kind] } # fix datetime
|
@@ -6,25 +6,12 @@ module Padrino
|
|
6
6
|
module MongomapperGen
|
7
7
|
|
8
8
|
MONGO = (<<-MONGO).gsub(/^ {10}/, '')
|
9
|
-
|
9
|
+
MongoMapper.connection = Mongo::Connection.new('localhost', nil, :logger => logger)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
MongoMapper.database = 'your_dev_db_here'
|
16
|
-
end
|
17
|
-
|
18
|
-
app.configure :production do
|
19
|
-
MongoMapper.connection = Mongo::Connection.new('localhost', nil, :logger => logger)
|
20
|
-
MongoMapper.database = 'your_production_db_here'
|
21
|
-
end
|
22
|
-
|
23
|
-
app.configure :test do
|
24
|
-
MongoMapper.connection = Mongo::Connection.new('localhost', nil, :logger => logger)
|
25
|
-
MongoMapper.database = 'your_test_db_here'
|
26
|
-
end
|
27
|
-
end
|
11
|
+
case Padrino.env
|
12
|
+
when :development then MongoMapper.database = 'your_db_development'
|
13
|
+
when :production then MongoMapper.database = 'your_db_production'
|
14
|
+
when :test then MongoMapper.database = 'your_db_test'
|
28
15
|
end
|
29
16
|
MONGO
|
30
17
|
|
@@ -44,8 +31,7 @@ module Padrino
|
|
44
31
|
MODEL
|
45
32
|
|
46
33
|
def create_model_file(name, fields)
|
47
|
-
model_path =
|
48
|
-
return false if File.exist?(model_path)
|
34
|
+
model_path = destination_root('app/models/', "#{name.to_s.underscore}.rb")
|
49
35
|
field_tuples = fields.collect { |value| value.split(":") }
|
50
36
|
column_declarations = field_tuples.collect { |field, kind| "key :#{field}, #{kind.camelize}" }.join("\n ")
|
51
37
|
model_contents = MM_MODEL.gsub(/!NAME!/, name.to_s.camelize)
|