npr 0.1.1 → 0.1.2
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/CHANGELOG.md +7 -0
- data/lib/npr/api/client.rb +2 -1
- data/lib/npr/api/response.rb +8 -5
- data/lib/npr/entity/byline.rb +3 -2
- data/lib/npr/entity/image.rb +12 -0
- data/lib/npr/entity/name.rb +25 -0
- data/lib/npr/entity/story.rb +15 -1
- data/lib/npr/version.rb +1 -1
- data/lib/npr.rb +1 -0
- data/spec/unit/entity/byline_spec.rb +22 -5
- data/spec/unit/entity/image_spec.rb +5 -0
- data/spec/unit/entity/name_spec.rb +25 -0
- data/spec/unit/entity/story_spec.rb +42 -1
- metadata +6 -2
data/CHANGELOG.md
ADDED
data/lib/npr/api/client.rb
CHANGED
@@ -61,6 +61,7 @@ module NPR
|
|
61
61
|
response = connection.get do |request|
|
62
62
|
request.url NPR::Configuration::API_QUERY_PATH
|
63
63
|
request.params = @params.merge(params)
|
64
|
+
request.headers['Content-Type'] = "application/json"
|
64
65
|
request.params['output'] = "json"
|
65
66
|
request.params['apiKey'] = @apiKey
|
66
67
|
end
|
@@ -77,7 +78,7 @@ module NPR
|
|
77
78
|
def connection
|
78
79
|
@connection ||= begin
|
79
80
|
Faraday.new NPR::Configuration::API_ROOT do |conn|
|
80
|
-
conn.response :json
|
81
|
+
conn.response :json
|
81
82
|
conn.adapter Faraday.default_adapter
|
82
83
|
end
|
83
84
|
end
|
data/lib/npr/api/response.rb
CHANGED
@@ -16,14 +16,17 @@ module NPR
|
|
16
16
|
|
17
17
|
def initialize(response)
|
18
18
|
create_relations(response)
|
19
|
-
@raw = response
|
20
|
-
@version = response.body["version"]
|
21
19
|
|
22
|
-
|
23
|
-
|
20
|
+
@_response = response
|
21
|
+
@raw = response.body
|
22
|
+
|
23
|
+
@version = @raw["version"]
|
24
|
+
|
25
|
+
if list = @raw["list"]
|
26
|
+
@list = NPR::Entity::List.new(list)
|
24
27
|
end
|
25
28
|
|
26
|
-
Array.wrap(
|
29
|
+
Array.wrap(@raw["message"]).each do |message|
|
27
30
|
@messages.push NPR::API::Message.new(message)
|
28
31
|
end
|
29
32
|
end
|
data/lib/npr/entity/byline.rb
CHANGED
@@ -5,13 +5,14 @@ module NPR
|
|
5
5
|
module Entity
|
6
6
|
class Byline < Base
|
7
7
|
attr_accessor :id
|
8
|
-
|
8
|
+
has_many "links", :key => "link", :class_name => NPR::Entity::Link
|
9
|
+
has_one "name", :class_name => NPR::Entity::Name
|
9
10
|
|
10
11
|
#-----------------
|
11
12
|
|
12
13
|
def initialize(json)
|
13
14
|
@id = json["id"].to_i
|
14
|
-
|
15
|
+
create_relations(json)
|
15
16
|
end
|
16
17
|
end # Byline
|
17
18
|
end # Entity
|
data/lib/npr/entity/image.rb
CHANGED
@@ -28,6 +28,18 @@ module NPR
|
|
28
28
|
extract_shallow_attributes(json)
|
29
29
|
create_relations(json)
|
30
30
|
end
|
31
|
+
|
32
|
+
#--------------------
|
33
|
+
|
34
|
+
def primary?
|
35
|
+
@type == "primary"
|
36
|
+
end
|
37
|
+
|
38
|
+
#--------------------
|
39
|
+
|
40
|
+
def standard?
|
41
|
+
@type == "standard"
|
42
|
+
end
|
31
43
|
end # Image
|
32
44
|
end # Entity
|
33
45
|
end # NPR
|
@@ -0,0 +1,25 @@
|
|
1
|
+
##
|
2
|
+
# NPR::Entity::Namew
|
3
|
+
#
|
4
|
+
# Byline name
|
5
|
+
#
|
6
|
+
module NPR
|
7
|
+
module Entity
|
8
|
+
class Name < Base
|
9
|
+
attr_accessor :personId, :content
|
10
|
+
|
11
|
+
#-------------------
|
12
|
+
|
13
|
+
def initialize(json)
|
14
|
+
@personId = json["personId"].to_i
|
15
|
+
@content = json["$text"]
|
16
|
+
end
|
17
|
+
|
18
|
+
#-------------------
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
@content
|
22
|
+
end
|
23
|
+
end # Name
|
24
|
+
end # Entity
|
25
|
+
end # NPR
|
data/lib/npr/entity/story.rb
CHANGED
@@ -143,10 +143,24 @@ module NPR
|
|
143
143
|
# are found, then return the first image of any type.
|
144
144
|
def primary_image
|
145
145
|
@primary_image ||= begin
|
146
|
-
primary = self.images.find
|
146
|
+
primary = self.images.find(&:primary?)
|
147
147
|
primary || self.images.first
|
148
148
|
end
|
149
149
|
end
|
150
|
+
|
151
|
+
#-------------------------
|
152
|
+
# Find links of the passed in type.
|
153
|
+
#
|
154
|
+
# Example:
|
155
|
+
#
|
156
|
+
# story.link_for("html") #=> NPR::Entity::Link
|
157
|
+
# story.link_for("nothing") #=> nil
|
158
|
+
#
|
159
|
+
# Returns an NPR::Entity::Link or nil
|
160
|
+
#
|
161
|
+
def link_for(type)
|
162
|
+
self.links.find { |link| link.type == type }
|
163
|
+
end
|
150
164
|
|
151
165
|
#-------------------------
|
152
166
|
|
data/lib/npr/version.rb
CHANGED
data/lib/npr.rb
CHANGED
@@ -4,10 +4,21 @@ describe NPR::Entity::Byline do
|
|
4
4
|
json_fixture do
|
5
5
|
<<-JSON
|
6
6
|
{
|
7
|
-
"id": "
|
7
|
+
"id": "166885535",
|
8
8
|
"name": {
|
9
|
-
"
|
10
|
-
|
9
|
+
"personId": "134991966",
|
10
|
+
"$text": "Julie Bierach"
|
11
|
+
},
|
12
|
+
"link": [
|
13
|
+
{
|
14
|
+
"type": "html",
|
15
|
+
"$text": "http://news.stlpublicradio.org/people/julie-bierach"
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"type": "api",
|
19
|
+
"$text": "http://api.npr.org/query?id=134991966&apiKey=MDA1OTI3MjQ5MDEyODUwMTE2MzM1YzNmZA004"
|
20
|
+
}
|
21
|
+
]
|
11
22
|
}
|
12
23
|
JSON
|
13
24
|
end
|
@@ -17,7 +28,13 @@ describe NPR::Entity::Byline do
|
|
17
28
|
end
|
18
29
|
|
19
30
|
it "sets up attributes" do
|
20
|
-
@byline.id.should
|
21
|
-
@byline.
|
31
|
+
@byline.id.should be_a Fixnum
|
32
|
+
@byline.id.should_not eq 0
|
33
|
+
end
|
34
|
+
|
35
|
+
it "creates relations" do
|
36
|
+
@byline.links.size.should eq 2
|
37
|
+
@byline.links.first.should be_a NPR::Entity::Link
|
38
|
+
@byline.name.should be_a NPR::Entity::Name
|
22
39
|
end
|
23
40
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe NPR::Entity::Name do
|
4
|
+
json_fixture do
|
5
|
+
<<-JSON
|
6
|
+
{
|
7
|
+
"personId": "134991966",
|
8
|
+
"$text": "Julie Bierach"
|
9
|
+
}
|
10
|
+
JSON
|
11
|
+
end
|
12
|
+
|
13
|
+
before :each do
|
14
|
+
@name = NPR::Entity::Name.new(@fixture)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "sets attributes" do
|
18
|
+
@name.personId.should eq 134991966
|
19
|
+
@name.content.should match /Julie/
|
20
|
+
end
|
21
|
+
|
22
|
+
it "uses @content for to_s" do
|
23
|
+
@name.to_s.should eq @name.content
|
24
|
+
end
|
25
|
+
end
|
@@ -150,5 +150,46 @@ describe NPR::Entity::Story do
|
|
150
150
|
query = NPR::Entity::Story.offset(args)
|
151
151
|
query.builder[:offset].should eq args
|
152
152
|
end
|
153
|
-
end
|
153
|
+
end
|
154
|
+
|
155
|
+
#--------------------
|
156
|
+
|
157
|
+
describe "#primary_image" do
|
158
|
+
before :each do
|
159
|
+
@story = mock_response "json/02_story_multiple_images.json" do
|
160
|
+
NPR::Story.find(999)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
it "finds the first image with type 'primary'" do
|
165
|
+
@story.primary_image.type.should eq "primary"
|
166
|
+
end
|
167
|
+
|
168
|
+
it "falls back to just the first image if no primary image is available" do
|
169
|
+
# Remove the type "primary" image from the json response
|
170
|
+
@story.images.delete_if { |i| i.type == "primary" }
|
171
|
+
@story.primary_image.type.should eq "standard"
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
#--------------------
|
176
|
+
|
177
|
+
describe "#link_for" do
|
178
|
+
before :each do
|
179
|
+
@story = mock_response "json/02_story_multiple_images.json" do
|
180
|
+
NPR::Story.find(999)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
it "finds the link for the passed-in type if it exists" do
|
185
|
+
@story.link_for("html").should be_a NPR::Entity::Link
|
186
|
+
end
|
187
|
+
|
188
|
+
it "is nil if the type isn't present" do
|
189
|
+
@story.link_for("nothing").should eq nil
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
#--------------------
|
194
|
+
|
154
195
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: npr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -117,6 +117,7 @@ extra_rdoc_files: []
|
|
117
117
|
files:
|
118
118
|
- .gitignore
|
119
119
|
- .travis.yml
|
120
|
+
- CHANGELOG.md
|
120
121
|
- Gemfile
|
121
122
|
- MIT-LICENSE
|
122
123
|
- README.md
|
@@ -154,6 +155,7 @@ files:
|
|
154
155
|
- lib/npr/entity/member_byline.rb
|
155
156
|
- lib/npr/entity/member_promo_art.rb
|
156
157
|
- lib/npr/entity/mp3.rb
|
158
|
+
- lib/npr/entity/name.rb
|
157
159
|
- lib/npr/entity/organization.rb
|
158
160
|
- lib/npr/entity/paragraph.rb
|
159
161
|
- lib/npr/entity/permissions.rb
|
@@ -252,6 +254,7 @@ files:
|
|
252
254
|
- spec/unit/entity/member_promo_art_spec.rb
|
253
255
|
- spec/unit/entity/member_spec.rb
|
254
256
|
- spec/unit/entity/mp3_spec.rb
|
257
|
+
- spec/unit/entity/name_spec.rb
|
255
258
|
- spec/unit/entity/organization_spec.rb
|
256
259
|
- spec/unit/entity/paragraph_spec.rb
|
257
260
|
- spec/unit/entity/permissions_spec.rb
|
@@ -372,6 +375,7 @@ test_files:
|
|
372
375
|
- spec/unit/entity/member_promo_art_spec.rb
|
373
376
|
- spec/unit/entity/member_spec.rb
|
374
377
|
- spec/unit/entity/mp3_spec.rb
|
378
|
+
- spec/unit/entity/name_spec.rb
|
375
379
|
- spec/unit/entity/organization_spec.rb
|
376
380
|
- spec/unit/entity/paragraph_spec.rb
|
377
381
|
- spec/unit/entity/permissions_spec.rb
|