donors_choose 0.0.4 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +13 -0
- data/README.md +24 -2
- data/cassettes/DonorsChoose_Request.yml +36 -0
- data/donors_choose.gemspec +2 -0
- data/lib/donors_choose.rb +9 -6
- data/lib/donors_choose/request.rb +11 -0
- data/lib/donors_choose/version.rb +1 -1
- data/spec/donors_choose_spec.rb +20 -6
- data/spec/request_spec.rb +13 -0
- metadata +29 -5
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# DonorsChoose
|
2
2
|
|
3
|
-
|
3
|
+
DonorsChoose.org is an online charity that makes it easy for anyone to help students in need.
|
4
|
+
|
5
|
+
This is a gem that wraps [their API](http://developer.donorschoose.org/home).
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -18,7 +20,27 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
The first thing you should do is [request an API
|
24
|
+
key](http://developer.donorschoose.org/help-contact). They provide a test key,
|
25
|
+
"DONORSCHOOSE", that will occasionally be turned off. So be nice and get your
|
26
|
+
own. :)
|
27
|
+
|
28
|
+
We're currently developing support for the full API, but right now, there are
|
29
|
+
just two methods.
|
30
|
+
|
31
|
+
DonorsChoose.api_key = "DONORSCHOOSE"
|
32
|
+
|
33
|
+
projects = DonorsChoose.projects_near_me("40.4405556", "-79.9961111")
|
34
|
+
projects = DonorsChoose.projects_by_zip("15232")
|
35
|
+
|
36
|
+
Projects will be an array of objects that contain all of the data returned by
|
37
|
+
the request. You can learn about these objects through introspection:
|
38
|
+
|
39
|
+
> (projects.first.methods - Object.new.methods)
|
40
|
+
=> [:id, ...
|
41
|
+
|
42
|
+
For example. These objects are dynamically created based on the response, so
|
43
|
+
minor API updates may change the attributes.
|
22
44
|
|
23
45
|
## Contributing
|
24
46
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: http://api.donorschoose.org:80/common/json_feed.html?APIKey=DONORSCHOOSE&community=1007:3&state=NC
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
response: !ruby/struct:VCR::Response
|
9
|
+
status: !ruby/struct:VCR::ResponseStatus
|
10
|
+
code: 200
|
11
|
+
message: OK
|
12
|
+
headers:
|
13
|
+
server:
|
14
|
+
- nginx
|
15
|
+
content-type:
|
16
|
+
- text/plain;charset=UTF-8
|
17
|
+
content-language:
|
18
|
+
- en-US
|
19
|
+
cache-control:
|
20
|
+
- private, max-age=600
|
21
|
+
expires:
|
22
|
+
- Tue, 14 Feb 2012 20:01:14 GMT
|
23
|
+
date:
|
24
|
+
- Tue, 14 Feb 2012 19:51:14 GMT
|
25
|
+
content-length:
|
26
|
+
- '796'
|
27
|
+
connection:
|
28
|
+
- keep-alive
|
29
|
+
x-n:
|
30
|
+
- S
|
31
|
+
body: ! "\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\r\n\t
|
32
|
+
\ \t\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n{\"searchTerms\":\"+cityid:1007 AND +statecode:NC
|
33
|
+
AND +historical:fall +_val_:"add(product(10.0,staticNewbie),add(product(100.0,recal(add(ms(NOW,explorationth),3.16911),3.16e-11,1,1)),add(product(10000.0,add(product(1.25,sun(5.0,
|
34
|
+
static)),product(0.75,stationor))),add(product(100000.0,stationeri),add(product(1000000.0,sun(10.0,staticNeedBinary)),0)))))"
|
35
|
+
> Many Farms, Arizona\",\"searchURL\":\"http://www.donorschoose.org/donors/search.html?community=1007%3a3&state=NC&utm_source=api&utm_medium=feed&utm_content=searchlink&utm_campaign=DONORSCHOOSE\",\"totalProposals\":\"0\",\"index\":\"0\",\"max\":\"10\",\"proposals\":[]}\r\n"
|
36
|
+
http_version: '1.1'
|
data/donors_choose.gemspec
CHANGED
data/lib/donors_choose.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
require 'donors_choose/version'
|
2
2
|
require 'donors_choose/request'
|
3
|
-
require 'json'
|
4
|
-
require 'ostruct'
|
5
3
|
|
6
4
|
module DonorsChoose
|
7
5
|
extend self
|
8
|
-
|
6
|
+
|
7
|
+
attr_writer :api_key
|
8
|
+
def api_key
|
9
|
+
@api_key || "DONORSCHOOSE"
|
10
|
+
end
|
9
11
|
|
10
12
|
def projects_near_me(latitude, longitude)
|
11
|
-
|
12
|
-
|
13
|
+
Request.get(:centerLat => latitude, :centerLong => longitude)
|
14
|
+
end
|
13
15
|
|
14
|
-
|
16
|
+
def projects_by_zip(zipcode)
|
17
|
+
Request.get(:keyword => zipcode)
|
15
18
|
end
|
16
19
|
end
|
@@ -1,12 +1,23 @@
|
|
1
1
|
require 'cgi'
|
2
2
|
require 'uri'
|
3
3
|
require 'net/http'
|
4
|
+
require 'json'
|
5
|
+
require 'ostruct'
|
4
6
|
|
5
7
|
class DonorsChoose::Request
|
8
|
+
def self.get(params)
|
9
|
+
new(params).get
|
10
|
+
end
|
11
|
+
|
6
12
|
def initialize(params)
|
7
13
|
@params = params
|
8
14
|
end
|
9
15
|
|
16
|
+
def get
|
17
|
+
data = JSON.parse(fetch)["proposals"]
|
18
|
+
data.collect {|datum| OpenStruct.new(datum)}
|
19
|
+
end
|
20
|
+
|
10
21
|
def fetch
|
11
22
|
base_uri = 'http://api.donorschoose.org/common/json_feed.html'
|
12
23
|
uri_params = @params.collect do |key, value|
|
data/spec/donors_choose_spec.rb
CHANGED
@@ -8,13 +8,27 @@ describe DonorsChoose do
|
|
8
8
|
DonorsChoose.api_key.should eql(key)
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
request.should_receive(:fetch).and_return('{"proposals": [{"title": "A test project"}]}')
|
11
|
+
context "requesting data" do
|
12
|
+
let(:test_title) { "A test project" }
|
14
13
|
|
15
|
-
|
14
|
+
it "is able to find projects near me" do
|
15
|
+
projects = [double]
|
16
|
+
DonorsChoose::Request.should_receive(:get).
|
17
|
+
with(:centerLat => "40.4405556", :centerLong => "-79.9961111").
|
18
|
+
and_return(projects)
|
16
19
|
|
17
|
-
|
18
|
-
|
20
|
+
results = DonorsChoose.projects_near_me("40.4405556", "-79.9961111")
|
21
|
+
results.should eq(projects)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "is able to find projects by zip code" do
|
25
|
+
projects = [double]
|
26
|
+
DonorsChoose::Request.should_receive(:get).
|
27
|
+
with(:keyword => "15232").
|
28
|
+
and_return(projects)
|
29
|
+
|
30
|
+
results = DonorsChoose.projects_by_zip("15232")
|
31
|
+
results.should eq(projects)
|
32
|
+
end
|
19
33
|
end
|
20
34
|
end
|
data/spec/request_spec.rb
CHANGED
@@ -1,7 +1,20 @@
|
|
1
1
|
$:.unshift("lib")
|
2
2
|
require 'donors_choose/request'
|
3
3
|
|
4
|
+
require 'vcr'
|
5
|
+
require 'webmock'
|
6
|
+
VCR.config do |c|
|
7
|
+
c.stub_with :webmock
|
8
|
+
c.cassette_library_dir = 'cassettes'
|
9
|
+
end
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
config.extend VCR::RSpec::Macros
|
13
|
+
end
|
14
|
+
|
4
15
|
describe DonorsChoose::Request do
|
16
|
+
use_vcr_cassette
|
17
|
+
|
5
18
|
it "is able to request data from the API" do
|
6
19
|
DonorsChoose.api_key = "DONORSCHOOSE"
|
7
20
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: donors_choose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-14 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
|
-
requirement: &
|
16
|
+
requirement: &70326897943640 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70326897943640
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70326897943120 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,29 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70326897943120
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: vcr
|
38
|
+
requirement: &70326897942580 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70326897942580
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: webmock
|
49
|
+
requirement: &70326897941960 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70326897941960
|
36
58
|
description: A gem to wrap the DonorsChoose.org API.
|
37
59
|
email:
|
38
60
|
- steve@steveklabnik.com
|
@@ -42,10 +64,12 @@ extra_rdoc_files: []
|
|
42
64
|
files:
|
43
65
|
- .gitignore
|
44
66
|
- .rvmrc
|
67
|
+
- .travis.yml
|
45
68
|
- Gemfile
|
46
69
|
- LICENSE
|
47
70
|
- README.md
|
48
71
|
- Rakefile
|
72
|
+
- cassettes/DonorsChoose_Request.yml
|
49
73
|
- donors_choose.gemspec
|
50
74
|
- lib/donors_choose.rb
|
51
75
|
- lib/donors_choose/request.rb
|