octopart 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/.rspec +1 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +105 -0
- data/Rakefile +2 -0
- data/lib/octopart.rb +8 -0
- data/lib/octopart/base.rb +15 -0
- data/lib/octopart/config.rb +16 -0
- data/lib/octopart/part.rb +103 -0
- data/lib/octopart/version.rb +3 -0
- data/octopart.gemspec +25 -0
- data/spec/fixtures/cassettes/Octopart_Part/_bom/when_give_an_mpn.yml +166 -0
- data/spec/fixtures/cassettes/Octopart_Part/_find/when_given_a_part_uid.yml +106 -0
- data/spec/fixtures/cassettes/Octopart_Part/_find/when_given_multiple_part_uids.yml +177 -0
- data/spec/fixtures/cassettes/Octopart_Part/_match/when_given_a_manufacturer_and_an_mpn.yml +54 -0
- data/spec/fixtures/cassettes/Octopart_Part/_search/when_given_a_query.yml +718 -0
- data/spec/lib/config_spec.rb +16 -0
- data/spec/lib/part_spec.rb +70 -0
- data/spec/spec_helper.rb +15 -0
- metadata +140 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Eric J. Holmes
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
# Octopart [![travis-ci](https://secure.travis-ci.org/ejholmes/octopart.png)](https://secure.travis-ci.org/ejholmes/octopart)
|
2
|
+
|
3
|
+
This is a ruby gem that wraps the [Octopart API](http://octopart.com/api/documentation).
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'octopart'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
```bash
|
16
|
+
$ bundle
|
17
|
+
```
|
18
|
+
|
19
|
+
Or, install it manually:
|
20
|
+
|
21
|
+
```bash
|
22
|
+
$ gem install octopart
|
23
|
+
```
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
### Configuration
|
28
|
+
|
29
|
+
In order to make more than 100 requests/hour you need to [register](http://octopart.com/api/signin?continue_to=http%3A//octopart.com/api/register)
|
30
|
+
your application with Octopart and obtain your API key. Once you have your API key, you can set it like so.
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
Octopart.configure do |config|
|
34
|
+
config.apikey = 'your api key'
|
35
|
+
end
|
36
|
+
```
|
37
|
+
|
38
|
+
### Parts
|
39
|
+
|
40
|
+
* * *
|
41
|
+
|
42
|
+
**#find**
|
43
|
+
|
44
|
+
Find a part by it's octopart ID.
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
part = Octopart::Part.find(39619421)
|
48
|
+
# => <Octopart::Part >
|
49
|
+
|
50
|
+
part.short_description
|
51
|
+
# => "Dial; Turns-Counting, Analog; 20 Turns; 100per Turn; Shaft Dia 0.25in"
|
52
|
+
|
53
|
+
part.mpn
|
54
|
+
# => "H-46-6A"
|
55
|
+
|
56
|
+
parts = Octopart::Part.find(39619421, 29035751, 31119928)
|
57
|
+
# => [<Octopart::Part >, ... ]
|
58
|
+
```
|
59
|
+
|
60
|
+
* * *
|
61
|
+
|
62
|
+
**#search**
|
63
|
+
|
64
|
+
Search all parts that match a given query string.
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
Octopart::Part.search('resistor')
|
68
|
+
# => [<Octopart::Part >, ... ]
|
69
|
+
|
70
|
+
Octopart::Part.search('resistor', limit: 10)
|
71
|
+
# => [<Octopart::Part >, ... ]
|
72
|
+
```
|
73
|
+
|
74
|
+
* * *
|
75
|
+
|
76
|
+
**#match**
|
77
|
+
|
78
|
+
Match (manufacturer name, mpn) to part uid.
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
Octopart::Part.match('texas instruments', 'SN74LS240N')
|
82
|
+
# => 42315325996
|
83
|
+
```
|
84
|
+
|
85
|
+
* * *
|
86
|
+
|
87
|
+
**#bom**
|
88
|
+
|
89
|
+
Return an array of parts for each line specified.
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
Octopart::Part.bom(mpn: 'SN74LS240N')
|
93
|
+
# => [[<Octopart::Part >, ... ]]
|
94
|
+
|
95
|
+
Octopart::Part.bom([{mpn: 'SN74LS240N'}, {mpn: 'ATMEGA328P-PU'}])
|
96
|
+
# => [[<Octopart::Part >, ... ], [<Octopart::Part >, ... ]]
|
97
|
+
```
|
98
|
+
|
99
|
+
## Contributing
|
100
|
+
|
101
|
+
1. Fork it
|
102
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
103
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
104
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
105
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/lib/octopart.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Octopart
|
2
|
+
class Base < Hashie::Mash
|
3
|
+
API_BASE = 'http://octopart.com/api/v2/'
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def get(path, params = nil)
|
8
|
+
params.merge!(apikey: Octopart.configuration.apikey) if Octopart.configuration.apikey
|
9
|
+
RestClient.get("#{API_BASE}#{path}", params: params)
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module Octopart
|
2
|
+
class Part < Base
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
# Public: Find's a part for a given uid and returns an Octopart::Part or
|
7
|
+
# an Array of Octopart::Part if multipled UIDs are given.
|
8
|
+
#
|
9
|
+
# args - Either a single Octopart UID, or multiple
|
10
|
+
#
|
11
|
+
# Examples
|
12
|
+
#
|
13
|
+
# part = Octopart::Part.find('39619421')
|
14
|
+
#
|
15
|
+
# parts = Octopart::Part.find(39619421, 29035751, 31119928)
|
16
|
+
def find(*args)
|
17
|
+
case args.length
|
18
|
+
when 0
|
19
|
+
raise ArgumentError.new("Please specify atleast 1 uid")
|
20
|
+
when 1
|
21
|
+
response = JSON.parse(self.get('parts/get', uid: args.first))
|
22
|
+
else
|
23
|
+
response = JSON.parse(self.get('parts/get_multi', uids: args.to_json))
|
24
|
+
end
|
25
|
+
self.build(response)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Public: Search for parts that match the given query and returns an Array of
|
29
|
+
# Octopart::Part
|
30
|
+
#
|
31
|
+
# query - A search term
|
32
|
+
# options - A set of options (default: {})
|
33
|
+
# :start - Ordinal position of first result. First position is 0.
|
34
|
+
# Default is 0. Maximum is 1000.
|
35
|
+
# :limit - Number of results to return. Default is 10. Maximum is 100.
|
36
|
+
# :filters - JSON encoded list of (fieldname,values) pairs
|
37
|
+
# :rangedfilters - JSON encoded list of (fieldname, min/max values) pairs,
|
38
|
+
# using null as wildcard.
|
39
|
+
# :sortby - JSON encoded list of (fieldname,sort-order) pairs. Default is
|
40
|
+
# [["score","desc"]]
|
41
|
+
#
|
42
|
+
# Examples
|
43
|
+
#
|
44
|
+
# parts = Octopart::Part.search('resistor', limit: 10)
|
45
|
+
def search(query, options = {})
|
46
|
+
params = options.merge(q: query)
|
47
|
+
response = JSON.parse(self.get('parts/search', params))
|
48
|
+
parts = response['results'].map { |part| part['item'] }
|
49
|
+
self.build(parts)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Public: Matches a manufacturer and manufacturer part number to an Octopart part UID
|
53
|
+
#
|
54
|
+
# manufacturer - Manufacturer name (eg. Texas Instruments)
|
55
|
+
# mpn - Manufacturer part number
|
56
|
+
#
|
57
|
+
# Examples
|
58
|
+
#
|
59
|
+
# uid = Octopart::Part.match('texas instruments', 'SN74LS240N')
|
60
|
+
#
|
61
|
+
# part = Octopart::Part.find(uid)
|
62
|
+
def match(manufacturer, mpn)
|
63
|
+
params = { manufacturer_name: manufacturer, mpn: mpn }
|
64
|
+
response = JSON.parse(self.get('parts/match', params))
|
65
|
+
case response.length
|
66
|
+
when 1
|
67
|
+
response.first.first
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Public: Matches a list of part numbers to an Array of Octopart::Part
|
72
|
+
#
|
73
|
+
# lines - Either a single line or an array of lines
|
74
|
+
#
|
75
|
+
# Examples
|
76
|
+
#
|
77
|
+
# Octopart::Part.bom(mpn: 'SN74LS240N')
|
78
|
+
#
|
79
|
+
# Octopart::Part.bom([{mpn: 'SN74LS240N'}, {mpn: 'ATMEGA328P-PU'}])
|
80
|
+
def bom(lines)
|
81
|
+
lines = [lines] unless lines.is_a?(Array)
|
82
|
+
response = JSON.parse(self.get('bom/match', lines: lines.to_json))
|
83
|
+
response['results'].map { |line| self.build(line['items']) }
|
84
|
+
end
|
85
|
+
|
86
|
+
# Internal: Converts a Hash or an Array of Hash into an Octopart::Part or
|
87
|
+
# an Array of Octopart::Part
|
88
|
+
def build(object)
|
89
|
+
if object.is_a?(Array)
|
90
|
+
object.map { |obj| self.build(obj) }
|
91
|
+
elsif object.is_a?(Hash)
|
92
|
+
object.delete('__class__')
|
93
|
+
object = Hashie::Mash.new(object)
|
94
|
+
self.new.tap { |p| p.replace(object) }
|
95
|
+
else
|
96
|
+
raise "What is this? I don't even..."
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
data/octopart.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/octopart/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Eric J. Holmes"]
|
6
|
+
gem.email = ["eric@ejholmes.net"]
|
7
|
+
gem.description = %q{Ruby gem for the Octopart API}
|
8
|
+
gem.summary = gem.description
|
9
|
+
gem.homepage = "https://github.com/ejholmes/octopart"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "octopart"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Octopart::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency 'hashie'
|
19
|
+
gem.add_dependency 'json'
|
20
|
+
gem.add_dependency 'rest-client'
|
21
|
+
|
22
|
+
gem.add_development_dependency 'rspec'
|
23
|
+
gem.add_development_dependency 'vcr'
|
24
|
+
gem.add_development_dependency 'fakeweb'
|
25
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://octopart.com/api/v2/bom/match?lines=%5B%7B%22mpn%22%3A%22SN74LS240N%22%7D%5D
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
accept:
|
11
|
+
- ! '*/*; q=0.5, application/xml'
|
12
|
+
accept-encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
user-agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: !binary |-
|
20
|
+
T0s=
|
21
|
+
headers:
|
22
|
+
!binary "Y2FjaGUtY29udHJvbA==":
|
23
|
+
- !binary |-
|
24
|
+
bm8tY2FjaGU=
|
25
|
+
!binary "Y29udGVudC1lbmNvZGluZw==":
|
26
|
+
- !binary |-
|
27
|
+
Z3ppcA==
|
28
|
+
!binary "Y29udGVudC10eXBl":
|
29
|
+
- !binary |-
|
30
|
+
dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOA==
|
31
|
+
!binary "ZGF0ZQ==":
|
32
|
+
- !binary |-
|
33
|
+
VGh1LCAyNiBBcHIgMjAxMiAwOToxNDoxMiBHTVQ=
|
34
|
+
!binary "cHJhZ21h":
|
35
|
+
- !binary |-
|
36
|
+
bm8tY2FjaGU=
|
37
|
+
!binary "eC1hcHAtdGltZQ==":
|
38
|
+
- !binary |-
|
39
|
+
MC4xMzk=
|
40
|
+
!binary "dHJhbnNmZXItZW5jb2Rpbmc=":
|
41
|
+
- !binary |-
|
42
|
+
Y2h1bmtlZA==
|
43
|
+
!binary "Y29ubmVjdGlvbg==":
|
44
|
+
- !binary |-
|
45
|
+
a2VlcC1hbGl2ZQ==
|
46
|
+
body:
|
47
|
+
encoding: ASCII-8BIT
|
48
|
+
string: !binary |-
|
49
|
+
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
|
162
|
+
qEioZheNb/8P76xINpeAAAA=
|
163
|
+
http_version: !binary |-
|
164
|
+
MS4x
|
165
|
+
recorded_at: Thu, 26 Apr 2012 09:14:12 GMT
|
166
|
+
recorded_with: VCR 2.1.1
|