donors_choose 0.9.0 → 1.0.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.
- data/.yardopts +1 -0
- data/cassettes/1.8/DonorsChoose_Request.yml +109 -0
- data/cassettes/{DonorsChoose_Request.yml → not_1.8/DonorsChoose_Request.yml} +2 -2
- data/donors_choose.gemspec +1 -0
- data/lib/donors_choose.rb +11 -11
- data/lib/donors_choose/project.rb +14 -0
- data/lib/donors_choose/request.rb +25 -8
- data/lib/donors_choose/version.rb +2 -1
- data/spec/donors_choose_spec.rb +1 -25
- data/spec/project_spec.rb +26 -0
- data/spec/request_spec.rb +3 -2
- metadata +28 -11
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup markdown
|
@@ -0,0 +1,109 @@
|
|
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=582
|
21
|
+
expires:
|
22
|
+
- Wed, 15 Feb 2012 21:43:28 GMT
|
23
|
+
date:
|
24
|
+
- Wed, 15 Feb 2012 21:33:46 GMT
|
25
|
+
content-length:
|
26
|
+
- "796"
|
27
|
+
connection:
|
28
|
+
- keep-alive
|
29
|
+
x-n:
|
30
|
+
- S
|
31
|
+
body: |
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
{"searchTerms":"+cityid:1007 AND +statecode:NC 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, static)),product(0.75,stationor))),add(product(100000.0,stationeri),add(product(1000000.0,sun(10.0,staticNeedBinary)),0)))))" > 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":[]}
|
108
|
+
|
109
|
+
http_version: "1.1"
|
data/donors_choose.gemspec
CHANGED
data/lib/donors_choose.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
require 'donors_choose/version'
|
2
2
|
require 'donors_choose/request'
|
3
|
+
require 'donors_choose/project'
|
3
4
|
|
5
|
+
# This module provides the entry point for the library. Everything here
|
6
|
+
# is considered public, the rest of the objects are essentially internal.
|
4
7
|
module DonorsChoose
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@api_key || "DONORSCHOOSE"
|
8
|
+
# An API key is needed to make requests. Get one
|
9
|
+
# [here](http://developer.donorschoose.org/help-contact).
|
10
|
+
def self.api_key=(key)
|
11
|
+
@api_key = key
|
10
12
|
end
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
def projects_by_zip(zipcode)
|
17
|
-
Request.get(:keyword => zipcode)
|
14
|
+
# We default to the development key that works for everyone. Set it to
|
15
|
+
# something else in production environments.
|
16
|
+
def self.api_key
|
17
|
+
@api_key || "DONORSCHOOSE"
|
18
18
|
end
|
19
19
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# This API allows us to find information about DonorsChoose projects,
|
2
|
+
# so a Project is the main class of the gem.
|
3
|
+
class DonorsChoose::Project
|
4
|
+
|
5
|
+
# This method finds all projects near a given latitude and longitude.
|
6
|
+
def self.near_me(latitude, longitude)
|
7
|
+
DonorsChoose::Request.get(:centerLat => latitude, :centerLong => longitude)
|
8
|
+
end
|
9
|
+
|
10
|
+
# This method allows you to look up all projects by a zip code.
|
11
|
+
def self.by_zip(zipcode)
|
12
|
+
DonorsChoose::Request.get(:zip => zipcode)
|
13
|
+
end
|
14
|
+
end
|
@@ -4,26 +4,43 @@ require 'net/http'
|
|
4
4
|
require 'json'
|
5
5
|
require 'ostruct'
|
6
6
|
|
7
|
+
# This class provides a wrapper around all of the external interaction
|
8
|
+
# we'll be doing. It's kinda important, given we're wrapping an API. ;)
|
7
9
|
class DonorsChoose::Request
|
8
|
-
|
9
|
-
|
10
|
+
|
11
|
+
# This method is a convenient factory method, and is the easiest way
|
12
|
+
# to make a single request and get the data back.
|
13
|
+
def self.get(params)
|
14
|
+
new(params).process
|
10
15
|
end
|
11
16
|
|
17
|
+
# This API operates through making GET requests to an endpoint. It takes
|
18
|
+
# a few different parameters to control how the data is acquired. We'll
|
19
|
+
# just take those so we can properly construct the request.
|
12
20
|
def initialize(params)
|
13
21
|
@params = params
|
14
22
|
end
|
15
23
|
|
16
|
-
|
17
|
-
|
24
|
+
# This method is the main business process of this class: get the data,
|
25
|
+
# parse the JSON it returns, grab the proposal list, and then build a
|
26
|
+
# list of objects with the data.
|
27
|
+
def process
|
28
|
+
data = JSON.parse(get)["proposals"]
|
18
29
|
data.collect {|datum| OpenStruct.new(datum)}
|
19
30
|
end
|
20
31
|
|
21
|
-
|
32
|
+
# This method wraps Net::HTTP, basically. We build up our own parameter
|
33
|
+
# list, construct our URI, and fetch it.
|
34
|
+
def get
|
22
35
|
base_uri = 'http://api.donorschoose.org/common/json_feed.html'
|
23
|
-
|
36
|
+
Net::HTTP.get(URI(base_uri + "?" + uri_params))
|
37
|
+
end
|
38
|
+
|
39
|
+
def uri_params
|
40
|
+
params = @params.dup.collect do |key, value|
|
24
41
|
"#{key}=#{CGI.escape(value.to_s)}"
|
25
42
|
end
|
26
|
-
|
27
|
-
|
43
|
+
params << "APIKey=#{DonorsChoose.api_key}"
|
44
|
+
params.join("&")
|
28
45
|
end
|
29
46
|
end
|
data/spec/donors_choose_spec.rb
CHANGED
@@ -5,30 +5,6 @@ describe DonorsChoose do
|
|
5
5
|
it "is able to have an API key set" do
|
6
6
|
key = "this isn't an API key"
|
7
7
|
DonorsChoose.api_key = key
|
8
|
-
DonorsChoose.api_key.should
|
9
|
-
end
|
10
|
-
|
11
|
-
context "requesting data" do
|
12
|
-
let(:test_title) { "A test project" }
|
13
|
-
|
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)
|
19
|
-
|
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
|
8
|
+
DonorsChoose.api_key.should eq(key)
|
33
9
|
end
|
34
10
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
$:.unshift("lib")
|
2
|
+
require 'donors_choose'
|
3
|
+
|
4
|
+
describe DonorsChoose::Project do
|
5
|
+
let(:test_title) { "A test project" }
|
6
|
+
|
7
|
+
it "is able to find projects near me" do
|
8
|
+
projects = [double]
|
9
|
+
DonorsChoose::Request.should_receive(:get).
|
10
|
+
with(:centerLat => "40.4405556", :centerLong => "-79.9961111").
|
11
|
+
and_return(projects)
|
12
|
+
|
13
|
+
results = DonorsChoose::Project.near_me("40.4405556", "-79.9961111")
|
14
|
+
results.should eq(projects)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "is able to find projects by zip code" do
|
18
|
+
projects = [double]
|
19
|
+
DonorsChoose::Request.should_receive(:get).
|
20
|
+
with(:zip => "15232").
|
21
|
+
and_return(projects)
|
22
|
+
|
23
|
+
results = DonorsChoose::Project.by_zip("15232")
|
24
|
+
results.should eq(projects)
|
25
|
+
end
|
26
|
+
end
|
data/spec/request_spec.rb
CHANGED
@@ -3,9 +3,10 @@ require 'donors_choose/request'
|
|
3
3
|
|
4
4
|
require 'vcr'
|
5
5
|
require 'webmock'
|
6
|
+
YAML_SERIALIZATION_VERSION = RUBY_VERSION =~ /1\.8/ ? '1.8' : 'not_1.8'
|
6
7
|
VCR.config do |c|
|
8
|
+
c.cassette_library_dir = File.join(File.dirname(__FILE__), '..', 'cassettes', YAML_SERIALIZATION_VERSION)
|
7
9
|
c.stub_with :webmock
|
8
|
-
c.cassette_library_dir = 'cassettes'
|
9
10
|
end
|
10
11
|
|
11
12
|
RSpec.configure do |config|
|
@@ -20,6 +21,6 @@ describe DonorsChoose::Request do
|
|
20
21
|
|
21
22
|
request = DonorsChoose::Request.new({:state => "NC",
|
22
23
|
:community => "1007:3"})
|
23
|
-
request.
|
24
|
+
request.process.should_not be_nil
|
24
25
|
end
|
25
26
|
end
|
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.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
|
-
requirement: &
|
16
|
+
requirement: &70192143544040 !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: *70192143544040
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70192143543600 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70192143543600
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: vcr
|
38
|
-
requirement: &
|
38
|
+
requirement: &70192143543140 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70192143543140
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: webmock
|
49
|
-
requirement: &
|
49
|
+
requirement: &70192143542700 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,18 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70192143542700
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: yard
|
60
|
+
requirement: &70192143542260 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70192143542260
|
58
69
|
description: A gem to wrap the DonorsChoose.org API.
|
59
70
|
email:
|
60
71
|
- steve@steveklabnik.com
|
@@ -65,16 +76,20 @@ files:
|
|
65
76
|
- .gitignore
|
66
77
|
- .rvmrc
|
67
78
|
- .travis.yml
|
79
|
+
- .yardopts
|
68
80
|
- Gemfile
|
69
81
|
- LICENSE
|
70
82
|
- README.md
|
71
83
|
- Rakefile
|
72
|
-
- cassettes/DonorsChoose_Request.yml
|
84
|
+
- cassettes/1.8/DonorsChoose_Request.yml
|
85
|
+
- cassettes/not_1.8/DonorsChoose_Request.yml
|
73
86
|
- donors_choose.gemspec
|
74
87
|
- lib/donors_choose.rb
|
88
|
+
- lib/donors_choose/project.rb
|
75
89
|
- lib/donors_choose/request.rb
|
76
90
|
- lib/donors_choose/version.rb
|
77
91
|
- spec/donors_choose_spec.rb
|
92
|
+
- spec/project_spec.rb
|
78
93
|
- spec/request_spec.rb
|
79
94
|
homepage: http://github.com/jumpstartlab/donors_choose
|
80
95
|
licenses: []
|
@@ -102,4 +117,6 @@ specification_version: 3
|
|
102
117
|
summary: A gem to wrap the DonorsChoose.org API.
|
103
118
|
test_files:
|
104
119
|
- spec/donors_choose_spec.rb
|
120
|
+
- spec/project_spec.rb
|
105
121
|
- spec/request_spec.rb
|
122
|
+
has_rdoc:
|