appfigures 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +29 -0
- data/Rakefile +28 -0
- data/VERSION +1 -0
- data/appfigures.gemspec +64 -0
- data/lib/appfigures.rb +12 -0
- data/lib/appfigures/data.rb +30 -0
- data/lib/appfigures/external.rb +17 -0
- data/lib/appfigures/rank.rb +19 -0
- data/lib/appfigures/sale.rb +53 -0
- data/lib/appfigures/user.rb +24 -0
- data/test/appfigures_fixture.yml.default +3 -0
- data/test/test_data.rb +49 -0
- data/test/test_external.rb +32 -0
- data/test/test_rank.rb +44 -0
- data/test/test_sale.rb +51 -0
- data/test/test_user.rb +51 -0
- metadata +120 -0
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.3
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
gemcutter (0.7.1)
|
5
|
+
git (1.2.5)
|
6
|
+
httparty (0.9.0)
|
7
|
+
multi_json (~> 1.0)
|
8
|
+
multi_xml
|
9
|
+
jeweler (1.8.4)
|
10
|
+
bundler (~> 1.0)
|
11
|
+
git (>= 1.2.5)
|
12
|
+
rake
|
13
|
+
rdoc
|
14
|
+
json (1.7.5)
|
15
|
+
multi_json (1.3.6)
|
16
|
+
multi_xml (0.5.1)
|
17
|
+
rake (0.9.2.2)
|
18
|
+
rdoc (3.12)
|
19
|
+
json (~> 1.4)
|
20
|
+
|
21
|
+
PLATFORMS
|
22
|
+
ruby
|
23
|
+
|
24
|
+
DEPENDENCIES
|
25
|
+
bundler
|
26
|
+
gemcutter
|
27
|
+
httparty
|
28
|
+
jeweler
|
29
|
+
rake
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "rake/testtask"
|
2
|
+
require "yaml"
|
3
|
+
require "test/unit"
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
require "bundler"
|
7
|
+
Bundler.require(:default, :development)
|
8
|
+
|
9
|
+
Rake::TestTask.new do |t|
|
10
|
+
t.libs << "test"
|
11
|
+
t.test_files = FileList['test/test*.rb']
|
12
|
+
t.verbose = true
|
13
|
+
end
|
14
|
+
|
15
|
+
begin
|
16
|
+
Jeweler::Tasks.new do |gemspec|
|
17
|
+
gemspec.name = "appfigures"
|
18
|
+
gemspec.summary = "AppFigures API"
|
19
|
+
gemspec.description = "AppFigures API ruby edition"
|
20
|
+
gemspec.email = "francis@ignition.hk"
|
21
|
+
gemspec.homepage = "https://github.com/siuying/appfigures"
|
22
|
+
gemspec.authors = ["Francis Chong"]
|
23
|
+
end
|
24
|
+
Jeweler::GemcutterTasks.new
|
25
|
+
|
26
|
+
rescue LoadError
|
27
|
+
puts "Jeweler not available. Install it with: sudo gem install jeweler -s http://gemcutter.org"
|
28
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/appfigures.gemspec
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "appfigures"
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Francis Chong"]
|
12
|
+
s.date = "2012-09-16"
|
13
|
+
s.description = "AppFigures API ruby edition"
|
14
|
+
s.email = "francis@ignition.hk"
|
15
|
+
s.files = [
|
16
|
+
".rvmrc",
|
17
|
+
"Gemfile",
|
18
|
+
"Gemfile.lock",
|
19
|
+
"Rakefile",
|
20
|
+
"VERSION",
|
21
|
+
"appfigures.gemspec",
|
22
|
+
"lib/appfigures.rb",
|
23
|
+
"lib/appfigures/data.rb",
|
24
|
+
"lib/appfigures/external.rb",
|
25
|
+
"lib/appfigures/rank.rb",
|
26
|
+
"lib/appfigures/sale.rb",
|
27
|
+
"lib/appfigures/user.rb",
|
28
|
+
"test/appfigures_fixture.yml.default",
|
29
|
+
"test/test_data.rb",
|
30
|
+
"test/test_external.rb",
|
31
|
+
"test/test_rank.rb",
|
32
|
+
"test/test_sale.rb",
|
33
|
+
"test/test_user.rb"
|
34
|
+
]
|
35
|
+
s.homepage = "https://github.com/siuying/appfigures"
|
36
|
+
s.require_paths = ["lib"]
|
37
|
+
s.rubygems_version = "1.8.15"
|
38
|
+
s.summary = "AppFigures API"
|
39
|
+
|
40
|
+
if s.respond_to? :specification_version then
|
41
|
+
s.specification_version = 3
|
42
|
+
|
43
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
44
|
+
s.add_runtime_dependency(%q<bundler>, [">= 0"])
|
45
|
+
s.add_runtime_dependency(%q<httparty>, [">= 0"])
|
46
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
47
|
+
s.add_development_dependency(%q<gemcutter>, [">= 0"])
|
48
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
49
|
+
else
|
50
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
51
|
+
s.add_dependency(%q<httparty>, [">= 0"])
|
52
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
53
|
+
s.add_dependency(%q<gemcutter>, [">= 0"])
|
54
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
55
|
+
end
|
56
|
+
else
|
57
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
58
|
+
s.add_dependency(%q<httparty>, [">= 0"])
|
59
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
60
|
+
s.add_dependency(%q<gemcutter>, [">= 0"])
|
61
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
data/lib/appfigures.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
path = File.expand_path(File.dirname(__FILE__))
|
2
|
+
$:.unshift(path) unless $:.include?(path)
|
3
|
+
|
4
|
+
module Appfigures
|
5
|
+
API_URL = "https://api.appfigures.com/v1.1"
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'appfigures/user'
|
9
|
+
require 'appfigures/data'
|
10
|
+
require 'appfigures/sale'
|
11
|
+
require 'appfigures/rank'
|
12
|
+
require 'appfigures/external'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Appfigures
|
4
|
+
class Data
|
5
|
+
include HTTParty
|
6
|
+
base_uri API_URL
|
7
|
+
format :json
|
8
|
+
|
9
|
+
def initialize(username, password)
|
10
|
+
@auth = {:username => username, :password => password}
|
11
|
+
end
|
12
|
+
|
13
|
+
def categories
|
14
|
+
self.class.get("/data/categories", {:basic_auth => @auth})
|
15
|
+
end
|
16
|
+
|
17
|
+
def stores
|
18
|
+
self.class.get("/data/stores", {:basic_auth => @auth})
|
19
|
+
end
|
20
|
+
|
21
|
+
def languages
|
22
|
+
self.class.get("/data/languages", {:basic_auth => @auth})
|
23
|
+
end
|
24
|
+
|
25
|
+
def currencies
|
26
|
+
self.class.get("/data/currencies", {:basic_auth => @auth})
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Appfigures
|
4
|
+
class External
|
5
|
+
include HTTParty
|
6
|
+
base_uri API_URL
|
7
|
+
format :json
|
8
|
+
|
9
|
+
def initialize(username, password)
|
10
|
+
@auth = {:username => username, :password => password}
|
11
|
+
end
|
12
|
+
|
13
|
+
def external
|
14
|
+
self.class.get("/external_accounts", {:basic_auth => @auth})
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Appfigures
|
4
|
+
class Rank
|
5
|
+
include HTTParty
|
6
|
+
base_uri API_URL
|
7
|
+
format :json
|
8
|
+
|
9
|
+
def initialize(username, password)
|
10
|
+
@auth = {:username => username, :password => password}
|
11
|
+
end
|
12
|
+
|
13
|
+
# Generating a Ranks Report
|
14
|
+
def ranks(app_id, granularity, start_date, end_date, options = {})
|
15
|
+
options.merge!({:basic_auth => @auth})
|
16
|
+
self.class.get("/ranks/#{app_id}/#{granularity}/#{start_date}/#{end_date}/", options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Appfigures
|
4
|
+
class Sale
|
5
|
+
include HTTParty
|
6
|
+
base_uri API_URL
|
7
|
+
format :json
|
8
|
+
|
9
|
+
TYPE = {:DATES => "dates", :COUNTRIES => "countries", :PRODUCTS => "products", :REGION => "regions",
|
10
|
+
:DATES_PRODUCTS => "dates+products", :PRODUCTS_DATES => "products+dates",
|
11
|
+
:COUNTRIES_PRODUCTS => "countries+products", :PRODUCTS_COUNTRIES => "products+countries",
|
12
|
+
:COUNTRIES_DATES => "countries+dates", :DATES_COUNTRIES => "dates+countries"
|
13
|
+
}
|
14
|
+
|
15
|
+
DATASOURCE = {:DAILY => "daily", :WEEKLY => "weekly", :MONTHLY => "monthly"}
|
16
|
+
|
17
|
+
def initialize(username, password)
|
18
|
+
@auth = {:username => username, :password => password}
|
19
|
+
end
|
20
|
+
|
21
|
+
# Generating a By App, By Country, or By Date Sales Report
|
22
|
+
# options[:query] can be data_source, apps or country
|
23
|
+
def sales(type, start_date, end_date, product_ids, options={})
|
24
|
+
raise ArgumentError, "Type must be one of TYPE: #{TYPE.values.join(", ")}" unless TYPE.values.index(type)
|
25
|
+
raise ArgumentError, "Type must be one of DATASOURCE: #{DATASOURCE.values.join(", ")}" if (options[:data_source] && !DATASOURCE.values.index(options[:data_source]))
|
26
|
+
|
27
|
+
product_ids = [product_ids] unless product_ids.is_a?(Array)
|
28
|
+
options.merge!({:basic_auth => @auth, :product_ids => product_ids.join(";")})
|
29
|
+
url = "/sales/#{type}/#{start_date}/#{end_date}/"
|
30
|
+
self.class.get(url, options)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Generating all time totals report
|
34
|
+
# type must be one of products, products+countries, countries, countries+products
|
35
|
+
def alltime_sales(type, product_ids=[], options={})
|
36
|
+
accept_types = %w{products products+countries countries countries+products}
|
37
|
+
raise ArgumentError, "Type must be one of TYPE: #{accept_types}" unless accept_types.include?(type)
|
38
|
+
product_ids = [product_ids] unless product_ids.is_a?(Array)
|
39
|
+
|
40
|
+
options.merge!({:basic_auth => @auth, :products => product_ids.join(";")})
|
41
|
+
url = "/reports/sales/#{type}"
|
42
|
+
self.class.get(url, options)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Generating a By Region Sales Report
|
46
|
+
def region_sales(start_date, end_date, options={})
|
47
|
+
options.merge!({:basic_auth => @auth})
|
48
|
+
url = "/sales/regions/#{start_date}/#{end_date}"
|
49
|
+
self.class.get(url, options)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
module Appfigures
|
5
|
+
class User
|
6
|
+
include HTTParty
|
7
|
+
base_uri API_URL
|
8
|
+
format :json
|
9
|
+
|
10
|
+
def initialize(username, password)
|
11
|
+
@auth = {:username => username, :password => password}
|
12
|
+
end
|
13
|
+
|
14
|
+
def details(email=@auth[:username])
|
15
|
+
email = URI.escape(email)
|
16
|
+
self.class.get("/users/#{email}", {:basic_auth => @auth})
|
17
|
+
end
|
18
|
+
|
19
|
+
def products(email=@auth[:username])
|
20
|
+
email = URI.escape(email)
|
21
|
+
self.class.get("/users/#{email}/products", {:basic_auth => @auth})
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/test/test_data.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "bundler"
|
6
|
+
Bundler.require(:default)
|
7
|
+
|
8
|
+
require "./lib/appfigures"
|
9
|
+
|
10
|
+
class TestData < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
path = File.expand_path(File.dirname(__FILE__))
|
13
|
+
@config = YAML::load(open("#{path}/appfigures_fixture.yml"))
|
14
|
+
|
15
|
+
assert_not_nil(@config, "you must create appfigures_fixture.yml")
|
16
|
+
assert_not_nil(@config[:username], "you must configure username")
|
17
|
+
assert_not_nil(@config[:password], "you must configure password")
|
18
|
+
|
19
|
+
assert_not_equal("", @config[:username], "you must configure username")
|
20
|
+
assert_not_equal("", @config[:password], "you must configure password")
|
21
|
+
|
22
|
+
@data_service = Appfigures::Data.new @config[:username], @config[:password]
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_categories
|
26
|
+
data = @data_service.categories
|
27
|
+
assert_not_nil(data)
|
28
|
+
assert_kind_of(Hash, data)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_stores
|
32
|
+
data = @data_service.stores
|
33
|
+
assert_not_nil(data)
|
34
|
+
assert_kind_of(Hash, data)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_languages
|
38
|
+
data = @data_service.languages
|
39
|
+
assert_not_nil(data)
|
40
|
+
assert_kind_of(Hash, data)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_currencies
|
44
|
+
data = @data_service.currencies
|
45
|
+
assert_not_nil(data)
|
46
|
+
assert_kind_of(Array, data)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "bundler"
|
6
|
+
Bundler.require(:default)
|
7
|
+
|
8
|
+
require "./lib/appfigures"
|
9
|
+
|
10
|
+
class TestUser < Test::Unit::TestCase
|
11
|
+
# def test_external
|
12
|
+
# path = File.expand_path(File.dirname(__FILE__))
|
13
|
+
# @config = YAML::load(open("#{path}/appfigures_fixture.yml"))
|
14
|
+
# @details = @user.details(@config[:username])
|
15
|
+
|
16
|
+
# if @details["role"] == "admin"
|
17
|
+
# @external = Appfigures::External.new @config[:username], @config[:password]
|
18
|
+
# acct = @external.external
|
19
|
+
# assert_not_nil(acct)
|
20
|
+
# assert_kind_of(Hash, acct)
|
21
|
+
# assert(acct.size > 0, "account should have at least one itc_account")
|
22
|
+
|
23
|
+
# first_acct = acct[acct.keys.first]
|
24
|
+
# assert_kind_of(Hash, first_acct)
|
25
|
+
# assert_not_nil(first_acct["account_id"])
|
26
|
+
# assert_not_nil(first_acct["id"])
|
27
|
+
# else
|
28
|
+
# assert_equal(acct.parsed_response["additional"], "You do not have permission to access this resource.")
|
29
|
+
# end
|
30
|
+
|
31
|
+
# end
|
32
|
+
end
|
data/test/test_rank.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "bundler"
|
6
|
+
Bundler.require(:default)
|
7
|
+
|
8
|
+
require "./lib/appfigures"
|
9
|
+
require 'uri'
|
10
|
+
class TestRank < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
path = File.expand_path(File.dirname(__FILE__))
|
13
|
+
@config = YAML::load(open("#{path}/appfigures_fixture.yml"))
|
14
|
+
|
15
|
+
assert_not_nil(@config, "you must create appfigures_fixture.yml")
|
16
|
+
assert_not_nil(@config[:username], "you must configure username")
|
17
|
+
assert_not_nil(@config[:password], "you must configure password")
|
18
|
+
|
19
|
+
assert_not_equal("", @config[:username], "you must configure username")
|
20
|
+
assert_not_equal("", @config[:password], "you must configure password")
|
21
|
+
|
22
|
+
@user = Appfigures::User.new @config[:username], @config[:password]
|
23
|
+
@rank = Appfigures::Rank.new @config[:username], @config[:password]
|
24
|
+
|
25
|
+
@day_minutes_one = (Time.now - 24*60*60).strftime("%Y-%m-%d")
|
26
|
+
@day_minutes_two = (Time.now - 2*24*60*60).strftime("%Y-%m-%d")
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_ranks
|
30
|
+
apps = @user.products(@config[:username])
|
31
|
+
first_app = apps[apps.keys.first]
|
32
|
+
assert_kind_of(Hash, first_app)
|
33
|
+
|
34
|
+
ranks = @rank.ranks(first_app["id"], "daily", @day_minutes_two, @day_minutes_one)
|
35
|
+
assert_not_nil(ranks, "ranks report should be okay")
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_ranks_complex
|
39
|
+
apps = @user.products(@config[:username])
|
40
|
+
apps = apps.keys[0..10].join(";")
|
41
|
+
ranks = @rank.ranks(apps, "daily", @day_minutes_two, @day_minutes_one)
|
42
|
+
assert_not_nil(ranks, "ranks report should be okay")
|
43
|
+
end
|
44
|
+
end
|
data/test/test_sale.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "bundler"
|
6
|
+
Bundler.require(:default)
|
7
|
+
|
8
|
+
require "./lib/appfigures"
|
9
|
+
|
10
|
+
class TestSale < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
path = File.expand_path(File.dirname(__FILE__))
|
13
|
+
@config = YAML::load(open("#{path}/appfigures_fixture.yml"))
|
14
|
+
|
15
|
+
assert_not_nil(@config, "you must create appfigures_fixture.yml")
|
16
|
+
assert_not_nil(@config[:username], "you must configure username")
|
17
|
+
assert_not_nil(@config[:password], "you must configure password")
|
18
|
+
|
19
|
+
assert_not_equal("", @config[:username], "you must configure username")
|
20
|
+
assert_not_equal("", @config[:password], "you must configure password")
|
21
|
+
|
22
|
+
@sale = Appfigures::Sale.new @config[:username], @config[:password]
|
23
|
+
@user = Appfigures::User.new @config[:username], @config[:password]
|
24
|
+
|
25
|
+
@day_minutes_one = (Time.now - 24*60*60).strftime("%Y-%m-%d")
|
26
|
+
@day_minutes_two = (Time.now - 2*24*60*60).strftime("%Y-%m-%d")
|
27
|
+
|
28
|
+
@apps = @user.products(@config[:username])
|
29
|
+
@first_app = @apps[@apps.keys.first]
|
30
|
+
assert_kind_of(Hash, @first_app)
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_sales
|
35
|
+
one_app_report = @sale.sales("dates", @day_minutes_two, @day_minutes_one, [@first_app["id"]])
|
36
|
+
assert_not_nil(one_app_report, "sales report (one app only) should be okay")
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_alltime
|
40
|
+
alltime_report = @sale.alltime_sales("products", @first_app["id"])
|
41
|
+
assert_not_nil(alltime_report, "all time report should be okay")
|
42
|
+
assert_kind_of(Hash, alltime_report)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_region
|
46
|
+
alltime_report = @sale.region_sales(@day_minutes_two, @day_minutes_one)
|
47
|
+
assert_not_nil(alltime_report, "all time report should be okay")
|
48
|
+
assert_kind_of(Hash, alltime_report)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
data/test/test_user.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "bundler"
|
6
|
+
Bundler.require(:default)
|
7
|
+
|
8
|
+
require "./lib/appfigures"
|
9
|
+
|
10
|
+
class TestUser < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
path = File.expand_path(File.dirname(__FILE__))
|
13
|
+
@config = YAML::load(open("#{path}/appfigures_fixture.yml"))
|
14
|
+
|
15
|
+
assert_not_nil(@config, "you must create appfigures_fixture.yml")
|
16
|
+
assert_not_nil(@config[:username], "you must configure username")
|
17
|
+
assert_not_nil(@config[:password], "you must configure password")
|
18
|
+
|
19
|
+
assert_not_equal("", @config[:username], "you must configure username")
|
20
|
+
assert_not_equal("", @config[:password], "you must configure password")
|
21
|
+
|
22
|
+
@user = Appfigures::User.new @config[:username], @config[:password]
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_details
|
26
|
+
details = @user.details(@config[:username])
|
27
|
+
assert_not_nil(details)
|
28
|
+
|
29
|
+
assert_not_nil(details["region"])
|
30
|
+
assert_not_nil(details["id"])
|
31
|
+
assert_not_nil(details["account"])
|
32
|
+
assert_not_nil(details["products"])
|
33
|
+
|
34
|
+
assert_kind_of(Hash, details["account"])
|
35
|
+
assert_kind_of(Array, details["products"])
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_apps
|
39
|
+
apps = @user.products(@config[:username])
|
40
|
+
assert_not_nil(apps)
|
41
|
+
assert_kind_of(Hash, apps)
|
42
|
+
|
43
|
+
assert(apps.size > 0, "account should have at least one app")
|
44
|
+
first_app = apps[apps.keys.first]
|
45
|
+
assert_kind_of(Hash, first_app)
|
46
|
+
assert_kind_of(Array, first_app["in_apps"])
|
47
|
+
assert_not_nil(first_app["name"])
|
48
|
+
assert_not_nil(first_app["id"])
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: appfigures
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Francis Chong
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-09-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: &70099329990640 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70099329990640
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: httparty
|
27
|
+
requirement: &70099329990060 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70099329990060
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
requirement: &70099329989400 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70099329989400
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: gemcutter
|
49
|
+
requirement: &70099329988920 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70099329988920
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: jeweler
|
60
|
+
requirement: &70099329988360 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70099329988360
|
69
|
+
description: AppFigures API ruby edition
|
70
|
+
email: francis@ignition.hk
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- .rvmrc
|
76
|
+
- Gemfile
|
77
|
+
- Gemfile.lock
|
78
|
+
- Rakefile
|
79
|
+
- VERSION
|
80
|
+
- appfigures.gemspec
|
81
|
+
- lib/appfigures.rb
|
82
|
+
- lib/appfigures/data.rb
|
83
|
+
- lib/appfigures/external.rb
|
84
|
+
- lib/appfigures/rank.rb
|
85
|
+
- lib/appfigures/sale.rb
|
86
|
+
- lib/appfigures/user.rb
|
87
|
+
- test/appfigures_fixture.yml.default
|
88
|
+
- test/test_data.rb
|
89
|
+
- test/test_external.rb
|
90
|
+
- test/test_rank.rb
|
91
|
+
- test/test_sale.rb
|
92
|
+
- test/test_user.rb
|
93
|
+
homepage: https://github.com/siuying/appfigures
|
94
|
+
licenses: []
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
hash: 2930390160613838490
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 1.8.15
|
117
|
+
signing_key:
|
118
|
+
specification_version: 3
|
119
|
+
summary: AppFigures API
|
120
|
+
test_files: []
|