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 , :type => , :default => !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