dm-mapping 0.7.0

by Lin Jen-Shin (a.k.a. godfat-真常)

godfat (XD) godfat.org

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