ebay_client 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OTQzYjA2ZmUwYzllYmJiNmNlOWQxMWRlZTVmYzk3M2MzODVlMmRkNg==
5
- data.tar.gz: !binary |-
6
- MWFjZWIyZWQwMmM1ZTE0MGZjYjY2N2UxYTI1OTM1YjRmODNkM2Q1Mg==
2
+ SHA1:
3
+ metadata.gz: 7cea576c603795e615b04cefd3ca295ce205f729
4
+ data.tar.gz: 8571f1122c99c9cc445bb58c70bfc6e85444dd0d
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NmY3NGI2MjllOWNmY2U0MDk5NzZmNTQzMDgxNTI3NjI5ZDc4N2NjYTAwYTg3
10
- ODMyMjk4MWVjYzA2MDA4MjA3NGQ3NTI3ZmY1NTVkNzFlNjkwMjZjZTA0ZjAy
11
- Y2Y2ODFiM2M0MzY4MTExNTJmOGExZDdlNTg0MGU0Yzc2MjFiZDA=
12
- data.tar.gz: !binary |-
13
- MTg2NjZmMGY2YjVmZmUzMWI4OTM4ZWJhNWUxYzQ3ZTFhYzY4MjJlMTBjYTQx
14
- NTQ1NDQ3NmNiNWM3NDJkMGQ5ZDMwZTU3YjJiYTZjMTA5YTliZmM4NDQ0OTUz
15
- N2I0YjQ3ZGY4ZWZjNjZkZTZhMDM0YWVkZmY5Zjg2YmNhNDM3N2E=
6
+ metadata.gz: 4395ab2c7e9d539c6578d092be1dc979a2b2ea0cc5e07e1fa2201d3cd1c9aac59f9cc4c6bd2758fd72a11c038eb684db732c41e97339a6a30ce1be1372c5908d
7
+ data.tar.gz: cfd9c380d43b4b1cd1e247f9cd48d7c4365b564c6b42dc122b1e564ddc6f536e2f7669c29143100a0fa9b5bcfb3b15e971b348190f84494c0be6c7b87e4fffb9
@@ -1 +1 @@
1
- 1.9.3
1
+ 2.2.3
@@ -1,51 +1,88 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ebay_client (0.0.1)
4
+ ebay_client (0.2.0)
5
5
  activesupport (>= 3.1.0)
6
- savon (~> 0.9.9)
6
+ savon (>= 2.0.0)
7
7
 
8
8
  GEM
9
- remote: http://rubygems.org/
9
+ remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (3.2.3)
12
- i18n (~> 0.6)
13
- multi_json (~> 1.0)
14
- akami (1.0.0)
11
+ activesupport (4.2.5.1)
12
+ i18n (~> 0.7)
13
+ json (~> 1.7, >= 1.7.7)
14
+ minitest (~> 5.1)
15
+ thread_safe (~> 0.3, >= 0.3.4)
16
+ tzinfo (~> 1.1)
17
+ addressable (2.4.0)
18
+ akami (1.3.1)
15
19
  gyoku (>= 0.4.0)
16
- builder (3.0.0)
17
- columnize (0.3.6)
18
- debugger (1.1.1)
19
- columnize (>= 0.3.1)
20
- debugger-linecache (~> 1.1)
21
- debugger-ruby_core_source (~> 1.1)
22
- debugger-linecache (1.1.1)
23
- debugger-ruby_core_source (>= 1.1.1)
24
- debugger-ruby_core_source (1.1.2)
25
- gyoku (0.4.4)
20
+ nokogiri
21
+ builder (3.2.2)
22
+ crack (0.4.3)
23
+ safe_yaml (~> 1.0.0)
24
+ diff-lcs (1.2.5)
25
+ docile (1.1.5)
26
+ gyoku (1.3.1)
26
27
  builder (>= 2.1.2)
27
- httpi (0.9.6)
28
+ hashdiff (0.2.3)
29
+ httpi (2.4.1)
28
30
  rack
29
- i18n (0.6.0)
30
- multi_json (1.3.2)
31
- nokogiri (1.5.2)
32
- nori (1.1.0)
33
- rack (1.4.1)
34
- savon (0.9.9)
35
- akami (~> 1.0)
31
+ i18n (0.7.0)
32
+ json (1.8.3)
33
+ mini_portile2 (2.0.0)
34
+ minitest (5.8.4)
35
+ nokogiri (1.6.7.2)
36
+ mini_portile2 (~> 2.0.0.rc2)
37
+ nori (2.6.0)
38
+ rack (1.6.4)
39
+ rspec (3.4.0)
40
+ rspec-core (~> 3.4.0)
41
+ rspec-expectations (~> 3.4.0)
42
+ rspec-mocks (~> 3.4.0)
43
+ rspec-core (3.4.1)
44
+ rspec-support (~> 3.4.0)
45
+ rspec-expectations (3.4.0)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.4.0)
48
+ rspec-mocks (3.4.1)
49
+ diff-lcs (>= 1.2.0, < 2.0)
50
+ rspec-support (~> 3.4.0)
51
+ rspec-support (3.4.1)
52
+ safe_yaml (1.0.4)
53
+ savon (2.11.1)
54
+ akami (~> 1.2)
36
55
  builder (>= 2.1.2)
37
- gyoku (>= 0.4.0)
38
- httpi (~> 0.9)
39
- nokogiri (>= 1.4.0)
40
- nori (~> 1.1)
41
- wasabi (~> 2.1)
42
- wasabi (2.1.0)
56
+ gyoku (~> 1.2)
57
+ httpi (~> 2.3)
43
58
  nokogiri (>= 1.4.0)
59
+ nori (~> 2.4)
60
+ wasabi (~> 3.4)
61
+ simplecov (0.11.1)
62
+ docile (~> 1.1.0)
63
+ json (~> 1.8)
64
+ simplecov-html (~> 0.10.0)
65
+ simplecov-html (0.10.0)
66
+ thread_safe (0.3.5)
67
+ tzinfo (1.2.2)
68
+ thread_safe (~> 0.1)
69
+ wasabi (3.5.0)
70
+ httpi (~> 2.0)
71
+ nokogiri (>= 1.4.2)
72
+ webmock (1.22.6)
73
+ addressable (>= 2.3.6)
74
+ crack (>= 0.3.2)
75
+ hashdiff
44
76
 
45
77
  PLATFORMS
46
78
  ruby
47
79
 
48
80
  DEPENDENCIES
49
81
  bundler
50
- debugger
51
82
  ebay_client!
83
+ rspec
84
+ simplecov
85
+ webmock
86
+
87
+ BUNDLED WITH
88
+ 1.10.6
data/README.md CHANGED
@@ -10,7 +10,7 @@ Installation
10
10
 
11
11
  `Gemfile`:
12
12
 
13
- gem 'ebay_client', '~> 0.1.0'
13
+ gem 'ebay_client', '~> 0.2.0'
14
14
 
15
15
  `config/ebay_client.yml`:
16
16
 
@@ -1,20 +1,21 @@
1
1
  defaults: &defaults
2
- version: 809
2
+ version: 949
3
3
  # use local file as default
4
- #wsdl_file: 'http://developer.ebay.com/webservices/809/eBaySvc.wsdl'
4
+ #wsdl_file: 'http://developer.ebay.com/webservices/949/eBaySvc.wsdl'
5
5
  routing: default
6
6
  siteid: 0
7
7
  preload: false
8
8
  warning_level: Low
9
9
  error_language: en_US
10
10
  api_keys: []
11
- savon_log_level: debug
11
+ savon_log_level: :debug
12
+ http_read_timeout: 600
12
13
 
13
14
  development: &development
14
15
  <<: *defaults
15
16
  url: 'https://api.sandbox.ebay.com/wsapi'
16
17
  warning_level: High
17
- savon_log_level: info
18
+ savon_log_level: :debug
18
19
 
19
20
  test:
20
21
  <<: *development
@@ -23,3 +24,4 @@ production:
23
24
  <<: *defaults
24
25
  url: 'https://api.ebay.com/wsapi'
25
26
  preload: true
27
+ savon_log_level: :info
@@ -1,29 +1,29 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "ebay_client/version"
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'ebay_client/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "ebay_client"
6
+ s.name = 'ebay_client'
7
7
  s.version = EbayClient::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.date = Time.now.strftime("%Y-%m-%d")
10
- s.authors = ["Marian Theisen"]
11
- s.email = 'marian.theisen@kayoom.com'
12
- s.summary = "Ebay Trading API Client"
13
- s.homepage = "http://github.com/kayoom/ebay_client"
14
- s.description = "Simple, lightweight eBay Trading API Client"
15
- s.license = "MIT"
16
- s.metadata = {
17
- 'issue_tracker' => 'https://github.com/kayoom/ebay_client/issues'
18
- }
9
+ s.date = Time.now.strftime('%Y-%m-%d')
10
+ s.authors = ['Marian Theisen','Burkhard Vogel-Kreykenbohm']
11
+ s.email = ['marian.theisen@kayoom.com','b.vogel@buddyandselly.com']
12
+ s.summary = 'Ebay Trading API Client'
13
+ s.homepage = 'http://github.com/kayoom/ebay_client'
14
+ s.description = 'Simple, lightweight eBay Trading API Client'
15
+ s.license = 'MIT'
19
16
 
20
17
  s.files = `git ls-files`.split("\n")
21
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
- s.require_paths = ["lib"]
20
+ s.require_paths = ['lib']
24
21
 
25
- s.add_dependency "activesupport", ">= 3.1.0"
26
- s.add_dependency "savon", "< 2.0.0"
22
+ s.add_dependency 'activesupport', '>= 3.1.0'
23
+ s.add_dependency 'savon', '>= 2.0.0'
27
24
 
28
- s.add_development_dependency "bundler"
25
+ s.add_development_dependency 'bundler'
26
+ s.add_development_dependency 'rspec'
27
+ s.add_development_dependency 'webmock'
28
+ s.add_development_dependency 'simplecov'
29
29
  end
@@ -2,36 +2,51 @@ require 'savon'
2
2
  require 'gyoku'
3
3
  require 'ebay_client/response'
4
4
 
5
- class EbayClient::Api < ActiveSupport::BasicObject
5
+ class EbayClient::Api < ActiveSupport::ProxyObject
6
6
  attr_reader :configuration, :endpoint, :namespace, :header, :client, :calls
7
7
 
8
- def initialize configuration
8
+ def initialize(configuration)
9
9
  @configuration = configuration
10
10
  @endpoint = ::EbayClient::Endpoint.new configuration
11
11
  @namespace = :urn
12
12
  @header = ::EbayClient::Header.new configuration, namespace
13
- @client = ::Savon::Client.new configuration.wsdl_file
14
- @client.http.read_timeout = 600
13
+ @logger = (defined?(Rails) && Rails.respond_to?(:logger) ? Rails.logger : ::Logger.new(::STDOUT))
14
+ @client = ::Savon.client(
15
+ :wsdl => configuration.wsdl_file,
16
+ :read_timeout => configuration.http_read_timeout,
17
+ :namespaces => {'xmlns:urn' => 'urn:ebay:apis:eBLBaseComponents'},
18
+ :convert_request_keys_to => :camelcase,
19
+ :log => true,
20
+ :logger => @logger,
21
+ :log_level => configuration.savon_log_level,
22
+ )
15
23
  @calls = 0
16
24
 
17
- ::Gyoku.convert_symbols_to :camelcase
18
25
  create_methods if configuration.preload?
19
26
  end
20
27
 
21
- def dispatch name, body
28
+ def dispatch(name, body, fail_on_error = false)
22
29
  request = ::EbayClient::Request.new self, name, body
30
+ response = nil
23
31
 
24
32
  @calls += 1
25
33
  begin
26
- request.execute
27
- rescue ::EbayClient::Response::Error.for_code('218050') => e
28
- @configuration.next_key!
29
- request.execute
34
+ response = request.execute
35
+ response.raise_failure if fail_on_error && response.failure?
36
+ rescue ::EbayClient::Response::Exception => e
37
+ if e.code == '218050'
38
+ @configuration.next_key!
39
+ response = request.execute
40
+ else
41
+ @logger.error e.to_s unless @logger.nil? || !@logger.respond_to?(:error)
42
+ raise e
43
+ end
30
44
  end
45
+ response
31
46
  end
32
47
 
33
- def dispatch! name, body
34
- dispatch(name, body).payload!
48
+ def dispatch!(name, body)
49
+ dispatch(name, body, true).payload
35
50
  end
36
51
 
37
52
  def inspect
@@ -43,7 +58,7 @@ class EbayClient::Api < ActiveSupport::BasicObject
43
58
  def create_methods
44
59
  api_methods = ::Module.new
45
60
 
46
- client.wsdl.soap_actions.each do |action|
61
+ client.operations.each do |action|
47
62
  name = action.to_s.gsub(/e_bay_/, '_ebay_')
48
63
 
49
64
  api_methods.send :define_method, name do |*args|
@@ -58,9 +73,9 @@ class EbayClient::Api < ActiveSupport::BasicObject
58
73
  api_methods.send :extend_object, self
59
74
  end
60
75
 
61
- def method_missing name, *args, &block
62
- if name.to_s[-1,1] == '!'
63
- dispatch! name, args.first
76
+ def method_missing(name, *args, &block)
77
+ if name.to_s[-1, 1] == '!'
78
+ dispatch! name[0..-2], args.first
64
79
  else
65
80
  dispatch name, args.first
66
81
  end
@@ -2,16 +2,16 @@ class EbayClient::Configuration
2
2
  class ApiKey
3
3
  attr_accessor :appid, :devid, :certid, :token
4
4
 
5
- def initialize key_values
5
+ def initialize(key_values)
6
6
  key_values.each do |key, val|
7
7
  instance_variable_set "@#{key}", val
8
8
  end
9
9
  end
10
10
  end
11
11
 
12
- attr_accessor :version, :siteid, :routing, :url, :api_keys, :warning_level, :error_language, :current_key, :savon_log_level
12
+ attr_accessor :version, :siteid, :routing, :url, :api_keys, :warning_level, :error_language, :current_key, :savon_log_level, :http_read_timeout
13
13
 
14
- def initialize presets
14
+ def initialize(presets)
15
15
  presets.each do |key, val|
16
16
  instance_variable_set "@#{key}", val
17
17
  end
@@ -53,7 +53,7 @@ class EbayClient::Configuration
53
53
  end
54
54
 
55
55
  class << self
56
- def load file
56
+ def load(file)
57
57
  defaults = load_defaults
58
58
  configs = YAML.load_file file
59
59
 
@@ -1,22 +1,22 @@
1
1
  class EbayClient::Endpoint
2
2
  attr_reader :configuration
3
3
 
4
- def initialize configuration
4
+ def initialize(configuration)
5
5
  @configuration = configuration
6
6
  end
7
7
 
8
- def url_for action
8
+ def url_for(action)
9
9
  url_base + action.to_s
10
10
  end
11
11
 
12
12
  def url_base
13
- @url_base ||= [
13
+ [
14
14
  configuration.url,
15
15
  params_base
16
16
  ].join
17
17
  end
18
18
 
19
19
  def params_base
20
- @params_base ||= "?appid=#{configuration.appid}&siteid=#{configuration.siteid}&version=#{configuration.version}&routing=#{configuration.routing}&callname="
20
+ "?appid=#{configuration.appid}&siteid=#{configuration.siteid}&version=#{configuration.version}&routing=#{configuration.routing}&callname="
21
21
  end
22
22
  end
@@ -9,12 +9,6 @@ module EbayClient
9
9
  configuration = configurations[Rails.env]
10
10
 
11
11
  EbayClient.api = EbayClient::Api.new configuration
12
-
13
- ::Savon.configure do |config|
14
- config.log = true
15
- config.logger = Rails.logger
16
- config.log_level = configuration.savon_log_level
17
- end
18
12
  end
19
13
  end
20
14
  end
@@ -1,7 +1,7 @@
1
1
  class EbayClient::Header
2
2
  attr_reader :configuration, :namespace
3
3
 
4
- def initialize configuration, namespace
4
+ def initialize(configuration, namespace)
5
5
  @configuration = configuration
6
6
  @namespace = namespace
7
7
  end
@@ -20,7 +20,7 @@ class EbayClient::Header
20
20
  end
21
21
 
22
22
  protected
23
- def ns_key key
23
+ def ns_key(key)
24
24
  "#{namespace}:#{key}"
25
25
  end
26
26
  end
@@ -1,5 +1,5 @@
1
1
  class EbayClient::Request
2
- def initialize api, name, body
2
+ def initialize(api, name, body)
3
3
  @api = api
4
4
  @name = name
5
5
  @body = body || {}
@@ -9,6 +9,10 @@ class EbayClient::Request
9
9
  @normalized_name ||= @name.to_s.camelcase.gsub(/ebay/i, 'eBay')
10
10
  end
11
11
 
12
+ def name_symbol
13
+ @name_sym ||= @name.to_s.gsub(/_ebay_/i, 'e_bay_').to_sym
14
+ end
15
+
12
16
  def normalized_body
13
17
  @normalized_body ||= @body.to_hash.merge body_defaults
14
18
  end
@@ -27,14 +31,18 @@ class EbayClient::Request
27
31
  end
28
32
 
29
33
  def execute_request
30
- @api.client.request(@api.namespace, normalized_name + 'Request') do |soap|
31
- soap.endpoint = @api.endpoint.url_for normalized_name
32
- soap.header = @api.header.to_hash
33
- soap.body = normalized_body
34
- end
34
+ @api.client.set_endpoint @api.endpoint.url_for normalized_name
35
+ @api.client.call(name_symbol, soap_header: @api.header.to_hash, message: normalized_body)
35
36
  end
36
37
 
37
- def read_response response_body
38
+ def read_response(response_body)
38
39
  EbayClient::Response.new response_body.values.first
39
40
  end
40
41
  end
42
+
43
+ # We need to monkey-patch savon to be able to alter the endpoint on each call
44
+ class Savon::Client
45
+ def set_endpoint(endpoint)
46
+ @globals[:endpoint] = endpoint
47
+ end
48
+ end