federal_register 0.6.9 → 0.7.7

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: b49f0e10f7be9d6878f35facc35252377728742fdf87975f28accdfcc88764a4
4
- data.tar.gz: 318f5def018fdd8f302116fb25a73e17012c7af093e1366066b05101ba2bf849
3
+ metadata.gz: 29108ec013bfbdf370e3ac4b2c5f2de8312ee5ed0d42fa4314a4ec67349ddaa7
4
+ data.tar.gz: 81773b6cedce1060dd60b0bc811f81e47db875e9e2feb0eefd39b8ce707687ce
5
5
  SHA512:
6
- metadata.gz: 93b9651df729732f7c4368312d660c08290d250315b0d1678b9f9aff3ab7cf055c9f246ee9ea7a461befd6f053a82b83bcb989a1aa51432375031a1597e1c2c8
7
- data.tar.gz: bcea7d1ba4f7b5a8c5495a707d2410c22a1f1801fdaa05b0665ac595d6f3c53ecea7f205e88ac58d2a5733276b8ba1794ba58af8f4e85942f0d418b33351a9f7
6
+ metadata.gz: cfaafa77066a18b25c3fb8168e677b9d5cf332da4cde50112a2e945adc8d0eedbaca0045d96617b20fc0e28eacbf5e3d26cf0425fc9629af1f257236aa260db2
7
+ data.tar.gz: 71f6cab320067badb01768221dec911e9bf57d777594a28b2f658489ac2bcf4e1162b74ceeb5dd3a549a116748d07a953903be776c20f9212342770672ca04b7
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- federal_register (0.6.7)
5
- httparty (~> 0.14.0)
4
+ federal_register (0.7.7)
5
+ httparty (>= 0.14.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -14,10 +14,14 @@ GEM
14
14
  concurrent-ruby (1.0.5)
15
15
  diff-lcs (1.2.5)
16
16
  fakeweb (1.3.0)
17
- httparty (0.14.0)
17
+ httparty (0.18.1)
18
+ mime-types (~> 3.0)
18
19
  multi_xml (>= 0.5.2)
19
20
  i18n (0.9.1)
20
21
  concurrent-ruby (~> 1.0)
22
+ mime-types (3.3.1)
23
+ mime-types-data (~> 3.2015)
24
+ mime-types-data (3.2020.1104)
21
25
  multi_json (1.12.2)
22
26
  multi_xml (0.6.0)
23
27
  parallel (1.12.0)
@@ -35,6 +39,8 @@ GEM
35
39
  rspec-expectations (2.99.2)
36
40
  diff-lcs (>= 1.1.3, < 2.0)
37
41
  rspec-mocks (2.99.3)
42
+ rspec_junit_formatter (0.4.1)
43
+ rspec-core (>= 2, < 4, != 2.12.0)
38
44
  rubocop (0.51.0)
39
45
  parallel (~> 1.10)
40
46
  parser (>= 2.3.3.1, < 3.0)
@@ -60,8 +66,9 @@ DEPENDENCIES
60
66
  fakeweb (~> 1.3.0)
61
67
  federal_register!
62
68
  rspec (~> 2.6)
69
+ rspec_junit_formatter
63
70
  rubocop
64
71
  shoulda
65
72
 
66
73
  BUNDLED WITH
67
- 1.16.0
74
+ 2.1.4
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.9
1
+ 0.7.7
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "federal_register"
8
- s.version = "0.6.9"
8
+ s.version = "0.7.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andrew Carpenter", "Bob Burbach"]
12
- s.date = "2019-05-09"
12
+ s.date = "2019-12-03"
13
13
  s.description = "Ruby API Client for FederalRegister.gov that handles searching documents and getting information about agencies"
14
14
  s.email = "andrew@criticaljuncture.org"
15
15
  s.extra_rdoc_files = [
@@ -34,6 +34,8 @@ Gem::Specification.new do |s|
34
34
  "lib/federal_register/client.rb",
35
35
  "lib/federal_register/document.rb",
36
36
  "lib/federal_register/document_image.rb",
37
+ "lib/federal_register/document_search_details.rb",
38
+ "lib/federal_register/document_utilities.rb",
37
39
  "lib/federal_register/facet.rb",
38
40
  "lib/federal_register/facet/agency.rb",
39
41
  "lib/federal_register/facet/document.rb",
@@ -61,6 +63,7 @@ Gem::Specification.new do |s|
61
63
  "lib/federal_register/facet_result_set.rb",
62
64
  "lib/federal_register/highlighted_document.rb",
63
65
  "lib/federal_register/public_inspection_document.rb",
66
+ "lib/federal_register/public_inspection_document_search_details.rb",
64
67
  "lib/federal_register/public_inspection_issue_result_set.rb",
65
68
  "lib/federal_register/result_set.rb",
66
69
  "lib/federal_register/section.rb",
@@ -92,6 +95,7 @@ Gem::Specification.new do |s|
92
95
  s.add_development_dependency(%q<activesupport>, ["~> 3"])
93
96
  s.add_development_dependency(%q<fakeweb>, ["~> 1.3.0"])
94
97
  s.add_development_dependency(%q<rubocop>, [">= 0"])
98
+ s.add_development_dependency(%q<rspec_junit_formatter>, [">= 0"])
95
99
  else
96
100
  s.add_dependency(%q<httparty>, [">= 0.7.0"])
97
101
  s.add_dependency(%q<shoulda>, [">= 0"])
@@ -100,6 +104,7 @@ Gem::Specification.new do |s|
100
104
  s.add_dependency(%q<activesupport>, ["~> 3"])
101
105
  s.add_dependency(%q<fakeweb>, ["~> 1.3.0"])
102
106
  s.add_dependency(%q<rubocop>, [">= 0"])
107
+ s.add_dependency(%q<rspec_junit_formatter>, [">= 0"])
103
108
  end
104
109
  else
105
110
  s.add_dependency(%q<httparty>, [">= 0.14.0"])
@@ -109,5 +114,6 @@ Gem::Specification.new do |s|
109
114
  s.add_dependency(%q<activesupport>, ["~> 3"])
110
115
  s.add_dependency(%q<fakeweb>, ["~> 1.3.0"])
111
116
  s.add_dependency(%q<rubocop>, [">= 0"])
117
+ s.add_dependency(%q<rspec_junit_formatter>, [">= 0"])
112
118
  end
113
119
  end
@@ -12,11 +12,12 @@ require "federal_register/result_set.rb"
12
12
  require "federal_register/public_inspection_issue_result_set.rb"
13
13
  require "federal_register/facet_result_set.rb"
14
14
 
15
+ require "federal_register/document_utilities.rb"
15
16
  require "federal_register/agency.rb"
16
17
  require "federal_register/document.rb"
17
18
  require "federal_register/article.rb"
18
19
  require "federal_register/document_image.rb"
19
-
20
+ require "federal_register/document_search_details.rb"
20
21
 
21
22
  require "federal_register/facet.rb"
22
23
  require "federal_register/facet/agency.rb"
@@ -49,6 +50,7 @@ require "federal_register/facet/public_inspection_issue/type_filing.rb"
49
50
 
50
51
  require "federal_register/highlighted_document.rb"
51
52
  require "federal_register/public_inspection_document.rb"
53
+ require "federal_register/public_inspection_document_search_details.rb"
52
54
  require "federal_register/section.rb"
53
55
  require "federal_register/suggested_search.rb"
54
56
  require "federal_register/topic.rb"
@@ -1,6 +1,8 @@
1
1
  class FederalRegister::Base < FederalRegister::Client
2
2
  attr_reader :attributes
3
3
 
4
+ INTEGER_CLASS = 1.class
5
+
4
6
  def self.add_attribute(*attributes)
5
7
  options = {}
6
8
 
@@ -22,7 +24,7 @@ class FederalRegister::Base < FederalRegister::Client
22
24
  val = DateTime.parse(val.to_s)
23
25
  end
24
26
  when :integer
25
- if ! val.is_a?(Fixnum)
27
+ if ! val.is_a?(INTEGER_CLASS)
26
28
  val = val.to_i
27
29
  end
28
30
  end
@@ -60,6 +62,7 @@ class FederalRegister::Base < FederalRegister::Client
60
62
  FederalRegister::Client,
61
63
  FederalRegister::Document,
62
64
  FederalRegister::DocumentImage,
65
+ FederalRegister::DocumentSearchDetails,
63
66
 
64
67
  FederalRegister::Facet,
65
68
  FederalRegister::Facet::Agency,
@@ -79,6 +82,7 @@ class FederalRegister::Base < FederalRegister::Client
79
82
  FederalRegister::Facet::Document::Type,
80
83
 
81
84
  FederalRegister::Facet::PublicInspectionDocument,
85
+ FederalRegister::PublicInspectionDocumentSearchDetails,
82
86
  FederalRegister::Facet::PublicInspectionDocument::Agencies,
83
87
  FederalRegister::Facet::PublicInspectionDocument::Agency,
84
88
  FederalRegister::Facet::PublicInspectionDocument::Type,
@@ -11,9 +11,11 @@ class FederalRegister::Client
11
11
  end
12
12
  end
13
13
 
14
- class RecordNotFound < ResponseError; end
15
14
  class BadRequest < ResponseError; end
15
+ class GatewayTimeout < ResponseError; end
16
+ class RecordNotFound < ResponseError; end
16
17
  class ServerError < ResponseError; end
18
+ class ServiceUnavailable < ResponseError; end
17
19
 
18
20
  base_uri 'https://www.federalregister.gov/api/v1'
19
21
 
@@ -29,6 +31,10 @@ class FederalRegister::Client
29
31
  raise RecordNotFound.new(response)
30
32
  when 500
31
33
  raise ServerError.new(response)
34
+ when 503
35
+ raise ServiceUnavailable.new(response)
36
+ when 504
37
+ raise GatewayTimeout.new(response)
32
38
  else
33
39
  raise HTTParty::ResponseError.new(response)
34
40
  end
@@ -1,5 +1,6 @@
1
1
  class FederalRegister::Document < FederalRegister::Base
2
2
  extend FederalRegister::Utilities
3
+ extend FederalRegister::DocumentUtilities
3
4
 
4
5
  add_attribute :abstract,
5
6
  :abstract_html_url,
@@ -60,32 +61,25 @@ class FederalRegister::Document < FederalRegister::Base
60
61
  end
61
62
 
62
63
  def self.find(document_number, options={})
63
- if options[:fields].present?
64
- attributes = get("/documents/#{document_number}.json", :query => {:fields => options[:fields]}).parsed_response
65
- new(attributes)
66
- else
67
- attributes = get("/documents/#{document_number}.json").parsed_response
68
- new(attributes, :full => true)
64
+ query = {}
65
+
66
+ if options[:publication_date].present?
67
+ publication_date = options[:publication_date]
68
+ publication_date = publication_date.is_a?(Date) ? publication_date.to_s(:iso) : publication_date
69
+
70
+ query.merge!(:publication_date => publication_date)
69
71
  end
70
- end
71
-
72
- # supports values like: '2016-26522', '2016-26522,2016-26594', '81 FR 76496', '81 FR 76496,81 FR 76685'
73
- # note: no space after comma
74
- def self.find_all(*args)
75
- options, document_numbers_or_citations = extract_options(args)
76
-
77
- fetch_options = {:result_class => self}
78
- fetch_options.merge!(:query => {:fields => options[:fields]}) if options[:fields]
79
72
 
80
- document_numbers_or_citations = document_numbers_or_citations.flatten
81
-
82
- #TODO: fix this gross hack to ensure that find_all with a single document number
83
- # is returned in the same way multiple document numbers are
84
- if document_numbers_or_citations.size == 1
85
- document_numbers_or_citations << " "
73
+ if options[:fields].present?
74
+ query.merge!(:fields => options[:fields])
86
75
  end
87
76
 
88
- result_set = FederalRegister::ResultSet.fetch("/documents/#{URI.encode(document_numbers_or_citations.join(',').strip)}.json", fetch_options)
77
+ attributes = get("/documents/#{document_number}.json", :query => query).parsed_response
78
+ new(attributes, :full => true)
79
+ end
80
+
81
+ def self.find_all_base_path
82
+ '/documents'
89
83
  end
90
84
 
91
85
  def agencies
@@ -0,0 +1,11 @@
1
+ class FederalRegister::DocumentSearchDetails < FederalRegister::Base
2
+ extend FederalRegister::Utilities
3
+
4
+ add_attribute :filters,
5
+ :suggestions
6
+
7
+ def self.search(args)
8
+ response = get('/documents/search-details', query: args).parsed_response
9
+ new(response)
10
+ end
11
+ end
@@ -0,0 +1,57 @@
1
+ module FederalRegister::DocumentUtilities
2
+ URL_CHARACTER_LIMIT = 2000
3
+
4
+ def find_all(*args)
5
+ options, document_numbers_or_citations = extract_options(args)
6
+ document_numbers_or_citations.flatten!
7
+
8
+ fetch_options = {:result_class => self}
9
+ fetch_options.merge!(:query => {:fields => options[:fields]}) if options[:fields]
10
+
11
+ document_numbers_or_citations.uniq!
12
+
13
+ if document_numbers_or_citations.empty?
14
+ raise "No documents or citation numbers were provided"
15
+ end
16
+
17
+ #TODO: fix this gross hack to ensure that find_all with a single document number
18
+ # is returned in the same way multiple document numbers are
19
+ if document_numbers_or_citations.size == 1
20
+ document_numbers_or_citations << " "
21
+ end
22
+
23
+ http_request_batches = calculate_request_batches(document_numbers_or_citations, fetch_options)
24
+
25
+ slice_size = (document_numbers_or_citations.count.to_f / http_request_batches).ceil
26
+ results = []
27
+ document_numbers_or_citations.each_slice(slice_size).each do |slice|
28
+
29
+ params = URI.encode(slice.join(',').strip)
30
+ url = "#{find_all_base_path}/#{params}.json"
31
+ response = get(url, fetch_options).parsed_response
32
+ results += response['results']
33
+ end
34
+
35
+ FederalRegister::ResultSet.new(
36
+ {
37
+ 'count' => results.count,
38
+ 'results' => results,
39
+ },
40
+ self
41
+ )
42
+ end
43
+
44
+ private
45
+
46
+ def calculate_request_batches(document_numbers_or_citations, fetch_options)
47
+ fetch_option_url_character_count = URI.encode_www_form(fetch_options).length # HTTPParty uses Net::HTTP
48
+ characters_available = URL_CHARACTER_LIMIT - fetch_option_url_character_count
49
+ doc_number_character_count = URI.encode(document_numbers_or_citations.compact.join(',').strip).length
50
+
51
+ if characters_available > doc_number_character_count
52
+ 1
53
+ else
54
+ (doc_number_character_count.to_f / characters_available).ceil
55
+ end
56
+ end
57
+ end
@@ -1,5 +1,6 @@
1
1
  class FederalRegister::PublicInspectionDocument < FederalRegister::Base
2
2
  extend FederalRegister::Utilities
3
+ extend FederalRegister::DocumentUtilities
3
4
 
4
5
  add_attribute :agencies,
5
6
  :docket_numbers,
@@ -43,19 +44,8 @@ class FederalRegister::PublicInspectionDocument < FederalRegister::Base
43
44
  FederalRegister::PublicInspectionIssueResultSet.fetch("/public-inspection-documents/current.json", :result_class => self)
44
45
  end
45
46
 
46
- def self.find_all(*args)
47
- options, document_numbers = extract_options(args)
48
-
49
- fetch_options = {:result_class => self}
50
- fetch_options.merge!(:query => {:fields => options[:fields]}) if options[:fields]
51
-
52
- #TODO: fix this gross hack to ensure that find_all with a single document number
53
- # is returned in the same way multiple document numbers are
54
- if document_numbers.size == 1
55
- document_numbers << " "
56
- end
57
-
58
- result_set = FederalRegister::ResultSet.fetch("/public-inspection-documents/#{document_numbers.join(',').strip}.json", fetch_options)
47
+ def self.find_all_base_path
48
+ '/public-inspection-documents'
59
49
  end
60
50
 
61
51
  def agencies
@@ -0,0 +1,11 @@
1
+ class FederalRegister::PublicInspectionDocumentSearchDetails < FederalRegister::Base
2
+ extend FederalRegister::Utilities
3
+
4
+ add_attribute :filters,
5
+ :suggestions
6
+
7
+ def self.search(args)
8
+ response = get('/public-inspection-documents/search-details', query: args).parsed_response
9
+ new(response)
10
+ end
11
+ end
data/spec/base_spec.rb CHANGED
@@ -45,7 +45,7 @@ describe FederalRegister::Base do
45
45
  instance = @klass.new('panda' => date_string)
46
46
  lambda {
47
47
  instance.panda.should == "never going to get here"
48
- }.should raise_error
48
+ }.should raise_error ArgumentError
49
49
  end
50
50
  end
51
51
  end
@@ -84,10 +84,11 @@ describe FederalRegister::Base do
84
84
  context "when value is not a valid date string" do
85
85
  it "throws" do
86
86
  date_string = "foo"
87
- instance = @klass.new(:updated_at => date_string)
87
+ instance = @klass.new('updated_at' => date_string)
88
+
88
89
  lambda {
89
90
  instance.updated_at.should == '?'
90
- }.should raise_error
91
+ }.should raise_error ArgumentError
91
92
  end
92
93
  end
93
94
  end
@@ -16,9 +16,11 @@ describe FederalRegister::Document do
16
16
 
17
17
  it "fetches the document with only requested fields (when present)" do
18
18
  document_number = "2010-213"
19
+ params = URI.encode_www_form([["fields[]","title"],["fields[]", "start_page"]])
20
+
19
21
  FakeWeb.register_uri(
20
22
  :get,
21
- "https://www.federalregister.gov/api/v1/documents/#{document_number}.json?fields[]=title&fields[]=start_page",
23
+ "https://www.federalregister.gov/api/v1/documents/#{document_number}.json?#{params}",
22
24
  :content_type => "text/json",
23
25
  :body => {:title => "Important Notice", :start_page => 12345}.to_json
24
26
  )
@@ -29,6 +31,23 @@ describe FederalRegister::Document do
29
31
  result.end_page.should be(nil)
30
32
  end
31
33
 
34
+ it "fetches the document with the provided publication date (when present)" do
35
+ document_number = "2010-213"
36
+ publication_date = "2010-02-02"
37
+ params = URI.encode_www_form([["publication_date", "#{publication_date}"]])
38
+
39
+ FakeWeb.register_uri(
40
+ :get,
41
+ "https://www.federalregister.gov/api/v1/documents/#{document_number}.json?#{params}",
42
+ :content_type => "text/json",
43
+ :body => {:title => "Important Notice", :publication_date => publication_date}.to_json
44
+ )
45
+
46
+ result = FederalRegister::Document.find(document_number, :publication_date => publication_date)
47
+ result.title.should eql("Important Notice")
48
+ result.publication_date.should eql(Date.parse(publication_date))
49
+ end
50
+
32
51
  it "throws an error when a document doesn't exist" do
33
52
  document_number = "some-random-document"
34
53
  FakeWeb.register_uri(
@@ -54,9 +73,11 @@ describe FederalRegister::Document do
54
73
  end
55
74
 
56
75
  it "fetches multiple matching documents with only requested fields (when present)" do
76
+ params = URI.encode_www_form([["fields[]","document_number"],["fields[]", "title"]])
77
+
57
78
  FakeWeb.register_uri(
58
79
  :get,
59
- "https://www.federalregister.gov/api/v1/documents/abc,def.json?fields[]=document_number&fields[]=title",
80
+ "https://www.federalregister.gov/api/v1/documents/abc,def.json?#{params}",
60
81
  :content_type =>"text/json",
61
82
  :body => {:results => [{:document_number => "abc", :title => "Important Notice"},
62
83
  {:document_number => "def", :title => "Important Rule"}]}.to_json
@@ -66,13 +87,87 @@ describe FederalRegister::Document do
66
87
  result_set.results.map(&:title).sort.should === ['Important Notice','Important Rule']
67
88
  result_set.results.map(&:start_page).should === [nil, nil]
68
89
  end
90
+
91
+ it "handles results when no documents are returned" do
92
+ params = URI.encode_www_form([["fields[]","document_number"],["fields[]", "title"]])
93
+ FakeWeb.register_uri(
94
+ :get,
95
+ "https://www.federalregister.gov/api/v1/documents/bad_document_number,.json?#{params}",
96
+ :content_type =>"text/json",
97
+ :body => {"count":0,"results":[],"errors":{"not_found":["bad_docuemnt_number"]}}.to_json
98
+ )
99
+
100
+ result_set = FederalRegister::Document.find_all('bad_document_number', :fields => ["document_number", "title"])
101
+ result_set.count.should == 0
102
+ end
103
+
104
+ it "appends a trailing comma when a single document is provided to ensure API interface doesn't return a single document" do
105
+ params = URI.encode_www_form([["fields[]","document_number"],["fields[]", "title"]])
106
+ FakeWeb.register_uri(
107
+ :get,
108
+ "https://www.federalregister.gov/api/v1/documents/2016-26522,.json?#{params}",
109
+ :content_type =>"text/json",
110
+ :body => {:results => [{:document_number => "2016-26522", :title => "Important Notice"}],
111
+ }.to_json
112
+ )
113
+
114
+ FederalRegister::Document.find_all('2016-26522', :fields => ["document_number", "title"])
115
+ end
116
+
117
+ it "ensures document or citation numbers provided are unique before making requests to API Core." do
118
+ # Without calling unique, duplicate results could be returned since we're now batching up larger requests.
119
+ params = URI.encode_www_form([["fields[]","document_number"],["fields[]", "title"]])
120
+ FakeWeb.register_uri(
121
+ :get,
122
+ "https://www.federalregister.gov/api/v1/documents/2016-26522,.json?fields[]=#{params}",
123
+ :content_type =>"text/json",
124
+ :body => {:results => [{:document_number => "2016-26522", :title => "Important Notice"}],
125
+ }.to_json
126
+ )
127
+ FederalRegister::Document.find_all('2016-26522', '2016-26522', :fields => ["document_number", "title"])
128
+ end
129
+
130
+ #TODO: Add specs aroudn API response
131
+ it "batches up large requests when CGI parameters exceed the URL limit and returns the correct" do
132
+ params = URI.encode_www_form([["fields[]","document_number"],["fields[]", "title"]])
133
+ FakeWeb.register_uri(
134
+ :get,
135
+ "https://www.federalregister.gov/api/v1/documents/2016-26000,2016-26001,2016-26002,2016-26003,2016-26004,2016-26005,2016-26006,2016-26007,2016-26008,2016-26009,2016-26010,2016-26011,2016-26012,2016-26013,2016-26014,2016-26015,2016-26016,2016-26017,2016-26018,2016-26019,2016-26020,2016-26021,2016-26022,2016-26023,2016-26024,2016-26025,2016-26026,2016-26027,2016-26028,2016-26029,2016-26030,2016-26031,2016-26032,2016-26033,2016-26034,2016-26035,2016-26036,2016-26037,2016-26038,2016-26039,2016-26040,2016-26041,2016-26042,2016-26043,2016-26044,2016-26045,2016-26046,2016-26047,2016-26048,2016-26049,2016-26050,2016-26051,2016-26052,2016-26053,2016-26054,2016-26055,2016-26056,2016-26057,2016-26058,2016-26059,2016-26060,2016-26061,2016-26062,2016-26063,2016-26064,2016-26065,2016-26066,2016-26067,2016-26068,2016-26069,2016-26070,2016-26071,2016-26072,2016-26073,2016-26074,2016-26075,2016-26076,2016-26077,2016-26078,2016-26079,2016-26080,2016-26081,2016-26082,2016-26083,2016-26084,2016-26085,2016-26086,2016-26087,2016-26088,2016-26089,2016-26090,2016-26091,2016-26092,2016-26093,2016-26094,2016-26095,2016-26096,2016-26097,2016-26098,2016-26099,2016-26100.json?#{params}",
136
+ :content_type =>"text/json",
137
+ :body => {:results => [
138
+ {:document_number => "2016-26000", :title => "Important Notice"},
139
+ #...
140
+ ]}.to_json
141
+ )
142
+ FakeWeb.register_uri(
143
+ :get,
144
+ "https://www.federalregister.gov/api/v1/documents/2016-26101,2016-26102,2016-26103,2016-26104,2016-26105,2016-26106,2016-26107,2016-26108,2016-26109,2016-26110,2016-26111,2016-26112,2016-26113,2016-26114,2016-26115,2016-26116,2016-26117,2016-26118,2016-26119,2016-26120,2016-26121,2016-26122,2016-26123,2016-26124,2016-26125,2016-26126,2016-26127,2016-26128,2016-26129,2016-26130,2016-26131,2016-26132,2016-26133,2016-26134,2016-26135,2016-26136,2016-26137,2016-26138,2016-26139,2016-26140,2016-26141,2016-26142,2016-26143,2016-26144,2016-26145,2016-26146,2016-26147,2016-26148,2016-26149,2016-26150,2016-26151,2016-26152,2016-26153,2016-26154,2016-26155,2016-26156,2016-26157,2016-26158,2016-26159,2016-26160,2016-26161,2016-26162,2016-26163,2016-26164,2016-26165,2016-26166,2016-26167,2016-26168,2016-26169,2016-26170,2016-26171,2016-26172,2016-26173,2016-26174,2016-26175,2016-26176,2016-26177,2016-26178,2016-26179,2016-26180,2016-26181,2016-26182,2016-26183,2016-26184,2016-26185,2016-26186,2016-26187,2016-26188,2016-26189,2016-26190,2016-26191,2016-26192,2016-26193,2016-26194,2016-26195,2016-26196,2016-26197,2016-26198,2016-26199,2016-26200.json?#{params}",
145
+ :content_type =>"text/json",
146
+ :body => {:results => [
147
+ {:document_number => "2016-26000", :title => "Important Notice"},
148
+ #...
149
+ ]}.to_json
150
+ )
151
+
152
+ document_numbers = []
153
+ doc_suffix = 26000
154
+ 201.times { document_numbers << "2016-#{doc_suffix}"; doc_suffix += 1 }
155
+
156
+ result_set = FederalRegister::Document.find_all(*document_numbers, :fields => ["document_number", "title"])
157
+
158
+ result_set.count.should == 2
159
+ result_set.previous.should == nil
160
+ result_set.next.should == nil
161
+ result_set.total_pages.should == nil
162
+ end
69
163
  end
70
164
 
71
165
  describe ".search" do
72
166
  before(:each) do
167
+ params = URI.encode_www_form([["conditions[term]","Fish"]])
73
168
  FakeWeb.register_uri(
74
169
  :get,
75
- "https://www.federalregister.gov/api/v1/documents.json?conditions[term]=Fish",
170
+ "https://www.federalregister.gov/api/v1/documents.json?#{params}",
76
171
  :content_type =>"text/json",
77
172
  :body => {:count => 3}.to_json
78
173
  )
@@ -41,9 +41,10 @@ describe FederalRegister::PublicInspectionDocument do
41
41
 
42
42
  describe ".available_on" do
43
43
  it "fetches the document on PI on a given date" do
44
+ params = URI.encode_www_form([["conditions[available_on]", "2011-10-15"]])
44
45
  FakeWeb.register_uri(
45
46
  :get,
46
- "https://www.federalregister.gov/api/v1/public-inspection-documents.json?conditions[available_on]=2011-10-15",
47
+ "https://www.federalregister.gov/api/v1/public-inspection-documents.json?#{params}",
47
48
  :content_type =>"text/json",
48
49
  :body => {:results => [{:document_number => "abc"}, {:document_number => "def"}]}.to_json
49
50
  )
data/spec/spec_helper.rb CHANGED
@@ -13,6 +13,8 @@ FakeWeb.allow_net_connect = false
13
13
  # in ./support/ and its subdirectories.
14
14
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
15
15
 
16
- # RSpec.configure do |config|
17
- #
18
- # end
16
+ RSpec.configure do |config|
17
+ config.expect_with(:rspec) { |c| c.syntax = :should }
18
+ end
19
+
20
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: federal_register
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.9
4
+ version: 0.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Carpenter
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-05-09 00:00:00.000000000 Z
12
+ date: 2019-12-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -109,6 +109,20 @@ dependencies:
109
109
  - - ">="
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rspec_junit_formatter
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
112
126
  description: Ruby API Client for FederalRegister.gov that handles searching documents
113
127
  and getting information about agencies
114
128
  email: andrew@criticaljuncture.org
@@ -135,6 +149,8 @@ files:
135
149
  - lib/federal_register/client.rb
136
150
  - lib/federal_register/document.rb
137
151
  - lib/federal_register/document_image.rb
152
+ - lib/federal_register/document_search_details.rb
153
+ - lib/federal_register/document_utilities.rb
138
154
  - lib/federal_register/facet.rb
139
155
  - lib/federal_register/facet/agency.rb
140
156
  - lib/federal_register/facet/document.rb
@@ -162,6 +178,7 @@ files:
162
178
  - lib/federal_register/facet_result_set.rb
163
179
  - lib/federal_register/highlighted_document.rb
164
180
  - lib/federal_register/public_inspection_document.rb
181
+ - lib/federal_register/public_inspection_document_search_details.rb
165
182
  - lib/federal_register/public_inspection_issue_result_set.rb
166
183
  - lib/federal_register/result_set.rb
167
184
  - lib/federal_register/section.rb
@@ -193,8 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
210
  - !ruby/object:Gem::Version
194
211
  version: '0'
195
212
  requirements: []
196
- rubyforge_project:
197
- rubygems_version: 2.7.6.2
213
+ rubygems_version: 3.1.2
198
214
  signing_key:
199
215
  specification_version: 3
200
216
  summary: Ruby API Client for FederalRegister.gov