Class: AntMapper::Base
Constant Summary collapse
- @@configurations =
nil
- @@database_model =
nil
- @@connection =
nil
Class Method Summary collapse
- .attributes ⇒ Object
- .base_class ⇒ Object
- .configurations ⇒ Object
-
.configure(model, config) ⇒ Object
配置Ant访问的后台数据库支撑,目前支持LightCloud/TokyoTyrant/TokyoCabinet。 参数
model
用于描述后台数据库的类型。 :TC => 表示TokyoCabinet :TT => 表示TokyoTyrant :LC => 表示LightCloud. -
.create(attributes = nil, &block) ⇒ Object
新建对象(或多个对象)并保存到数据库(假设都通过验证) 不管是否保存到数据库,都将返回对象.
- .database_model ⇒ Object
-
.destroy(key) ⇒ Object
删除主关键字与参数
key
匹配的对象,并且在删除之前执行所有的回调和过滤。. -
.find(key) ⇒ Object
通过主关键字查找对象.
- .primary_key ⇒ Object
-
.self_and_descendents_from_ant_mapper ⇒ Object
nodoc:.
-
.set_attributes(*options) ⇒ Object
定义需要持久化的属性 示例: class User < AntMapper::Base set_attributes :email,:name,:password # 表示email,name,password需要持久化存储 end.
-
.set_primary_key(*options) ⇒ Object
设置类的主关键字 对象根据设置的主关键字进行持久化存储 示例: class User < AntMapper::Base set_primary_key :email # 表示User对象以email作为主关键字 end.
Instance Method Summary collapse
-
#delete ⇒ Object
从数据库中删除对象 不像 #destroy, 这个方法不运行
before_delete
和after_delete
回调. - #destroy ⇒ Object
-
#destroyed? ⇒ Boolean
如果对象已经被删除,返回true,否则返回false。.
-
#initialize(attributes = nil) ⇒ Base
constructor
A new instance of Base.
-
#new_record? ⇒ Boolean
如果对象没有被存储,表明对象还是新记录,返回true,否则返回false.
- #object_key ⇒ Object
-
#reload ⇒ Object
从数据库中重新加载对象的属性.
-
#save ⇒ Object
:call-seq: save(perform_validation = true).
-
#save! ⇒ Object
执行
save!
时,验证总是被运行。只要有任意一个执行失败都将抛出 ActiveObject::ObjectInvalid异常。.
Constructor Details
#initialize(attributes = nil) ⇒ Base
Returns a new instance of Base.
255 256 257 258 259 |
# File 'lib/ant_mapper/base.rb', line 255 def initialize(attributes = nil) assign_attributes(attributes) result = yield self if block_given? result end |
Class Method Details
.attributes ⇒ Object
102 103 104 |
# File 'lib/ant_mapper/base.rb', line 102 def attributes read_inheritable_attribute(:attributes) end |
.base_class ⇒ Object
209 210 211 |
# File 'lib/ant_mapper/base.rb', line 209 def base_class class_of_ant_mapper_descendant(self) end |
.configurations ⇒ Object
143 144 145 |
# File 'lib/ant_mapper/base.rb', line 143 def configurations @@configurations end |
.configure(model, config) ⇒ Object
配置Ant访问的后台数据库支撑,目前支持LightCloud/TokyoTyrant/TokyoCabinet。
参数 +model+ 用于描述后台数据库的类型。
:TC => 表示TokyoCabinet
:TT => 表示TokyoTyrant
:LC => 表示LightCloud
参数 +config+ 用于接收后台数据库的配置信息。
当model指定为TokyoCabinet数据库时,config为指定的文件名,例如:
AntMapper::Base.configure :TC, File.join(File.dirname(__FILE__),'act.tch')
这里需要注意的是指定的文件名后缀符合TokyoCabinet的约定规则。更多信息请参看:http://tokyocabinet.sourceforge.net/spex-en.html#tcadbapi
当model指定为TokyoTyrant数据库时, config为指定的远程服务器地址,例如:
AntMapper::Base.configure :TT, '127.0.0.1:54321'
当model指定为LightCloud数据库时, config可以接收符合配置规则的hash:
AntMapper::Base.configure :LC, {'user'=>{'lookup_one'=>['127.0.0.1:30001','127.0.0.1:33001'],'storage_one'=>['127.0.0.1:20001','127.0.0.1:24001']}}
也可以是配置文件的文件名。
AntMapper::Base.configure :LC, File.join(File.dirname(__FILE__),'config.yml')
128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/ant_mapper/base.rb', line 128 def configure(model,config) @@configurations = config @@database_model = model case @@database_model when :TC AntMapper::Base.send :include,AntTokyoCabinet when :TT AntMapper::Base.send :include,AntTokyoTyrant when :LC AntMapper::Base.send :include,AntLightCloud else raise ConfigError,'没有指定数据库类型!' end end |
.create(attributes = nil, &block) ⇒ Object
新建对象(或多个对象)并保存到数据库(假设都通过验证) 不管是否保存到数据库,都将返回对象.
参数 attributes
可以是Hash或Hash数组.
示例
# 创建单个新对象
User.create(:first_name => 'Jamie')
# 创建多个对象
User.create([{ :first_name => 'Jamie' }, { :first_name => 'Jeremy' }])
# 创建对象,并通过块进行其它属性的赋值.
User.create(:first_name => 'Jamie') do |u|
u.is_admin = false
end
# 创建多个对象,并通过块进行其它属性的赋值,每个对象都会执行块:
User.create([{ :first_name => 'Jamie' }, { :first_name => 'Jeremy' }]) do |u|
u.is_admin = false
end
185 186 187 188 189 190 191 192 193 194 |
# File 'lib/ant_mapper/base.rb', line 185 def create(attributes = nil, &block) if attributes.is_a?(Array) attributes.collect { |attr| create(attr, &block) } else object = new(attributes) yield(object) if block_given? object.save object end end |
.database_model ⇒ Object
147 148 149 |
# File 'lib/ant_mapper/base.rb', line 147 def database_model @@database_model end |
.destroy(key) ⇒ Object
205 206 207 |
# File 'lib/ant_mapper/base.rb', line 205 def destroy(key) find(key).destroy end |
.find(key) ⇒ Object
158 159 160 161 162 |
# File 'lib/ant_mapper/base.rb', line 158 def find(key) return nil if key.blank? record = load(key) record ? instance(key,record) : nil end |
.primary_key ⇒ Object
98 99 100 |
# File 'lib/ant_mapper/base.rb', line 98 def primary_key read_inheritable_attribute(:primary_key) end |
.self_and_descendents_from_ant_mapper ⇒ Object
nodoc:
213 214 215 216 217 218 219 220 221 222 |
# File 'lib/ant_mapper/base.rb', line 213 def self_and_descendents_from_ant_mapper#nodoc: klass = self classes = [klass] while klass != klass.base_class classes << klass = klass.superclass end classes rescue [self] end |
.set_attributes(*options) ⇒ Object
定义需要持久化的属性
示例:
class User < AntMapper::Base
set_attributes :email,:name,:password # 表示email,name,password需要持久化存储
end
90 91 92 93 94 95 |
# File 'lib/ant_mapper/base.rb', line 90 def set_attributes(*) .each do |attribute| attr_accessor attribute end write_inheritable_attribute :attributes, end |
Instance Method Details
#delete ⇒ Object
从数据库中删除对象 不像 #destroy, 这个方法不运行 before_delete
和 after_delete
回调.
277 278 279 280 |
# File 'lib/ant_mapper/base.rb', line 277 def delete self.class.delete(object_key) unless new_record? @destroyed = true end |
#destroy ⇒ Object
282 283 284 |
# File 'lib/ant_mapper/base.rb', line 282 def destroy delete end |
#destroyed? ⇒ Boolean
如果对象已经被删除,返回true,否则返回false。
267 268 269 |
# File 'lib/ant_mapper/base.rb', line 267 def destroyed? @destroyed || false end |
#new_record? ⇒ Boolean
如果对象没有被存储,表明对象还是新记录,返回true,否则返回false.
262 263 264 |
# File 'lib/ant_mapper/base.rb', line 262 def new_record? @object_key ? false : true end |
#object_key ⇒ Object
271 272 273 |
# File 'lib/ant_mapper/base.rb', line 271 def object_key @object_key end |
#reload ⇒ Object
从数据库中重新加载对象的属性
287 288 289 290 291 292 293 294 295 296 297 298 |
# File 'lib/ant_mapper/base.rb', line 287 def reload #raise "Object is deleted" if destroyed? unless new_record? begin attributes = self.class.send :load, self.object_key assign_attributes(attributes) true rescue false end end end |
#save ⇒ Object
:call-seq:
save(perform_validation = true)
保存对象.
如果对象是新对象,那么在数据库中创建。否则,如果对象是数据库中已经存在的对象,那么更新数据库
如果 perform_validation
是true,将执行验证。如果验证失败,那么动作被取消,并且返回false。
save
相关联的一系列回调. 如果任何一个before_*
回调返回 false
,那么save
动作被取消并返回 false
.
310 311 312 |
# File 'lib/ant_mapper/base.rb', line 310 def save create_or_update end |
#save! ⇒ Object
执行save!
时,验证总是被运行。只要有任意一个执行失败都将抛出 ActiveObject::ObjectInvalid异常。
save
相关联的一系列回调. 如果任何一个before_*
回调返回 false
,那么save
动作被取消并返回 false
,并且抛出ActiveObject::RecordNotSaved.
321 322 323 |
# File 'lib/ant_mapper/base.rb', line 321 def save! create_or_update || raise(ObjectNotSaved) end |