rx_nav 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28775ac88a7af9bdf70f04d10dd3d7f35848f2b7
4
- data.tar.gz: 38f2c0a2c804905b4438cbcb160a5490ff70a969
3
+ metadata.gz: c2c59070713b04541c769ff646e41b604a6bf346
4
+ data.tar.gz: 0a97e79e7f9702a0f3723be29bc44acbf61a8bef
5
5
  SHA512:
6
- metadata.gz: d5273bc556ad65e44a1a406d992a17ad239e5ecd9a20e55a4f3ad24db9697cbf7fa00ec4f64d9bbecfad82123bf23b4449d041c66ff632d89ceeac9cf2c3bdc6
7
- data.tar.gz: 9143f1a3ead0607d154cadde8bd71179c1955ad3fbaf6355e8338b6deaaad7b0266e88b83ee84e9ccce0e880f5a272dbb2c773d031ba9bcf8fbf0e1ecf8d5244
6
+ metadata.gz: 210aea05d43b00d1fb5187f0c03d5236dbab72ec0c53f3e66d12e19ed7f9e445422c08e2f0d9bd6c4059fca4183b9c3f2db6e982422cef38a74166e4d7271066
7
+ data.tar.gz: a064ff45a78dcccd3777933609bfd133e02a96e6ccc39d54ef3734e10bc62c57c459fc1d01123ef55075d81eeb3e1c0b6f8213466da6026631486022f7706b26
@@ -4,13 +4,13 @@ require 'nokogiri'
4
4
  require 'ostruct'
5
5
 
6
6
  # Core of the API responses
7
- require_relative 'rx_nav/concept'
8
- require_relative 'rx_nav/interaction'
7
+ require 'rx_nav/concept'
8
+ require 'rx_nav/interaction'
9
9
 
10
10
  # Individual APIs
11
- require_relative 'rx_nav/ndfrt'
12
- require_relative 'rx_nav/rx_norm'
13
- require_relative 'rx_nav/rx_terms'
11
+ require 'rx_nav/ndfrt'
12
+ require 'rx_nav/rx_norm'
13
+ require 'rx_nav/rx_terms'
14
14
 
15
15
  module RxNav
16
16
 
@@ -16,45 +16,80 @@ module RxNav
16
16
  kind ? titleize_kind(self.concept_kind) : nil
17
17
  end
18
18
 
19
+ def nui
20
+ self.concept_nui
21
+ end
22
+
19
23
  def to_s
20
24
  name
21
25
  end
22
26
 
27
+ # Supplementary calls to fetch info from other DBs
28
+ # Note: these methods return false if no information was found
29
+
23
30
  def get_terms_info
31
+ rxcui = get_rxcui
32
+ info = RxNav::RxTerms.get_info(rxcui)
33
+ merge_concept info
34
+ end
35
+
36
+ def get_ndfrt_info
37
+ nui = get_nui
38
+ info = RxNav::NDFRT.get_info(nui)
39
+ merge_concept info
40
+ end
41
+
42
+ def get_norm_info
43
+ rxcui = get_rxcui
44
+ info = RxNav::RxNorm.properties rxcui
45
+ info.quantity = RxNav::RxNorm.quantity rxcui
46
+ info.strength = RxNav::RxNorm.strength rxcui
47
+ merge_concept info
48
+ end
49
+
50
+ private
51
+
52
+ def get_rxcui
53
+ # Terms use the rxcui for the lookup
24
54
  if self.rxcui.nil?
55
+ # Fail if we have a concept without any IDs (that are written so far)
25
56
  if self.nui.nil?
26
57
  raise "This concept doesn't have a nui or rxcui"
27
58
  else
28
- rxcui = RxNav::RxNorm.find_rxcui_by_id('nui', self.nui)
59
+ self.rxcui = RxNav::RxNorm.find_rxcui_by_id('nui', self.nui)
29
60
  end
30
61
  end
31
- rxcui = rxcui ? rxcui : self.rxcui
32
- rxcui ? merge_concept(RxNav::RxTerms.get_info(rxcui)) : self
62
+ # If we had to look it up, use that, otherwise use the model's
63
+ return self.rxcui
33
64
  end
34
65
 
35
- def get_ndfrt_info
66
+ def get_nui
36
67
  if self.nui.nil?
37
68
  if self.rxcui.nil?
38
69
  raise "This concept doesn't have a nui or rxcui"
39
70
  else
40
- concept = RxNav::NDFRT.find_by_id('rxcui', self.rxcui)
71
+ record = RxNav::NDFRT.find_by_id('rxcui', self.rxcui).first
72
+ self.concept_nui = record.nui
41
73
  end
42
74
  end
43
- nui = concept ? concept.nui : self.nui
44
- nui ? merge_concept(RxNav::NDFRT.get_info(nui)) : self
75
+ return self.nui
45
76
  end
46
77
 
47
- private
48
-
49
78
  def titleize_kind str
50
79
  str.split("_")[0...-1].map(&:capitalize).join(" ") if str.is_a? String
51
80
  end
52
81
 
53
82
  def merge_concept concept
54
- return self if concept.attributes.nil?
55
- concept.attributes.each do |k,v|
56
- self.k = v if self.k.nil?
83
+ if concept_hash.empty?
84
+ return false
85
+ else
86
+ concept_hash.each do |k,v|
87
+ puts self.k
88
+ self.k = v if self.k.nil?
89
+ puts self.k
90
+ end
57
91
  end
92
+ return self
58
93
  end
59
94
 
60
95
  end
@@ -94,8 +94,9 @@ module RxNav
94
94
  def get_concepts query
95
95
  data = get_response_hash(query)[:group_concepts]
96
96
  if data && data[:concept]
97
- data = [data] unless data.is_a?(Array)
98
- return data.map { |c| RxNav::Concept.new(c) }
97
+ concepts = data[:concept]
98
+ concepts = [concepts] unless concepts.is_a?(Array)
99
+ return concepts.map { |c| RxNav::Concept.new(c) }
99
100
  else
100
101
  return nil
101
102
  end
@@ -5,7 +5,9 @@ module RxNav
5
5
  def search_by_name name, options = {}
6
6
  options = {max_results: 20, options: 0}.merge(options)
7
7
 
8
- query = %Q(/approximateTerm?term=#{name}&maxEntries=#{options[:max_results]}&options=#{options[:options]})
8
+ query = "/approximateTerm?term=#{name}"\
9
+ "&maxEntries=#{options[:max_results]}"\
10
+ "&options=#{options[:options]}"
9
11
 
10
12
  # Get the data we care about in the right form
11
13
  data = get_response_hash(query)[:approximate_group][:candidate]
@@ -29,15 +31,39 @@ module RxNav
29
31
  return extract_rxcui query
30
32
  end
31
33
 
34
+ def find_drugs_by_name name
35
+ query = "/drugs?name=#{name}"
36
+ drugs = []
37
+ dg = get_response_hash(query)[:drug_group]
38
+ dg[:concept_group].each do |cg|
39
+ drugs << {
40
+ name: dg[:name],
41
+ concepts: cg[:concept_properties].map { |c| RxNav::Concept.new(c) }
42
+ }
43
+ end
44
+ return drugs
45
+ end
46
+
32
47
  def spelling_suggestions name
33
48
  query = "/spellingsuggestions?name=#{name}"
34
49
  get_response_hash(query)[:suggestion_group][:suggestion_list][:suggestion]
35
50
  end
36
51
 
37
52
  def status id
38
- query = "/rxcui/#{id}/status"
39
- status = OpenStruct.new get_response_hash(query)[:rxcui_status]
40
- status.send("active?=", status.status == 'Active')
53
+ query = "/rxcui/#{id}/status"
54
+ data = get_response_hash(query)[:rxcui_status]
55
+ status = OpenStruct.new
56
+ reported_status = data[:status].downcase
57
+
58
+ status.send("remapped?=", reported_status == 'remapped')
59
+ status.send("active?=", reported_status == 'active')
60
+
61
+ if status.remapped?
62
+ concepts = data[:min_concept_group][:min_concept]
63
+ concepts = [concepts] if (concepts && !concepts.is_a?(Array))
64
+ status.remapped_to = concepts.map { |c| c[:rxcui] }
65
+ end
66
+
41
67
  return status
42
68
  end
43
69
 
@@ -48,19 +74,12 @@ module RxNav
48
74
 
49
75
  def quantity id
50
76
  query = "/rxcui/#{id}/quantity"
51
- return OpenStruct.new get_response_hash(query)[:quantity_group]
77
+ return get_response_hash(query)[:quantity_group][:quantity]
52
78
  end
53
79
 
54
80
  def strength id
55
81
  query = "/rxcui/#{id}/strength"
56
- return OpenStruct.new get_response_hash(query)[:strength_group]
57
- end
58
-
59
- def complete_info id
60
- result = self.properties(id)
61
- result.strength = self.strength(id).strength
62
- result.quantity = self.quantity(id).quantity
63
- return result
82
+ return get_response_hash(query)[:strength_group][:strength]
64
83
  end
65
84
 
66
85
  private
@@ -78,7 +97,9 @@ module RxNav
78
97
  return nil
79
98
  end
80
99
  end
81
-
82
100
  end
101
+
102
+ self.singleton_class.send(:alias_method, :find_by_name, :search_by_name)
103
+
83
104
  end
84
105
  end
@@ -1,3 +1,3 @@
1
1
  module RxNav
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rx_nav
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Bender
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-17 00:00:00.000000000 Z
11
+ date: 2013-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nori