Module: Summoner

Defined in:
lib/summoner.rb,
lib/summoner/beast.rb,
lib/summoner/version.rb,
lib/summoner/attributes.rb

Defined Under Namespace

Modules: ClassMethods Classes: Attributes, Beast

Constant Summary collapse

VERSION =
"0.1.4"
@@beasts =
{}

Class Method Summary collapse

Class Method Details

.prepare(name, options = {}) {|| ... } ⇒ Object

Yields:

  • ()

Raises:



28
29
30
31
32
33
# File 'lib/summoner.rb', line 28

def self.prepare(name, options = {}, &block)
  key = name.to_sym
  raise DefinitionDuplicatedError if @@beasts.has_key? key
  @@beasts[key] = Beast.new(options)
  yield @@beasts[key]
end

.resetObject



35
36
37
# File 'lib/summoner.rb', line 35

def self.reset
  @@beasts.clear
end

.save_object(obj) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/summoner.rb', line 39

def self.save_object(obj)
  if defined? ActiveRecord and ActiveRecord::VERSION::MAJOR >= 3
    obj.save(:validate => false)
  else
    obj.save(false)
  end
end

.summon(name, attrs = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/summoner.rb', line 9

def self.summon(name, attrs = {})
  raise UnpreparedBeastError unless @@beasts.has_key? name

  klass = @@beasts[name].options.has_key?(:class) ? @@beasts[name].options[:class] : eval(name.to_s.capitalize)

  monster = klass.create(@@beasts[name].attributes.merge(attrs.symbolize_keys))

  if block_given?
    bicho = Beast.new     
    yield bicho
    monster.update_attributes(monster.attributes.merge(bicho.attributes))
  end
  
  #monster.save(:validate => false)
  save_object(monster)
  monster.reload
  monster
end