ndfrt 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []