caselaw 0.1.0
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 +7 -0
- data/.gitignore +37 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +112 -0
- data/Rakefile +6 -0
- data/caselaw.gemspec +31 -0
- data/docs/README.md +92 -0
- data/examples/README.md +14 -0
- data/examples/jurisdictions.rb +13 -0
- data/examples/witchcraft.rb +12 -0
- data/lib/caselaw.rb +35 -0
- data/lib/caselaw/client.rb +26 -0
- data/lib/caselaw/client/cases.rb +32 -0
- data/lib/caselaw/client/citations.rb +4 -0
- data/lib/caselaw/client/courts.rb +4 -0
- data/lib/caselaw/client/jurisdictions.rb +17 -0
- data/lib/caselaw/client/reporters.rb +4 -0
- data/lib/caselaw/client/volumes.rb +4 -0
- data/lib/caselaw/errors.rb +7 -0
- data/lib/caselaw/jurisdiction.rb +90 -0
- data/lib/caselaw/request.rb +61 -0
- data/lib/caselaw/version.rb +3 -0
- data/spec/caselaw_spec.rb +13 -0
- data/spec/client_spec.rb +69 -0
- data/spec/fixtures/case.json +39 -0
- data/spec/fixtures/full_case.json +63 -0
- data/spec/fixtures/jurisdiction_colo.json +8 -0
- data/spec/fixtures/jurisdictions.json +505 -0
- data/spec/spec_helper.rb +37 -0
- metadata +166 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 493e52b698a4af0e3c322d186ed6e28b19ac7cf2
|
4
|
+
data.tar.gz: 580e3394c374550c997bac54a55cf41ef4202547
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bbeaef183db925d6961e3c097166540c253a302c64fcc22a341c2b0fc1aa9440bcc495818561502c83c104543babec02f4feb4406a966f416107980ee4bb3691
|
7
|
+
data.tar.gz: b06d5e855658bd5c36df0fb28575520664bf5357edbfbf17e3dc804b4e289269fb387a87aedda8686207367e49fa0395a4e04d38bd18e8f9e87d3ef8b4cda413
|
data/.gitignore
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
*.swp
|
4
|
+
*.tmproj
|
5
|
+
*~
|
6
|
+
.DS_Store
|
7
|
+
.\#*
|
8
|
+
.bundle
|
9
|
+
.config
|
10
|
+
.yardoc
|
11
|
+
Gemfile.lock
|
12
|
+
\#*
|
13
|
+
_yardoc
|
14
|
+
coverage
|
15
|
+
doc/
|
16
|
+
lib/bundler/man
|
17
|
+
pkg
|
18
|
+
rdoc
|
19
|
+
spec/reports
|
20
|
+
test/tmp
|
21
|
+
test/version_tmp
|
22
|
+
tmp
|
23
|
+
tmtags/.bundle/
|
24
|
+
/.yardoc
|
25
|
+
/_yardoc/
|
26
|
+
/coverage/
|
27
|
+
/doc/
|
28
|
+
/pkg/
|
29
|
+
/spec/reports/
|
30
|
+
/tmp/
|
31
|
+
|
32
|
+
# rspec failure tracking
|
33
|
+
.rspec_status
|
34
|
+
|
35
|
+
# test files
|
36
|
+
sample-requests.txt
|
37
|
+
/examples/test.rb
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2019 Tom Bonan
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
# CaseLaw API Wrapper
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
Install with RubyGems
|
6
|
+
|
7
|
+
```
|
8
|
+
gem install caselaw
|
9
|
+
```
|
10
|
+
|
11
|
+
## Getting started
|
12
|
+
|
13
|
+
In order to view non-whitelisted court cases, you must [register an account](https://case.law/user/register/) with Case.law and recieve an API key.
|
14
|
+
|
15
|
+
### Setting up the Client
|
16
|
+
|
17
|
+
``` ruby
|
18
|
+
client = Caselaw::Client.new(api_key: "KEY")
|
19
|
+
```
|
20
|
+
|
21
|
+
or via the shorthand version
|
22
|
+
|
23
|
+
``` ruby
|
24
|
+
client = Caselaw.new(api_key: "KEY")
|
25
|
+
```
|
26
|
+
|
27
|
+
### Global configuration
|
28
|
+
|
29
|
+
You can define the credentials for a client at a global level by creating an initiailize file. If using gem in Rails, add a file under `config/initializers`.
|
30
|
+
|
31
|
+
``` ruby
|
32
|
+
Caselaw.configure(
|
33
|
+
api_key: "KEY"
|
34
|
+
)
|
35
|
+
```
|
36
|
+
|
37
|
+
To access the global configuration:
|
38
|
+
|
39
|
+
``` ruby
|
40
|
+
Caselaw.configuration
|
41
|
+
```
|
42
|
+
|
43
|
+
## Examples
|
44
|
+
|
45
|
+
### Lookup a Jurisdiction
|
46
|
+
|
47
|
+
You can lookup a Jurisdiction by id or the full name if unknown
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
client.jurisdiction(31)
|
51
|
+
client.jurisdiction("Colorado")
|
52
|
+
```
|
53
|
+
|
54
|
+
Or get all the Jurisdictions and related information
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
search = client.search_jurisdictions
|
58
|
+
|
59
|
+
search.results.each do |jurisdiction|
|
60
|
+
jurisdiction.id # => jurisdiction id
|
61
|
+
jurisdiction.name_long # => jurisdiction full name
|
62
|
+
jurisdiction.slug # => slug in use on the API
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
### Lookup a case instance
|
67
|
+
|
68
|
+
You can search for a case with a given case id
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
client.case(1021505)
|
72
|
+
```
|
73
|
+
|
74
|
+
And to return the full body of the case instance, add the `true` parameter as the second argument
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
client.case(1021505, true)
|
78
|
+
```
|
79
|
+
|
80
|
+
### Search for Cases by Text
|
81
|
+
|
82
|
+
Search the full text of cases and return the cases that contain the search term. The second argument is the number of cases to be returned.
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
client.search_cases("insurance", 20)
|
86
|
+
```
|
87
|
+
|
88
|
+
Or you can search multiple terms by separating the terms with a space
|
89
|
+
```ruby
|
90
|
+
client.search_cases("insurance Peoria", 20)
|
91
|
+
```
|
92
|
+
|
93
|
+
## Response Structure
|
94
|
+
|
95
|
+
Each response comes in the form of a [Hashie](https://github.com/intridea/hashie) hash to make it easier to access the data. For instance, if we search case `1021505`, we can access information about it easily with Hashie:
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
c = client.case(1021505)
|
99
|
+
|
100
|
+
c.id # => 1021505
|
101
|
+
c.url # => "https://api.case.law/v1/cases/1021505/"
|
102
|
+
c.name # => "William Stone against William Boreman"
|
103
|
+
c.name_abbreviation # => "Stone v. Boreman"
|
104
|
+
c.decision_date # => "1658"
|
105
|
+
```
|
106
|
+
|
107
|
+
As well as information about the Volume, Reporter, Court, and Jurisdiction that the case:
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
c.court.name # => "Maryland Court of Appeals"
|
111
|
+
c.jurisdiction.name_long # => "Maryland"
|
112
|
+
```
|
data/Rakefile
ADDED
data/caselaw.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "caselaw/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = "caselaw"
|
6
|
+
spec.version = Caselaw::VERSION
|
7
|
+
spec.authors = ["tombonan"]
|
8
|
+
spec.email = ["tombonan27@gmail.com"]
|
9
|
+
spec.summary = "Case.law API wrapper"
|
10
|
+
spec.description = "Wrapper for the Caselaw Access Project API"
|
11
|
+
spec.homepage = "https://github.com/tombonan/caselaw"
|
12
|
+
spec.license = "MIT"
|
13
|
+
|
14
|
+
spec.add_development_dependency "bundler", "~> 1.17"
|
15
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
16
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
17
|
+
spec.add_development_dependency "webmock", "~> 3.5"
|
18
|
+
|
19
|
+
spec.add_runtime_dependency "httparty", "~> 0.16.3"
|
20
|
+
spec.add_runtime_dependency "hashie", "~> 3.6"
|
21
|
+
|
22
|
+
spec.post_install_message = "Welcome to the Case Law party!"
|
23
|
+
|
24
|
+
all_files = `git ls-files`.split("\n")
|
25
|
+
test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
26
|
+
|
27
|
+
spec.files = all_files - test_files
|
28
|
+
spec.test_files = test_files
|
29
|
+
spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
30
|
+
spec.require_paths = ["lib"]
|
31
|
+
end
|
data/docs/README.md
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
## Table of Contents
|
2
|
+
|
3
|
+
- [Jurisdictions](#jurisdictions)
|
4
|
+
- [Cases](#cases)
|
5
|
+
|
6
|
+
## Jurisdictions
|
7
|
+
|
8
|
+
### Specific Jurisdiction Information
|
9
|
+
|
10
|
+
You can lookup a jurisdiction by id
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
client.jurisdiction(31)
|
14
|
+
```
|
15
|
+
|
16
|
+
or by the full name if the id is unknown
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
client.jurisdiction("Colorado")
|
20
|
+
```
|
21
|
+
|
22
|
+
### Returning All Jurisdiction Information
|
23
|
+
|
24
|
+
To recieve an array with all 62 jurisdictions and related information
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
search = client.search_jurisdictions
|
28
|
+
jurisdiction_array = search.results
|
29
|
+
```
|
30
|
+
|
31
|
+
### Jurisdiction Slugs
|
32
|
+
|
33
|
+
The Caselaw API uses jurisdiction slugs to filter requests. If you wish to find out the slug of a specific jurisdiction
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
slug = Caselaw::Jurisdiction.get_by_name("Utah") # => 'utah'
|
37
|
+
```
|
38
|
+
|
39
|
+
or you can retrieve the slug by the jurisdiction id
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
slug = Caselaw::Jurisdiction.get_by_id(12) # => 'utah'
|
43
|
+
```
|
44
|
+
|
45
|
+
## Cases
|
46
|
+
|
47
|
+
### Specific Case Instances
|
48
|
+
|
49
|
+
You can lookup a specific case by its id
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
client.case(1021505)
|
53
|
+
```
|
54
|
+
|
55
|
+
And to return the full body of the case, add the `true` parameter as the second argument
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
client.case(1021505, true)
|
59
|
+
```
|
60
|
+
|
61
|
+
### Cases by Jurisdiction
|
62
|
+
|
63
|
+
To return an array of cases by jurisdiction, search either by jurisdiction id or name and enter in the number of cases you want returned as the second argument
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
client.cases_by_jurisdiciton("Colorado", 20)
|
67
|
+
client.cases_by_jurisdiciton(31, 20)
|
68
|
+
```
|
69
|
+
|
70
|
+
This method can also return the full body of a case
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
client.cases_by_jurisdiciton("Colorado", 20, true)
|
74
|
+
client.cases_by_jurisdiciton(31, 20, true)
|
75
|
+
```
|
76
|
+
|
77
|
+
### Cases by Search Term
|
78
|
+
|
79
|
+
Search through cases that have a specific search term in the body of the case. The first argument is the search term and the second is the maximum number of case results you wish to return
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
client.search_cases("witchcraft", 30)
|
83
|
+
```
|
84
|
+
|
85
|
+
You can also search through the text of cases by jurisdiction where the third argument is the jurisdiciton id or name
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
client.search_cases("witchcraft", 30, 31)
|
89
|
+
client.search_cases("witchcraft", 30, "Colorado")
|
90
|
+
```
|
91
|
+
|
92
|
+
|
data/examples/README.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
## Usage
|
2
|
+
In order to run scripts:
|
3
|
+
|
4
|
+
Clone this repositiory and replace `"KEY"` with your provided API key as a string, or
|
5
|
+
|
6
|
+
Copy the script and replace the first two lines with `require 'caselaw'` after installing the gem, and then replace the API key as before
|
7
|
+
|
8
|
+
## Examples
|
9
|
+
|
10
|
+
* [Get all Jurisdictions](jurisdictions.rb)
|
11
|
+
* Print out a list of jurisdictions and related info
|
12
|
+
|
13
|
+
* [Searching Cases by Text](witchcraft.rb)
|
14
|
+
* Print out a search of the first 40 cases that contain the word "witchcraft" in the text of the case
|
@@ -0,0 +1,13 @@
|
|
1
|
+
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require File.join(dir, 'caselaw')
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
client = Caselaw::Client.new(api_key: "KEY")
|
6
|
+
|
7
|
+
search = client.search_jurisdictions
|
8
|
+
|
9
|
+
search.results.each do |jurisdiction|
|
10
|
+
pp "Name: " + jurisdiction.name_long + " | ID: " + jurisdiction.id.to_s + " | Slug: " + jurisdiction.slug
|
11
|
+
end
|
12
|
+
|
13
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require File.join(dir, 'caselaw')
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
client = Caselaw::Client.new(api_key: "KEY")
|
6
|
+
|
7
|
+
cases = client.search_cases("witchcraft", 40)
|
8
|
+
|
9
|
+
cases.results.each do |c|
|
10
|
+
pp "Jurisdiction: " + c.jurisdiction.name_long + " || " + "Case Name: " + c.name
|
11
|
+
end
|
12
|
+
|
data/lib/caselaw.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require "caselaw/version"
|
2
|
+
require "caselaw/errors"
|
3
|
+
require "caselaw/request"
|
4
|
+
require "caselaw/client"
|
5
|
+
require "caselaw/jurisdiction"
|
6
|
+
|
7
|
+
module Caselaw
|
8
|
+
class << self
|
9
|
+
attr_accessor :settings
|
10
|
+
end
|
11
|
+
self.settings = {}
|
12
|
+
|
13
|
+
def self.new(params = {})
|
14
|
+
Caselaw::Client.new(params)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Global configuration settings
|
18
|
+
def self.configure(params = {})
|
19
|
+
fail(ArgumentError, "API key hash required.") unless params.is_a?(Hash)
|
20
|
+
|
21
|
+
settings[:api_key] = params[:api_key]
|
22
|
+
settings
|
23
|
+
end
|
24
|
+
|
25
|
+
# Return global config hash
|
26
|
+
def self.configuration
|
27
|
+
settings
|
28
|
+
end
|
29
|
+
|
30
|
+
# Resets the global configuration
|
31
|
+
def self.reset_configuration
|
32
|
+
self.settings = {}
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "caselaw/client"
|
2
|
+
require "caselaw/client/cases"
|
3
|
+
require "caselaw/client/citations"
|
4
|
+
require "caselaw/client/courts"
|
5
|
+
require "caselaw/client/jurisdictions"
|
6
|
+
require "caselaw/client/reporters"
|
7
|
+
require "caselaw/client/volumes"
|
8
|
+
|
9
|
+
module Caselaw
|
10
|
+
class Client
|
11
|
+
include Caselaw::Request
|
12
|
+
include Caselaw::Cases
|
13
|
+
include Caselaw::Citations
|
14
|
+
include Caselaw::Courts
|
15
|
+
include Caselaw::Jurisdictions
|
16
|
+
include Caselaw::Reporters
|
17
|
+
include Caselaw::Volumes
|
18
|
+
|
19
|
+
attr_reader :api_key
|
20
|
+
|
21
|
+
def initialize(settings = {})
|
22
|
+
fail(ArgumentError, "API key hash is required.") unless settings.is_a?(Hash)
|
23
|
+
@api_key = settings[:api_key]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|