class App

Attributes

id[R]
name[R]
secret[R]

Public Class Methods

all() click to toggle source

query methods

# File lib/sacrifice/app.rb, line 57
def self.all
  if DB[:apps]
    DB[:apps].map { |attrs| new(attrs) }
  else
    []
  end
end
create!(attrs) click to toggle source
# File lib/sacrifice/app.rb, line 19
def self.create!(attrs)
  new_app = new(attrs)

  if all.find { |app| app.name == new_app.name }
    raise ArgumentError, "App names must be unique, and there is already an app named \"#{new_app.name}\"."
  end

  DB.update do |data|
    data[:apps] ||= []
    data[:apps] << new_app.attrs
  end
end
find_by_name(name) click to toggle source
# File lib/sacrifice/app.rb, line 65
def self.find_by_name(name)
  all.find { |a| a.name == name }
end
new(attrs) click to toggle source
# File lib/sacrifice/app.rb, line 10
def initialize(attrs)
  @name, @id, @secret = attrs[:name].to_s, attrs[:id].to_s, attrs[:secret].to_s
  validate!
end

Private Class Methods

find!(name) click to toggle source
# File lib/sacrifice/app.rb, line 103
def self.find!(name)
  app = App.find_by_name(name)
  unless app
    raise Thor::Error, "Unknown app #{name}. Run 'sacrifice apps' to see known apps."
  end
  app
end

Public Instance Methods

access_token() click to toggle source
# File lib/sacrifice/app.rb, line 69
def access_token
  @access_token ||= AccessToken.get(id, secret)
end
attrs() click to toggle source
# File lib/sacrifice/app.rb, line 15
def attrs
  {name: name, id: id, secret: secret}
end
create_user(options = {}) click to toggle source
# File lib/sacrifice/app.rb, line 42
def create_user(options = {})
  handle_bad_request do
    user_data = RestClient.post(users_url, {access_token: access_token}.merge(options))
    User.new(JSON.parse(user_data))
  end
end
find_user(user_id) click to toggle source
# File lib/sacrifice/app.rb, line 73
def find_user(user_id)
  users.find { |user|
    user.id.to_s == user_id.to_s
  }
end
rm_user(uid) click to toggle source
# File lib/sacrifice/app.rb, line 49
def rm_user(uid)
  handle_bad_request do
    url = rm_user_url(uid, access_token)
    RestClient.delete(url)
  end
end
users() click to toggle source
# File lib/sacrifice/app.rb, line 32
def users
  handle_bad_request do
    users_data = RestClient.get(users_url, params: {access_token: access_token})

    JSON.parse(users_data)["data"].map do |user_data|
      User.new(user_data)
    end
  end
end

Private Instance Methods

rm_user_url(uid, token) click to toggle source
# File lib/sacrifice/app.rb, line 85
def rm_user_url(uid, token)
  "#{users_url}?uid=#{uid}&access_token=#{URI.escape(token)}"
end
users_url() click to toggle source
# File lib/sacrifice/app.rb, line 81
def users_url
  "#{GRAPH_API_BASE}/#{id}/accounts/test-users"
end
validate!() click to toggle source
# File lib/sacrifice/app.rb, line 89
def validate!
  unless name && name =~ /\S/
    raise ArgumentError, "App name must not be empty"
  end

  unless id && id =~ /^[0-9a-f]+$/i
    raise ArgumentError, "App id must be a nonempty hex string, but was #{id.inspect}"
  end

  unless secret && secret =~ /^[0-9a-f]+$/i
    raise ArgumentError, "App secret must be a nonempty hex string, but was #{secret.inspect}"
  end
end