DMap
DMap is a generator for creating models with DataMapper. It’s currently under a lot of development but I, as well as others, use it for production use. DataMapper gems are not even required for this gem/tool.
“DMap a shorter way for saying, and using, DataMapper”
Installation
gem install dmapper
Usage
As of right now the only command available is new
. Here’s a basic example of DMap to explain the structure…
dmap new user id name:string email:str:required,unique str:password:required
The first, after dmap new
, is the [table]. You can create multiple tables at a time by adding a comma (,). Every argument (space
) is a separate [field]. Fields are divided into three sections by a colon (:
). The first part is the field’s [type]. The second part is the field’s name, and the last part marks additional options for that field (explained later).
Options
-b, --backup
-
Backs up the current model files (renames them to *.rb.bk)
-h, --help
-
Displays help message
-s, --silent
-
If you entered incorrect values for a validation just suppress it and continue on.
-t, --test
-
Displays what DMap would have made into a file onto the screen.
-v, --verbose
-
Will print out the model(s) after changes have been made
Examples
Using DMap is incredibly easy once you learn the basic structure of it all. Here’s a quick example…
dmap new user id username:str email:str signature:text
Which creates (user.rb file in the folder that you’re currently in)…
class User
include DataMapper::Resource
property :id, Serial
property :username, String
property :email, String
property :signature, Text
end
Let’s get a little more “complex”
dmap new user id username:str email:str:required name:str:required,unique password:str date_crtd:datetime:default=DateTime.now signature:text
Which produces…
class User
include DataMapper::Resource
property :id, Serial
property :username, String
property :email, String, :required => true
property :name, String, :required => true, :unique => true
property :password, String
property :date_crtd, DateTime, :default => proc => { DateTime.now }
property :signature, Text
end
I know, still not that impressive, let’s try something a tad more difficult…
dmap new user,user_copy id first_name,last_name:str name1:datetime:default=true,length=1..5,presence_of=title-publish20..50,length_of=1,absent,confirm=field,format=email_address,primitive,unique,accessor=private Name1:str
Which creates (along with a copy model “UserCopy” of the same exact thing)
class User
include DataMapper::Resource
property :id, Serial
property :first_name, String
property :last_name, String
property :name1, DateTime, :default => true, :length => 1..5, :unique => true, :accessor => :private
property :Name1, String
validates_format_of :name1, :as => :email_address
validates_confirmation :name1, :confirm => :field
validates_absence_of :name1
validates_length_of :name1, :equals => 1
validates_presence_of :name1, :within => 20..50, :when => [:title, :publish]
validates_primitive_type_of :name1
end
Types
Here is a list of all the types available from DataMapper, which ones we support, and custom aliases.
- DataMapper Property Type
-
DMap Command/Aliases
Boolean
-
boolean
,bool
String
-
string
,str, s
Text
-
text
,txt
Float
-
float
,f
Integer
-
integer
,int, i
Decimal
-
decimal
,dec
DateTime
-
datetime
,dt
Date
-
date
,d
Time
-
time
,t
Object
-
object
,obj
Discriminator
-
discriminator
,disc
Binary
-
binary
,blob, b
More coming soon!
Property Validators
This part belongs in the third section of the command for example:
dmap new user id name:str:<b>required,accessor=private</b>
Each validator is separated by a comma (,
) and can have a value placed within it by an equal sign (=
). The property name will look like…
property :name, String, :required => true, :accessor => :private
Property Validator List
- DataMapper’s List
-
DMap Command
required
-
required
default
-
default
key
-
key
lazy
-
lazy
accessor
-
accessor
writer
-
writer
reader
-
reader
That’s all the ones I know for now, let me know if there are more!
Validations
A list of all of the validates_*_of commands and which DMap currently supports
Note: DMap currently does not support :allow_nil parameters. This will change in the future.
- DataMapper’s List
-
DMap Command
validates_absence_of
-
absence, absent
validates_acceptance_of
-
acceptance, accept
validates_with_block
-
Unsupported at this time
validates_confirmation_of
-
confirmation, confirm
validates_format_of
-
format
validates_length_of
-
length_of
validates_with_method
-
withmethod, method
validates_numericality_of
-
Unsupported
validates_primitive_type_of
-
primitive
validates_presence_of
-
presence, present
validates_uniqueness_of
-
uniqueness
validates_within
-
within
Associations
- DataMapper Command
-
DMap Command
has 1
-
has1, hasone
has n
-
hasn
belongs_to
-
belongs_to, belongs
has_and_belongs_to_many
-
hasmany
Note: use hasn when wanting to use :through => :model and hasmany for wanting to :through => Resource
Also, conditions are not supported through this generator (suggestions on this could be implemented would be helpful).
To Do
-
Add a way to add/edit/remove columns from pre-existing tables
-
All of the misc. property types
-
Template system similar to Sinatra::Fedora’s hatrack option
-
Better documentation!
-
Migrations! (This will most likely be started after DM core team has finished the Veritas system).
-
Conditions with associations?