honeys-place 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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