octopart-ruby 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,14 @@
1
+ 0.1.2
2
+ -----
3
+ * [Added CHANGELOG.md](https://github.com/parkerboundy/octopart-ruby/commit/840ec6f89f0d5d07a10f77251a8571f2521a4c0b)
4
+ * [Move APIKeyNotSetError and APIResponseError to exceptions.rb](https://github.com/parkerboundy/octopart-ruby/commit/1860324c6ee4f9ab5348643583f03ac33579de50)
5
+ * [Abstracted requests into make_request(endpoint, query)](https://github.com/parkerboundy/octopart-ruby/commit/fe74cc9c72c75ef757e71e4ad9f422b9a6e1fe1c)
6
+
7
+ 0.1.1
8
+ -----
9
+ * [Cleaned up match method](https://github.com/parkerboundy/octopart-ruby/commit/b64ac2970cdf353e709819c6d4eabe5bd1b7251c)
10
+ * Cleaned up documentation and converted to YARD
11
+
12
+ 0.1.0
13
+ -----
14
+ * [Initial release](https://github.com/parkerboundy/octopart-ruby/commit/08c5a30e3558dfb8895748bbfccf677788da4a66)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -1,11 +1,5 @@
1
1
  require 'httparty'
2
2
 
3
- # APIKeyNotSetError is called when a client is instantiated without an api_key
4
- class APIKeyNotSetError < StandardError; end
5
-
6
- # APIResponseError is called when an API request returns with a code other than 200
7
- class APIResponseError < StandardError; end
8
-
9
3
  module Octopart
10
4
 
11
5
  # api_key - The API key to use
@@ -23,4 +17,5 @@ end
23
17
 
24
18
  directory = File.expand_path(File.dirname(__FILE__))
25
19
 
26
- require File.join(directory, 'octopart', 'client')
20
+ require File.join(directory, 'octopart', 'client')
21
+ require File.join(directory, 'octopart', 'exceptions')
@@ -25,7 +25,6 @@ module Octopart
25
25
  def initialize(api_key=nil)
26
26
  @api_key = api_key
27
27
  @api_key ||= Octopart.api_key
28
-
29
28
  end
30
29
 
31
30
  # Fetch a category object by its id
@@ -39,8 +38,7 @@ module Octopart
39
38
  if id.is_a? Array
40
39
  categories(id)
41
40
  else
42
- response = self.class.get('/categories/get', :query => {:id => id, :apikey => @api_key})
43
- validate_response(response)
41
+ make_request('/categories/get', {:id => id})
44
42
  end
45
43
  end
46
44
 
@@ -53,8 +51,8 @@ module Octopart
53
51
  # # => [Hash]
54
52
  def categories(ids)
55
53
  raise(ArgumentError, 'ids must be an array') unless ids.is_a?Array
56
- response = self.class.get('/categories/get_multi', :query => {:ids => "[#{ids.join(",")}]", :apikey => @api_key})
57
- validate_response(response)
54
+ query = {:ids => "[#{ids.join(",")}]"}
55
+ make_request('/categories/get_multi', query)
58
56
  end
59
57
 
60
58
  # Execute search over category objects
@@ -68,8 +66,8 @@ module Octopart
68
66
  # # => [Hash]
69
67
  def search_categories(query, start=0, limit=10)
70
68
  raise(ArgumentError, 'query must be a string > 2 characters and start/limit must be < 100') unless (query.is_a?(String) && query.length > 2 && start.between?(0, 100) &&limit.between?(0,100))
71
- response = self.class.get('/categories/search', :query => {:q => query, :start => start, :limit => limit, :apikey => @api_key})
72
- validate_response(response)
69
+ query = {:q => query, :start => start, :limit => limit}
70
+ make_request('/categories/search', query)
73
71
  end
74
72
 
75
73
  # Fetch a part object by its id
@@ -83,8 +81,8 @@ module Octopart
83
81
  if uid.is_a? Array
84
82
  parts(uid)
85
83
  else
86
- response = self.class.get('/parts/get', :query => {:uid => uid, :apikey => @api_key})
87
- validate_response(response)
84
+ query = {:uid => uid}
85
+ make_request('/parts/get', query)
88
86
  end
89
87
  end
90
88
 
@@ -97,8 +95,8 @@ module Octopart
97
95
  # # => [Hash]
98
96
  def parts(uids)
99
97
  raise(ArgumentError, 'uids must be an array') unless uids.is_a?Array
100
- response = self.class.get('/parts/get_multi', :query => {:uids => "[#{uids.join(",")}]", :apikey => @api_key})
101
- validate_response(response)
98
+ query = {:uids => "[#{uids.join(",")}]"}
99
+ make_request('/parts/get_multi', query)
102
100
  end
103
101
 
104
102
  # Execute search over part objects
@@ -118,8 +116,8 @@ module Octopart
118
116
  # # => [Hash]
119
117
  def search_parts(query, start=0, limit=10)
120
118
  raise(ArgumentError, 'query must be a string > 2 characters, start < 1000, and limit must be < 100') unless (query.is_a?(String) && query.length > 2 && start.between?(0, 1000) &&limit.between?(0,100))
121
- response = self.class.get('/parts/search', :query => {:q => query, :start => start, :limit => limit, :apikey => @api_key})
122
- validate_response(response)
119
+ query = {:q => query, :start => start, :limit => limit}
120
+ make_request('/parts/search', query)
123
121
  end
124
122
 
125
123
  # Suggest a part search query string
@@ -135,7 +133,8 @@ module Octopart
135
133
  # # => [Hash]
136
134
  def suggest_parts(query, limit=5)
137
135
  raise(ArgumentError, 'query must be a string > 2 characters, and limit must be < 10') unless (query.is_a?(String) && query.length > 2 && limit.between?(0,10))
138
- response = self.class.get('/parts/suggest', :query => {:q => query.split(' ').join('+'), :limit => limit, :apikey => @api_key})
136
+ query = {:q => query.split(' ').join('+'), :limit => limit}
137
+ make_request('/parts/suggest', query)
139
138
  end
140
139
 
141
140
  # Match (manufacturer,mpn) to part uids
@@ -147,8 +146,8 @@ module Octopart
147
146
  # match_part('Texas Instruments', 'SN74LS240N')
148
147
  # # => [Hash]
149
148
  def match_part(manufacturer_name, mpn)
150
- response = self.class.get('/parts/match', :query => {:manufacturer_name => manufacturer_name, :mpn => mpn, :apikey => @api_key})
151
- validate_response(response)
149
+ query = {:manufacturer_name => manufacturer_name, :mpn => mpn}
150
+ make_request('/parts/match', query)
152
151
  end
153
152
 
154
153
  # Fetch a partattribute object by its id
@@ -162,8 +161,8 @@ module Octopart
162
161
  if fieldname.is_a? Array
163
162
  part_attributes(fieldname)
164
163
  else
165
- response = self.class.get('/partattributes/get', :query => {:fieldname => fieldname, :apikey => @api_key})
166
- validate_response(response)
164
+ query = {:fieldname => fieldname}
165
+ make_request('/partattributes/get', query)
167
166
  end
168
167
  end
169
168
 
@@ -176,8 +175,8 @@ module Octopart
176
175
  # # => partattribute hash
177
176
  def part_attributes(fieldnames)
178
177
  raise(ArgumentError, 'fieldnames must be an array') unless fieldnames.is_a?Array
179
- response = self.class.get('/partattributes/get_multi', :query => {:fieldnames => "["+fieldnames.map{|v| "\"#{v}\""}.join(',')+"]", :apikey => @api_key})
180
- validate_response(response)
178
+ query = {:fieldnames => "["+fieldnames.map{|v| "\"#{v}\""}.join(',')+"]"}
179
+ make_request('/partattributes/get_multi', query)
181
180
  end
182
181
 
183
182
  # Match lines of a BOM to parts
@@ -198,8 +197,8 @@ module Octopart
198
197
  # # => [Hash]
199
198
  def bom_match(lines)
200
199
  raise(ArgumentError, 'lines must be a hash') unless lines.is_a?(::Hash)
201
- response = self.class.get('/bom/match', :query => {:lines => "[{"+lines.map{|k,v| "\"#{k}\":\"#{v}\""}.join(',')+"}]", :apikey => @api_key})
202
- validate_response(response)
200
+ query = {:lines => "[{"+lines.map{|k,v| "\"#{k}\":\"#{v}\""}.join(',')+"}]"}
201
+ make_request('/bom/match', query)
203
202
  end
204
203
 
205
204
  # Helper method for searches
@@ -232,10 +231,20 @@ module Octopart
232
231
  alias_method :match, :match_part
233
232
 
234
233
  protected
234
+ def make_request(endpoint, query)
235
+ query = default_options.merge(query)
236
+ response = self.class.get(endpoint.to_s, :query => query)
237
+ validate_response(response)
238
+ end
239
+
235
240
  def validate_response(response)
236
241
  response.code == 200 ? response.parsed_response : raise(APIResponseError, response.code)
237
242
  end
238
243
 
244
+ def default_options
245
+ {:apikey => @api_key}
246
+ end
247
+
239
248
  end
240
249
 
241
250
  end
@@ -0,0 +1,9 @@
1
+ module Octopart
2
+
3
+ # APIKeyNotSetError is called when a client is instantiated without an api_key
4
+ class APIKeyNotSetError < StandardError; end
5
+
6
+ # APIResponseError is called when an API request returns with a code other than 200
7
+ class APIResponseError < StandardError; end
8
+
9
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "octopart-ruby"
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Parker Boundy"]
12
- s.date = "2012-12-20"
12
+ s.date = "2012-12-24"
13
13
  s.description = "Ruby wrapper for the Octopart API"
14
14
  s.email = "parkerboundy@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
+ "CHANGELOG.md",
21
22
  "Gemfile",
22
23
  "Gemfile.lock",
23
24
  "LICENSE.txt",
@@ -27,6 +28,7 @@ Gem::Specification.new do |s|
27
28
  "examples/example.rb",
28
29
  "lib/octopart-ruby.rb",
29
30
  "lib/octopart/client.rb",
31
+ "lib/octopart/exceptions.rb",
30
32
  "octopart-ruby.gemspec",
31
33
  "test/fixtures/attribute.json",
32
34
  "test/fixtures/attribute_multi.json",
@@ -7,7 +7,7 @@ class TestOctopartRuby < Test::Unit::TestCase
7
7
  should "require an api key" do
8
8
  Octopart.api_key = nil
9
9
 
10
- assert_raise APIKeyNotSetError do
10
+ assert_raise Octopart::APIKeyNotSetError do
11
11
  Octopart::Client.new()
12
12
  end
13
13
  end
@@ -96,7 +96,7 @@ class TestOctopartRuby < Test::Unit::TestCase
96
96
  should "respond to error codes properly" do
97
97
  FakeWeb.register_uri(:get, "http://octopart.com/api/v2/categories/get?id=4174&apikey=123456789", :body => fixture_file("category.json"), :status => ["404", "Not Found"])
98
98
 
99
- assert_raise APIResponseError do
99
+ assert_raise Octopart::APIResponseError do
100
100
  @client.category(4174)
101
101
  end
102
102
  end
@@ -173,7 +173,7 @@ class TestOctopartRuby < Test::Unit::TestCase
173
173
  should "respond to error codes properly" do
174
174
  FakeWeb.register_uri(:get, "http://octopart.com/api/v2/parts/get?uid=39619421&apikey=123456789", :body => fixture_file("part.json"), :status => ["404", "Not Found"])
175
175
 
176
- assert_raise APIResponseError do
176
+ assert_raise Octopart::APIResponseError do
177
177
  @client.part(39619421)
178
178
  end
179
179
  end
@@ -216,7 +216,7 @@ class TestOctopartRuby < Test::Unit::TestCase
216
216
  should "respond to error codes properly" do
217
217
  FakeWeb.register_uri(:get, "http://octopart.com/api/v2/partattributes/get?fieldname=capacitance&apikey=123456789", :body => fixture_file("attribute.json"), :status => ["404", "Not Found"])
218
218
 
219
- assert_raise APIResponseError do
219
+ assert_raise Octopart::APIResponseError do
220
220
  @client.part_attribute('capacitance')
221
221
  end
222
222
  end
@@ -244,7 +244,7 @@ class TestOctopartRuby < Test::Unit::TestCase
244
244
  should "respond to error codes properly" do
245
245
  FakeWeb.register_uri(:get, "http://octopart.com/api/v2/bom/match?lines=%5B%7B%22mpn%22%3A%22SN74LS240N%22%2C%22manufacturer%22%3A%22Texas%20Instruments%22%7D%5D&apikey=123456789", :body => fixture_file("bom.json"), :status => ["404", "Not Found"])
246
246
 
247
- assert_raise APIResponseError do
247
+ assert_raise Octopart::APIResponseError do
248
248
  @client.bom_match({"mpn" => "SN74LS240N", "manufacturer" => "Texas Instruments"})
249
249
  end
250
250
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octopart-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-20 00:00:00.000000000Z
12
+ date: 2012-12-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &70163619218620 !ruby/object:Gem::Requirement
16
+ requirement: &70142811581320 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.9.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70163619218620
24
+ version_requirements: *70142811581320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: shoulda
27
- requirement: &70163619217920 !ruby/object:Gem::Requirement
27
+ requirement: &70142811580820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70163619217920
35
+ version_requirements: *70142811580820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &70163619217100 !ruby/object:Gem::Requirement
38
+ requirement: &70142811580320 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.8.3
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70163619217100
46
+ version_requirements: *70142811580320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &70163619216340 !ruby/object:Gem::Requirement
49
+ requirement: &70142811578640 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70163619216340
57
+ version_requirements: *70142811578640
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &70163619215560 !ruby/object:Gem::Requirement
60
+ requirement: &70142811578100 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.8.4
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70163619215560
68
+ version_requirements: *70142811578100
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
- requirement: &70163619214720 !ruby/object:Gem::Requirement
71
+ requirement: &70142811569780 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.7.1
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70163619214720
79
+ version_requirements: *70142811569780
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: fakeweb
82
- requirement: &70163619214080 !ruby/object:Gem::Requirement
82
+ requirement: &70142811568700 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: 1.3.0
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70163619214080
90
+ version_requirements: *70142811568700
91
91
  description: Ruby wrapper for the Octopart API
92
92
  email: parkerboundy@gmail.com
93
93
  executables: []
@@ -97,6 +97,7 @@ extra_rdoc_files:
97
97
  - README.rdoc
98
98
  files:
99
99
  - .document
100
+ - CHANGELOG.md
100
101
  - Gemfile
101
102
  - Gemfile.lock
102
103
  - LICENSE.txt
@@ -106,6 +107,7 @@ files:
106
107
  - examples/example.rb
107
108
  - lib/octopart-ruby.rb
108
109
  - lib/octopart/client.rb
110
+ - lib/octopart/exceptions.rb
109
111
  - octopart-ruby.gemspec
110
112
  - test/fixtures/attribute.json
111
113
  - test/fixtures/attribute_multi.json
@@ -135,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
135
137
  version: '0'
136
138
  segments:
137
139
  - 0
138
- hash: 2149321309424623997
140
+ hash: -4320709216140336670
139
141
  required_rubygems_version: !ruby/object:Gem::Requirement
140
142
  none: false
141
143
  requirements: