class Gamifier::DSL::Site

Attributes

behaviors[R]
missions[R]
rewards[R]
source[R]
tracks[R]
units[R]

Public Class Methods

new(*args) click to toggle source
# File lib/gamifier/dsl/site.rb, line 11
def initialize(*args)
  @source = ::Gamifier::Site.new(*args)
  @behaviors = []
  @units = []
  @rewards = []
  @missions = []
  @tracks = []
end

Public Instance Methods

behavior(name, &block) click to toggle source
# File lib/gamifier/dsl/site.rb, line 24
def behavior(name, &block)
  new_behavior = engine.activity_definitions.build(:name => name)
  behaviors.push new_behavior

  DSL.eval_with_context(new_behavior, &block)
end
engine() click to toggle source
# File lib/gamifier/dsl/site.rb, line 20
def engine
  source.engine
end
method_missing(*args, &block) click to toggle source
# File lib/gamifier/dsl/site.rb, line 134
def method_missing(*args, &block)
  source.send(*args, &block)
end
mission(name, &block) click to toggle source
# File lib/gamifier/dsl/site.rb, line 45
def mission(name, &block)
  new_mission = engine.groups.build(:name => name)
  missions.push new_mission

  DSL.eval_with_context(new_mission, &block)
end
reward(name, &block) click to toggle source
# File lib/gamifier/dsl/site.rb, line 31
def reward(name, &block)
  new_reward = engine.reward_definitions.build(:name => name)
  rewards.push new_reward

  DSL.eval_with_context(new_reward, &block)
end
save() click to toggle source
Calls superclass method
# File lib/gamifier/dsl/site.rb, line 59
def save
  if super
    save_units!
    save_behaviors!
    save_rewards!
    save_missions!
    save_tracks!
  else
    raise Error, "Can't save #{self}"
  end
end
save_behaviors!() click to toggle source
# File lib/gamifier/dsl/site.rb, line 86
def save_behaviors!
  behaviors.each do |behavior|
    Gamifier.logger.info "Saving behaviors..."
    behavior.site_id = self._id
    if gbehavior = engine.send(behavior.class.path).find_by_name(behavior.name, :site => self.url)
      behavior._id = gbehavior._id
    end
    behavior.engine = engine
    behavior.save || raise(Error, "Can't save #{behavior}")
  end
end
save_missions!() click to toggle source
# File lib/gamifier/dsl/site.rb, line 110
def save_missions!
  missions.each do |mission|
    Gamifier.logger.info "Saving missions..."
    mission.site_id = self._id
    if gmission = engine.send(mission.class.path).find_by_name(mission.name, :site => self.url)
      mission._id = gmission._id
    end
    mission.engine = engine
    mission.save || raise(Error, "Can't save #{mission}")
  end
end
save_rewards!() click to toggle source
# File lib/gamifier/dsl/site.rb, line 98
def save_rewards!
  rewards.each do |reward|
    Gamifier.logger.info "Saving rewards..."
    reward.site_id = self._id
    if greward = engine.send(reward.class.path).find_by_name(reward.name, :site => self.url)
      reward._id = greward._id
    end
    reward.engine = engine
    reward.save || raise(Error, "Can't save #{reward}")
  end
end
save_tracks!() click to toggle source
# File lib/gamifier/dsl/site.rb, line 122
def save_tracks!
  tracks.each do |track|
    Gamifier.logger.info "Saving tracks..."
    track.site_id = self._id
    if gtrack = engine.send(track.class.path).find_by_label(track.label, :site => self.url)
      track._id = gtrack._id
    end
    track.engine = engine
    track.save || raise(Error, "Can't save #{track}")
  end
end
save_units!() click to toggle source
# File lib/gamifier/dsl/site.rb, line 71
def save_units!
  units.each do |unit|
    Gamifier.logger.info "Saving units..."
    unit.site = self.url
    if gunit = engine.send(unit.class.path).find_by_name(unit.name, :site => unit.site)
      unit._id = gunit._id
      # FIXME: once Badgeville returns the unit _id in the
      # response, remove the next line:
      next
    end
    unit.engine = engine
    unit.save || raise(Error, "Can't save #{unit}")
  end
end
track(name, &block) click to toggle source
# File lib/gamifier/dsl/site.rb, line 52
def track(name, &block)
  new_track = engine.tracks.build(:label => name)
  tracks.push new_track

  DSL.eval_with_context(new_track, &block)
end
unit(name, &block) click to toggle source
# File lib/gamifier/dsl/site.rb, line 38
def unit(name, &block)
  new_unit = engine.units.build(:name => name)
  units.push new_unit

  DSL.eval_with_context(new_unit, &block)
end