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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0a08af2d85e3a712366d811415666ffd8ea7a144
4
- data.tar.gz: 8f38a52609bb94b604d9f0ee684c2e64df239b39
2
+ SHA256:
3
+ metadata.gz: 504d6240757a67d21325d7f039a0ed8c313d8f9132fcfcb9acc90554aaf9c29c
4
+ data.tar.gz: c5cf0c2af8979746746e8ec8957d1960f040d373d15e6344dc5b24cce0949820
5
5
  SHA512:
6
- metadata.gz: 43f41616c775fd2115580cdab00a6fb3a13a4c61f74360fd096e3c5d3692bf959309f4cae3e7ccd3f92b4ae4f6a8d3066ef57709d3873f394f246a08d787e7d6
7
- data.tar.gz: 193d2bdc502c26ec24054c058dd48f511762a889dc8c23093a1e2133c1e1564958ab4f5c3bcef17dbfc850004ac69829d7ca973f1d1490523b940b987c124d10
6
+ metadata.gz: edf5ef1c144f30fc475f9ff14a08c6703f39dd587a754b7f59286e3f325ab56c26ee2732182f81ac4731c6d9b976a57c3baab08a9628e1e6aa95b4d57c789e1f
7
+ data.tar.gz: deea54daba4ccc06a3ef7cbeb6646b6f913e3a2b61056b049069ba05d0c51eae4012fffab87241f3e5c6f208ff1608ea2ae0af5f9803c0cb49808ce11d40e482
@@ -5,6 +5,7 @@ require 'nokogiri/xml/document_to_hash'
5
5
 
6
6
  require 'honey/error'
7
7
  require 'honey/client'
8
+ require 'honey/data_feed'
8
9
  require 'honey/builder'
9
10
  require 'honey/order'
10
11
  require 'honey/response'
@@ -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
- response = post(build_stock_check(*sku_group))
23
- data = response.stock[:item]
24
- data = [data] if sku_group.count == 1 # Honey's API Quirk
25
- data.each do |datum|
26
- results[datum[:sku]] = datum[:qty]
27
- end
28
- end
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
@@ -5,8 +5,8 @@ module Honey
5
5
  attr_accessor :data
6
6
 
7
7
  def initialize(http_response)
8
- doc = Nokogiri::XML(http_response.parsed_response)
9
- @data = OpenStruct.new(doc.to_hash[:HPEnvelope])
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)
@@ -1,3 +1,3 @@
1
1
  module Honey
2
- Version = '0.1.0'.freeze
2
+ Version = '0.1.1'.freeze
3
3
  end
@@ -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
@@ -1,5 +1,9 @@
1
1
  $:.unshift(File.join(File.dirname(__FILE__), '..','lib'))
2
+
2
3
  require 'honey'
4
+ require 'minitest'
5
+ require 'minitest/autorun'
6
+ require 'byebug'
3
7
 
4
8
  def valid_order
5
9
  Honey::Order.new({
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.0
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: 2017-11-10 00:00:00.000000000 Z
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.13'
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.13'
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.6'
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.6'
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: 1.6.1
68
+ version: '5.8'
53
69
  - !ruby/object:Gem::Dependency
54
- name: guard-minitest
70
+ name: byebug
55
71
  requirement: !ruby/object:Gem::Requirement
56
72
  requirements:
57
73
  - - "~>"
58
74
  - !ruby/object:Gem::Version
59
- version: '2'
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: '2'
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.11
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