open_fda_api 0.0.6 → 0.0.9

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
  SHA256:
3
- metadata.gz: 98cb0c21f6d0b4f002d0e913b36eab334ed077d5db0e34cab62b7fc02d735f79
4
- data.tar.gz: b35f1e48a6be0fa33f2695e01223095ca33dff89e5d97d340e768e86fb4690ba
3
+ metadata.gz: adc99f4c0266329d56ee1cbc6592789908b09a98580136813e3d8033e33c2328
4
+ data.tar.gz: 6fc8dc376b266e216e5f263248cbae5342c655a50ba3aa1c9d37245a6b521bdf
5
5
  SHA512:
6
- metadata.gz: 5bbdf5fbd2c3244b6f9952e8caf1734b63c96f4ad4977a276b8fecb3d043ffff1c2f66a5de1afdd477aa8d1dd1caf742634d763d13fd1cfa1bae4cd9c0ded735
7
- data.tar.gz: 12ef328cbc3216b3c9643131ca2656c62f91103a062c0ae555c6736a0683dd62dc015b75920db90ca70afe8b19d5d51b21a72cb4afc76fb11dccd575dd6e76b9
6
+ metadata.gz: 95da4769cc677e55b92f682bc4b7f05d98543cfcfa05f2d4786c8254e52a6399235e3850a11c7d70ba63dd61ea28e42fda25fc336e8ac1fb3710e9e9a4dc29ca
7
+ data.tar.gz: f93d3fa2ffc26fad6f9460333326d32f97f51f99dcd567b85ddd62b5ed4e5f868d4aff4bcc8183b37214927e7a03ff4e64fee534c8a98a1c2f5ffc3fe7ee619c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.0.9] - 2022-01-24
4
+ - Filled out the following Drug endpoints:
5
+ - product_labeling
6
+ - ndc_directory
7
+ - recall_enforcement_reports
8
+ - drugs_at_fda
9
+
10
+ ## [0.0.8] - 2022-01-24
11
+ - Delete the `OpenFdaApi.client` method since its only function was to forward messages
12
+
13
+ ## [0.0.7] - 2022-01-23
14
+ - Use Faraday instead of using Net::HTTP directly
15
+ - Introduce `QueryInputs` to group query params passed in together
16
+
17
+ ## [0.0.6] - 2022-01-21
18
+ - Support for more query fields
19
+
3
20
  ## [0.0.5] - 2022-01-20
4
21
  - Validate, against search fields given to us from openFDA API, when building queries.
5
22
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- open_fda_api (0.0.6)
4
+ open_fda_api (0.0.9)
5
+ faraday (~> 1.9)
6
+ faraday_middleware (~> 1.2)
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
@@ -9,7 +11,33 @@ GEM
9
11
  ast (2.4.2)
10
12
  coderay (1.1.3)
11
13
  diff-lcs (1.5.0)
14
+ faraday (1.9.3)
15
+ faraday-em_http (~> 1.0)
16
+ faraday-em_synchrony (~> 1.0)
17
+ faraday-excon (~> 1.1)
18
+ faraday-httpclient (~> 1.0)
19
+ faraday-multipart (~> 1.0)
20
+ faraday-net_http (~> 1.0)
21
+ faraday-net_http_persistent (~> 1.0)
22
+ faraday-patron (~> 1.0)
23
+ faraday-rack (~> 1.0)
24
+ faraday-retry (~> 1.0)
25
+ ruby2_keywords (>= 0.0.4)
26
+ faraday-em_http (1.0.0)
27
+ faraday-em_synchrony (1.0.0)
28
+ faraday-excon (1.1.0)
29
+ faraday-httpclient (1.0.1)
30
+ faraday-multipart (1.0.3)
31
+ multipart-post (>= 1.2, < 3)
32
+ faraday-net_http (1.0.1)
33
+ faraday-net_http_persistent (1.2.0)
34
+ faraday-patron (1.0.0)
35
+ faraday-rack (1.0.0)
36
+ faraday-retry (1.0.3)
37
+ faraday_middleware (1.2.0)
38
+ faraday (~> 1.0)
12
39
  method_source (1.0.0)
40
+ multipart-post (2.1.1)
13
41
  parallel (1.21.0)
14
42
  parser (3.1.0.0)
15
43
  ast (~> 2.4.1)
@@ -45,6 +73,7 @@ GEM
45
73
  rubocop-ast (1.15.1)
46
74
  parser (>= 3.0.1.1)
47
75
  ruby-progressbar (1.11.0)
76
+ ruby2_keywords (0.0.5)
48
77
  unicode-display_width (2.1.0)
49
78
 
50
79
  PLATFORMS
data/README.md CHANGED
@@ -16,37 +16,64 @@ And then execute:
16
16
  bundle install
17
17
  ```
18
18
 
19
- ## Documentation
19
+ ## Usage
20
20
 
21
- There are 5 main category of endpoints that openFDA API provides: Drug, Device, Food, Other, and Tobacco.
22
-
23
- Each category has further subcategories. Everything is accessible from the `OpenFdaApi.client`.
21
+ ```ruby
22
+ client = OpenFdaApi.client
24
23
 
24
+ # First 20 results where (fieldA=foo AND fieldB=bar) OR (fieldC=baz AND fieldA exists)
25
+ # Sorted by (fieldD) in descending order
26
+ # Skip the first 8 results
27
+ args = {
28
+ search: [{"fieldA" => "foo", "fieldB" => "bar"}, {"fieldC" => "baz", "_exists_" => "fieldA"}],
29
+ sort: [{"fieldD" => "desc"}],
30
+ skip: 8,
31
+ limit: 20
32
+ }
33
+
34
+ # Drug API
35
+ client.drugs.adverse_events(args)
36
+ client.drugs.product_labeling(args)
37
+ client.drugs.ndc_directory(args)
38
+ client.drugs.recall_enforcement_reports(args)
39
+ client.drugs.drugs_at_fda(args)
40
+
41
+ # Device API
42
+ client.device.premarket_501ks(args)
43
+ client.device.classification(args)
44
+ client.device.recall_enforcement_reports(args)
45
+ client.device.adverse_events(args)
46
+ client.device.premarket_approval(args)
47
+ client.device.recalls(args)
48
+ client.device.registrations_and_listings(args)
49
+ client.device.covid19_serological_tests(args)
50
+ client.device.unique_device_identifier(args)
51
+
52
+ # Food API
53
+ client.food.recall_enforcement_reports(args)
54
+ client.food.adverse_events(args)
55
+
56
+ # Other API
57
+ client.other.nsde(args)
58
+ client.other.substance_data_reports(args)
59
+
60
+ # Tobacco API
61
+ client.tobacco.problem_reports(args)
62
+ ```
25
63
 
26
- ### Drug
64
+ ### Querying
27
65
 
28
- The Drug API has the following endpoints: Adverse Events, Product Labeling, NDC Directory, Recall Enforcement Reports, and Drugs@FDA.
66
+ The openFDA API can be queried with these arguments: `search`, `sort`, `count`, `skip`, and `limit`.
29
67
 
30
- Here's how you interact with each:
68
+ `search`, `sort`, and `count` have the same format. They are arrays of hashes. Each hash has a set of fields and values
69
+ that are ANDed together and all the elements in the array are ORed together. Here are some examples to illustrate:
31
70
 
32
- #### Adverse Events
33
71
  ```ruby
34
- require 'open_fda_api'
72
+ search = [{"patient.drug.openfda.pharm_class_epc" => "nonsteroidal+anti-inflammatory+drug" }]
35
73
 
36
- client = OpenFdaApi.client
37
- drugs_api = client.drugs
38
-
39
- search_args = [{"patient.patientweight"=>"50", "occurcountry"=>"ca"}]
40
- drugs_api.adverse_events(search: search_args, skip: 1) # => {"meta" => {...}, "results" => [...]}
74
+ # patient.drug.openfda.pharm_class_epc:"nonsteroidal+anti-inflammatory+drug"&count=patient.reaction.reactionmeddrapt.exact
41
75
  ```
42
76
 
43
- #### Device (Not Implemented Yet)
44
- #### Food (Not Implemented Yet)
45
- #### Other (Not Implemented Yet)
46
- #### Tobacco (Not Implemented Yet)
47
-
48
-
49
-
50
77
  ## Development
51
78
 
52
79
  After checking out the repo, run `bin/setup` to install dependencies.
data/bin/console CHANGED
@@ -11,5 +11,8 @@ require "open_fda_api"
11
11
  # require "pry"
12
12
  # Pry.start
13
13
 
14
+ client = OpenFdaApi::Client.new
15
+ puts "Client is ready: #{client}"
16
+
14
17
  require "irb"
15
18
  IRB.start(__FILE__)
@@ -1,18 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "./drugs"
3
+ require "faraday"
4
+ require "faraday_middleware"
4
5
 
5
6
  module OpenFdaApi
6
7
  # Gives you access to the main nouns in the openFDA API
7
8
  class Client
8
- attr_reader :api_key
9
+ attr_reader :api_key, :adapter
9
10
 
10
- def initialize(api_key: nil)
11
+ BASE_URL = "https://api.fda.gov"
12
+
13
+ def initialize(api_key: nil, adapter: Faraday.default_adapter, stubs: nil)
11
14
  @api_key = api_key
15
+ @adapter = adapter
16
+ @stubs = stubs
12
17
  end
13
18
 
14
19
  def drugs
15
- OpenFdaApi::Drugs.new
20
+ OpenFdaApi::Drugs.new(self)
21
+ end
22
+
23
+ def connection
24
+ @connection ||= Faraday.new(BASE_URL) do |conn|
25
+ conn.request :json
26
+
27
+ conn.response :dates
28
+ conn.response :json, content_type: "application/json"
29
+
30
+ conn.adapter adapter, @stubs
31
+ end
16
32
  end
17
33
  end
18
34
  end
@@ -3,7 +3,6 @@
3
3
  require "net/http"
4
4
  require "json"
5
5
  require "yaml"
6
- require "open_fda_api/query_builder"
7
6
 
8
7
  module OpenFdaApi
9
8
  # Interact with the Drugs API Endpoint:
@@ -13,25 +12,77 @@ module OpenFdaApi
13
12
  # - Recall Enforcement Reports
14
13
  # - Drugs@FDA)
15
14
  class Drugs
16
- def initialize
15
+ attr_reader :client, :path_base
16
+
17
+ def initialize(client)
18
+ @client = client
17
19
  @host = "api.fda.gov"
18
20
  @path_base = "/drug"
19
21
  end
20
22
 
21
- # The openFDA drug adverse event API returns data that has been collected from the
22
- # FDA Adverse Event Reporting System (FAERS), a database that contains information on
23
- # adverse event and medication error reports submitted to FDA.
24
- #
25
23
  # @param search [Array<Hash>] Search fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
26
24
  # @param sort [Array<Hash>] Sort fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
27
25
  # @param count [Array<Hash>] Count fields defined https://open.fda.gov/apis/drug/event/searchable-fields/
28
26
  # @param skip [Integer] Number of results to skip
27
+ # @param limit [Integer] Number of results to return
28
+ # @return Response from the API parsed as JSON
29
+ def adverse_events(search: [], sort: [], count: [], skip: 0, limit: 1)
30
+ endpoint = "event.json"
31
+ inputs = build_inputs(search: search, sort: sort, count: count, skip: skip, limit: limit)
32
+ query = build_query(inputs, self.class.valid_adverse_events_fields)
33
+ make_request(endpoint, query)
34
+ end
35
+
36
+ # @param search [Array<Hash>] Search fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
37
+ # @param sort [Array<Hash>] Sort fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
38
+ # @param count [Array<Hash>] Count fields defined https://open.fda.gov/apis/drug/event/searchable-fields/
39
+ # @param skip [Integer] Number of results to skip
40
+ # @param limit [Integer] Number of results to return
41
+ # @return Response from the API parsed as JSON
42
+ def product_labeling(search: [], sort: [], count: [], skip: 0, limit: 1)
43
+ endpoint = "label.json"
44
+ inputs = build_inputs(search: search, sort: sort, count: count, skip: skip, limit: limit)
45
+ query = build_query(inputs, {}) # TODO: Upload valid fields
46
+ make_request(endpoint, query)
47
+ end
48
+
49
+ # @param search [Array<Hash>] Search fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
50
+ # @param sort [Array<Hash>] Sort fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
51
+ # @param count [Array<Hash>] Count fields defined https://open.fda.gov/apis/drug/event/searchable-fields/
52
+ # @param skip [Integer] Number of results to skip
53
+ # @param limit [Integer] Number of results to return
54
+ # @return Response from the API parsed as JSON
55
+ def ndc_directory(search: [], sort: [], count: [], skip: 0, limit: 1)
56
+ endpoint = "ndc.json"
57
+ inputs = build_inputs(search: search, sort: sort, count: count, skip: skip, limit: limit)
58
+ query = build_query(inputs, {}) # TODO: Upload valid fields
59
+ make_request(endpoint, query)
60
+ end
61
+
62
+ # @param search [Array<Hash>] Search fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
63
+ # @param sort [Array<Hash>] Sort fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
64
+ # @param count [Array<Hash>] Count fields defined https://open.fda.gov/apis/drug/event/searchable-fields/
65
+ # @param skip [Integer] Number of results to skip
66
+ # @param limit [Integer] Number of results to return
67
+ # @return Response from the API parsed as JSON
68
+ def recall_enforcement_reports(search: [], sort: [], count: [], skip: 0, limit: 1)
69
+ endpoint = "enforcement.json"
70
+ inputs = build_inputs(search: search, sort: sort, count: count, skip: skip, limit: limit)
71
+ query = build_query(inputs, {}) # TODO: Upload valid fields
72
+ make_request(endpoint, query)
73
+ end
74
+
75
+ # @param search [Array<Hash>] Search fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
76
+ # @param sort [Array<Hash>] Sort fields defined in https://open.fda.gov/apis/drug/event/searchable-fields/
77
+ # @param count [Array<Hash>] Count fields defined https://open.fda.gov/apis/drug/event/searchable-fields/
78
+ # @param skip [Integer] Number of results to skip
79
+ # @param limit [Integer] Number of results to return
29
80
  # @return Response from the API parsed as JSON
30
- def adverse_events(search: [], sort: [], count: [], skip: 0)
31
- endpoint = "/event.json"
32
- query = build_query(search, sort, count, skip, self.class.valid_adverse_events_fields)
33
- url = build_url(endpoint, query)
34
- make_request(url)
81
+ def drugs_at_fda(search: [], sort: [], count: [], skip: 0, limit: 1)
82
+ endpoint = "drugsfda.json"
83
+ inputs = build_inputs(search: search, sort: sort, count: count, skip: skip, limit: limit)
84
+ query = build_query(inputs, {}) # TODO: Upload valid fields
85
+ make_request(endpoint, query)
35
86
  end
36
87
 
37
88
  def self.valid_adverse_events_fields
@@ -40,17 +91,21 @@ module OpenFdaApi
40
91
 
41
92
  private
42
93
 
43
- def build_url(endpoint, query)
44
- URI::HTTPS.build(host: @host, path: @path_base + endpoint, query: query)
94
+ def build_query(query_input, valid_search_fields)
95
+ QueryBuilder.new(query_input: query_input, valid_search_fields: valid_search_fields).build_query
45
96
  end
46
97
 
47
- def build_query(search, sort, count, skip, valid_search_fields)
48
- QueryBuilder.new(search: search, sort: sort, count: count, skip: skip,
49
- valid_search_fields: valid_search_fields).build_query
98
+ def build_inputs(search:, sort:, count:, skip:, limit:)
99
+ QueryInputs.new(search: search, sort: sort, count: count, skip: skip, limit: limit)
50
100
  end
51
101
 
52
- def make_request(url)
53
- JSON.parse(Net::HTTP.get(url))
102
+ def make_request(endpoint, query)
103
+ url = "#{path_base}/#{endpoint}"
104
+ if query.empty?
105
+ client.connection.get(url)
106
+ else
107
+ client.connection.get(url, query)
108
+ end.body
54
109
  end
55
110
  end
56
111
  end
@@ -26,52 +26,58 @@ module OpenFdaApi
26
26
  # is 25000. See Paging if you require paging through larger result sets.
27
27
  class QueryBuilder
28
28
  # @param [Hash] valid_search_fields
29
- # @param [Array<Hash>] search
30
- # @param [Array<Hash>] sort
31
- # @param [Array<Hash>] count
32
- # @param [Integer] skip
33
- def initialize(valid_search_fields:, search: [], sort: [], count: [], skip: 0)
34
- validate_arguments!(valid_search_fields, search: search, sort: sort, count: count, skip: skip)
35
- @search = build_query_string(query_type: "search", query_fields: search)
36
- @sort = build_query_string(query_type: "sort", query_fields: sort)
37
- @count = build_query_string(query_type: "count", query_fields: count)
38
- @skip = build_skip_string(skip)
29
+ # @param [QueryInput] query_input
30
+ def initialize(query_input:, valid_search_fields:)
31
+ # TODO: Turn validations back on once we get basic functionality working; need to flex on different field types
32
+ # validate_arguments!(valid_search_fields, query_input: query_input)
33
+ warn "You've passed in a valid_search_fields arg but it isn't being used right now..." if valid_search_fields
34
+ @search = build_query_string(query_fields: query_input.search)
35
+ @sort = build_query_string(query_fields: query_input.sort)
36
+ @count = build_query_string(query_fields: query_input.count)
37
+ @skip = build_skip_string(query_input.skip)
38
+ @limit = query_input.limit
39
39
  end
40
40
 
41
- # @return [String] the query string portion of a request
41
+ # @return [Hash] the query string portion of a request
42
42
  def build_query
43
- [@search, @sort, @count, @skip].reject! { |v| v.nil? || v.empty? }.join("&")
43
+ {
44
+ search: @search,
45
+ sort: @sort,
46
+ count: @count,
47
+ skip: @skip,
48
+ limit: @limit
49
+ }.compact.reject { |_k, v| v.to_s.empty? }
44
50
  end
45
51
 
46
52
  private
47
53
 
48
- def validate_arguments!(valid_search_fields, search:, sort:, count:, skip:)
54
+ def validate_arguments!(valid_search_fields, query_input:)
49
55
  # `search` keys must exist in adverse_events_fields.yml
50
- invalid_fields = get_invalid_fields(valid_search_fields: valid_search_fields, fields: search)
56
+ invalid_fields = get_invalid_fields(valid_search_fields: valid_search_fields, fields: query_input.search)
51
57
  raise InvalidQueryArgument, "'search' has invalid fields: #{invalid_fields}" if invalid_fields.any?
52
58
 
53
59
  # `sort` keys must exist in adverse_events_fields.yml
54
- invalid_fields = get_invalid_fields(valid_search_fields: valid_search_fields, fields: sort)
60
+ invalid_fields = get_invalid_fields(valid_search_fields: valid_search_fields, fields: query_input.sort)
55
61
  raise InvalidQueryArgument, "'sort' has invalid fields: #{invalid_fields}" if invalid_fields.any?
56
62
 
57
63
  # `count` keys must exist in adverse_events_fields.yml
58
- invalid_fields = get_invalid_fields(valid_search_fields: valid_search_fields, fields: count)
64
+ invalid_fields = get_invalid_fields(valid_search_fields: valid_search_fields, fields: query_input.count)
59
65
  raise InvalidQueryArgument, "'count' has invalid fields: #{invalid_fields}" if invalid_fields.any?
60
66
 
61
67
  # `count` and `skip` cannot be set at the same time
62
- return unless count_and_skip_set?(count, skip)
68
+ return unless count_and_skip_set?(query_input.count, query_input.skip)
63
69
 
64
70
  raise InvalidQueryArgument, "'count' and 'skip' cannot both be set at the same time!"
65
71
  end
66
72
 
67
- def build_query_string(query_type:, query_fields:)
73
+ def build_query_string(query_fields:)
68
74
  return "" if query_fields.empty?
69
75
 
70
- "#{query_type}=#{build_groupings(query_fields)}"
76
+ build_groupings(query_fields).to_s
71
77
  end
72
78
 
73
79
  def build_skip_string(skip)
74
- skip.positive? ? "skip=#{skip}" : ""
80
+ skip.positive? ? skip.to_s : ""
75
81
  end
76
82
 
77
83
  def build_groupings(fields)
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenFdaApi
4
+ # Group of inputs to build the query against the API with
5
+ class QueryInputs
6
+ attr_reader :search, :sort, :count, :skip, :limit
7
+
8
+ def initialize(**params)
9
+ @search = params[:search] || []
10
+ @sort = params[:sort] || []
11
+ @count = params[:count] || []
12
+ @skip = params[:skip] || 0
13
+ @limit = params[:limit] || nil
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenFdaApi
4
- VERSION = "0.0.6"
4
+ VERSION = "0.0.9"
5
5
  end
data/lib/open_fda_api.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "open_fda_api/version"
4
- require_relative "open_fda_api/client"
5
4
 
6
5
  # A Ruby wrapper for the openFDA API: https://open.fda.gov/apis/
7
6
  module OpenFdaApi
8
7
  class Error < StandardError; end
9
8
 
10
- def self.client(api_key: nil)
11
- OpenFdaApi::Client.new(api_key: api_key)
12
- end
9
+ autoload :Client, "open_fda_api/client"
10
+ autoload :Drugs, "open_fda_api/drugs"
11
+ autoload :QueryInputs, "open_fda_api/query_inputs"
12
+ autoload :QueryBuilder, "open_fda_api/query_builder"
13
13
  end
data/open_fda_api.gemspec CHANGED
@@ -27,7 +27,9 @@ Gem::Specification.new do |spec|
27
27
  spec.require_paths = ["lib"]
28
28
 
29
29
  # Uncomment to register a new dependency of your gem
30
- # spec.add_dependency "example-gem", "~> 1.0"
30
+ spec.add_dependency "faraday", "~> 1.9"
31
+ spec.add_dependency "faraday_middleware", "~> 1.2"
32
+
31
33
  spec.add_development_dependency "pry"
32
34
 
33
35
  # For more information and examples about making a new gem, checkout our
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_fda_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hebron George
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-21 00:00:00.000000000 Z
11
+ date: 2022-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday_middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: pry
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -49,6 +77,7 @@ files:
49
77
  - lib/open_fda_api/client.rb
50
78
  - lib/open_fda_api/drugs.rb
51
79
  - lib/open_fda_api/query_builder.rb
80
+ - lib/open_fda_api/query_inputs.rb
52
81
  - lib/open_fda_api/version.rb
53
82
  - open_fda_api.gemspec
54
83
  homepage: https://github.com/hebron-george/open_fda_api