pillboxr 0.9.0 → 0.9.1

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: 653e105fbd4add221d54abb8c3e6e8e55d780e97
4
- data.tar.gz: 3f6c9a7b8714690398950179823d5d5790ff57f6
3
+ metadata.gz: dfea71f63f4e797781867df304d09cf34eebaf84
4
+ data.tar.gz: 63f2c31b307acec4c62b585557853ae55a46f266
5
5
  SHA512:
6
- metadata.gz: 98f2dbdf7018202d175041a7884c49e0553f839c9e528e83a891495e50731c30eba1a556630a9abfe2228a974834539a32242d702c97f2b9d9d470005ecc9832
7
- data.tar.gz: 48c43f42431f74515a826f1fd8abf77bc49539a7547486ebc4d36d792284fa9dd72007e80b1d5da0b102ff6f68cd7712c61cc042432b775e4da0f2467e4fd669
6
+ metadata.gz: a69d0095894eaa8d5c748338c6282891b5e91a81bf7c7344c959b7f979c49582c6aae100d3f9336bfa47585204db249e6eb766176105ae43c33094069e49c96b
7
+ data.tar.gz: b7a786475a570292a02b87647953ee86952d218880f36095c0cafe7144965464bab3c32ab9e968e5376b4e9dc0d69234645744ed0ac9886d7a0ad0376c99f2fb
@@ -0,0 +1 @@
1
+ pillboxr
@@ -0,0 +1 @@
1
+ ruby-2.1.2
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Pillboxr
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/pillboxr.png)](http://badge.fury.io/rb/pillboxr)
4
+
3
5
  Pillboxr is a Ruby wrapper for the National Library of Medicine Pillbox API Service located at [http://pillbox.nlm.nih.gov](http://pillbox.nlm.nih.gov).
4
6
 
5
7
  The pillbox API provides information from the FDA about various prescription medications.
@@ -1,5 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
+ require_relative 'pillboxr/config'
3
4
  require_relative 'pillboxr/extensions'
4
5
  require_relative 'pillboxr/result'
5
6
  require_relative 'pillboxr/pill'
@@ -7,7 +8,6 @@ require_relative 'pillboxr/params'
7
8
  require_relative 'pillboxr/request'
8
9
 
9
10
  module Pillboxr
10
-
11
11
  # Assign an api_key to this session. Delegates to Request#api_key=
12
12
  # @param [String, Pathname, File, Object] the key itself, or a way to load the key, or an object that responds to the 'key' method.
13
13
  def api_key=(arg)
@@ -67,4 +67,4 @@ module Pillboxr
67
67
  klass.extend(Pillboxr::Extensions) unless klass.methods.include?(:to_constant)
68
68
  klass.to_constant.new(value)
69
69
  end
70
- end
70
+ end
@@ -253,7 +253,7 @@ module Pillboxr
253
253
  class Lowerlimit
254
254
  attr_accessor :lower_limit
255
255
 
256
- def initialize(limit = DEFAULT_LOWER_LIMIT)
256
+ def initialize(limit = Pillboxr.config.default_lower_limit)
257
257
  @lower_limit = case limit
258
258
  when NilClass; raise LowerLimitError
259
259
  when Integer; limit
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'singleton'
3
+
4
+ module Pillboxr
5
+ class Config
6
+ include Singleton
7
+
8
+ attr_accessor :records_per_page,
9
+ :default_lower_limit,
10
+ :no_records_error_message,
11
+ :no_records_response,
12
+ :api_key_error_message
13
+
14
+ attr_reader :base_uri
15
+
16
+ def initialize(options = {})
17
+ @records_per_page = 201
18
+ @default_lower_limit = 1
19
+ @base_uri = 'pillbox.nlm.nih.gov'
20
+ @no_records_error_message = "The document \"No records found\" does not have a valid root"
21
+ @no_records_response = "No records found"
22
+ @api_key_error_message = "The document \"Key does not match, you may not access this service\" does not have a valid root"
23
+ end
24
+ end
25
+ # Global config object
26
+ def config
27
+ Config.instance
28
+ end
29
+
30
+ def config=(hash)
31
+ Config.send(:new, hash)
32
+ end
33
+
34
+ module_function :config
35
+ end
36
+
@@ -1,11 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  module Pillboxr
3
- RECORDS_PER_PAGE = 201
4
- DEFAULT_LOWER_LIMIT = 1
5
- BASE_URI = 'pillbox.nlm.nih.gov'
6
- NO_RECORDS_ERROR_MESSAGE = "The document \"No records found\" does not have a valid root"
7
- API_KEY_ERROR_MESSAGE = "The document \"Key does not match, you may not access this service\" does not have a valid root"
8
-
9
3
  module Attributes
10
4
  SHAPES = {
11
5
  :bullet=> :C48335,
@@ -58,4 +52,4 @@ module Pillboxr
58
52
 
59
53
  SCHEDULE_CODES = DEA_CODES.invert
60
54
  end
61
- end
55
+ end
@@ -15,7 +15,7 @@ module Pillboxr
15
15
  # @param [Hash] options for which page to fetch
16
16
  def get(options = {}, &block)
17
17
  if options[:page]
18
- self << Pillboxr::Attributes::Lowerlimit.new(options.fetch(:page) * RECORDS_PER_PAGE)
18
+ self << Pillboxr::Attributes::Lowerlimit.new(options.fetch(:page) * Pillboxr.config.records_per_page)
19
19
  end
20
20
  @module_name.send(:complete, self, &block)
21
21
  end
@@ -25,7 +25,7 @@ module Pillboxr
25
25
  limit = self.select { |param| param.respond_to?(:lower_limit) }.first.lower_limit
26
26
  return limit
27
27
  else
28
- return DEFAULT_LOWER_LIMIT
28
+ return Pillboxr.config.default_lower_limit
29
29
  end
30
30
  end
31
31
 
@@ -38,4 +38,4 @@ module Pillboxr
38
38
  @module_name.send(:method_missing, method_name, *args)
39
39
  end
40
40
  end
41
- end
41
+ end
@@ -6,18 +6,18 @@ module Pillboxr
6
6
  class Request
7
7
  include HTTParty
8
8
  format :xml
9
- base_uri BASE_URI
9
+ base_uri Pillboxr.config.base_uri
10
10
  parser(Class.new(HTTParty::Parser) do
11
11
  def parse
12
12
  begin
13
13
  body.gsub!(/^<disclaimer>.+<\/disclaimer>/, "")
14
- body.gsub!(/\s\&\s/, ' and ')
14
+ body.gsub!(/\&/, '&amp;')
15
15
  super
16
16
  rescue MultiXml::ParseError => e
17
- if e.message == NO_RECORDS_ERROR_MESSAGE
17
+ if e.message == Pillboxr.config.no_records_error_message or body == Pillboxr.config.no_records_response
18
18
  result = {'Pills' => {'pill' => [], 'record_count' => 0 }}
19
19
  return result
20
- elsif e.message == API_KEY_ERROR_MESSAGE
20
+ elsif e.message == Pillboxr.config.api_key_error_message
21
21
  raise "Invalid api_key. Check format and try again."
22
22
  else
23
23
  raise
@@ -83,4 +83,4 @@ module Pillboxr
83
83
  "/PHP/pillboxAPIService.php?key=#{self.class.api_key}"
84
84
  end
85
85
  end
86
- end
86
+ end
@@ -7,7 +7,7 @@ module Pillboxr
7
7
  attr_accessor :record_count, :pages
8
8
 
9
9
  def initialize(api_response, &block)
10
- initial_page_number = Integer(api_response.query.params.limit / RECORDS_PER_PAGE )
10
+ initial_page_number = Integer(api_response.query.params.limit / Pillboxr.config.records_per_page )
11
11
  @record_count = Integer(api_response.body['Pills']['record_count'])
12
12
 
13
13
  puts "#{@record_count} records available. #{api_response.body['Pills']['pill'].size} records retrieved."
@@ -23,7 +23,7 @@ module Pillboxr
23
23
  end
24
24
 
25
25
  def self.subsequent(api_response)
26
- return parse_pills(api_response, RECORDS_PER_PAGE)
26
+ return parse_pills(api_response, Pillboxr.config.records_per_page)
27
27
  end
28
28
 
29
29
  def self.parse_pills(api_response, record_count)
@@ -62,19 +62,19 @@ module Pillboxr
62
62
 
63
63
  def initialize_pages_array(api_response, initial_page_number)
64
64
  unless record_count == 0
65
- record_count.divmod(RECORDS_PER_PAGE).tap do |ary|
65
+ record_count.divmod(Pillboxr.config.records_per_page).tap do |ary|
66
66
  if ary[1] == 0
67
67
  return Pages.new(ary[0]) do |i|
68
68
  page_params = api_response.query.params.dup
69
69
  page_params.delete_if { |param| param.respond_to?(:lower_limit)}
70
- page_params << Attributes::Lowerlimit.new(i * RECORDS_PER_PAGE)
70
+ page_params << Attributes::Lowerlimit.new(i * Pillboxr.config.records_per_page)
71
71
  Page.new(i == initial_page_number, i == initial_page_number, i, [], page_params)
72
72
  end
73
73
  else
74
74
  return Pages.new(ary[0] + 1) do |i|
75
75
  page_params = api_response.query.params.dup
76
76
  page_params.delete_if { |param| param.respond_to?(:lower_limit)}
77
- page_params << Attributes::Lowerlimit.new(i * RECORDS_PER_PAGE)
77
+ page_params << Attributes::Lowerlimit.new(i * Pillboxr.config.records_per_page)
78
78
  Page.new(i == initial_page_number, i == initial_page_number, i, [], page_params)
79
79
  end
80
80
  end
@@ -83,4 +83,4 @@ module Pillboxr
83
83
  return Pages.new(1) { |i| Page.new(true, true, i, [], api_response.query.params.dup)}
84
84
  end
85
85
  end
86
- end
86
+ end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  module Pillboxr
3
- VERSION = "0.9.0"
3
+ VERSION = "0.9.1"
4
4
  end
@@ -18,7 +18,6 @@ The pillbox API provides information from the FDA about various prescription med
18
18
  *Note:* This library is designed for use with Ruby 1.9.3 and above, and will not work with earlier versions of Ruby.
19
19
  END
20
20
 
21
- s.required_rubygems_version = "~> 1.8.6"
22
21
  s.rubyforge_project = "pillboxr"
23
22
 
24
23
  s.add_dependency 'httparty', '~> 0.8.3'
@@ -18,7 +18,7 @@ class TestParams < MiniTest::Unit::TestCase
18
18
  end
19
19
 
20
20
  def test_limit_method
21
- assert_equal(Pillboxr::DEFAULT_LOWER_LIMIT, @params.limit)
21
+ assert_equal(Pillboxr.config.default_lower_limit, @params.limit)
22
22
  @params << Pillboxr::Attributes::Lowerlimit.new(300)
23
23
  assert_equal(300, @params.limit)
24
24
  end
@@ -45,4 +45,4 @@ class TestParams < MiniTest::Unit::TestCase
45
45
  refute_empty r
46
46
  assert_instance_of(Pillboxr::Attributes::Color, r.first)
47
47
  end
48
- end
48
+ end
@@ -195,4 +195,18 @@ class TestPillboxr < MiniTest::Unit::TestCase
195
195
  assert_equal(3, @result.pages.current.number)
196
196
  end
197
197
  end
198
+
199
+ def test_empty_record_set_response_caught
200
+ VCR.use_cassette(:empty_record_set) do
201
+ no_records_response = Pillboxr.config.no_records_response
202
+ Pillboxr.config.no_records_response = "foo"
203
+ no_records_error_message = Pillboxr.config.no_records_error_message
204
+ Pillboxr.config.no_records_error_message = "bar"
205
+ assert_raises(MultiXml::ParseError) do
206
+ @result = Pillboxr.with(:color => [:blue,:green], :size => 100)
207
+ end
208
+ Pillboxr.config.no_records_error_message = no_records_error_message
209
+ Pillboxr.config.no_records_response = no_records_response
210
+ end
211
+ end
198
212
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pillboxr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Gautreaux
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-02-15 00:00:00.000000000 Z
14
+ date: 2014-10-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: httparty
@@ -109,13 +109,15 @@ executables: []
109
109
  extensions: []
110
110
  extra_rdoc_files: []
111
111
  files:
112
- - ".rvmrc"
112
+ - ".ruby-gemset"
113
+ - ".ruby-version"
113
114
  - Gemfile
114
115
  - Gemfile.lock
115
116
  - README.md
116
117
  - Rakefile
117
118
  - lib/pillboxr.rb
118
119
  - lib/pillboxr/attributes.rb
120
+ - lib/pillboxr/config.rb
119
121
  - lib/pillboxr/constants.rb
120
122
  - lib/pillboxr/extensions.rb
121
123
  - lib/pillboxr/pages.rb
@@ -147,12 +149,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
149
  version: '0'
148
150
  required_rubygems_version: !ruby/object:Gem::Requirement
149
151
  requirements:
150
- - - "~>"
152
+ - - ">="
151
153
  - !ruby/object:Gem::Version
152
- version: 1.8.6
154
+ version: '0'
153
155
  requirements: []
154
156
  rubyforge_project: pillboxr
155
- rubygems_version: 2.2.0
157
+ rubygems_version: 2.4.1
156
158
  signing_key:
157
159
  specification_version: 4
158
160
  summary: Access the NLM Pillbox API using Ruby.
data/.rvmrc DELETED
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
- # development environment upon cd'ing into the directory
5
-
6
- # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
- # Only full ruby name is supported here, for short names use:
8
- # echo "rvm use 2.0.0" > .rvmrc
9
- environment_id="ruby-2.0.0-p0@pillboxr"
10
-
11
- # Uncomment the following lines if you want to verify rvm version per project
12
- # rvmrc_rvm_version="1.18.18 (latest)" # 1.10.1 seams as a safe start
13
- # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
- # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
- # return 1
16
- # }
17
-
18
- # First we attempt to load the desired environment directly from the environment
19
- # file. This is very fast and efficient compared to running through the entire
20
- # CLI and selector. If you want feedback on which environment was used then
21
- # insert the word 'use' after --create as this triggers verbose mode.
22
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
- && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
- then
25
- \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
- [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
- \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
28
- if [[ $- == *i* ]] # check for interactive shells
29
- then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
30
- else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
31
- fi
32
- else
33
- # If the environment file has not yet been created, use the RVM CLI to select.
34
- rvm --create use "$environment_id" || {
35
- echo "Failed to create RVM environment '${environment_id}'."
36
- return 1
37
- }
38
- fi
39
-
40
- # If you use bundler, this might be useful to you:
41
- # if [[ -s Gemfile ]] && {
42
- # ! builtin command -v bundle >/dev/null ||
43
- # builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
44
- # }
45
- # then
46
- # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
47
- # gem install bundler
48
- # fi
49
- # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
50
- # then
51
- # bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
52
- # fi