ruwoco 1.0.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/ruwoco.rb +159 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bd0b6d47628e2762008c6900884d0c34427f229f
4
+ data.tar.gz: ff3def0f381eda504e5a52eb7c37811cc67afd7b
5
+ SHA512:
6
+ metadata.gz: c901e75781624e341494a7bd36700c680b9b2a71e3ff478f21620e0b591a1ec71ad316f440c22bea9032a254cd479b869cfeb6794ec05f9d50aaaf7167cf6fef
7
+ data.tar.gz: 2b8029323e26a794292d17d4f8c77175df3c3682d0e52402ce9f3a5683bb5a2a2fea597227c3183637cfef157b19b1cbf4c8ce16e35f2c154809b6929e2d5fbb
@@ -0,0 +1,159 @@
1
+ class RuWoCo
2
+ require "digest/sha1"
3
+ require "cgi"
4
+ require "json"
5
+ require "base64"
6
+ require "openssl"
7
+ require "net/http"
8
+ require "net/https"
9
+
10
+ attr_accessor :consumer_key, :consumer_secret, :api_url, :is_ssl
11
+
12
+ API_ENDPOINT = "wc-api/v1/"
13
+ HTTP_GET = "GET"
14
+ HTTP_POST = "POST"
15
+
16
+ def initialize(consumer_key, consumer_secret, store_url, is_ssl = true)
17
+ if consumer_key && consumer_secret && store_url
18
+ @consumer_key = consumer_key
19
+ @consumer_secret = consumer_secret
20
+ @api_url = store_url + API_ENDPOINT
21
+ @is_ssl = is_ssl
22
+ elsif !consumer_key
23
+ raise "Consumer key missing"
24
+ elsif !consumer_secret
25
+ raise "Consumer secret missing"
26
+ else
27
+ raise "Store URL missing"
28
+ end
29
+ end
30
+
31
+ def get_index()
32
+ return make_api_call()
33
+ end
34
+
35
+ def get_orders(params = {})
36
+ return make_api_call("orders", params)
37
+ end
38
+
39
+ def get_order(order_id)
40
+ return make_api_call("orders/#{order_id}")
41
+ end
42
+
43
+ def get_orders_count()
44
+ return make_api_call("orders/count")
45
+ end
46
+
47
+ def get_order_notes(order_id)
48
+ return make_api_call("orders/#{order_id}/notes")
49
+ end
50
+
51
+ def update_order(order_id, params = {})
52
+ return make_api_call("orders/#{order_id}", params, 'POST')
53
+ end
54
+
55
+ def get_coupons(params = {})
56
+ return make_api_call("coupons", params)
57
+ end
58
+
59
+ def get_coupon(coupon_id)
60
+ return make_api_call("coupons/#{coupon_id}")
61
+ end
62
+
63
+ def get_coupons_count()
64
+ return make_api_call("coupons/count")
65
+ end
66
+
67
+ def get_coupon_by_code(coupon_code)
68
+ return make_api_call("coupons/code/#{coupon_code}")
69
+ end
70
+
71
+ def get_customers(params = {})
72
+ return make_api_call("customers", params)
73
+ end
74
+
75
+ def get_customer(customer_id)
76
+ return make_api_call("customers/#{customer_id}")
77
+ end
78
+
79
+ def get_customer_by_email(email)
80
+ return make_api_call("customers/email/#{email}")
81
+ end
82
+
83
+ def get_customers_count()
84
+ return make_api_call("customers/count")
85
+ end
86
+
87
+ def get_customer_orders(customer_id)
88
+ return make_api_call("customers/#{customer_id}/orders")
89
+ end
90
+
91
+ def get_products()
92
+ return make_api_call("products")
93
+ end
94
+
95
+ def get_product(product_id)
96
+ return make_api_call("products/#{product_id}")
97
+ end
98
+
99
+ def get_products_count()
100
+ return make_api_call("products/count")
101
+ end
102
+
103
+ def get_reports(params = {})
104
+ return make_api_call("reports")
105
+ end
106
+
107
+ def get_sales_report(params = {})
108
+ return make_api_call("reports/sales", params)
109
+ end
110
+
111
+ def get_top_sellers_report(params = {})
112
+ return make_api_call("reports/sales/top_sellers", params)
113
+ end
114
+
115
+ def make_api_call(endpoint, params = {}, method='GET')
116
+ if (!@is_ssl)
117
+ params[:oauth_consumer_key] = @consumer_key
118
+ params[:oauth_nonce] = Digest::SHA1.hexdigest(Time.new.to_i)
119
+ params[:oauth_signature_method] = 'HMAC-256'
120
+ params[:oauth_timestamp] = Time.new.to_i
121
+ params[:oauth_signature] = generate_oauth_signature(endpoint, params, method)
122
+ end
123
+
124
+ if (method == HTTP_GET)
125
+ query = URI.encode_www_form(params)
126
+ uri = URI(@api_url + endpoint + '?' + query)
127
+ http = Net::HTTP.new(uri.host, uri.port)
128
+ http.use_ssl = true
129
+ req = Net::HTTP::Get.new(uri.request_uri)
130
+ req.basic_auth(@consumer_key, @consumer_secret)
131
+ res = http.start { |test| test.request(req) }
132
+ elsif (method == HTTP_POST)
133
+ url = URI.parse(@api_url + endpoint)
134
+ req = Net::HTTP::Post.new(url.path)
135
+ req.basic_auth(@consumer_key, @consumer_secret)
136
+ req.body = params.to_json
137
+ sock = Net::HTTP.new(url.host, url.port)
138
+ sock.use_ssl = true
139
+ res = sock.start { |test| test.request(req) }
140
+ else
141
+ raise "Unsupported HTTP operation requested"
142
+ end
143
+
144
+ return res.body.to_json()
145
+ end
146
+
147
+ def generate_oauth_signature(endpoint, params, method)
148
+ base_request_uri = CGI::escape(@api_url + endpoint)
149
+
150
+ query_params = []
151
+ params.each { |key, value| query_params.push(CGI::escape(key) + "%3D" + CGI::escape(value)) }
152
+
153
+ query_string = "%26".join(query_params)
154
+
155
+ string_to_sign = method + "&" + base_request_uri + '&' + query_string
156
+
157
+ return Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), @consumer_secret, string_to_sign))
158
+ end
159
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruwoco
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dave Cooper
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Ruby WooCommerce RESTful API client library
14
+ email: dave@davecooper.org
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/ruwoco.rb
20
+ homepage: http://github.com/gurgus/RuWoCo
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.2.2
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Ruby WooCommerce client library
44
+ test_files: []