ndfrt 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +7 -0
- data/Rakefile +5 -0
- data/lib/ndfrt.rb +110 -0
- data/spec/ndfrt_spec.rb +118 -0
- metadata +103 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f83510323baec54e499e676d6fd287d68d7d59a4
|
4
|
+
data.tar.gz: 40d26c69554f2c923b64c097ef3ad6e8e0b7a0a3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2dbe4c29dec6d77b66e0e55a78e181b2cf2ade21f6076083a41597de8a718796d4bc3ebf141b89479f3728947c1d2bb7c16d18c4309f3a71dab9febad7283c1c
|
7
|
+
data.tar.gz: 733e811672c5a2372aea9529e1d085e0aadf0070c0f38355ed08b162aff9a738144c2d2bb3418600340f55e9591326c217599e050f46a2440053594d2ceea0ab
|
data/README.md
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
## NDF-RT API [![Build Status](https://travis-ci.org/jbender/ndfrt_ruby.png?branch=master)](https://travis-ci.org/jbender/ndfrt_ruby) [![Code Climate](https://codeclimate.com/github/jbender/ndfrt_ruby.png)](https://codeclimate.com/github/jbender/ndfrt_ruby)
|
2
|
+
|
3
|
+
This project aims to make it easier for rubyists to work with the [NDR-FT REST API](http://rxnav.nlm.nih.gov/NdfrtAPIREST.html).
|
4
|
+
|
5
|
+
## License
|
6
|
+
|
7
|
+
NDRFT is released under the [MIT License](http://www.opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/lib/ndfrt.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'nori'
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'ostruct'
|
5
|
+
project_root = File.dirname(File.absolute_path(__FILE__))
|
6
|
+
Dir.glob(project_root + '/ndfrt/*', &method(:require))
|
7
|
+
|
8
|
+
class NDFRT
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@nori = Nori.new(convert_tags_to: -> tag { tag.snakecase.to_sym })
|
12
|
+
end
|
13
|
+
|
14
|
+
def api_version
|
15
|
+
get_response_hash("/version")[:version][:version_name].to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
def possible_options_for type
|
19
|
+
get_options type.to_s.downcase
|
20
|
+
end
|
21
|
+
alias_method :available_options_for, :possible_options_for
|
22
|
+
|
23
|
+
def possible_associations
|
24
|
+
get_options "association"
|
25
|
+
end
|
26
|
+
|
27
|
+
def possible_types
|
28
|
+
get_options "type"
|
29
|
+
end
|
30
|
+
|
31
|
+
def possible_kinds
|
32
|
+
get_options "kind"
|
33
|
+
end
|
34
|
+
|
35
|
+
def possible_properties
|
36
|
+
get_options "property"
|
37
|
+
end
|
38
|
+
|
39
|
+
def possible_roles
|
40
|
+
get_options "role"
|
41
|
+
end
|
42
|
+
|
43
|
+
def find_by hash
|
44
|
+
return find_by_id(hash[:type], hash[:id]) if hash.has_key? :id
|
45
|
+
return find_by_name(hash[:name], hash[:kind]) if hash.has_key? :name
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_by_id type, id
|
49
|
+
type = type.upcase
|
50
|
+
query = "/idType=#{type}&idString=#{id}"
|
51
|
+
return get_concepts query
|
52
|
+
end
|
53
|
+
|
54
|
+
def find_by_name name, kind = nil
|
55
|
+
query = "/search?conceptName=#{name}"
|
56
|
+
unless kind.nil?
|
57
|
+
kind = kind.upcase + '_KIND'
|
58
|
+
query += "&kindName=#{kind}"
|
59
|
+
end
|
60
|
+
return get_concepts query
|
61
|
+
end
|
62
|
+
|
63
|
+
def find_interacting_drugs nui, scope = 3
|
64
|
+
query = "/interaction/nui=#{nui}&scope=#{scope}"
|
65
|
+
response = get_response_hash query
|
66
|
+
data = response[:group_interactions][:interactions][:group_interacting_drugs][:interacting_drug]
|
67
|
+
data = [data] unless data.is_a? Array
|
68
|
+
return data.map { |i| NDFRT::Concept.new i[:concept] }
|
69
|
+
end
|
70
|
+
|
71
|
+
def find_interactions_between nuis, scope = 3
|
72
|
+
query = "/interaction?nuis=#{nuis.join('+')}&scope=#{scope}"
|
73
|
+
data = get_response_hash query
|
74
|
+
return data[:full_interaction_group][:full_interaction].map do |fi|
|
75
|
+
NDFRT::Interaction.new fi[:interaction_triple_group][:interaction_triple]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_info nui
|
80
|
+
query = "/allInfo/#{nui}"
|
81
|
+
return OpenStruct.new get_response_hash(query)[:full_concept]
|
82
|
+
end
|
83
|
+
|
84
|
+
def all_records_by_kind kind
|
85
|
+
kind = kind.upcase + "_KIND"
|
86
|
+
query = "/allconcepts?kind=#{kind}"
|
87
|
+
data = get_response_hash query
|
88
|
+
end
|
89
|
+
alias_method :all_concepts_by_kind, :all_records_by_kind
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def get_response_hash query
|
94
|
+
request = URI.parse('http://rxnav.nlm.nih.gov/REST/Ndfrt' + query)
|
95
|
+
return @nori.parse(Net::HTTP.get request)[:ndfrtdata]
|
96
|
+
end
|
97
|
+
|
98
|
+
def get_options type
|
99
|
+
data = get_response_hash "/#{type}List"
|
100
|
+
return data["#{type}_list".to_sym]["#{type}_name".to_sym].map { |a| a.to_s }
|
101
|
+
end
|
102
|
+
|
103
|
+
def get_concepts query
|
104
|
+
response = get_response_hash query
|
105
|
+
data = response[:group_concepts][:concept]
|
106
|
+
data = [data] unless data.is_a?(Array)
|
107
|
+
return data.map { |c| NDFRT::Concept.new(c) }
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
data/spec/ndfrt_spec.rb
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
require_relative '../lib/ndfrt'
|
2
|
+
|
3
|
+
describe NDFRT do
|
4
|
+
before :all do
|
5
|
+
@ndfrt = NDFRT.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#api_version" do
|
9
|
+
it "returns a string" do
|
10
|
+
expect(@ndfrt.api_version.class).to eq(String)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#possible_associations" do
|
15
|
+
before :all do
|
16
|
+
@associations = @ndfrt.possible_associations
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns an array" do
|
20
|
+
expect(@associations.class).to eq(Array)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns an array of strings" do
|
24
|
+
expect(@associations.first.class).to eq(String)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#find_by_id for type RXCUI and id 161" do
|
29
|
+
before :all do
|
30
|
+
@asprin = @ndfrt.find_by_id 'RXCUI', '161'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "returns an array of objects" do
|
34
|
+
expect(@asprin.class).to eq(Array)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns Acetaminophen for first object name" do
|
38
|
+
expect(@asprin.first.name).to eq('Acetaminophen')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns N0000145898 for first object nui" do
|
42
|
+
expect(@asprin.first.nui).to eq('N0000145898')
|
43
|
+
end
|
44
|
+
|
45
|
+
it "returns Drug for first object kind" do
|
46
|
+
expect(@asprin.first.kind).to eq('Drug')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#find_by_name morphine without kind" do
|
51
|
+
before :all do
|
52
|
+
@morphine = @ndfrt.find_by_name 'morphine'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns an array of objects" do
|
56
|
+
expect(@morphine.class).to eq(Array)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "returns Morphine for first object name" do
|
60
|
+
expect(@morphine.first.name).to eq('Morphine')
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns N0000145914 for first object nui" do
|
64
|
+
expect(@morphine.first.nui).to eq('N0000145914')
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns Drug for first object kind" do
|
68
|
+
expect(@morphine.first.kind).to eq('Drug')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#find_by_name morphine with kind ingredient" do
|
73
|
+
before :all do
|
74
|
+
@morphine = @ndfrt.find_by_name 'morphine', 'ingredient'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns an array of objects" do
|
78
|
+
expect(@morphine.class).to eq(Array)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "returns Morphine for first object name" do
|
82
|
+
expect(@morphine.first.name).to eq('Morphine')
|
83
|
+
end
|
84
|
+
|
85
|
+
it "returns N0000007070 for first object nui" do
|
86
|
+
expect(@morphine.first.nui).to eq('N0000007070')
|
87
|
+
end
|
88
|
+
|
89
|
+
it "returns Ingredient for first object kind" do
|
90
|
+
expect(@morphine.first.kind).to eq('Ingredient')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "#find_by with hash of name" do
|
95
|
+
it "should return the same as find_by_name" do
|
96
|
+
@generic_find = @ndfrt.find_by name: 'morphine'
|
97
|
+
@specific_find = @ndfrt.find_by_name 'morphine'
|
98
|
+
expect(@generic_find == @specific_find).to eq(true)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "#find_by with hash of name and kind" do
|
103
|
+
it "should return the same as find_by_name" do
|
104
|
+
@generic_find = @ndfrt.find_by name: 'morphine', kind: 'ingredient'
|
105
|
+
@specific_find = @ndfrt.find_by_name 'morphine', 'ingredient'
|
106
|
+
expect(@generic_find == @specific_find).to eq(true)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "#find_by with hash of type and id" do
|
111
|
+
it "should return the same as find_by_name" do
|
112
|
+
@generic_find = @ndfrt.find_by type: 'RXCUI', id: '161'
|
113
|
+
@specific_find = @ndfrt.find_by_id 'RXCUI', '161'
|
114
|
+
expect(@generic_find == @specific_find).to eq(true)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ndfrt
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jonathan Bender
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-11-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nori
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.0.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.0.0
|
69
|
+
description: A ruby-based way of interacting with the NDF-RT RESTful API (http://rxnav.nlm.nih.gov/NdfrtAPIREST.html)
|
70
|
+
email: jlbender@gmail.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- Rakefile
|
76
|
+
- lib/ndfrt.rb
|
77
|
+
- spec/ndfrt_spec.rb
|
78
|
+
- README.md
|
79
|
+
homepage: http://github.com/jbender/ndfrt_rails
|
80
|
+
licenses:
|
81
|
+
- MIT
|
82
|
+
metadata: {}
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 2.1.10
|
100
|
+
signing_key:
|
101
|
+
specification_version: 4
|
102
|
+
summary: A ruby wrapper to the NDF-RT RESTful API
|
103
|
+
test_files: []
|