npr 1.2.0 → 2.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/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:
|