appfigures_client 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d43e23d5e5e65cdecc38232d8e4177f926c3b750
4
+ data.tar.gz: 7b68172629d704319da396bc8eeee7732c81569b
5
+ SHA512:
6
+ metadata.gz: dc29ba35452f334dd159eab029d9e09b024586410cb6235c851330b7b6c595c15dfeb9e2941f1aa008efa765bfc72c3cad76a6989b5e8f7d73a41d81b8e9cba3
7
+ data.tar.gz: 55d50f9fec06043c14463c09a4cca28f17d6b0612caf7773327e1b56f25063b7ad7d01f99a308e2c968442d6f230664887d44bb5a59520d800c66e14a24146fb
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "shoulda", ">= 0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler", "~> 1.0"
12
+ gem "jeweler", "~> 2.0.1"
13
+ gem "simplecov", ">= 0"
14
+ gem 'pry'
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,88 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (4.2.3)
5
+ i18n (~> 0.7)
6
+ json (~> 1.7, >= 1.7.7)
7
+ minitest (~> 5.1)
8
+ thread_safe (~> 0.3, >= 0.3.4)
9
+ tzinfo (~> 1.1)
10
+ addressable (2.3.8)
11
+ builder (3.2.2)
12
+ coderay (1.1.0)
13
+ descendants_tracker (0.0.4)
14
+ thread_safe (~> 0.3, >= 0.3.1)
15
+ docile (1.1.5)
16
+ faraday (0.9.1)
17
+ multipart-post (>= 1.2, < 3)
18
+ git (1.2.9.1)
19
+ github_api (0.12.3)
20
+ addressable (~> 2.3)
21
+ descendants_tracker (~> 0.0.4)
22
+ faraday (~> 0.8, < 0.10)
23
+ hashie (>= 3.3)
24
+ multi_json (>= 1.7.5, < 2.0)
25
+ nokogiri (~> 1.6.3)
26
+ oauth2
27
+ hashie (3.4.2)
28
+ highline (1.7.2)
29
+ i18n (0.7.0)
30
+ jeweler (2.0.1)
31
+ builder
32
+ bundler (>= 1.0)
33
+ git (>= 1.2.5)
34
+ github_api
35
+ highline (>= 1.6.15)
36
+ nokogiri (>= 1.5.10)
37
+ rake
38
+ rdoc
39
+ json (1.8.3)
40
+ jwt (1.5.1)
41
+ method_source (0.8.2)
42
+ mini_portile (0.6.2)
43
+ minitest (5.7.0)
44
+ multi_json (1.11.1)
45
+ multi_xml (0.5.5)
46
+ multipart-post (2.0.0)
47
+ nokogiri (1.6.6.2)
48
+ mini_portile (~> 0.6.0)
49
+ oauth2 (1.0.0)
50
+ faraday (>= 0.8, < 0.10)
51
+ jwt (~> 1.0)
52
+ multi_json (~> 1.3)
53
+ multi_xml (~> 0.5)
54
+ rack (~> 1.2)
55
+ pry (0.10.1)
56
+ coderay (~> 1.1.0)
57
+ method_source (~> 0.8.1)
58
+ slop (~> 3.4)
59
+ rack (1.6.4)
60
+ rake (10.4.2)
61
+ rdoc (3.12.2)
62
+ json (~> 1.4)
63
+ shoulda (3.5.0)
64
+ shoulda-context (~> 1.0, >= 1.0.1)
65
+ shoulda-matchers (>= 1.4.1, < 3.0)
66
+ shoulda-context (1.2.1)
67
+ shoulda-matchers (2.8.0)
68
+ activesupport (>= 3.0.0)
69
+ simplecov (0.10.0)
70
+ docile (~> 1.1.0)
71
+ json (~> 1.8)
72
+ simplecov-html (~> 0.10.0)
73
+ simplecov-html (0.10.0)
74
+ slop (3.6.0)
75
+ thread_safe (0.3.5)
76
+ tzinfo (1.2.2)
77
+ thread_safe (~> 0.1)
78
+
79
+ PLATFORMS
80
+ ruby
81
+
82
+ DEPENDENCIES
83
+ bundler (~> 1.0)
84
+ jeweler (~> 2.0.1)
85
+ pry
86
+ rdoc (~> 3.12)
87
+ shoulda
88
+ simplecov
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2015 Aleksey Dmitriev
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,53 @@
1
+ #AppFigures API Client
2
+
3
+ A Ruby wrapper for appfigures.com API
4
+ ##Installation
5
+
6
+ In your Gemfile you need to add the `appfigures_client` gem:
7
+ ```ruby
8
+ gem 'appfigures_client'
9
+ ```
10
+ And then run the bundler and restart your server to make the files available through the pipeline:
11
+ ```console
12
+ $ bundle install
13
+ ```
14
+ Or install it separately:
15
+
16
+ ```console
17
+ $ gem install appfigures_client
18
+ ```
19
+ ##Usage
20
+ For more information read http://docs.appfigures.com/
21
+
22
+ ```ruby
23
+ require 'appfigures_client'
24
+ api = AppfiguresClient.init(USERNAME, PASSWORD, CLIENT_KEY)
25
+ api.products.search(options={}) # return products list
26
+ api.products.get(id) # return product by id
27
+ api.products.all(store = nil) # returns products list from store
28
+ api.sales.search(options = {}) # return sales report
29
+ api.sales.search_by_regions(options = {}) # return sales report by regions
30
+ api.ads.search(options = {}) # returns ads report
31
+ api.reviews.search(options = {}) # returns reviews
32
+ api.reviews.counts(options = {}) # returns review counts
33
+ api.ranks.search(options = {}) # returns ranks report
34
+ api.ranks.snapshot(options = {}) # returns ranks report
35
+
36
+ ```
37
+
38
+
39
+ ## Contributing
40
+
41
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
42
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
43
+ * Fork the project.
44
+ * Start a feature/bugfix branch.
45
+ * Commit and push until you are happy with your contribution.
46
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
47
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
48
+
49
+ ## Copyright
50
+
51
+ Copyright (c) 2015 Aleksey Dmitriev. See LICENSE.txt for
52
+ further details.
53
+
data/Rakefile ADDED
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "appfigures_client"
18
+ gem.homepage = "http://github.com/addmitriev/appfigures_client"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{TODO: one-line summary of your gem}
21
+ gem.description = %Q{TODO: longer description of your gem}
22
+ gem.email = "ya-est@bk.ru"
23
+ gem.authors = ["Aleksey Dmitriev"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ desc "Code coverage detail"
36
+ task :simplecov do
37
+ ENV['COVERAGE'] = "true"
38
+ Rake::Task['test'].execute
39
+ end
40
+
41
+ task :default => :test
42
+
43
+ require 'rdoc/task'
44
+ Rake::RDocTask.new do |rdoc|
45
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "appfigures_client #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
Binary file
@@ -0,0 +1,43 @@
1
+
2
+ # -*- encoding: utf-8 -*-
3
+ $:.push('lib')
4
+ require 'appfigures_client/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'appfigures_client'
8
+ s.version = AppfiguresClient::VERSION.dup
9
+ s.date = '2015-06-26'
10
+ s.summary = 'API client for AppFigures'
11
+ s.email = 'alexey@ioncloud.ru'
12
+ s.homepage = 'http://github.com/addmitriev/appfigures_client'
13
+ s.authors = ['Aleksey Dmitriev']
14
+
15
+ s.description = <<-EOF
16
+ A Ruby wrapper for appfigures.com API
17
+ EOF
18
+
19
+ dependencies = [
20
+ # Examples:
21
+ # [:runtime, "rack", "~> 1.1"],
22
+ # [:development, "rspec", "~> 2.1"],
23
+ ]
24
+
25
+ s.files = Dir['**/*']
26
+ s.test_files = Dir['test/**/*'] + Dir['spec/**/*']
27
+ s.executables = Dir['bin/*'].map { |f| File.basename(f) }
28
+ s.require_paths = ['lib']
29
+
30
+
31
+ ## Make sure you can build the gem on older versions of RubyGems too:
32
+ s.rubygems_version = "2.4.6"
33
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
34
+ s.specification_version = 3 if s.respond_to? :specification_version
35
+
36
+ dependencies.each do |type, name, version|
37
+ if s.respond_to?("add_#{type}_dependency")
38
+ s.send("add_#{type}_dependency", name, version)
39
+ else
40
+ s.add_dependency(name, version)
41
+ end
42
+ end
43
+ end
data/config/routes.yml ADDED
@@ -0,0 +1,27 @@
1
+ products:
2
+ default: 'products/'
3
+ mine: 'products/mine/'
4
+ search: 'products/search/'
5
+ report:
6
+ sales:
7
+ default: 'reports/sales/'
8
+ region: 'reports/sales/regions/'
9
+ ads: 'reports/ads/'
10
+ ranks:
11
+ default: 'ranks/'
12
+ snapshots: 'ranks/snapshots/'
13
+ featured: 'featured/'
14
+ reviews:
15
+ default: 'reviews/'
16
+ count: 'reviews/count/'
17
+ events: 'events/'
18
+ archive: 'archive/'
19
+ users: 'users/'
20
+ external_accounts: 'external_accounts/'
21
+ data:
22
+ categories: 'data/categories/'
23
+ countries: 'data/countries/'
24
+ languages: 'data/languages/'
25
+ currencies: 'data/currencies/'
26
+ stores: 'data/stores/'
27
+ usage: 'usage/'
@@ -0,0 +1,25 @@
1
+ require 'appfigures_client/net/request'
2
+ require 'appfigures_client/api'
3
+ require 'appfigures_client/endpoints/endpoint'
4
+ require 'appfigures_client/endpoints/data'
5
+ require 'appfigures_client/endpoints/products'
6
+ require 'appfigures_client/endpoints/sales'
7
+ require 'appfigures_client/endpoints/ads'
8
+ require 'appfigures_client/endpoints/ranks'
9
+ require 'appfigures_client/endpoints/reviews'
10
+ require 'net/http'
11
+ require 'json'
12
+
13
+ module AppfiguresClient
14
+
15
+ def self.root
16
+ File.expand_path '../..', __FILE__
17
+ end
18
+
19
+ def self.init(username, password, client_key)
20
+
21
+ Api.new({username: username, password: password, client_key: client_key})
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,52 @@
1
+ module AppfiguresClient
2
+ class Api
3
+
4
+
5
+ URL = 'https://api.appfigures.com/v2/'
6
+
7
+
8
+ def initialize(options)
9
+ @request ||= Net::Request.new(options)
10
+
11
+ data = @request.make
12
+
13
+ if data[:status].to_i == 200
14
+ self
15
+ else
16
+ raise data[:message]
17
+ end
18
+
19
+ @routes = YAML::load(File.open("#{AppfiguresClient.root}/config/routes.yml")).with_indifferent_access
20
+
21
+ end
22
+
23
+ def data
24
+ @data ||= AppfiguresClient::Endpoints::Data.new(self, @routes[:data])
25
+ end
26
+
27
+ def products
28
+ @products ||= AppfiguresClient::Endpoints::Products.new(self, @routes[:products])
29
+ end
30
+
31
+ def sales
32
+ @sales ||= AppfiguresClient::Endpoints::Sales.new(self, @routes[:report][:sales])
33
+ end
34
+
35
+ def ads
36
+ @ads ||= AppfiguresClient::Endpoints::Ads.new(self, @routes[:report][:ads])
37
+ end
38
+
39
+ def ranks
40
+ @ranks ||= AppfiguresClient::Endpoints::Ranks.new(self, @routes[:ranks])
41
+ end
42
+
43
+ def reviews
44
+ @ranks ||= AppfiguresClient::Endpoints::Reviews.new(self, @routes[:reviews])
45
+ end
46
+
47
+ def request
48
+ @request
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,13 @@
1
+ module AppfiguresClient
2
+ module Endpoints
3
+ class Ads < Endpoint
4
+
5
+
6
+ def search(options={})
7
+ path = @routes[:default]
8
+ @request.make path
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,42 @@
1
+ module AppfiguresClient
2
+ module Endpoints
3
+ class Data < Endpoint
4
+
5
+ def initialize(api, routes)
6
+ super api, routes
7
+ @data = {}
8
+ end
9
+
10
+ def list(param, param2 = nil)
11
+ if param2
12
+ @data[param] ||= {}
13
+ @data[param][param2] ||= @request.make @routes[param][param2]
14
+ else
15
+ @data[param] ||= @request.make @routes[param]
16
+ end
17
+ end
18
+
19
+ def categories
20
+ list(:categories)
21
+ end
22
+
23
+ def countries(store = nil)
24
+ list(:countries, store)
25
+ end
26
+
27
+ def languages
28
+ list(:languages)
29
+ end
30
+
31
+ def currencies
32
+ list(:currencies)
33
+ end
34
+
35
+ def stores
36
+ list(:stores)
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+
@@ -0,0 +1,11 @@
1
+ module AppfiguresClient
2
+ module Endpoints
3
+ class Endpoint
4
+ def initialize(api, routes)
5
+ @api = api
6
+ @request = api.request
7
+ @routes = routes
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,35 @@
1
+ module AppfiguresClient
2
+ module Endpoints
3
+ class Products < Endpoint
4
+
5
+ FILTERS = %w(mac ios google amazon)
6
+
7
+ def get(id)
8
+ path = @routes[:default] + id.to_s
9
+ @request.make path
10
+ end
11
+
12
+ def search(options={})
13
+ path = @routes[:search]
14
+
15
+ raise '"term" option is required' unless options[:term].present?
16
+
17
+ if options[:options].present? && options[:options][:filter].present?
18
+ raise 'Wrong "filter" param' unless options[:options][:filter].in? FILTERS
19
+ end
20
+
21
+ @request.make path + options[:term], options[:options]
22
+ end
23
+
24
+ def all(store = nil)
25
+ path = @routes[:mine]
26
+ options = nil
27
+ if store && @api.data.stores[store].present?
28
+ options = {store: store}
29
+ end
30
+ @request.make path, options
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ module AppfiguresClient
2
+ module Endpoints
3
+ class Ranks < Endpoint
4
+
5
+
6
+ def search(options={})
7
+ raise '"product_ids" option is required' unless options[:product_ids].present?
8
+ raise '"granularity" option is required' unless options[:granularity].present?
9
+ raise '"start_date" option is required' unless options[:start_date].present?
10
+ raise '"end_date" option is required' unless options[:end_date].present?
11
+
12
+ path = "#{@routes[:default]}#{product_ids(options[:product_ids])}"
13
+ path +="/#{options[:granularity]}/#{options[:start_date]}/#{options[:end_date]}"
14
+
15
+ @request.make path, options[:options]
16
+
17
+ end
18
+
19
+ def snapshots(options = {})
20
+ raise '"time" option is required' unless options[:time].present?
21
+ raise '"country" option is required' unless options[:country].present?
22
+ raise '"category" option is required' unless options[:category].present?
23
+ raise '"subcategory" option is required' unless options[:subcategory].present?
24
+
25
+ path = "#{@routes[:snapshots]}#{options[:time]}"
26
+ path +="/#{options[:country]}/#{options[:category]}/#{options[:subcategory]}"
27
+
28
+ @request.make path, options[:options]
29
+ end
30
+
31
+ private
32
+
33
+ def product_ids(product_ids)
34
+ product_ids.kind_of?(Array) ? product_ids.join(';') : product_ids
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,19 @@
1
+ module AppfiguresClient
2
+ module Endpoints
3
+ class Reviews < Endpoint
4
+
5
+
6
+ def search(options={})
7
+ path = @routes[:default]
8
+ @request.make path, options
9
+ end
10
+
11
+ def counts(options={})
12
+ path = @routes[:count]
13
+ @request.make path, options
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ module AppfiguresClient
2
+ module Endpoints
3
+ class Sales < Endpoint
4
+
5
+
6
+ def search(options={})
7
+ path = @routes[:default]
8
+
9
+ if options[:map].present?
10
+ path = path + options[:map]
11
+ end
12
+
13
+ @request.make path, options[:options]
14
+
15
+ end
16
+
17
+ def search_by_regions(options={})
18
+ path = @routes[:regions]
19
+
20
+ @request.make path, options
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ module AppfiguresClient
2
+ module Net
3
+ class Request
4
+
5
+ def initialize(options)
6
+ @username = options[:username]
7
+ @password = options[:password]
8
+ @client_key = options[:client_key]
9
+ end
10
+
11
+ def make(path = '', params = {})
12
+ uri = ::URI.parse(Api::URL + path)
13
+ http = ::Net::HTTP.new(uri.host, uri.port)
14
+ http.use_ssl = true
15
+ request_params = params ? '?' + parameterize(params) : ''
16
+
17
+ req = ::Net::HTTP::Get.new(uri.path + request_params)
18
+ req.basic_auth @username, @password
19
+ req['X-CLIENT-KEY'] = @client_key
20
+
21
+ response = http.request req
22
+ parsed = JSON.parse(response.body)
23
+ parsed.kind_of?(Array) ? parsed.collect {|hash| hash.with_indifferent_access } : parsed.with_indifferent_access
24
+ end
25
+
26
+ private
27
+
28
+ def parameterize(params)
29
+ URI.escape(params.collect { |k, v| "#{k}=#{v}" }.join('&'))
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module AppfiguresClient
2
+ VERSION = '0.0.2'
3
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,34 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_adapter 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ require 'rubygems'
18
+ require 'bundler'
19
+ begin
20
+ Bundler.setup(:default, :development)
21
+ rescue Bundler::BundlerError => e
22
+ $stderr.puts e.message
23
+ $stderr.puts "Run `bundle install` to install missing gems"
24
+ exit e.status_code
25
+ end
26
+ require 'test/unit'
27
+ require 'shoulda'
28
+
29
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
31
+ require 'appfigures_client'
32
+
33
+ class Test::Unit::TestCase
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestAppfiguresClient < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: appfigures_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Aleksey Dmitriev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ A Ruby wrapper for appfigures.com API
15
+ email: alexey@ioncloud.ru
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - Gemfile
21
+ - Gemfile.lock
22
+ - LICENSE.txt
23
+ - README.md
24
+ - Rakefile
25
+ - appfigures_client-0.0.1.gem
26
+ - appfigures_client.gemspec
27
+ - config/routes.yml
28
+ - lib/appfigures_client.rb
29
+ - lib/appfigures_client/api.rb
30
+ - lib/appfigures_client/endpoints/ads.rb
31
+ - lib/appfigures_client/endpoints/data.rb
32
+ - lib/appfigures_client/endpoints/endpoint.rb
33
+ - lib/appfigures_client/endpoints/products.rb
34
+ - lib/appfigures_client/endpoints/ranks.rb
35
+ - lib/appfigures_client/endpoints/reviews.rb
36
+ - lib/appfigures_client/endpoints/sales.rb
37
+ - lib/appfigures_client/net/request.rb
38
+ - lib/appfigures_client/version.rb
39
+ - test/helper.rb
40
+ - test/test_appfigures_client.rb
41
+ homepage: http://github.com/addmitriev/appfigures_client
42
+ licenses: []
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.4.6
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: API client for AppFigures
64
+ test_files:
65
+ - test/helper.rb
66
+ - test/test_appfigures_client.rb