dm-mapping 0.7.0
by Lin Jen-Shin (a.k.a. godfat-真常)
godfat (XD) godfat.org
LINKS:
DESCRIPTION:
DataMapper plugin that helps you manipulate an existing database.
It creates mappings between existing columns and model's properties.
SYNOPSIS:
require 'dm-mapping' # this would require 'dm-core'
dm = DataMapper.setup :default, 'sqlite3:db/development.sqlite3'
class User
include DataMapper::Resource
# mapping all, returns an array of properties indicating fields it mapped
mapping /.*/ # e.g. => [#<Property:#<Class:0x18f89b8>:id>,
# #<Property:#<Class:0x18f89b8>:title>,
# #<Property:#<Class:0x18f89b8>:body>,
# #<Property:#<Class:0x18f89b8>:user_id>]
# mapping all (with no argument at all)
mapping
# mapping for field name ended with _at, and started with salt_
mapping /_at$/, /^salt_/
# mapping id and email
mapping :id, :email
# mapping all fields with type String, and id
mapping String, :id
# mapping login, and all fields with type Integer
mapping :login, Integer
end
# there's no guarantee of the order in storages array
dm.storages
# => ['users']
# there's no guarantee of the order in fields array
User.fields
# => [[:created_at, DateTime, {:nullable => true}],
[:email, String, {:nullable => true, :size => 255,
:default => '[email protected]'}],
[:id, Integer, {:nullable => false, :serial => true,
:key => true}],
[:salt_first, String, {:nullable => true, :size => 50}],
[:salt_second, String, {:nullable => true, :size => 50}]]
dm.fields('users').sort_by{ |field| field.first.to_s } ==
User.fields.sort_by{ |field| field.first.to_s }
# => true
dm.storages_and_fields
# => {'users' => [[:id, Integer, {:nullable => false,
:serial => true,
:key => true}],
[:email, String, {:nullable => true,
:default => '[email protected]'}],
[:created_at, DateTime, {:nullable => true}],
[:salt_first, String, {:nullable => true, :size => 50}],
[:salt_second, String, {:nullable => true, :size => 50}]]}
# there's no guarantee of the order in returned array
dm.auto_genclass!
# => [DataMapper::Mapping::User,
DataMapper::Mapping::SchemaInfo,
DataMapper::Mapping::Session]
# you can change the scope of generated models:
dm.auto_genclass! :scope => Object
# => [User, SchemaInfo, Session]
# you can generate classes for tables you specified only:
dm.auto_genclass! :scope => Object, :storages => /^phpbb_/
# => [PhpbbUser, PhpbbPost, PhpbbConfig]
# you can generate classes with String too:
dm.auto_genclass! :storages => ['users', 'config'], :scope => Object
# => [User, Config]
# you can generate a class only:
dm.auto_genclass! :storages => 'users'
# => [DataMapper::Mapping::User]
REQUIREMENTS:
-
dm-core 0.9.3 or later
-
at least one do_* adapter
INSTALL:
> sudo gem install dm-mapping
LICENSE:
Apache License 2.0
Copyright (c) 2008, Lin Jen-Shin (a.k.a. godfat