zinc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
@@ -0,0 +1,30 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ zinc (0.0.1)
5
+ rest-client (~> 1.4)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ mime-types (1.21)
12
+ rake (10.0.3)
13
+ rest-client (1.6.7)
14
+ mime-types (>= 1.16)
15
+ rspec (2.10.0)
16
+ rspec-core (~> 2.10.0)
17
+ rspec-expectations (~> 2.10.0)
18
+ rspec-mocks (~> 2.10.0)
19
+ rspec-core (2.10.1)
20
+ rspec-expectations (2.10.0)
21
+ diff-lcs (~> 1.1.3)
22
+ rspec-mocks (2.10.1)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ rake
29
+ rspec
30
+ zinc!
@@ -0,0 +1,36 @@
1
+ = Zinc Ruby Bindings
2
+
3
+ == Introduction
4
+ Ruby bindings for the {Zinc}[https://zinc.io] API
5
+
6
+ Heavily inspired by the {Stripe Ruby Bindings}[https://github.com/stripe/stripe-ruby]
7
+
8
+ By Julian Simioni
9
+
10
+ == Usage
11
+
12
+ Zinc.api_key = "your-api-key" # set the API key first
13
+
14
+ new_order = Zinc::Order.create({:address => {
15
+ :name =>"Tim Beaver",
16
+ :address_line1 => "77 Massachusetts Avenue",
17
+ :zip_code => "02139",
18
+ :city": "Cambridge",
19
+ :state": "MA",
20
+ :country": "US"
21
+ },
22
+ :address_suggestion_choice => "suggested",
23
+ :products => [
24
+ {
25
+ :pid => "B003L1ZYYM",
26
+ :pid_type => "ASIN",
27
+ },
28
+ {
29
+ :pid => "0833030477",
30
+ :pid_type => "ASIN",
31
+ }
32
+ ]})
33
+
34
+
35
+ # all parameters returned by the {Zinc API}[https://zinc.io/docs] can be used as accessors
36
+ puts new_order.ship_date_estimate # => 1336120454
@@ -0,0 +1,4 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new('spec')
3
+
4
+ task :default => :spec
@@ -0,0 +1,44 @@
1
+ require 'json'
2
+ require 'rest_client'
3
+
4
+ require 'zinc/order'
5
+
6
+ require 'zinc/errors/authentication_error'
7
+
8
+ module Zinc
9
+ @@url_base = 'https://api.zinc.io/v1/'
10
+ @@api_key = nil
11
+
12
+ def self.api_key=(key)
13
+ @@api_key = key
14
+ end
15
+
16
+ def self.api_key
17
+ @@api_key
18
+ end
19
+
20
+ def self.url_base
21
+ @@url_base
22
+ end
23
+
24
+ def self.request(method, url, params)
25
+ raise AuthenticationError unless api_key
26
+
27
+ if method == :post and params == {}
28
+ return
29
+ end
30
+
31
+ opts = {
32
+ :method => method,
33
+ :user => api_key,
34
+ :url => url,
35
+ :payload => params.to_json,
36
+ }
37
+ response = execute_request(opts)
38
+ return JSON.parse(response)
39
+ end
40
+
41
+ def self.execute_request(opts)
42
+ RestClient::Request.execute(opts)
43
+ end
44
+ end
@@ -0,0 +1,4 @@
1
+ module Zinc
2
+ class AuthenticationError < StandardError
3
+ end
4
+ end
@@ -0,0 +1,40 @@
1
+ module Zinc
2
+ class Order
3
+ def self.create(params = {})
4
+ o = Order.new
5
+ response = Zinc.request(:post, url, params)
6
+ if response
7
+ o.set_values(response)
8
+ end
9
+ o
10
+ end
11
+
12
+ def self.get(id)
13
+ o = Order.new
14
+ response = Zinc.request(:get, url+'/'+id, {})
15
+ if response
16
+ o.set_values(response)
17
+ end
18
+ o
19
+ end
20
+
21
+ def self.url
22
+ Zinc.url_base+'orders'
23
+ end
24
+
25
+ def set_values(values)
26
+ @values = values
27
+ end
28
+
29
+ def method_missing(name, *args)
30
+ @values ||= {}
31
+ if name.to_s.end_with?('=')
32
+ @values[name.to_s] = args[0]
33
+ else
34
+ @values[name.to_s]
35
+ end
36
+ end
37
+
38
+ private
39
+ end
40
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe Zinc do
4
+ context "API Bindings" do
5
+ before(:each) do
6
+ @mock = mock
7
+ Zinc.api_key = 'foo'
8
+ Zinc.mock_rest_client = @mock
9
+ end
10
+
11
+ it "doesn't use the network when creating a new Order object" do
12
+ @mock.should_receive(:get).never
13
+ Zinc::Order.create
14
+ end
15
+
16
+ it "returns a response object when Zinc.request called" do
17
+ data = {'foo' => "bar"}
18
+ @mock.should_receive(:post).once.and_return(test_response(data))
19
+ response = Zinc.request(:post, Zinc::Order.url, data)
20
+ response.should == data
21
+ end
22
+
23
+ context "create object with params" do
24
+ before(:each) do
25
+ expects = {:user => Zinc.api_key, :method => :post, :url => Zinc::Order.url, :payload => test_order_create.to_json}
26
+ @mock.should_receive(:post).once.with(expects).and_return(test_response(test_order_response))
27
+ @order = Zinc::Order.create(test_order_create)
28
+ end
29
+
30
+ it "sends a post request"do
31
+ end
32
+
33
+ it "returns an order object with accessible attributes" do
34
+ @order.merchant.should == test_order_response[:merchant]
35
+ @order.created_date.should == test_order_response[:created_date]
36
+ end
37
+
38
+ it "request sends API key as user" do
39
+ end
40
+ end
41
+
42
+ context "get existing object" do
43
+ it "returns an order object when get called with id" do
44
+ id = test_order_response[:id]
45
+ expects = {:url => Zinc::Order.url+'/'+id, :user => Zinc.api_key, :method => :get, :payload => {}.to_s}
46
+ @mock.should_receive(:get).once.with(expects).and_return(test_response(test_order_response))
47
+ @order = Zinc::Order.get(id)
48
+
49
+ @order.id.should == id
50
+ @order.merchant.should == test_order_response[:merchant]
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ module Zinc
4
+ describe Zinc do
5
+ context "credentials" do
6
+ it "throws an error if request made without api credentials" do
7
+ Zinc.api_key = nil
8
+ expect { Zinc::Order.create }.to raise_error(Zinc::AuthenticationError)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ module Zinc
4
+ describe Zinc do
5
+ before(:each) do
6
+ Zinc.api_key = 'foo'
7
+ end
8
+
9
+ context "Order object" do
10
+ it "returns an Order object when a create class method is called" do
11
+ Zinc::Order.create.class.should == Zinc::Order
12
+ end
13
+
14
+ it "returns full API url through self.url" do
15
+ Zinc::Order.url.should == 'https://api.zinc.io/v1/orders'
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ require 'rspec'
2
+ require 'zinc'
3
+
4
+ require 'test_content'
5
+ require 'test_helper'
6
+
7
+ RSpec.configure do |config|
8
+ config.color_enabled = true
9
+ config.formatter = 'documentation'
10
+ end
@@ -0,0 +1,83 @@
1
+ def test_order_create
2
+ {
3
+ :mode =>"dev",
4
+ :max_total => 6000,
5
+ :address => {
6
+ :name => "Tim Beaver",
7
+ :address_line1 => "77 Massachusetts Avenue",
8
+ :address_line2 => nil,
9
+ :zip_code => "02139",
10
+ :city => "Cambridge",
11
+ :state => "MA",
12
+ :country => "US"
13
+ },
14
+ :address_suggestion_choice => "suggested",
15
+ :products => [
16
+ {
17
+ :pid => "B003L1ZYYM",
18
+ :pid_type => "ASIN",
19
+ :qty => 1
20
+ },
21
+ {
22
+ :pid => "0833030477",
23
+ :pid_type => "ASIN",
24
+ :qty => 1
25
+ }
26
+ ],
27
+ :merchant => "amazon",
28
+ :gift_ship => true,
29
+ :gift_message => "Thanks for ordering from example.com!",
30
+ :shipping_method => "standard"
31
+ }
32
+ end
33
+
34
+ def test_order_response
35
+ {
36
+ :_type => "order",
37
+ :id => "xyg2rfplly",
38
+ :mode => "live",
39
+ :order_total => 2040,
40
+ :fee => 40,
41
+ :max_total => 4000,
42
+ :address => {
43
+ :_type =>"address",
44
+ :name => "Tim Beaver",
45
+ :address_line1 => "77 Massachusetts Avenue",
46
+ :address_line2 => nil,
47
+ :zip_code => "02139",
48
+ :city => "Cambridge",
49
+ :state => "MA",
50
+ :country => "US"
51
+ },
52
+ :address_original => nil,
53
+ :address_suggested => nil,
54
+ :address_suggestion_choice => nil,
55
+ :products => [
56
+ {
57
+ :_type => "product",
58
+ :pid => "B003L1ZYYM",
59
+ :pid_type => "ASIN",
60
+ :qty => 1,
61
+ :price => 1500
62
+ }
63
+ ],
64
+ :merchant => "amazon",
65
+ :gift_ship => false,
66
+ :gift_message => nil,
67
+ :shipping_method => "standard",
68
+ :shipping_cost => 500,
69
+ :status => {
70
+ :_type => "status",
71
+ :state => "active",
72
+ :code => "processed",
73
+ :message => "Your order has been processed with the merchant and is awaiting shipment."
74
+ },
75
+ :created_date => 1336100454,
76
+ :ship_date => nil,
77
+ :delivery_date => nil,
78
+ :ship_date_estimate => 1336120454,
79
+ :delivery_date_estimate => 1336705254,
80
+ :tracking_number => nil,
81
+ :tracking_type => nil
82
+ }
83
+ end
@@ -0,0 +1,24 @@
1
+ module Zinc
2
+ @mock_rest_client = nil
3
+
4
+ def self.mock_rest_client=(mock_client)
5
+ @mock_rest_client = mock_client
6
+ end
7
+
8
+ def self.execute_request(opts)
9
+ case opts[:method]
10
+ when :post then @mock_rest_client.post opts
11
+ when :get then @mock_rest_client.get opts
12
+ end
13
+ end
14
+ end
15
+
16
+ class TestResponse
17
+ attr_accessor :code, :body
18
+ end
19
+
20
+ def test_response(body)
21
+ if body.class == Hash
22
+ body.to_json.to_s
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ spec = Gem::Specification.new do |s|
2
+ s.name = 'zinc'
3
+ s.version = '0.1.0'
4
+ s.summary = 'Ruby bindings for the Zinc(https://zinc.io) API'
5
+ s.description = s.summary
6
+ s.authors = ['Julian Simioni']
7
+ s.email = ['julian.simioni@gmail.com']
8
+
9
+ s.add_dependency('rest-client', '~> 1.4')
10
+
11
+ s.add_development_dependency('rspec')
12
+ s.add_development_dependency('rake')
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- spec/*`.split("\n")
16
+ s.require_paths = ['lib']
17
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zinc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Julian Simioni
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.4'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.4'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Ruby bindings for the Zinc(https://zinc.io) API
63
+ email:
64
+ - julian.simioni@gmail.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - Gemfile
70
+ - Gemfile.lock
71
+ - README.rdoc
72
+ - Rakefile
73
+ - lib/zinc.rb
74
+ - lib/zinc/errors/authentication_error.rb
75
+ - lib/zinc/order.rb
76
+ - spec/api_spec.rb
77
+ - spec/credentials_spec.rb
78
+ - spec/order_spec.rb
79
+ - spec/spec_helper.rb
80
+ - spec/test_content.rb
81
+ - spec/test_helper.rb
82
+ - zinc.gemspec
83
+ homepage:
84
+ licenses: []
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 1.8.24
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: Ruby bindings for the Zinc(https://zinc.io) API
107
+ test_files:
108
+ - spec/api_spec.rb
109
+ - spec/credentials_spec.rb
110
+ - spec/order_spec.rb
111
+ - spec/spec_helper.rb
112
+ - spec/test_content.rb
113
+ - spec/test_helper.rb