padrino-gen/lib/padrino-gen/generators/components/orms/mongoid.rb
MONGOID = (<<-MONGO) unless defined?(MONGOID)
# Connection.new takes host and port.
host = 'localhost'
port = 27017
database_name = case Padrino.env
when :development then '!NAME!_development'
when :production then '!NAME!_production'
when :test then '!NAME!_test'
end
# Use MONGO_URI if it's set as an environmental variable.
database_settings = if ENV['MONGO_URI']
{default: {uri: ENV['MONGO_URI'] }}
else
{default: {hosts: ["#\{host\}:#\{port\}"], database: database_name}}
end
case Mongoid::VERSION
when /^(3|4)/
Mongoid::Config.sessions = database_settings
else
Mongoid::Config.load_configuration :clients => database_settings
end
# If you want to use a YML file for config, use this instead:
#
# Mongoid.load!(File.join(Padrino.root, 'config', 'database.yml'), Padrino.env)
#
# And add a config/database.yml file like this:
# development:
# clients: #Replace clients with sessions to work with Mongoid version 3.x or 4.x
# default:
# database: !NAME!_development
# hosts:
# - localhost:27017
#
# production:
# clients: #Replace clients with sessions to work with Mongoid version 3.x or 4.x
# default:
# database: !NAME!_production
# hosts:
# - localhost:27017
#
# test:
# clients: #Replace clients with sessions to work with Mongoid version 3.x or 4.x
# default:
# database: !NAME!_test
# hosts:
# - localhost:27017
#
#
# More installation and setup notes are on https://docs.mongodb.org/ecosystem/tutorial/mongoid-installation/
MONGO
def setup_orm
require_dependencies 'mongoid', :version => '>= 3.0.0'
create_file('config/database.rb', MONGOID.gsub(/!NAME!/, @project_name.underscore))
end
MONGOID_MODEL = (<<-MODEL) unless defined?(MONGOID_MODEL)
class !NAME!
include Mongoid::Document
include Mongoid::Timestamps # adds created_at and updated_at fields
# field <name>, :type => <type>, :default => <value>
!FIELDS!
# You can define indexes on documents using the index macro:
# index :field <, :unique => true>
# You can create a composite key in mongoid to replace the default id using the key macro:
# key :field <, :another_field, :one_more ....>
end
MODEL
# options => { :fields => ["title:string", "body:string"], :app => 'app' }
def create_model_file(name, options={})
model_path = destination_root(options[:app], 'models', "#{name.to_s.underscore}.rb")
field_tuples = options[:fields].map { |value| value.split(":") }
column_declarations = field_tuples.map { |field, kind| "field :#{field}, :type => #{kind.underscore.camelize}" }.join("\n ")
model_contents = MONGOID_MODEL.gsub(/!NAME!/, name.to_s.underscore.camelize)
model_contents.gsub!(/!FIELDS!/, column_declarations)
create_file(model_path, model_contents)
end
def create_model_migration(filename, name, fields)
# NO MIGRATION NEEDED
end
def create_migration_file(migration_name, name, columns)
# NO MIGRATION NEEDED
end