class Duolingo::User

Attributes

all[R]
data[R]
response[R]
username[R]

Public Class Methods

new(username) click to toggle source
# File lib/duolingo/user.rb, line 5
def initialize(username)
  @username = username
  @response = Faraday.get("http://www.duolingo.com/users/#{username}")
  @data = JSON.parse(response.body)

  @all = data['language_data']['pt']['points_ranking_data']
end

Public Instance Methods

admin?() click to toggle source
# File lib/duolingo/user.rb, line 46
def admin?
  data['admin']
end
created_at() click to toggle source
# File lib/duolingo/user.rb, line 50
def created_at
  data['created'].gsub("\n", "")
end
current_languages() click to toggle source
# File lib/duolingo/user.rb, line 27
def current_languages
  currently_studying = []
  data['languages'].map do |lan|
    currently_studying << lan['language_string'] if lan['current_learning']
  end
  currently_studying
end
fields() click to toggle source
# File lib/duolingo/user.rb, line 74
def fields
  ['username','bio','id','num_following','cohort','num_followers', 'learning_language_string','created','contribution_points','gplus_id','twitter_id','admin','invites_left','location','fullname','avatar','ui_language']
end
friends() click to toggle source
# File lib/duolingo/user.rb, line 78
def friends
  all.select do |friend|
    friend unless friend['username'] == username.downcase
  end
end
friends_stats() click to toggle source
# File lib/duolingo/user.rb, line 84
def friends_stats
  friends.map do |friend|
    {username: friend['username'], points: friend['points_data']['total']}
  end
end
full_name() click to toggle source
# File lib/duolingo/user.rb, line 58
def full_name
  data['fullname']
end
get_all_info() click to toggle source
# File lib/duolingo/user.rb, line 62
def get_all_info
  fields.map do |field|
    data[field]
  end
end
languages_studied() click to toggle source
# File lib/duolingo/user.rb, line 19
def languages_studied
  languages = []
  data['languages'].map do |lan|
    languages << lan["language_string"] if lan["points"] > 0
  end
  languages
end
num_following() click to toggle source
# File lib/duolingo/user.rb, line 54
def num_following
  data['num_following']
end
number_of_followers() click to toggle source
# File lib/duolingo/user.rb, line 42
def number_of_followers
  data['num_followers']
end
points_for(language) click to toggle source
# File lib/duolingo/user.rb, line 35
def points_for(language)
  points = data['languages'].map do |lan|
    lan['points'] if lan['language_string'] == language.capitalize
  end.compact
  "#{username} has #{points.first} points for #{language}"
end
rank() click to toggle source
# File lib/duolingo/user.rb, line 90
def rank
  data['language_data']['pt']['points_ranking_data'].detect do |user|
    user['username'] == username.downcase
  end['rank']
end
stats_for_languages_studied() click to toggle source
# File lib/duolingo/user.rb, line 68
def stats_for_languages_studied
  data['languages'].select do |lan|
    lan if lan['points'] > 0
  end
end
total_points() click to toggle source
# File lib/duolingo/user.rb, line 13
def total_points
  data['languages'].inject(0) do |sum, lan|
    sum + lan["points"]
  end
end