spos-client 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 96cc4174aca1da90506c8bdabb2e0cd5a2da7428
4
+ data.tar.gz: 85b0272caa62feed405d7d687aa3525b259b073c
5
+ SHA512:
6
+ metadata.gz: a8d5a0ecc0429f57f2a1479a3ffd420e6ddc917baf3cf7e49c6d90448869dff039e0d5152fc301a86fb1325b80a7b2915db63350706e18120532e8af16cc761a
7
+ data.tar.gz: 984c96769787b5781b2afa26988017b1f3626a4928c23f634f91f55e9c13279612cec3eece74f74cdd08377923e0f6494cf3f188d64756e2bed847ef02f464ed
@@ -0,0 +1,109 @@
1
+ require 'net/http'
2
+ require 'json'
3
+ require 'ostruct'
4
+ require 'time'
5
+ require_relative './spos-client/resource'
6
+ require_relative './spos-client/time-helpers'
7
+
8
+ class SPOSClient
9
+ attr_reader :Adcodes, :Addresses, :Affiliates, :AttributeGroups, :Attributes, :BlogCategories, :BlogPosts, :Blogs, :CartItems, :Carts, :Categories, :CouponCodes, :CreditCards, :CustomFieldValues, :CustomFields, :CustomShippingMethods, :CustomerPaymentMethods, :CustomerTypes, :Customers, :DiscountMethods, :DiscountRules, :Drips, :EmailTemplates, :GiftCertificateTransactions, :GiftCertificates, :Inventory, :Links, :MailingLists, :Manufacturers, :OrderAddresses, :OrderItems, :OrderPayments, :OrderShipments, :OrderStatuses, :Orders, :Pages, :PaymentMethods, :ProductLists, :ProductPictures, :ProductReviews, :ProductStatuses, :ProductVariants, :Products, :Profiles, :Quotes, :Regions, :Sessions, :ShippingProviders, :ShippingRateAdjustments, :Stores, :Subscriptions, :TaxRates, :UrlRedirects, :Users, :VariantGroups, :VariantInventory, :Warehouses, :Webhooks, :Wishlists
10
+
11
+ def initialize(domain, token)
12
+ @domain = domain
13
+ @token = token
14
+
15
+ @Adcodes = Resource.new "adcodes", self
16
+ @Addresses = Resource.new "addresses", self
17
+ @Affiliates = Resource.new "affiliates", self
18
+ @AttributeGroups = Resource.new "attribute_groups", self
19
+ @Attributes = Resource.new "attributes", self
20
+ @BlogCategories = Resource.new "blog_categories", self
21
+ @BlogPosts = Resource.new "blog_posts", self
22
+ @Blogs = Resource.new "blogs", self
23
+ @CartItems = Resource.new "cart_items", self
24
+ @Carts = Resource.new "carts", self
25
+ @Categories = Resource.new "categories", self
26
+ @CouponCodes = Resource.new "coupon_codes", self
27
+ @CreditCards = Resource.new "credit_cards", self
28
+ @CustomFieldValues = Resource.new "custom_field_values", self
29
+ @CustomFields = Resource.new "custom_fields", self
30
+ @CustomShippingMethods = Resource.new "custom_shipping_methods", self
31
+ @CustomerPaymentMethods = Resource.new "customer_payment_methods", self
32
+ @CustomerTypes = Resource.new "customer_types", self
33
+ @Customers = Resource.new "customers", self
34
+ @DiscountMethods = Resource.new "discount_methods", self
35
+ @DiscountRules = Resource.new "discount_rules", self
36
+ @Drips = Resource.new "drips", self
37
+ @EmailTemplates = Resource.new "email_templates", self
38
+ @GiftCertificateTransactions = Resource.new "gift_certificate_transactions", self
39
+ @GiftCertificates = Resource.new "gift_certificates", self
40
+ @Inventory = Resource.new "inventory", self
41
+ @Links = Resource.new "links", self
42
+ @MailingLists = Resource.new "mailing_lists", self
43
+ @Manufacturers = Resource.new "manufacturers", self
44
+ @OrderAddresses = Resource.new "order_addresses", self
45
+ @OrderItems = Resource.new "order_items", self
46
+ @OrderPayments = Resource.new "order_payments", self
47
+ @OrderShipments = Resource.new "order_shipments", self
48
+ @OrderStatuses = Resource.new "order_statuses", self
49
+ @Orders = Resource.new "orders", self
50
+ @Pages = Resource.new "pages", self
51
+ @PaymentMethods = Resource.new "payment_methods", self
52
+ @ProductLists = Resource.new "product_lists", self
53
+ @ProductPictures = Resource.new "product_pictures", self
54
+ @ProductReviews = Resource.new "product_reviews", self
55
+ @ProductStatuses = Resource.new "product_statuses", self
56
+ @ProductVariants = Resource.new "product_variants", self
57
+ @Products = Resource.new "products", self
58
+ @Profiles = Resource.new "profiles", self
59
+ @Quotes = Resource.new "quotes", self
60
+ @Regions = Resource.new "regions", self
61
+ @Sessions = Resource.new "sessions", self
62
+ @ShippingProviders = Resource.new "shipping_providers", self
63
+ @ShippingRateAdjustments = Resource.new "shipping_rate_adjustments", self
64
+ @Stores = Resource.new "stores", self
65
+ @Subscriptions = Resource.new "subscriptions", self
66
+ @TaxRates = Resource.new "tax_rates", self
67
+ @UrlRedirects = Resource.new "url_redirects", self
68
+ @Users = Resource.new "users", self
69
+ @VariantGroups = Resource.new "variant_groups", self
70
+ @VariantInventory = Resource.new "variant_inventory", self
71
+ @Warehouses = Resource.new "warehouses", self
72
+ @Webhooks = Resource.new "webhooks", self
73
+ @Wishlists = Resource.new "wishlists", self
74
+ end
75
+
76
+ def request(path, body = nil)
77
+ uri = URI.parse("https://#{@domain}/api/v1/#{path}")
78
+
79
+ http = Net::HTTP.new(uri.host, uri.port)
80
+ http.use_ssl = true
81
+
82
+ if(body.nil?)
83
+ request = Net::HTTP::Get.new(uri.request_uri)
84
+ else
85
+ if(body.has_key?("id"))
86
+ request = Net::HTTP::Put.new(uri.request_uri)
87
+ else
88
+ request = Net::HTTP::Post.new(uri.request_uri)
89
+ end
90
+
91
+ request.add_field('Content-Type', 'application/json')
92
+ request.body = body.to_json
93
+ end
94
+
95
+ request['X-AC-Auth-Token'] = @token
96
+ response = http.request(request)
97
+
98
+ body = JSON.parse(JSON.parse(response.body).to_json, object_class: OpenStruct)
99
+
100
+ if body.status_code === 429
101
+ retrytime =
102
+ time = Time.now.time_until(Time.parse(response['Retry-After']))
103
+ sleep (time/1000)
104
+ body = request(path)
105
+ end
106
+
107
+ body
108
+ end
109
+ end
@@ -0,0 +1,31 @@
1
+ class Resource
2
+ def initialize(endpoint, client)
3
+ @endpoint = endpoint
4
+ @client = client
5
+ end
6
+
7
+ def get(id = nil)
8
+ if(id != nil)
9
+ path = "#{@endpoint}/#{id}"
10
+ else
11
+ path = @endpoint
12
+ end
13
+
14
+ @client.request(path)
15
+ end
16
+
17
+ def save(body)
18
+ if(body.is_a?(OpenStruct))
19
+ body = body.to_h
20
+ end
21
+
22
+ if(body.has_key?("id"))
23
+ path = "#{@endpoint}/#{body['id']}"
24
+ else
25
+ path = @endpoint
26
+ end
27
+
28
+ @client.request(path, body)
29
+ end
30
+
31
+ end
@@ -0,0 +1,11 @@
1
+ require 'time'
2
+
3
+ class Time
4
+ def to_ms
5
+ (self.to_f * 1000.0).to_i
6
+ end
7
+
8
+ def time_until(future_date)
9
+ future_date.to_ms - self.to_ms
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spos-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Shayne Martin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Simple RUby bindings for your Spark Pay Online Store REST API
14
+ email: shayne.martin@capitalone.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/spos-client.rb
20
+ - lib/spos-client/resource.rb
21
+ - lib/spos-client/time-helpers.rb
22
+ homepage: http://rubygems.org/gems/spos-client
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.0.14.1
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Simple RUby bindings for your Spark Pay Online Store REST API
46
+ test_files: []