open_fda_api 0.0.6 → 0.0.9

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.
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