honeys-place 0.1.0 → 0.1.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.
- checksums.yaml +5 -5
- data/lib/honey.rb +1 -0
- data/lib/honey/client.rb +18 -10
- data/lib/honey/data_feed.rb +47 -0
- data/lib/honey/response.rb +2 -2
- data/lib/honey/version.rb +1 -1
- data/test/honey/client_test.rb +0 -5
- data/test/honey/data_feed_test.rb +17 -0
- data/test/test_helper.rb +4 -0
- metadata +40 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 504d6240757a67d21325d7f039a0ed8c313d8f9132fcfcb9acc90554aaf9c29c
|
4
|
+
data.tar.gz: c5cf0c2af8979746746e8ec8957d1960f040d373d15e6344dc5b24cce0949820
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edf5ef1c144f30fc475f9ff14a08c6703f39dd587a754b7f59286e3f325ab56c26ee2732182f81ac4731c6d9b976a57c3baab08a9628e1e6aa95b4d57c789e1f
|
7
|
+
data.tar.gz: deea54daba4ccc06a3ef7cbeb6646b6f913e3a2b61056b049069ba05d0c51eae4012fffab87241f3e5c6f208ff1608ea2ae0af5f9803c0cb49808ce11d40e482
|
data/lib/honey.rb
CHANGED
data/lib/honey/client.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Honey
|
2
2
|
class Client
|
3
3
|
include HTTParty
|
4
|
+
format :xml
|
4
5
|
base_uri 'https://www.honeysplace.com/ws/'
|
5
6
|
|
6
7
|
def initialize(account = '', token = '')
|
@@ -16,17 +17,15 @@ module Honey
|
|
16
17
|
end
|
17
18
|
|
18
19
|
def stock_check(*skus)
|
19
|
-
results = {}
|
20
20
|
skus = skus.first if skus.first.is_a? Array
|
21
|
-
skus.each_slice(25) do |sku_group|
|
22
|
-
|
23
|
-
data
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
results
|
21
|
+
skus.each_slice(25).map do |sku_group|
|
22
|
+
data = post(build_stock_check(*sku_group)).stock['item']
|
23
|
+
stock_hash(data)
|
24
|
+
end.reduce({}, :merge)
|
25
|
+
end
|
26
|
+
|
27
|
+
def data_feed(code, format)
|
28
|
+
DataFeed.new(code, format)
|
30
29
|
end
|
31
30
|
|
32
31
|
def build_order(order)
|
@@ -43,6 +42,15 @@ module Honey
|
|
43
42
|
|
44
43
|
private
|
45
44
|
|
45
|
+
def stock_hash(data)
|
46
|
+
# API returns single element not wrapped in array
|
47
|
+
data = [data] unless data.is_a?(Array)
|
48
|
+
|
49
|
+
data.map do |datum|
|
50
|
+
[datum['sku'], datum['qty'].to_i]
|
51
|
+
end.to_h
|
52
|
+
end
|
53
|
+
|
46
54
|
def post(xml)
|
47
55
|
Honey::Response.new(self.class.post('', { query: { xmldata: xml }}))
|
48
56
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Honey
|
2
|
+
#
|
3
|
+
# Data Feed
|
4
|
+
#
|
5
|
+
# Access Honey's Place data feeds in various formats
|
6
|
+
#
|
7
|
+
class DataFeed
|
8
|
+
attr_reader :code, :format
|
9
|
+
|
10
|
+
Formats = %i(xml json csv woo shopify amazon_inventory).freeze
|
11
|
+
|
12
|
+
def initialize(code, format)
|
13
|
+
@code = code
|
14
|
+
@format = format if Formats.include?(format)
|
15
|
+
end
|
16
|
+
|
17
|
+
def url
|
18
|
+
if format.nil?
|
19
|
+
raise ArgumentError, "format is required to be one of #{Formats}"
|
20
|
+
end
|
21
|
+
"https://www.honeysplace.com/df/#{code}/#{format}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def parse
|
25
|
+
read
|
26
|
+
end
|
27
|
+
|
28
|
+
def download_to(path)
|
29
|
+
File.open(path, 'w') do |file|
|
30
|
+
file.write(read)
|
31
|
+
# HTTParty.get(url, stream: true) do |fragment|
|
32
|
+
# file.write(fragment)
|
33
|
+
# end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def read
|
40
|
+
response = HTTParty.get(url)
|
41
|
+
if response.headers['content-type'].start_with?('text/html;')
|
42
|
+
raise StandardError, 'This data feed is not ready. Try again later.'
|
43
|
+
end
|
44
|
+
response.parsed_response
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/honey/response.rb
CHANGED
@@ -5,8 +5,8 @@ module Honey
|
|
5
5
|
attr_accessor :data
|
6
6
|
|
7
7
|
def initialize(http_response)
|
8
|
-
|
9
|
-
@data = OpenStruct.new(
|
8
|
+
data = http_response.parsed_response['HPEnvelope']
|
9
|
+
@data = OpenStruct.new(data)
|
10
10
|
end
|
11
11
|
|
12
12
|
def method_missing(method, *args, &block)
|
data/lib/honey/version.rb
CHANGED
data/test/honey/client_test.rb
CHANGED
@@ -5,11 +5,6 @@ class ClientTest < Minitest::Test
|
|
5
5
|
@client = Honey::Client.new
|
6
6
|
end
|
7
7
|
|
8
|
-
def test_data_feed_url
|
9
|
-
assert_equal Honey::Client.data_feed_url(:xml), "xml/honeysinventoryv2_0.xml"
|
10
|
-
assert_equal Honey::Client.data_feed_url(:txt), "xml/honeysinventory_v_1.0.txt"
|
11
|
-
end
|
12
|
-
|
13
8
|
def test_builds_order
|
14
9
|
assert_match_xpath "order/items/item", @client.build_order(valid_order)
|
15
10
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class DataFeedTest < Minitest::Test
|
4
|
+
def test_url
|
5
|
+
feed = Honey::DataFeed.new('code', :json)
|
6
|
+
assert_equal feed.url, 'https://www.honeysplace.com/df/code/json'
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_format_is_valid
|
10
|
+
feed = Honey::DataFeed.new('code', :unknown_format)
|
11
|
+
assert_nil feed.format
|
12
|
+
|
13
|
+
assert_raises ArgumentError do
|
14
|
+
feed.url
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: honeys-place
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Evan Shreve
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -16,54 +16,70 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.13.0
|
19
|
+
version: '0.16'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '0.
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 0.13.0
|
26
|
+
version: '0.16'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: nokogiri
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
31
|
- - "~>"
|
38
32
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1.
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 1.6.1
|
33
|
+
version: '1.8'
|
43
34
|
type: :runtime
|
44
35
|
prerelease: false
|
45
36
|
version_requirements: !ruby/object:Gem::Requirement
|
46
37
|
requirements:
|
47
38
|
- - "~>"
|
48
39
|
- !ruby/object:Gem::Version
|
49
|
-
version: '1.
|
50
|
-
|
40
|
+
version: '1.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '12.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '12.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
51
67
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
68
|
+
version: '5.8'
|
53
69
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
70
|
+
name: byebug
|
55
71
|
requirement: !ruby/object:Gem::Requirement
|
56
72
|
requirements:
|
57
73
|
- - "~>"
|
58
74
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
75
|
+
version: '9.1'
|
60
76
|
type: :development
|
61
77
|
prerelease: false
|
62
78
|
version_requirements: !ruby/object:Gem::Requirement
|
63
79
|
requirements:
|
64
80
|
- - "~>"
|
65
81
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
82
|
+
version: '9.1'
|
67
83
|
description: |2
|
68
84
|
Honey's Place is a wrapper for the Honey's Place API which easily enables
|
69
85
|
placing orders, checking order statuses, and stock checking.
|
@@ -75,6 +91,7 @@ files:
|
|
75
91
|
- lib/honey.rb
|
76
92
|
- lib/honey/builder.rb
|
77
93
|
- lib/honey/client.rb
|
94
|
+
- lib/honey/data_feed.rb
|
78
95
|
- lib/honey/error.rb
|
79
96
|
- lib/honey/order.rb
|
80
97
|
- lib/honey/response.rb
|
@@ -82,6 +99,7 @@ files:
|
|
82
99
|
- lib/nokogiri/xml/document_to_hash.rb
|
83
100
|
- test/honey/builder_test.rb
|
84
101
|
- test/honey/client_test.rb
|
102
|
+
- test/honey/data_feed_test.rb
|
85
103
|
- test/honey/order_test.rb
|
86
104
|
- test/honey_test.rb
|
87
105
|
- test/nokogiri/xml/document_to_hash_test.rb
|
@@ -106,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
124
|
version: '0'
|
107
125
|
requirements: []
|
108
126
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.6
|
127
|
+
rubygems_version: 2.7.6
|
110
128
|
signing_key:
|
111
129
|
specification_version: 4
|
112
130
|
summary: A wrapper for the Honey's Place API
|
@@ -114,6 +132,7 @@ test_files:
|
|
114
132
|
- test/honey_test.rb
|
115
133
|
- test/test_helper.rb
|
116
134
|
- test/nokogiri/xml/document_to_hash_test.rb
|
135
|
+
- test/honey/data_feed_test.rb
|
117
136
|
- test/honey/builder_test.rb
|
118
137
|
- test/honey/client_test.rb
|
119
138
|
- test/honey/order_test.rb
|