zanoxrb 0.1

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: cb0e3c81b39e97f52e2e1db629b60ba632f9abcb
4
+ data.tar.gz: 159dbebcc514d393d43655cbf1cfd3e565b6253a
5
+ SHA512:
6
+ metadata.gz: 6c3ad875d26619c956875c63b31421bbaaf3bd68f8dbeeed710d2fb0ad32a19ae10a5ae2a68ee726accea87f574fab1bbf9160e18e811b1e008a93802a3f97c3
7
+ data.tar.gz: 31d75ad5c119003e2cd8f4eac3b266067a5bf7d453f929505ec5bc9cb292402d817afe9766562ce87637b89e4b2e5f7fa76cfe9302d10fceb7bae5d4c09644c4
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.0
4
+ - 2.2.0
5
+ - rbx
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,43 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ zanoxrb (0.1)
5
+ httparty (~> 0.13)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.2.5)
11
+ httparty (0.13.5)
12
+ json (~> 1.8)
13
+ multi_xml (>= 0.5.2)
14
+ json (1.8.3)
15
+ multi_xml (0.5.5)
16
+ rake (10.4.2)
17
+ rspec (3.3.0)
18
+ rspec-core (~> 3.3.0)
19
+ rspec-expectations (~> 3.3.0)
20
+ rspec-mocks (~> 3.3.0)
21
+ rspec-collection_matchers (1.1.2)
22
+ rspec-expectations (>= 2.99.0.beta1)
23
+ rspec-core (3.3.1)
24
+ rspec-support (~> 3.3.0)
25
+ rspec-expectations (3.3.0)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.3.0)
28
+ rspec-mocks (3.3.1)
29
+ diff-lcs (>= 1.2.0, < 2.0)
30
+ rspec-support (~> 3.3.0)
31
+ rspec-support (3.3.0)
32
+
33
+ PLATFORMS
34
+ ruby
35
+
36
+ DEPENDENCIES
37
+ rake (~> 10.4)
38
+ rspec (~> 3.3)
39
+ rspec-collection_matchers (~> 1.1)
40
+ zanoxrb!
41
+
42
+ BUNDLED WITH
43
+ 1.10.4
data/README.md ADDED
@@ -0,0 +1,22 @@
1
+ ZanoxRB [![Build Status](https://travis-ci.org/mozestudio/zanox-rb.svg)](https://travis-ci.org/mozestudio/zanox-rb)
2
+ =======
3
+ A Ruby wrapper for Zanox's RESTful APIs because all the current alternatives outta here are shit.
4
+ Currently supporting only `GET` requests (aka, read-only).
5
+
6
+ Install
7
+ =======
8
+ `$ gem install zanoxrb`
9
+
10
+ Usage
11
+ =====
12
+ To store the Zanox keys safely, consider to store them inside your environment variables:
13
+ ```
14
+ $ export ZANOX_CONNECT_ID=''
15
+ $ export ZANOX_SECRET_KEY=''
16
+ ```
17
+
18
+ To make requests to the APIs, call `Zanox::API#request` passing the endpoint of the method you want to call and optionally a hash with one or more params (such as `q`, `date`, `programs`, etc.) based on the official documentation you can find [here](https://developer.zanox.com/web/guest/publisher-api-2011/).
19
+
20
+ Every call will return a native Ruby hash or an array reflecting the original documentation provided by Zanox (I plan to also wrap every response inside a class that allows to get every value following the Ruby-way, btw).
21
+
22
+ For debugging purpose, consider also to enable info logs by executing `Zanox::API.debug!`.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ #! /usr/bin/env ruby
2
+ require 'rake'
3
+
4
+ task default: [ :build, :install, :test ]
5
+
6
+ task :build do
7
+ `gem build zanoxrb.gemspec`
8
+ end
9
+
10
+ task :install do
11
+ `gem install *.gem`
12
+ end
13
+
14
+ task :test do
15
+ FileUtils.cd 'specs' do
16
+ Dir['*_spec.rb'].each do |spec|
17
+ sh "rspec #{spec} --backtrace --color --format doc -r ./spec_helper.rb"
18
+ end
19
+ end
20
+ end
data/lib/zanox/api.rb ADDED
@@ -0,0 +1,88 @@
1
+ #--
2
+ # Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are
5
+ # permitted provided that the following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ # conditions and the following disclaimer.
9
+ #
10
+ # THIS SOFTWARE IS PROVIDED BY Giovanni Capuano ''AS IS'' AND ANY EXPRESS OR IMPLIED
11
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Giovanni Capuano OR
13
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
14
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
15
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
16
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
18
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+ #
20
+ # The views and conclusions contained in the software and documentation are those of the
21
+ # authors and should not be interpreted as representing official policies, either expressed
22
+ # or implied, of Giovanni Capuano.
23
+ #++
24
+
25
+ module Zanox
26
+ module API
27
+ include HTTParty
28
+ logger Logger.new
29
+ base_uri 'http://api.zanox.com'
30
+
31
+ class << self
32
+ attr_accessor :debug
33
+
34
+ def logger
35
+ @logger ||= Logger.new
36
+ end
37
+
38
+ def debug?
39
+ !!@debug
40
+ end
41
+
42
+ def debug!
43
+ @debug = true
44
+ end
45
+
46
+ def request(method, options = {}, headers = {})
47
+ if Session.secret_key
48
+ method_path = method[0] == '/' ? method : "/#{method}"
49
+ timestamp, nonce, signature = fingerprint_of(method_path, options)
50
+ headers.merge!({
51
+ 'Authorization' => "ZXWS #{Session.connect_id}:#{signature}",
52
+ 'Date' => timestamp,
53
+ 'nonce' => nonce
54
+ })
55
+ else
56
+ options.merge!({ 'connectId' => Session.connect_id })
57
+ end
58
+
59
+ logger.info "Params: #{options.inspect}"
60
+ logger.info "Headers: #{headers.inspect}"
61
+ response = get("/json/2011-03-01/#{method}", query: options, headers: headers)
62
+ Response.new(response)
63
+ end
64
+
65
+ private
66
+ def fingerprint_of(method, options, verb = 'GET')
67
+ timestamp = get_timestamp
68
+ nonce = get_nonce
69
+ params = ''#?' + URI.encode_www_form(options)
70
+ signature = create_signature(Session.secret_key, "#{verb}#{method.downcase}#{params}#{timestamp}#{nonce}")
71
+ [timestamp, nonce, signature]
72
+ end
73
+
74
+ def get_timestamp
75
+ Time.now.strftime('%a, %e %b %Y %T %Z')
76
+ end
77
+
78
+ def get_nonce
79
+ Digest::MD5.hexdigest((Time.new.usec + rand()).to_s)
80
+ end
81
+
82
+ def create_signature(secret_key, string_to_sign)
83
+ digest = OpenSSL::HMAC.digest('sha1', secret_key, string_to_sign)
84
+ Base64.encode64(digest)[0..-2]
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,29 @@
1
+ #--
2
+ # Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are
5
+ # permitted provided that the following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ # conditions and the following disclaimer.
9
+ #
10
+ # THIS SOFTWARE IS PROVIDED BY Giovanni Capuano ''AS IS'' AND ANY EXPRESS OR IMPLIED
11
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Giovanni Capuano OR
13
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
14
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
15
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
16
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
18
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+ #
20
+ # The views and conclusions contained in the software and documentation are those of the
21
+ # authors and should not be interpreted as representing official policies, either expressed
22
+ # or implied, of Giovanni Capuano.
23
+ #++
24
+
25
+ module Zanox
26
+ module API
27
+ class AccessDeniedError < StandardError; end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ #--
2
+ # Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are
5
+ # permitted provided that the following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ # conditions and the following disclaimer.
9
+ #
10
+ # THIS SOFTWARE IS PROVIDED BY Giovanni Capuano ''AS IS'' AND ANY EXPRESS OR IMPLIED
11
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Giovanni Capuano OR
13
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
14
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
15
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
16
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
18
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+ #
20
+ # The views and conclusions contained in the software and documentation are those of the
21
+ # authors and should not be interpreted as representing official policies, either expressed
22
+ # or implied, of Giovanni Capuano.
23
+ #++
24
+
25
+ module Zanox
26
+ module API
27
+ class InvalidRequestError < StandardError; end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ #--
2
+ # Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are
5
+ # permitted provided that the following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ # conditions and the following disclaimer.
9
+ #
10
+ # THIS SOFTWARE IS PROVIDED BY Giovanni Capuano ''AS IS'' AND ANY EXPRESS OR IMPLIED
11
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Giovanni Capuano OR
13
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
14
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
15
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
16
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
18
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+ #
20
+ # The views and conclusions contained in the software and documentation are those of the
21
+ # authors and should not be interpreted as representing official policies, either expressed
22
+ # or implied, of Giovanni Capuano.
23
+ #++
24
+
25
+ module Zanox
26
+ class Logger
27
+ def method_missing(m, *args, &block)
28
+ puts "[ZANOX] #{args}" if Zanox::API::debug?
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,62 @@
1
+ #--
2
+ # Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are
5
+ # permitted provided that the following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ # conditions and the following disclaimer.
9
+ #
10
+ # THIS SOFTWARE IS PROVIDED BY Giovanni Capuano ''AS IS'' AND ANY EXPRESS OR IMPLIED
11
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Giovanni Capuano OR
13
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
14
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
15
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
16
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
18
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+ #
20
+ # The views and conclusions contained in the software and documentation are those of the
21
+ # authors and should not be interpreted as representing official policies, either expressed
22
+ # or implied, of Giovanni Capuano.
23
+ #++
24
+
25
+ module Zanox
26
+ class Response
27
+ attr_reader :response
28
+
29
+ def initialize(response)
30
+ @response = response
31
+
32
+ status_code = @response.parsed_response['code']
33
+ if status_code
34
+ if status_code >= 400 && status_code <= 499
35
+ raise API::AccessDeniedError, @response.parsed_response['message']
36
+ elsif status_code >= 100 && status_code <= 199
37
+ raise API::InvalidRequestError, @response.parsed_response['reason']
38
+ end
39
+ end
40
+ end
41
+
42
+ def response
43
+ @response.parsed_response
44
+ end
45
+
46
+ def inspect
47
+ response
48
+ end
49
+
50
+ def method_missing(m, *args, &block)
51
+ key = m.to_s
52
+ response = @response[key] || @response["@#{key}"] || @response[camelize(key)]
53
+ response.kind_of?(Hash) && response.length == 1 ? response.values.first : response
54
+ end
55
+
56
+ private
57
+ def camelize(s)
58
+ words = s.split('_')
59
+ ([words.first] + words.drop(1).map(&:capitalize!)).join
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,34 @@
1
+ #--
2
+ # Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are
5
+ # permitted provided that the following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ # conditions and the following disclaimer.
9
+ #
10
+ # THIS SOFTWARE IS PROVIDED BY Giovanni Capuano ''AS IS'' AND ANY EXPRESS OR IMPLIED
11
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Giovanni Capuano OR
13
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
14
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
15
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
16
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
18
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+ #
20
+ # The views and conclusions contained in the software and documentation are those of the
21
+ # authors and should not be interpreted as representing official policies, either expressed
22
+ # or implied, of Giovanni Capuano.
23
+ #++
24
+
25
+ module Zanox
26
+ module API
27
+ module Session
28
+ class << self
29
+ attr_accessor :connect_id
30
+ attr_accessor :secret_key
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ #--
2
+ # Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are
5
+ # permitted provided that the following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ # conditions and the following disclaimer.
9
+ #
10
+ # THIS SOFTWARE IS PROVIDED BY Giovanni Capuano ''AS IS'' AND ANY EXPRESS OR IMPLIED
11
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Giovanni Capuano OR
13
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
14
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
15
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
16
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
18
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+ #
20
+ # The views and conclusions contained in the software and documentation are those of the
21
+ # authors and should not be interpreted as representing official policies, either expressed
22
+ # or implied, of Giovanni Capuano.
23
+ #++
24
+
25
+ module Zanox
26
+ VERSION = '0.1'
27
+ end
data/lib/zanox.rb ADDED
@@ -0,0 +1,33 @@
1
+ #--
2
+ # Copyright(C) 2015 Giovanni Capuano <webmaster@giovannicapuano.net>
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are
5
+ # permitted provided that the following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of
8
+ # conditions and the following disclaimer.
9
+ #
10
+ # THIS SOFTWARE IS PROVIDED BY Giovanni Capuano ''AS IS'' AND ANY EXPRESS OR IMPLIED
11
+ # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12
+ # FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Giovanni Capuano OR
13
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
14
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
15
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
16
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
18
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+ #
20
+ # The views and conclusions contained in the software and documentation are those of the
21
+ # authors and should not be interpreted as representing official policies, either expressed
22
+ # or implied, of Giovanni Capuano.
23
+ #++
24
+ require 'httparty'
25
+ require 'openssl'
26
+
27
+ require 'zanox/logger'
28
+ require 'zanox/session'
29
+ require 'zanox/exceptions/access_denied'
30
+ require 'zanox/exceptions/invalid_request'
31
+ require 'zanox/response'
32
+ require 'zanox/api'
33
+ require 'zanox/version'
@@ -0,0 +1,28 @@
1
+ describe Zanox::API do
2
+ describe '#request' do
3
+ context 'products' do
4
+ let(:products) { Zanox::API.request('products', q: 'nike', programs: 7408) }
5
+
6
+ before :each do
7
+ Zanox::API::Session.connect_id = '43EEF0445509C7205827'
8
+ end
9
+
10
+ it 'returns pagination infos' do
11
+ expect(products.page).to be 0
12
+ expect(products.items).to be 10
13
+ expect(products.total).to be > 100
14
+ expect(products.query).to eq('nike')
15
+ end
16
+
17
+ it 'returns a list of products with given keyword and program' do
18
+ items = products.product_items
19
+
20
+ expect(items).to be_an(Array)
21
+ expect(items).to have_exactly(10).products
22
+
23
+ expect(items.all? { |i| i['name'] =~ /nike/i }).to be_truthy
24
+ expect(items.all? { |i| i['program']['@id'].to_i == 7408 }).to be_truthy
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ describe Zanox::API do
2
+ describe '#request' do
3
+ context 'profiles' do
4
+ let(:profiles) { Zanox::API.request('profiles').profile_item }
5
+
6
+ it 'returns a list of items' do
7
+ expect(profiles).to have_at_least(1).profile
8
+ end
9
+
10
+ it 'returns a list of profiles with fields talking about the relative owner' do
11
+ profile = profiles.first
12
+
13
+ expect(profile['@id'].to_i).to be > 0
14
+
15
+ expect(profile['firstName']).to be_a(String)
16
+ expect(profile['firstName']).not_to be_empty
17
+
18
+ expect(profile['email']).to be_a(String)
19
+ expect(profile['email']).not_to be_empty
20
+
21
+ expect(profile['userName']).to be_a(String)
22
+ expect(profile['userName']).not_to be_empty
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ describe Zanox::API do
2
+ describe '#request' do
3
+ context 'program applications' do
4
+ let(:program_applications) { Zanox::API.request('programapplications') }
5
+
6
+ it 'returns pagination infos' do
7
+ expect(program_applications.page).to be 0
8
+ expect(program_applications.items).to be > 0
9
+ expect(program_applications.total).to be > 0
10
+ end
11
+
12
+ it 'returns the list of your program applications' do
13
+ program_application = program_applications.program_application_items
14
+ expect(program_application).to be_an(Array)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ describe Zanox::API do
2
+ describe '#request' do
3
+ context 'programs' do
4
+ let(:programs) { Zanox::API.request('programs') }
5
+
6
+ it 'returns pagination infos' do
7
+ expect(programs.page).to be 0
8
+ expect(programs.items).to be 10
9
+ expect(programs.total).to be > 1000
10
+ end
11
+
12
+ it 'returns a list of programs' do
13
+ items = programs.program_items
14
+ expect(items).to be_an(Array)
15
+ expect(items).to have_exactly(10).programs
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,6 @@
1
+ require 'zanox'
2
+ require 'rspec/collection_matchers'
3
+
4
+ Zanox::API::Session.connect_id = '802B8BF4AE99EBE00F41'
5
+ Zanox::API::Session.secret_key = 'fa4c0c2020Aa4c+ab9Ea0ec8d39E06/df2c5aa44'
6
+ Zanox::API.debug!
data/zanoxrb.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ Kernel.load 'lib/zanox/version.rb'
2
+
3
+ Gem::Specification.new { |s|
4
+ s.name = 'zanoxrb'
5
+ s.version = Zanox::VERSION
6
+ s.author = 'Giovanni Capuano'
7
+ s.email = 'webmaster@giovannicapuano.net'
8
+ s.homepage = 'http://github.com/mozestudio/zanoxrb'
9
+ s.platform = Gem::Platform::RUBY
10
+ s.summary = "A Ruby wrapper for Zanox's RESTful APIs."
11
+ s.description = "A Ruby wrapper for Zanox's RESTful APIs because all the current alternatives outta here are shit."
12
+ s.license = 'BSD'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.require_paths = ['lib']
16
+
17
+ s.add_dependency 'httparty', '~> 0.13'
18
+ s.add_development_dependency 'rake', '~> 10.4'
19
+ s.add_development_dependency 'rspec', '~> 3.3'
20
+ s.add_development_dependency 'rspec-collection_matchers', '~> 1.1'
21
+ }
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zanoxrb
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Giovanni Capuano
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ version_requirements: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.13'
19
+ name: httparty
20
+ prerelease: false
21
+ requirement: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.13'
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '10.4'
33
+ name: rake
34
+ prerelease: false
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '10.4'
40
+ type: :development
41
+ - !ruby/object:Gem::Dependency
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.3'
47
+ name: rspec
48
+ prerelease: false
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.3'
54
+ type: :development
55
+ - !ruby/object:Gem::Dependency
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.1'
61
+ name: rspec-collection_matchers
62
+ prerelease: false
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.1'
68
+ type: :development
69
+ description: A Ruby wrapper for Zanox's RESTful APIs because all the current alternatives
70
+ outta here are shit.
71
+ email: webmaster@giovannicapuano.net
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".travis.yml"
78
+ - Gemfile
79
+ - Gemfile.lock
80
+ - README.md
81
+ - Rakefile
82
+ - lib/zanox.rb
83
+ - lib/zanox/api.rb
84
+ - lib/zanox/exceptions/access_denied.rb
85
+ - lib/zanox/exceptions/invalid_request.rb
86
+ - lib/zanox/logger.rb
87
+ - lib/zanox/response.rb
88
+ - lib/zanox/session.rb
89
+ - lib/zanox/version.rb
90
+ - specs/products_spec.rb
91
+ - specs/profiles_spec.rb
92
+ - specs/program_application_spec.rb
93
+ - specs/programs_spec.rb
94
+ - specs/spec_helper.rb
95
+ - zanoxrb.gemspec
96
+ homepage: http://github.com/mozestudio/zanoxrb
97
+ licenses:
98
+ - BSD
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.4.8
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: A Ruby wrapper for Zanox's RESTful APIs.
120
+ test_files: []