Class: Badgeville::Client

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/badgeville.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helpers

#ensure_array, #property_params

Constructor Details

#initialize(email, opts = {}) ⇒ Client

Returns a new instance of Client.



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/badgeville.rb', line 31

def initialize (email, opts={})
  # Required Parameters
  @site = opts['site']
  @private_key = opts['private_key']
  @public_key = opts['public_key']
  @timeout = opts['timeout'] || TIMEOUT_SECS
  @host = opts['host'] || HOST
  @protocol = opts['protocol'] || PROTOCOL
  @user = email
  @per_page = opts['per_page']
end

Instance Attribute Details

#debugObject

Returns the value of attribute debug.



29
30
31
# File 'lib/badgeville.rb', line 29

def debug
  @debug
end

#player_idObject

Returns the value of attribute player_id.



29
30
31
# File 'lib/badgeville.rb', line 29

def player_id
  @player_id
end

#siteObject

Returns the value of attribute site.



29
30
31
# File 'lib/badgeville.rb', line 29

def site
  @site
end

#site_idObject

Returns the value of attribute site_id.



29
30
31
# File 'lib/badgeville.rb', line 29

def site_id
  @site_id
end

#timeoutObject

Returns the value of attribute timeout.



29
30
31
# File 'lib/badgeville.rb', line 29

def timeout
  @timeout
end

#userObject

Returns the value of attribute user.



29
30
31
# File 'lib/badgeville.rb', line 29

def user
  @user
end

Instance Method Details

#award(reward_name) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
# File 'lib/badgeville.rb', line 113

def award reward_name
  reward = reward_definitions.select do |reward|
    reward.name == reward_name
  end.first
  params = {
    'reward[player_id]' => player_id,
    'reward[site_id]' => site_id,
    'reward[definition_id]' => reward.id,
  }
  Reward.new(make_call(:post, :rewards, params))
end

#count_activities(opts = {}) ⇒ Object



86
87
88
89
# File 'lib/badgeville.rb', line 86

def count_activities(opts={})
  response = make_call(:get, :activities, opts.merge(:include_totals => true))
  response["paging"]["total_entries"].to_i
end

#create_player(opts = {}) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/badgeville.rb', line 43

def create_player(opts={})
  #try to see if player already exists
  begin
    return player_info
  rescue
  end

  #try to create user
  begin
    params = property_params(:user, {email: @user}.merge(opts))
    response = make_call(:post, :users, params)
  rescue BadgevilleError => e
    if e.code != 422
      if ensure_array(e.data["email"]).none? {|erorr_msg|
        error_msg =~ "is already taken"
      }
        raise e
      end
    end
  end

  #create player
  params = {email: @user, site: @site}.merge(
             property_params(:player, {email: @user}.merge(
             opts)))
  json = make_call(:post, :players, params)
  @site_id = json["site_id"]
  @player_id = json["id"]
end

#delete(reward) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/badgeville.rb', line 125

def delete reward
  if reward.respond_to?(:earned_at) && reward.earned_at
    end_point = "rewards/#{reward.id}.json"
    begin
      !!session[end_point].delete
    rescue => e
      raise BadgevilleError.new(e.http_code, e.message)
    end
  else
    raise BadgevilleError.new(nil, "can only remove earned rewards. a #{reward.to_json} was given")
  end
end

#get_activities(opts = {}) ⇒ Object



79
80
81
82
83
84
# File 'lib/badgeville.rb', line 79

def get_activities(opts={})
  response = make_call(:get, :activities, opts)
  response["data"].map do |activity_json|
    Activity.new(activity_json)
  end
end

#get_rewardsObject



101
102
103
104
105
106
107
108
109
110
111
# File 'lib/badgeville.rb', line 101

def get_rewards
  begin
    pages = all_pages_for(:rewards)
    pages.inject([]) do |rewards, page|
      rewards += rewards_from_response(page)
    end
  rescue BadgevilleError => e
    raise e unless e.code == 404
    []
  end
end

#log_activity(activity, opts = {}) ⇒ Object



73
74
75
76
77
# File 'lib/badgeville.rb', line 73

def log_activity(activity, opts={})
  params = property_params(:activity, {verb: activity}.merge(opts))
  response = make_call(:post, :activities, params)
  Activity.new(response)
end

#player_infoObject



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/badgeville.rb', line 144

def player_info
  end_point = "/players/info.json"
  begin
    params = {:email => @user, :site => @site}
    response = session[end_point].get(:params => params)
    data = response.body
    json = JSON.parse(data)
    json = json["data"]
    @site_id = json["site_id"]
    @player_id = json["id"]
  rescue => e
    if e.respond_to? :response && e.response
      data = JSON.parse(e.response)
      raise BadgevilleError.new(e.http_code, data["errors"]["error"])
    else
      raise e
    end
  end
end

#reward_definitionsObject



91
92
93
94
95
96
97
98
99
# File 'lib/badgeville.rb', line 91

def reward_definitions
  unless @reward_definitions
    pages = all_pages_for(:reward_definitions)
    @reward_definitions = pages.inject([]) do |definitions, page|
      definitions += rewards_from_response(page)
    end
  end
  @reward_definitions
end