npr 1.1.0 → 1.2.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.
Files changed (93) hide show
  1. data/.travis.yml +1 -4
  2. data/CHANGELOG.md +27 -1
  3. data/README.md +5 -10
  4. data/lib/npr/api/client.rb +6 -6
  5. data/lib/npr/api/message.rb +5 -5
  6. data/lib/npr/api/query_builder.rb +22 -23
  7. data/lib/npr/api/response.rb +7 -7
  8. data/lib/npr/concern/attr_typecast.rb +11 -13
  9. data/lib/npr/concern/links_association.rb +26 -0
  10. data/lib/npr/concern/relation.rb +17 -17
  11. data/lib/npr/concern/shallow_attributes.rb +12 -12
  12. data/lib/npr/configuration.rb +27 -27
  13. data/lib/npr/entity/audio.rb +3 -4
  14. data/lib/npr/entity/author.rb +3 -3
  15. data/lib/npr/entity/base.rb +1 -1
  16. data/lib/npr/entity/book.rb +2 -2
  17. data/lib/npr/entity/book_edition.rb +5 -5
  18. data/lib/npr/entity/byline.rb +4 -3
  19. data/lib/npr/entity/crop.rb +2 -2
  20. data/lib/npr/entity/enlargement.rb +2 -2
  21. data/lib/npr/entity/external_asset.rb +27 -0
  22. data/lib/npr/entity/formats.rb +2 -2
  23. data/lib/npr/entity/image.rb +4 -4
  24. data/lib/npr/entity/intro_text.rb +4 -4
  25. data/lib/npr/entity/link.rb +3 -3
  26. data/lib/npr/entity/list.rb +2 -4
  27. data/lib/npr/entity/list_text.rb +2 -2
  28. data/lib/npr/entity/member.rb +1 -1
  29. data/lib/npr/entity/member_byline.rb +2 -2
  30. data/lib/npr/entity/member_promo_art.rb +2 -2
  31. data/lib/npr/entity/mp3.rb +4 -4
  32. data/lib/npr/entity/name.rb +4 -4
  33. data/lib/npr/entity/organization.rb +2 -2
  34. data/lib/npr/entity/paragraph.rb +2 -2
  35. data/lib/npr/entity/parent.rb +23 -0
  36. data/lib/npr/entity/permissions.rb +14 -1
  37. data/lib/npr/entity/program.rb +7 -5
  38. data/lib/npr/entity/promo_art.rb +2 -2
  39. data/lib/npr/entity/promo_art_book_edition.rb +2 -3
  40. data/lib/npr/entity/provider.rb +4 -4
  41. data/lib/npr/entity/pull_quote.rb +1 -1
  42. data/lib/npr/entity/related_link.rb +4 -4
  43. data/lib/npr/entity/show.rb +3 -3
  44. data/lib/npr/entity/story.rb +42 -72
  45. data/lib/npr/entity/text.rb +7 -7
  46. data/lib/npr/entity/title.rb +4 -4
  47. data/lib/npr/entity/transcript.rb +2 -2
  48. data/lib/npr/errors.rb +1 -1
  49. data/lib/npr/version.rb +1 -1
  50. data/lib/npr.rb +3 -0
  51. data/spec/fixtures/fetch_formats.rb +4 -4
  52. data/spec/spec_helper.rb +1 -1
  53. data/spec/unit/api/client_spec.rb +4 -4
  54. data/spec/unit/api/message_spec.rb +9 -9
  55. data/spec/unit/api/query_builder_spec.rb +39 -39
  56. data/spec/unit/api/response_spec.rb +8 -8
  57. data/spec/unit/configuration_spec.rb +14 -14
  58. data/spec/unit/entity/audio_spec.rb +6 -6
  59. data/spec/unit/entity/author_spec.rb +3 -3
  60. data/spec/unit/entity/base_spec.rb +19 -19
  61. data/spec/unit/entity/book_edition_spec.rb +4 -4
  62. data/spec/unit/entity/book_spec.rb +2 -2
  63. data/spec/unit/entity/byline_spec.rb +3 -3
  64. data/spec/unit/entity/collection_spec.rb +1 -1
  65. data/spec/unit/entity/crop_spec.rb +2 -2
  66. data/spec/unit/entity/englargement_spec.rb +2 -2
  67. data/spec/unit/entity/external_assset_spec.rb +39 -0
  68. data/spec/unit/entity/formats_spec.rb +4 -4
  69. data/spec/unit/entity/image_spec.rb +7 -7
  70. data/spec/unit/entity/intro_text_spec.rb +3 -3
  71. data/spec/unit/entity/link_spec.rb +3 -3
  72. data/spec/unit/entity/list_spec.rb +3 -3
  73. data/spec/unit/entity/list_text_spec.rb +3 -3
  74. data/spec/unit/entity/member_byline_spec.rb +2 -2
  75. data/spec/unit/entity/member_promo_art_spec.rb +2 -2
  76. data/spec/unit/entity/member_spec.rb +4 -4
  77. data/spec/unit/entity/mp3_spec.rb +4 -4
  78. data/spec/unit/entity/name_spec.rb +3 -3
  79. data/spec/unit/entity/organization_spec.rb +2 -2
  80. data/spec/unit/entity/paragraph_spec.rb +3 -3
  81. data/spec/unit/entity/parent_spec.rb +39 -0
  82. data/spec/unit/entity/permissions_spec.rb +16 -6
  83. data/spec/unit/entity/program_spec.rb +7 -3
  84. data/spec/unit/entity/promo_art_book_edition_spec.rb +2 -2
  85. data/spec/unit/entity/promo_art_spec.rb +2 -2
  86. data/spec/unit/entity/pull_quote_spec.rb +2 -2
  87. data/spec/unit/entity/related_link_spec.rb +7 -7
  88. data/spec/unit/entity/show_spec.rb +3 -3
  89. data/spec/unit/entity/story_spec.rb +35 -36
  90. data/spec/unit/entity/text_spec.rb +4 -4
  91. data/spec/unit/entity/title_spec.rb +3 -3
  92. data/spec/unit/entity/transcript_spec.rb +2 -2
  93. metadata +10 -8
data/.travis.yml CHANGED
@@ -1,8 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.0.0
3
4
  - 1.9.3
4
5
  - 1.9.2
5
- - ruby-head
6
-
7
- notifications:
8
- email: false
data/CHANGELOG.md CHANGED
@@ -1,20 +1,46 @@
1
+ ### Version 1.2.0 (2013-08-05)
2
+ ##### Additions
3
+ * Added support for the `parent` node.
4
+ * Added the `#link_for` method for any node which has (multiple) nested links.
5
+ * Added `#download?`, `#stream?`, and `#embed?` methods to Permission, to return
6
+ booleans of whether that permission is allowed.
7
+ * Added support for the `externalAsset` node, as `Story#external_assets (array)`
8
+
9
+ ##### Changes
10
+ * None
11
+
12
+ ##### Deprecations
13
+ * None
14
+
15
+
16
+
1
17
  ### Version 1.1.0 (2013-06-05)
18
+
19
+ ##### Additions
2
20
  * Allow passing `:url` option to Client, and `:path` option to `Client#query`
3
21
  * Allow passing `:apiKey` and `:output` to `Client#query`
22
+ * Add an Image#crop method, to find a specific crop by its type.
23
+
24
+ ##### Changes
4
25
  * Handle an HTTP Error from the API better. If the API response is not a
5
26
  success (as defined by `Faraday::Response#success?`), then an
6
27
  `NPR::APIError` will be raised. An error was being raised before, but
7
28
  it was due to a nil error (when response.body was nil), which could be confusing.
8
- * Add an Image#crop method, to find a specific crop by its type.
29
+
30
+ ##### Deprecations
31
+ * None
32
+
9
33
 
10
34
 
11
35
  ### Version 1.0.0
12
36
  * Stable release
13
37
 
14
38
 
39
+
15
40
  ### Version 0.1.2 (2012-12-30)
16
41
  * Critical bug fix having to do with JSON parsing.
17
42
 
18
43
 
44
+
19
45
  ### Version 0.1.1 (2012-12-16)
20
46
  * First stable release.
data/README.md CHANGED
@@ -3,7 +3,8 @@
3
3
  [![Build Status](https://travis-ci.org/bricker/npr.png)](https://travis-ci.org/bricker/npr)
4
4
 
5
5
  A simple Ruby client for the
6
- [NPR API](http://www.npr.org/api/index).
6
+ [NPR API](http://www.npr.org/api/index). Alternative documentation for the NPR
7
+ API can be found at <http://dev.npr.org>.
7
8
 
8
9
 
9
10
  ## Support
@@ -11,7 +12,7 @@ A simple Ruby client for the
11
12
  This gem is tested with these versions (but may
12
13
  work with others):
13
14
 
14
- * Ruby 1.9.2, 1.9.3, ruby-head
15
+ * Ruby 1.9.2, 1.9.3, 2.0.0
15
16
  * NPR API version 0.94
16
17
 
17
18
 
@@ -105,17 +106,11 @@ for all of the options.
105
106
  * Search functionality
106
107
  * Add "select" method to QueryBuilder for the "fields" input
107
108
  * Abstract attributes so they're not tied directly to the API response.
108
- Also to make them more Ruby-conventional (i.e. snake_case)
109
- * Example: "apiKey" => :api_key
109
+ * Make all attributes snake_case
110
110
  * Support for "correction" node
111
111
  * Support for "container" node
112
- * Support for "parent" node
113
112
  * Support for "thumbnail" node
114
- * Support a way to return raw formats of:
115
- * HTML / Javascript (for views)
116
- * JSON
117
- * ATOM
118
- * RSS
113
+ * Support a way to return the raw NPRML if requested.
119
114
 
120
115
 
121
116
  ## Contributing
@@ -9,7 +9,7 @@
9
9
  #
10
10
  # You can also set params via +client.params+
11
11
  #
12
- # Params should be passed in exactly as they will be sent
12
+ # Params should be passed in exactly as they will be sent
13
13
  # to the API. Example: "apiKey", not "api_key"
14
14
  # See the API documentation for what those params are.
15
15
  #
@@ -56,7 +56,7 @@ module NPR
56
56
  #
57
57
  def query(params={})
58
58
  path = params.delete(:path) || NPR::Configuration::API_QUERY_PATH
59
-
59
+
60
60
  response = connection.get do |request|
61
61
  request.url path
62
62
  request.headers['Content-Type'] = "application/json"
@@ -65,7 +65,7 @@ module NPR
65
65
  request.params['output'] ||= "json" # Only JSON is supported.
66
66
  request.params['apiKey'] ||= @apiKey
67
67
  end
68
-
68
+
69
69
  if response.success?
70
70
  NPR::API::Response.new(response)
71
71
  else
@@ -74,11 +74,11 @@ module NPR
74
74
  end
75
75
 
76
76
  #-----------------
77
-
77
+
78
78
  private
79
-
79
+
80
80
  #-----------------
81
-
81
+
82
82
  def connection
83
83
  @connection ||= begin
84
84
  Faraday.new @url do |conn|
@@ -8,26 +8,26 @@ module NPR
8
8
  module API
9
9
  class Message
10
10
  include NPR::Concern::ShallowAttributes
11
-
11
+
12
12
  attr_accessor :id, :level
13
13
  shallow_attribute "text", "timestamp"
14
14
 
15
15
  #------------------
16
-
16
+
17
17
  def initialize(json)
18
18
  @_json = json
19
19
  @id = @_json["id"]
20
20
  @level = @_json["level"]
21
-
21
+
22
22
  extract_shallow_attributes(@_json)
23
23
  end
24
24
 
25
25
  #------------------
26
-
26
+
27
27
  def error?
28
28
  self.level == "error"
29
29
  end
30
-
30
+
31
31
  #------------------
32
32
 
33
33
  def warning?
@@ -11,16 +11,16 @@ module NPR
11
11
  :offset,
12
12
  :set
13
13
  ]
14
-
14
+
15
15
  attr_reader :_klass, :builder
16
16
 
17
17
  #-----------------------
18
-
18
+
19
19
  def initialize(klass)
20
20
  @_klass = klass
21
21
  @builder = {}
22
22
  end
23
-
23
+
24
24
  #-----------------------
25
25
  # Build the params hash.
26
26
  # This is automatically called by #to_a, so it probably
@@ -31,13 +31,13 @@ module NPR
31
31
  else
32
32
  conditions = @builder[:conditions]
33
33
  end
34
-
34
+
35
35
  params = conditions || {}
36
36
  params[:sort] = @builder[:order] if @builder[:order]
37
37
  params[:numResults] = @builder[:limit] if @builder[:limit]
38
38
  params[:startNum] = @builder[:offset] if @builder[:offset]
39
39
  params.merge!(@builder[:extra]) if @builder[:extra]
40
-
40
+
41
41
  params
42
42
  end
43
43
 
@@ -68,19 +68,19 @@ module NPR
68
68
  def to_a
69
69
  response = self.query
70
70
  stories = []
71
-
71
+
72
72
  if response.list
73
73
  stories = Array.wrap(response.list.stories)
74
74
  end
75
-
75
+
76
76
  stories
77
77
  end
78
-
78
+
79
79
  #-----------------------
80
80
  # Fire the query and return the full Response object
81
- #
81
+ #
82
82
  # Example:
83
- #
83
+ #
84
84
  # query = NPR::API::QueryBuilder.new(NPR::Story)
85
85
  # query.where(:id => [100, 150]).query
86
86
  # #=> NPR::API::Response
@@ -110,7 +110,7 @@ module NPR
110
110
  @builder[:extra] = (@builder[:extra] || {}).merge(params)
111
111
  self
112
112
  end
113
-
113
+
114
114
  #-----------------------
115
115
  # Merge in the passed-in conditions to what
116
116
  # already exists.
@@ -132,7 +132,7 @@ module NPR
132
132
  # last_week = Time.new(2012, 10, 21)
133
133
  # yesterday = Time.new(2012, 10, 25)
134
134
  # query.where(date: (last_week..yesterday))
135
- #
135
+ #
136
136
  def where(conditions)
137
137
  @builder[:conditions] = (@builder[:conditions] || {}).merge(conditions)
138
138
  self
@@ -168,9 +168,9 @@ module NPR
168
168
  @builder[:limit] = limit
169
169
  self
170
170
  end
171
-
171
+
172
172
  #-----------------------
173
- # Offset the number of results
173
+ # Offset the number of results
174
174
  # Useful for pagination
175
175
  #
176
176
  # Accepts an Integer.
@@ -183,35 +183,34 @@ module NPR
183
183
  @builder[:offset] = offset
184
184
  self
185
185
  end
186
-
186
+
187
187
  #-----------------------
188
-
188
+
189
189
  private
190
-
190
+
191
191
  def client
192
192
  @client ||= NPR::API::Client.new(:apiKey => NPR.config.apiKey)
193
193
  end
194
-
194
+
195
195
  #-----------------------
196
-
196
+
197
197
  def parse_conditions(conditions)
198
198
  parse_conditions!(conditions.dup)
199
199
  end
200
200
 
201
201
  #-----------------------
202
-
202
+
203
203
  def parse_conditions!(conditions)
204
-
205
204
  if conditions[:id].is_a? Array
206
205
  conditions[:id] = conditions[:id].join(",")
207
206
  end
208
-
207
+
209
208
  if conditions[:date].is_a? Range
210
209
  conditions[:startDate] = conditions[:date].first
211
210
  conditions[:endDate] = conditions[:date].last
212
211
  conditions.delete(:date)
213
212
  end
214
-
213
+
215
214
  conditions
216
215
  end
217
216
  end # QueryBuilder
@@ -8,24 +8,24 @@ module NPR
8
8
  module API
9
9
  class Response
10
10
  include NPR::Concern::Relation
11
-
11
+
12
12
  has_many "messages", :key => "message", :class_name => NPR::API::Message
13
13
  attr_reader :raw, :version, :messages, :list
14
14
 
15
15
  #--------------------------
16
-
16
+
17
17
  def initialize(response)
18
18
  create_relations(response)
19
-
19
+
20
20
  @_response = response
21
21
  @raw = response.body
22
-
23
- @version = @raw["version"]
24
-
22
+
23
+ @version = @raw["version"]
24
+
25
25
  if list = @raw["list"]
26
26
  @list = NPR::Entity::List.new(list)
27
27
  end
28
-
28
+
29
29
  Array.wrap(@raw["message"]).each do |message|
30
30
  @messages.push NPR::API::Message.new(message)
31
31
  end
@@ -9,7 +9,7 @@ module NPR
9
9
  ATTR_TYPES = {
10
10
  "id" => :string_to_i,
11
11
  "partnerId" => :string_to_i,
12
- "storyDate" => :string_time_parse,
12
+ "storyDate" => :string_time_parse,
13
13
  "pubDate" => :string_time_parse,
14
14
  "lastModifiedDate" => :string_time_parse,
15
15
  "showDate" => :string_time_parse,
@@ -19,41 +19,39 @@ module NPR
19
19
  "timestamp" => :string_time_at,
20
20
  "duration" => :string_to_i
21
21
  }
22
-
22
+
23
23
  module Concern
24
24
  module AttrTypecast
25
-
25
+
26
26
  private
27
-
27
+
28
28
  #------------------
29
29
  # Typecasting methods
30
30
  def string_to_i(value)
31
31
  value.to_i
32
32
  end
33
-
33
+
34
34
  #------------------
35
-
35
+
36
36
  def string_time_parse(value)
37
37
  !value.empty? ? Time.parse(value) : nil
38
38
  end
39
-
39
+
40
40
  #------------------
41
-
41
+
42
42
  def string_time_at(value)
43
43
  Time.at(value.to_f)
44
44
  end
45
-
46
-
47
- #------------------
45
+
48
46
  #------------------
49
-
47
+
50
48
  def attr_typecast(key, value)
51
49
  if method = NPR::ATTR_TYPES[key]
52
50
  send method, value
53
51
  else
54
52
  value
55
53
  end
56
- end
54
+ end
57
55
  end # AttrTypecast
58
56
  end # Concern
59
57
  end # NPR
@@ -0,0 +1,26 @@
1
+ module NPR
2
+ module Concern
3
+ module LinksAssociation
4
+ def self.included(base)
5
+ base.has_many "links", :key => "link", :class_name => NPR::Entity::Link
6
+ end
7
+
8
+ #-------------------------
9
+ # Find links of the passed in type.
10
+ #
11
+ # Example:
12
+ #
13
+ # story.link_for("html") #=> http://npr.org/...
14
+ # story.link_for("nothing") #=> nil
15
+ #
16
+ # Returns an the content of that link if found,
17
+ # or nil if not found.
18
+ #
19
+ def link_for(type)
20
+ if link = self.links.find { |link| link.type == type }
21
+ link.to_s
22
+ end
23
+ end
24
+ end # LinkAssociation
25
+ end # Concern
26
+ end # NPR
@@ -9,13 +9,13 @@ module NPR
9
9
  end
10
10
 
11
11
  #-----------------
12
-
12
+
13
13
  module ClassMethods
14
14
  #-----------------
15
15
  # Define a relationship
16
16
  # Similar to ActiveRecord's +has_many+
17
17
  #
18
- # Arguments:
18
+ # Arguments:
19
19
  #
20
20
  # * name (String) - the name of the relation
21
21
  # * options (Hash)
@@ -28,7 +28,7 @@ module NPR
28
28
  #
29
29
  def has_many(name, options)
30
30
  relation = build_relation(name, options)
31
-
31
+
32
32
  # Define getter and setter for this attribute
33
33
  # Forces the relation into an empty array when
34
34
  # it's first accessed.
@@ -36,7 +36,7 @@ module NPR
36
36
  define_method name do
37
37
  instance_variable_get("@#{name}") || instance_variable_set("@#{name}", [])
38
38
  end
39
-
39
+
40
40
  _has_many_relations.push relation
41
41
  end
42
42
 
@@ -47,25 +47,25 @@ module NPR
47
47
  attr_accessor name
48
48
  _has_one_relations.push relation
49
49
  end
50
-
50
+
51
51
  #-----------------
52
-
52
+
53
53
  def _has_many_relations
54
54
  @_has_many_relations ||= []
55
55
  end
56
-
56
+
57
57
  def _has_one_relations
58
58
  @_has_one_relations ||= []
59
59
  end
60
60
 
61
61
  #-----------------
62
-
62
+
63
63
  private
64
64
  attr_writer :_has_many_relations, :_has_one_relations
65
-
65
+
66
66
  def build_relation(name, options)
67
- relation = {
68
- :name => name,
67
+ relation = {
68
+ :name => name,
69
69
  :class_name => options[:class_name],
70
70
  :key => options[:key] || name
71
71
  }
@@ -76,22 +76,22 @@ module NPR
76
76
  #-----------------
77
77
 
78
78
  private
79
-
79
+
80
80
  #-----------------
81
- # Populate the relations based on
81
+
82
82
  def create_relations(json)
83
83
  self.class._has_many_relations.each do |relation|
84
84
  collection = []
85
-
85
+
86
86
  if node = json[relation[:key]]
87
- node.each do |obj|
87
+ node.each do |obj|
88
88
  collection.push relation[:class_name].new(obj)
89
89
  end
90
90
  end
91
-
91
+
92
92
  send "#{relation[:name]}=", collection
93
93
  end
94
-
94
+
95
95
  self.class._has_one_relations.each do |relation|
96
96
  if node = json[relation[:key]]
97
97
  send "#{relation[:name]}=", relation[:class_name].new(node)
@@ -7,15 +7,15 @@
7
7
  #
8
8
  # Example:
9
9
  #
10
- # { "link": { "$text": "www.google.com" } }
11
- #
12
- # shallow_attribute "link"
10
+ # { "link": { "$text": "http://npr.org" } }
13
11
  #
12
+ # shallow_attribute "link"
13
+ # @story.link # => "http://npr.org"
14
14
  module NPR
15
15
  module Concern
16
16
  module ShallowAttributes
17
17
  include AttrTypecast
18
-
18
+
19
19
  def self.included(base)
20
20
  base.extend ClassMethods
21
21
  end
@@ -27,23 +27,23 @@ module NPR
27
27
  _shallow_attributes.push *attrs
28
28
  attr_accessor *attrs
29
29
  end
30
-
30
+
31
31
  #-----------------
32
-
32
+
33
33
  def _shallow_attributes
34
34
  @shallow_attributes ||= []
35
35
  end
36
-
36
+
37
37
  #-----------------
38
-
38
+
39
39
  private
40
40
  attr_writer :_shallow_attributes
41
41
  end
42
-
42
+
43
43
  #-----------------
44
-
44
+
45
45
  private
46
-
46
+
47
47
  #-----------------
48
48
  # Extract the defined shallow_attributes from the JSON
49
49
  # and set the corresponding attribute.
@@ -68,4 +68,4 @@ module NPR
68
68
  end
69
69
  end # ShallowAttribute
70
70
  end # Concern
71
- end # NPR
71
+ end # NPR
@@ -1,7 +1,7 @@
1
1
  ##
2
2
  # NPR::Configuration
3
3
  #
4
- module NPR
4
+ module NPR
5
5
  #-------------------
6
6
  # Pass a block to configure NPR client globally.
7
7
  #
@@ -24,11 +24,11 @@ module NPR
24
24
  end
25
25
 
26
26
  #-------------------
27
-
27
+
28
28
  def self.config
29
29
  @config ||= NPR::Configuration.new
30
30
  end
31
-
31
+
32
32
  #-------------------
33
33
  # NPR::Configuration
34
34
  #
@@ -38,52 +38,52 @@ module NPR
38
38
  #
39
39
  class Configuration
40
40
  API_ROOT = "http://api.npr.org"
41
-
41
+
42
42
  API_QUERY_PATH = "/query"
43
43
  API_LIST_PATH = "/list"
44
-
44
+
45
45
  # List all the parameters that the NPR API
46
- # can accept. Some are left out that don't
46
+ # can accept. Some are left out that don't
47
47
  # make sense to globally configure (such as
48
48
  # +:id+, +:startNum+, and +:callback+)
49
49
  API_OPTIONS = [
50
50
  # List options
51
- :storyCountAll,
52
- :storyCountMonth,
51
+ :storyCountAll,
52
+ :storyCountMonth,
53
53
  :storyCountToday,
54
- :childrenOf,
54
+ :childrenOf,
55
55
  :hideChildren,
56
-
56
+
57
57
  # Story options
58
- :apiKey,
59
- :orgId,
60
- :meta,
61
- :output,
58
+ :apiKey,
59
+ :orgId,
60
+ :meta,
61
+ :output,
62
62
  :fields,
63
- :sort,
64
- :numResults,
65
- :action,
63
+ :sort,
64
+ :numResults,
65
+ :action,
66
66
  :requiredAssets,
67
- :date,
68
- :startDate,
69
- :endDate,
67
+ :date,
68
+ :startDate,
69
+ :endDate,
70
70
  :dateType,
71
- :searchTerm,
72
- :searchType,
71
+ :searchTerm,
72
+ :searchType,
73
73
  :title
74
74
  ]
75
-
75
+
76
76
  attr_accessor *API_OPTIONS
77
77
 
78
78
  #-------------------
79
- # You can pass in a hash of options to
79
+ # You can pass in a hash of options to
80
80
  # Configuration.new
81
81
  def initialize(options={})
82
82
  options.each do |key, value|
83
83
  send "#{key}=", value
84
84
  end
85
85
  end
86
-
86
+
87
87
  #-------------------
88
88
  # Convenience method
89
89
  def merge(hash)
@@ -96,12 +96,12 @@ module NPR
96
96
  # Why don't we inherit from OrderedOptions?
97
97
  #
98
98
  # Since the API options are out of our control
99
- # (without having to map every API option to
99
+ # (without having to map every API option to
100
100
  # internal methods), it is possible that one
101
101
  # of the config options will conflict with
102
102
  # something in Ruby. For example, the "sort"
103
103
  # option that the NPR API allows would mean
104
- # we'd have to overwrite Ruby's Hash#sort
104
+ # we'd have to overwrite Ruby's Hash#sort
105
105
  # method.
106
106
  #
107
107
  # We *could* just map out config options to