npr 1.2.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +23 -0
- data/README.md +3 -5
- data/lib/npr/api/query_builder.rb +4 -4
- data/lib/npr/entity/audio.rb +3 -6
- data/lib/npr/entity/formats.rb +7 -0
- data/lib/npr/entity/story.rb +1 -2
- data/lib/npr/entity/stream.rb +16 -0
- data/lib/npr/version.rb +1 -1
- data/lib/npr.rb +1 -0
- data/npr.gemspec +8 -4
- data/spec/support/config_helper.rb +11 -11
- data/spec/support/fake_response.rb +8 -8
- data/spec/support/fixture_helper.rb +2 -2
- data/spec/unit/api/query_builder_spec.rb +6 -1
- data/spec/unit/entity/audio_spec.rb +1 -1
- data/spec/unit/entity/formats_spec.rb +5 -0
- data/spec/unit/entity/stream_spec.rb +20 -0
- metadata +18 -46
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
### Version 2.0.0 (2013-11-08)
|
2
|
+
##### Additions
|
3
|
+
* Added `NPR::Entity::Stream`.
|
4
|
+
* Added `empty?` method to `NPR::Entity::Formats`. Since `audio.formats` isn't
|
5
|
+
actually an Enumerable, this method is defined to make it easy to check if
|
6
|
+
any formats have been provided for this audio. This is a good way to check
|
7
|
+
if the audio is actually available yet.
|
8
|
+
|
9
|
+
##### Changes
|
10
|
+
* `Audio#stream` now returns an `NPR::Entity::Stream` object. This will break
|
11
|
+
your code if you were doing something like `if audio.stream == true`.
|
12
|
+
To fix it, you can just use: `if audio.stream.active?`.
|
13
|
+
* Changed the `offset` method on `QueryBuilder` to set `startNum` to
|
14
|
+
`offset + 1`. Previously, if you said `.offset(1)`, you would actually still
|
15
|
+
get the first result, because it was passing its value directly to the
|
16
|
+
`startNum` parameter, which is confusing. Now you can say `.offset(1)` and
|
17
|
+
the results will actually be offset by 1 object. This behavior is to mimic
|
18
|
+
ActiveRecord a little more closely.
|
19
|
+
|
20
|
+
##### Deprecations
|
21
|
+
* None
|
22
|
+
|
23
|
+
|
1
24
|
### Version 1.2.0 (2013-08-05)
|
2
25
|
##### Additions
|
3
26
|
* Added support for the `parent` node.
|
data/README.md
CHANGED
@@ -115,8 +115,6 @@ for all of the options.
|
|
115
115
|
|
116
116
|
## Contributing
|
117
117
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
122
|
-
5. Create new Pull Request
|
118
|
+
Please send PR's for any new features or bug fixes!
|
119
|
+
|
120
|
+
Run tests with `bundle exec rake test`.
|
@@ -33,10 +33,10 @@ module NPR
|
|
33
33
|
end
|
34
34
|
|
35
35
|
params = conditions || {}
|
36
|
-
params[:sort] = @builder[:order]
|
37
|
-
params[:numResults] = @builder[:limit]
|
38
|
-
params[:startNum] = @builder[:offset] if @builder[:offset]
|
39
|
-
params.merge!(@builder[:extra])
|
36
|
+
params[:sort] = @builder[:order] if @builder[:order]
|
37
|
+
params[:numResults] = @builder[:limit] if @builder[:limit]
|
38
|
+
params[:startNum] = @builder[:offset] + 1 if @builder[:offset]
|
39
|
+
params.merge!(@builder[:extra]) if @builder[:extra]
|
40
40
|
|
41
41
|
params
|
42
42
|
end
|
data/lib/npr/entity/audio.rb
CHANGED
@@ -4,21 +4,18 @@
|
|
4
4
|
module NPR
|
5
5
|
module Entity
|
6
6
|
class Audio < Base
|
7
|
-
attr_accessor :id, :type
|
7
|
+
attr_accessor :id, :type
|
8
8
|
shallow_attribute "title", "duration", "description", "rightsHolder"
|
9
9
|
has_one "permissions", :class_name => NPR::Entity::Permissions
|
10
10
|
has_one "formats", :key => "format", :class_name => NPR::Entity::Formats
|
11
|
+
has_one "stream", :class_name => NPR::Entity::Stream
|
11
12
|
|
12
13
|
#-------------------
|
13
|
-
|
14
|
+
|
14
15
|
def initialize(json)
|
15
16
|
@id = json["id"].to_i
|
16
17
|
@type = json["type"]
|
17
18
|
|
18
|
-
if json["stream"]
|
19
|
-
@stream = json["stream"]["active"] == "true"
|
20
|
-
end
|
21
|
-
|
22
19
|
create_relations(json)
|
23
20
|
extract_shallow_attributes(json)
|
24
21
|
end
|
data/lib/npr/entity/formats.rb
CHANGED
data/lib/npr/entity/story.rb
CHANGED
@@ -103,7 +103,7 @@ module NPR
|
|
103
103
|
|
104
104
|
#------------------
|
105
105
|
|
106
|
-
shallow_attribute
|
106
|
+
shallow_attribute \
|
107
107
|
"title",
|
108
108
|
"partnerId",
|
109
109
|
"subtitle",
|
@@ -117,7 +117,6 @@ module NPR
|
|
117
117
|
"keywords",
|
118
118
|
"priorityKeywords",
|
119
119
|
"fullText"
|
120
|
-
)
|
121
120
|
|
122
121
|
#-------------------------
|
123
122
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
##
|
2
|
+
# NPR::Entity::Stream
|
3
|
+
module NPR
|
4
|
+
module Entity
|
5
|
+
class Stream < Base
|
6
|
+
attr_accessor :active
|
7
|
+
alias_method :active?, :active
|
8
|
+
|
9
|
+
#-------------------
|
10
|
+
|
11
|
+
def initialize(json)
|
12
|
+
@active = json["active"] == "true"
|
13
|
+
end
|
14
|
+
end # Name
|
15
|
+
end # Entity
|
16
|
+
end # NPR
|
data/lib/npr/version.rb
CHANGED
data/lib/npr.rb
CHANGED
data/npr.gemspec
CHANGED
@@ -6,17 +6,21 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.version = NPR::VERSION
|
7
7
|
s.authors = ["Bryan Ricker"]
|
8
8
|
s.email = ["bricker@scpr.org"]
|
9
|
-
s.description =
|
9
|
+
s.description = "NPR (npr.org) is a news organization. " \
|
10
|
+
"This gem helps you pull NPR content with a nice Ruby DSL."
|
10
11
|
s.summary = %q{A Ruby client for the NPR API}
|
11
12
|
s.homepage = "http://github.com/bricker/npr"
|
12
13
|
|
13
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f|
|
14
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f|
|
15
|
+
File.basename(f)
|
16
|
+
}
|
17
|
+
|
14
18
|
s.files = `git ls-files`.split("\n")
|
15
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
20
|
s.require_paths = ["lib"]
|
17
|
-
|
21
|
+
|
18
22
|
s.licenses = ['MIT']
|
19
|
-
|
23
|
+
|
20
24
|
s.add_dependency 'faraday', '>= 0.8.0'
|
21
25
|
s.add_dependency 'faraday_middleware', '>= 0.9.0'
|
22
26
|
|
@@ -7,33 +7,33 @@ module ConfigHelper
|
|
7
7
|
end
|
8
8
|
|
9
9
|
#------------------
|
10
|
-
|
10
|
+
|
11
11
|
def config(options)
|
12
12
|
@_config_reset = NPR.config
|
13
13
|
NPR.config.merge(options)
|
14
14
|
end
|
15
15
|
|
16
16
|
#------------------
|
17
|
-
|
17
|
+
|
18
18
|
def reset_config
|
19
19
|
NPR.instance_variable_set(:@config, @_config_reset)
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
#------------------
|
23
|
-
|
23
|
+
|
24
24
|
def config!(options)
|
25
25
|
config = NPR::Configuration.new(options)
|
26
26
|
NPR.instance_variable_set(:@config, config)
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
#------------------
|
30
|
-
|
30
|
+
|
31
31
|
def clear_config
|
32
32
|
NPR.instance_variable_set(:@config, nil)
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
#------------------
|
36
|
-
|
36
|
+
|
37
37
|
module ClassMethods
|
38
38
|
# Merge the options into whatever the config
|
39
39
|
# currently is, and reset it to its previous
|
@@ -42,12 +42,12 @@ module ConfigHelper
|
|
42
42
|
before :all do
|
43
43
|
config(options)
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
after :all do
|
47
47
|
reset_config
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
#--------------------
|
52
52
|
# Set the config to ONLY the provided options,
|
53
53
|
# and set to nil after.
|
@@ -55,7 +55,7 @@ module ConfigHelper
|
|
55
55
|
before :all do
|
56
56
|
config!(options)
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
after :all do
|
60
60
|
reset_config
|
61
61
|
end
|
@@ -6,7 +6,7 @@
|
|
6
6
|
module FakeResponse
|
7
7
|
#---------------------
|
8
8
|
# Takes the filename to respond with,
|
9
|
-
# and (optionally) any options to be passed to
|
9
|
+
# and (optionally) any options to be passed to
|
10
10
|
# +FakeWeb.register_uri+.
|
11
11
|
#
|
12
12
|
# If no block is given, the registry will not be cleaned
|
@@ -17,34 +17,34 @@ module FakeResponse
|
|
17
17
|
#
|
18
18
|
def mock_response(filename, options={}, &block)
|
19
19
|
respond_with(filename, options)
|
20
|
-
|
20
|
+
|
21
21
|
response = yield
|
22
22
|
FakeWeb.clean_registry
|
23
|
-
|
23
|
+
|
24
24
|
response
|
25
25
|
end
|
26
26
|
|
27
27
|
#---------------------
|
28
|
-
# Register the NPR root with FakeWeb, and set its
|
28
|
+
# Register the NPR root with FakeWeb, and set its
|
29
29
|
# response body to the contents of the requested file.
|
30
30
|
def respond_with(filename, options)
|
31
31
|
content_type = options[:content_type] || "application/json"
|
32
32
|
uri = options.delete(:uri) || %r{^#{NPR::Configuration::API_ROOT}}
|
33
33
|
|
34
|
-
FakeWeb.register_uri(:get, uri,
|
35
|
-
{
|
34
|
+
FakeWeb.register_uri(:get, uri,
|
35
|
+
{
|
36
36
|
:body => load_fixture(filename),
|
37
37
|
:content_type => content_type
|
38
38
|
}.merge(options))
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
#---------------------
|
42
42
|
# Read a fixure file
|
43
43
|
def load_fixture(filename)
|
44
44
|
file = filename == :random ? random_filename : filename
|
45
45
|
File.read(File.join FIXTURE_ROOT, file)
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
#---------------------
|
49
49
|
# Select a random response fixture
|
50
50
|
def random_filename
|
@@ -7,14 +7,14 @@ module FixtureHelper
|
|
7
7
|
def self.included(base)
|
8
8
|
base.extend ClassMethods
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
module ClassMethods
|
12
12
|
def json_fixture(&block)
|
13
13
|
before :all do
|
14
14
|
@json = yield
|
15
15
|
@fixture = JSON.parse(@json)
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
after :all do
|
19
19
|
@json, @fixture = nil, nil
|
20
20
|
end
|
@@ -12,7 +12,7 @@ describe NPR::API::QueryBuilder do
|
|
12
12
|
:id => 5 ,
|
13
13
|
:sort => "date descending",
|
14
14
|
:numResults => 10,
|
15
|
-
:startNum =>
|
15
|
+
:startNum => 101
|
16
16
|
]
|
17
17
|
end
|
18
18
|
|
@@ -173,6 +173,11 @@ describe NPR::API::QueryBuilder do
|
|
173
173
|
it "returns itself" do
|
174
174
|
@builder.offset(0).should eq @builder
|
175
175
|
end
|
176
|
+
|
177
|
+
it "sets the startNum to value + 1" do
|
178
|
+
@builder.offset(100)
|
179
|
+
@builder.to_params[:startNum].should eq 101
|
180
|
+
end
|
176
181
|
end
|
177
182
|
|
178
183
|
#----------------------
|
@@ -38,4 +38,9 @@ describe NPR::Entity::Formats do
|
|
38
38
|
@formats.mp3s.size.should eq 2
|
39
39
|
@formats.mp3s.first.should be_a NPR::Entity::MP3
|
40
40
|
end
|
41
|
+
|
42
|
+
it 'blank? is true if JSON was empty' do
|
43
|
+
formats = NPR::Entity::Formats.new(JSON.parse("{}"))
|
44
|
+
formats.empty?.should eq true
|
45
|
+
end
|
41
46
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe NPR::Entity::Name do
|
4
|
+
json_fixture do
|
5
|
+
<<-JSON
|
6
|
+
{
|
7
|
+
"active": "true"
|
8
|
+
}
|
9
|
+
JSON
|
10
|
+
end
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
@stream = NPR::Entity::Stream.new(@fixture)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "sets attributes" do
|
17
|
+
@stream.active.should eq true
|
18
|
+
@stream.active?.should eq true
|
19
|
+
end
|
20
|
+
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:
|
4
|
+
version: 2.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: 2013-
|
12
|
+
date: 2013-11-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70249174674460 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.8.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.8.0
|
24
|
+
version_requirements: *70249174674460
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: faraday_middleware
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70249174673960 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: 0.9.0
|
38
33
|
type: :runtime
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 0.9.0
|
35
|
+
version_requirements: *70249174673960
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: bundler
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70249174660180 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: 1.0.0
|
54
44
|
type: :development
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.0
|
46
|
+
version_requirements: *70249174660180
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: rake
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70249174659800 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ! '>='
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: '0'
|
70
55
|
type: :development
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
57
|
+
version_requirements: *70249174659800
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: rspec
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70249174659340 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ! '>='
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: '0'
|
86
66
|
type: :development
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
68
|
+
version_requirements: *70249174659340
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: fakeweb
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70249174658920 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ! '>='
|
@@ -101,12 +76,7 @@ dependencies:
|
|
101
76
|
version: '0'
|
102
77
|
type: :development
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
79
|
+
version_requirements: *70249174658920
|
110
80
|
description: NPR (npr.org) is a news organization. This gem helps you pull NPR content
|
111
81
|
with a nice Ruby DSL.
|
112
82
|
email:
|
@@ -169,6 +139,7 @@ files:
|
|
169
139
|
- lib/npr/entity/related_link.rb
|
170
140
|
- lib/npr/entity/show.rb
|
171
141
|
- lib/npr/entity/story.rb
|
142
|
+
- lib/npr/entity/stream.rb
|
172
143
|
- lib/npr/entity/text.rb
|
173
144
|
- lib/npr/entity/title.rb
|
174
145
|
- lib/npr/entity/transcript.rb
|
@@ -269,6 +240,7 @@ files:
|
|
269
240
|
- spec/unit/entity/related_link_spec.rb
|
270
241
|
- spec/unit/entity/show_spec.rb
|
271
242
|
- spec/unit/entity/story_spec.rb
|
243
|
+
- spec/unit/entity/stream_spec.rb
|
272
244
|
- spec/unit/entity/text_spec.rb
|
273
245
|
- spec/unit/entity/title_spec.rb
|
274
246
|
- spec/unit/entity/transcript_spec.rb
|
@@ -293,7 +265,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
293
265
|
version: '0'
|
294
266
|
requirements: []
|
295
267
|
rubyforge_project:
|
296
|
-
rubygems_version: 1.8.
|
268
|
+
rubygems_version: 1.8.11
|
297
269
|
signing_key:
|
298
270
|
specification_version: 3
|
299
271
|
summary: A Ruby client for the NPR API
|
@@ -392,7 +364,7 @@ test_files:
|
|
392
364
|
- spec/unit/entity/related_link_spec.rb
|
393
365
|
- spec/unit/entity/show_spec.rb
|
394
366
|
- spec/unit/entity/story_spec.rb
|
367
|
+
- spec/unit/entity/stream_spec.rb
|
395
368
|
- spec/unit/entity/text_spec.rb
|
396
369
|
- spec/unit/entity/title_spec.rb
|
397
370
|
- spec/unit/entity/transcript_spec.rb
|
398
|
-
has_rdoc:
|