ndfrt 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +7 -0
  3. data/Rakefile +5 -0
  4. data/lib/ndfrt.rb +110 -0
  5. data/spec/ndfrt_spec.rb +118 -0
  6. metadata +103 -0
@@ -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
@@ -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).
@@ -0,0 +1,5 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
4
+
5
+ task default: :spec
@@ -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
@@ -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: []