twingly-search 5.0.0 → 5.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b5fa690bb24c2c41b7f1c1141a636970c76b9057
4
- data.tar.gz: 40ba48f85e4f1d255c0fb64b69aabac2b1e347c7
3
+ metadata.gz: 02b493d1ffc4f5ada3d5358efda0d1a109ea808f
4
+ data.tar.gz: c358cf6d79e121039b765dfe3b9133c1f67de916
5
5
  SHA512:
6
- metadata.gz: 43941210a16c5377a5858d1bc296145d92f23162168043b7a932bb9a60590ea938b267b2ba1d0ec8e21effe9735ec09a939c43a99e3d49e75d61ee57156407d8
7
- data.tar.gz: a82b2cb9a89a6539093a4f8e72b8ee79c0afc8c11d61f3ee60f26a12fd312619e49ec08c08df4516769b207d090dd0d316779dd36fa1914f9643320516c105dc
6
+ metadata.gz: 02a4a23e61a87504b8af957377448c0c0195100cb246d5b2c63bcce81eb27ffd7fca75c87ae06f43c967889b24377efff243d13ca59aa146f5ffa17227fed8e4
7
+ data.tar.gz: 46e0a56868dff241923f3461d69115e80877ee2cdda6ccd46af4684b2b32548df5aa0483050e1e4622e8a72514b69a4e1e8e16339223257b8ec951994d5d1f5d
data/.travis.yml CHANGED
@@ -10,16 +10,6 @@ rvm:
10
10
  - 2.2
11
11
  - 2.3.0
12
12
  - jruby-9.0.0.0
13
- deploy:
14
- provider: rubygems
15
- api_key:
16
- secure: QxMWXTQ3/T+0IQZl3pk3hmdoX8FcXTXEhH7Jn7Ub1A1D5faa8VNnfYsWAPjP6+VRgVfKEjAsHNMyZQNTvudpPPC/2kAwwzPvStyS+y7KnRkjZ9acC7sYVVel6cZ2lcl+t8iHY+19NRBFBWpq/P0eCAcR/Ew0XXaLZnig5h/1mQo=
17
- gem: twingly-search
18
- gemspec: twingly-search-api-ruby.gemspec
19
- on:
20
- tags: true
21
- rvm: 2.2
22
- repo: twingly/twingly-search-api-ruby
23
13
  notifications:
24
14
  email: false
25
15
  hipchat:
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Change Log
2
2
 
3
+ ## [v5.0.0](https://github.com/twingly/twingly-search-api-ruby/tree/v5.0.0) (2016-02-17)
4
+ [Full Changelog](https://github.com/twingly/twingly-search-api-ruby/compare/v4.0.1...v5.0.0)
5
+
6
+ **Implemented enhancements:**
7
+
8
+ - Use Time all the time [\#50](https://github.com/twingly/twingly-search-api-ruby/issues/50)
9
+
10
+ **Fixed bugs:**
11
+
12
+ - Missing require "time" [\#44](https://github.com/twingly/twingly-search-api-ruby/issues/44)
13
+ - Query\#start\_time and \#end\_time should be converted to UTC [\#43](https://github.com/twingly/twingly-search-api-ruby/issues/43)
14
+
15
+ **Merged pull requests:**
16
+
17
+ - Improve time handling [\#51](https://github.com/twingly/twingly-search-api-ruby/pull/51) ([dentarg](https://github.com/dentarg))
18
+ - Improve parser specs [\#49](https://github.com/twingly/twingly-search-api-ruby/pull/49) ([dentarg](https://github.com/dentarg))
19
+ - Sync documentation with PHP changes [\#47](https://github.com/twingly/twingly-search-api-ruby/pull/47) ([walro](https://github.com/walro))
20
+ - Automatically convert Query\#start\_time and \#end\_time to UTC [\#46](https://github.com/twingly/twingly-search-api-ruby/pull/46) ([roback](https://github.com/roback))
21
+ - Use require\_relative [\#45](https://github.com/twingly/twingly-search-api-ruby/pull/45) ([dentarg](https://github.com/dentarg))
22
+ - Test Ruby 2.3 on Travis CI [\#42](https://github.com/twingly/twingly-search-api-ruby/pull/42) ([walro](https://github.com/walro))
23
+
3
24
  ## [v4.0.1](https://github.com/twingly/twingly-search-api-ruby/tree/v4.0.1) (2016-01-28)
4
25
  [Full Changelog](https://github.com/twingly/twingly-search-api-ruby/compare/v4.0.0...v4.0.1)
5
26
 
data/README.md CHANGED
@@ -54,9 +54,21 @@ To learn more about the capabilities of the API, please read the [Twingly Search
54
54
  * Ruby 1.9, 2.0, 2.1, 2.2, 2.3
55
55
  * JRuby 9000
56
56
 
57
- ## Development and release
57
+ ## Development
58
58
 
59
- 1. Bump the version in `lib/twingly/search/version.rb`, follow [Semantic Versioning 2.0.0](http://semver.org/). No need to push as this will be taken care of automatically in the next step.
59
+ ### Tests
60
+
61
+ Make sure you have all the dependencies
62
+
63
+ bundle
64
+
65
+ Run the tests
66
+
67
+ bundle exec rake
68
+
69
+ ### Release
70
+
71
+ 1. Make a commit bumping the version in `lib/twingly/search/version.rb`, follow [Semantic Versioning 2.0.0](http://semver.org/). No need to push as this will be taken care of automatically in the next step.
60
72
  1. Build and the release gem with `bundle exec rake release`. This will create a git tag for the version and push the `.gem` file to [RubyGems.org].
61
73
  1. Generate a changelog with `bundle exec rake changelog`. Set `CHANGELOG_GITHUB_TOKEN` to a personal access token to increase the API rate limit. (The changelog uses [GitHub Changelog Generator](https://github.com/skywinder/github-changelog-generator/))
62
74
  1. Update release information on the [releases page]. This is done manually.
@@ -16,9 +16,9 @@ module Twingly
16
16
  # @attr_reader [String] blog_url the blog URL.
17
17
  # @attr_reader [String] blog_name name of the blog.
18
18
  # @attr_reader [String] authority the blog's authority/influence.
19
- # See https://developer.twingly.com/resources/search/#authority
19
+ # See https://developer.twingly.com/resources/ranking/#authority
20
20
  # @attr_reader [Integer] blog_rank the rank of the blog, based on authority and language.
21
- # See https://developer.twingly.com/resources/search/#authority
21
+ # See https://developer.twingly.com/resources/ranking/#blogrank
22
22
  # @attr_reader [Array] tags
23
23
  class Post
24
24
  attr_reader :url, :title, :summary, :language_code, :indexed,
@@ -37,6 +37,8 @@ module Twingly
37
37
  # Executes the query and returns the result.
38
38
  #
39
39
  # @raise [QueryError] if {#pattern} is empty.
40
+ # @raise [AuthError] if the API couldn't authenticate you. Make sure your API key is correct.
41
+ # @raise [ServerError] if the query could not be executed due to a server error.
40
42
  # @return [Result] the result for this query.
41
43
  def execute
42
44
  @client.execute_query(self)
@@ -67,8 +69,9 @@ module Twingly
67
69
  #
68
70
  # @param [Time, #to_time] time an instance of the Time class
69
71
  # or an object responding to #to_time.
72
+ # @raise [QueryError] if the object cannot be converted to a Time object.
70
73
  def start_time=(time)
71
- fail QueryError, "Not a Time object" unless time.respond_to?(:to_time)
74
+ assert_valid_time(time)
72
75
 
73
76
  @start_time = time
74
77
  end
@@ -77,14 +80,21 @@ module Twingly
77
80
  #
78
81
  # @param [Time, #to_time] time an instance of the Time class
79
82
  # or an object responding to #to_time.
83
+ # @raise [QueryError] if the object cannot be converted to a Time object.
80
84
  def end_time=(time)
81
- fail QueryError, "Not a Time object" unless time.respond_to?(:to_time)
85
+ assert_valid_time(time)
82
86
 
83
87
  @end_time = time
84
88
  end
85
89
 
86
90
  private
87
91
 
92
+ def assert_valid_time(time)
93
+ return if time.nil?
94
+
95
+ fail QueryError, "Not a Time object" unless time.respond_to?(:to_time)
96
+ end
97
+
88
98
  def ts
89
99
  start_time.to_time.utc.strftime("%F %T") if start_time
90
100
  end
@@ -1,5 +1,5 @@
1
1
  module Twingly
2
2
  module Search
3
- VERSION = "5.0.0"
3
+ VERSION = "5.0.1"
4
4
  end
5
5
  end
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <twinglydata numberOfMatchesReturned="0" secondsElapsed="0.213" numberOfMatchesTotal="0" />
data/spec/parser_spec.rb CHANGED
@@ -198,6 +198,16 @@ Swedish House Mafia gör succé i USA") }
198
198
  end
199
199
  end
200
200
 
201
+ context "with a valid empty result" do
202
+ let(:fixture) { :valid_empty }
203
+
204
+ it "should return an empty result" do
205
+ expect(subject.posts.size).to eq(0)
206
+ expect(subject.number_of_matches_total).to eq(0)
207
+ expect(subject.number_of_matches_returned).to eq(0)
208
+ end
209
+ end
210
+
201
211
  context "with a nonexistent api key result" do
202
212
  let(:fixture) { :nonexistent_api_key }
203
213
 
data/spec/query_spec.rb CHANGED
@@ -72,7 +72,7 @@ describe Query do
72
72
 
73
73
  describe "#start_time=" do
74
74
  before do
75
- subject.pattern = "semla"
75
+ subject.pattern = "semla"
76
76
  end
77
77
 
78
78
  context "when given time in UTC" do
@@ -80,40 +80,61 @@ describe Query do
80
80
  subject.start_time = time
81
81
  end
82
82
 
83
- let(:time) { Time.parse("2016-02-09 09:01:22 UTC") }
83
+ let(:timestamp) { "2016-02-09 09:01:22 UTC" }
84
+ let(:time) { Time.parse(timestamp) }
84
85
 
85
86
  it "should not change timezone" do
86
87
  expect(subject.request_parameters).to include(ts: "2016-02-09 09:01:22")
87
88
  end
88
89
 
89
90
  it "should not modify the given time object" do
90
- expect(subject.start_time).to equal(time)
91
+ expect(subject.start_time.to_s).to eq(timestamp)
91
92
  end
92
93
  end
93
94
 
94
95
  context "when given time not in UTC" do
95
96
  before do
97
+ @TZ = ENV["TZ"]
98
+ # set timezone matching the timestamp, needed for Ruby versions before 2.2
99
+ # see https://github.com/twingly/twingly-search-api-ruby/pull/52
100
+ ENV["TZ"] = "Etc/GMT-5"
101
+
96
102
  subject.start_time = time
97
103
  end
98
104
 
99
- let(:time) { Time.parse("2016-02-09 09:01:22 +05:00") }
105
+ after do
106
+ ENV["TZ"] = @TZ
107
+ end
108
+
109
+ let(:timestamp) { "2016-02-09 09:01:22 +0500" }
110
+ let(:time) { Time.parse(timestamp) }
100
111
 
101
112
  it "should convert to UTC" do
102
113
  expect(subject.request_parameters).to include(ts: "2016-02-09 04:01:22")
103
114
  end
104
115
 
105
116
  it "should not modify the given time object" do
106
- expect(subject.start_time).to equal(time)
117
+ expect(subject.start_time.to_s).to eq(timestamp)
107
118
  end
108
119
  end
109
120
 
110
- context "when given non-time object" do
121
+ context "when given non-time object (except nil)" do
111
122
  let(:time) { "2013-12-28+09%3A01%3A22" }
112
123
 
113
124
  it "should raise exception" do
114
125
  expect { subject.start_time = time }.to raise_error(QueryError, "Not a Time object")
115
126
  end
116
127
  end
128
+
129
+ context "when given nil" do
130
+ before do
131
+ subject.start_time = nil
132
+ end
133
+
134
+ it "should assign" do
135
+ expect(subject.start_time).to eq(nil)
136
+ end
137
+ end
117
138
  end
118
139
 
119
140
  describe "#end_time=" do
@@ -126,40 +147,61 @@ describe Query do
126
147
  subject.end_time = time
127
148
  end
128
149
 
129
- let(:time) { Time.parse("2016-02-09 09:01:22 UTC") }
150
+ let(:timestamp) { "2016-02-09 09:01:22 UTC" }
151
+ let(:time) { Time.parse(timestamp) }
130
152
 
131
153
  it "should not change timezone" do
132
154
  expect(subject.request_parameters).to include(tsTo: "2016-02-09 09:01:22")
133
155
  end
134
156
 
135
157
  it "should not modify the given time object" do
136
- expect(subject.end_time).to equal(time)
158
+ expect(subject.end_time.to_s).to eq(timestamp)
137
159
  end
138
160
  end
139
161
 
140
162
  context "when given time not in UTC" do
141
163
  before do
164
+ @TZ = ENV["TZ"]
165
+ # set timezone matching the timestamp, needed for Ruby versions before 2.2
166
+ # see https://github.com/twingly/twingly-search-api-ruby/pull/52
167
+ ENV["TZ"] = "Etc/GMT-5"
168
+
142
169
  subject.end_time = time
143
170
  end
144
171
 
145
- let(:time) { Time.parse("2016-02-09 09:01:22 +05:00") }
172
+ after do
173
+ ENV["TZ"] = @TZ
174
+ end
175
+
176
+ let(:timestamp) { "2016-02-09 09:01:22 +0500" }
177
+ let(:time) { Time.parse(timestamp) }
146
178
 
147
179
  it "should convert to UTC" do
148
180
  expect(subject.request_parameters).to include(tsTo: "2016-02-09 04:01:22")
149
181
  end
150
182
 
151
183
  it "should not modify the given time object" do
152
- expect(subject.end_time).to equal(time)
184
+ expect(subject.end_time.to_s).to eq(timestamp)
153
185
  end
154
186
  end
155
187
 
156
- context "when given non-time object" do
188
+ context "when given non-time object (except nil)" do
157
189
  let(:time) { "2013-12-28+09%3A01%3A22" }
158
190
 
159
191
  it "should raise exception" do
160
192
  expect { subject.end_time = time }.to raise_error(QueryError, "Not a Time object")
161
193
  end
162
194
  end
195
+
196
+ context "when given nil" do
197
+ before do
198
+ subject.start_time = nil
199
+ end
200
+
201
+ it "should assign" do
202
+ expect(subject.start_time).to eq(nil)
203
+ end
204
+ end
163
205
  end
164
206
 
165
207
  context "with valid pattern" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twingly-search
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Twingly AB
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-17 00:00:00.000000000 Z
11
+ date: 2016-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -175,6 +175,7 @@ files:
175
175
  - spec/fixtures/service_unavailable_result.xml
176
176
  - spec/fixtures/unauthorized_api_key_result.xml
177
177
  - spec/fixtures/undefined_error_result.xml
178
+ - spec/fixtures/valid_empty_result.xml
178
179
  - spec/fixtures/valid_non_blog_result.xml
179
180
  - spec/fixtures/valid_result.xml
180
181
  - spec/fixtures/vcr_cassettes/search_for_spotify_on_sv_blogs.yml
@@ -206,7 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
207
  version: '0'
207
208
  requirements: []
208
209
  rubyforge_project:
209
- rubygems_version: 2.4.5.1
210
+ rubygems_version: 2.5.0
210
211
  signing_key:
211
212
  specification_version: 4
212
213
  summary: Ruby API client for Twingly Search
@@ -219,6 +220,7 @@ test_files:
219
220
  - spec/fixtures/service_unavailable_result.xml
220
221
  - spec/fixtures/unauthorized_api_key_result.xml
221
222
  - spec/fixtures/undefined_error_result.xml
223
+ - spec/fixtures/valid_empty_result.xml
222
224
  - spec/fixtures/valid_non_blog_result.xml
223
225
  - spec/fixtures/valid_result.xml
224
226
  - spec/fixtures/vcr_cassettes/search_for_spotify_on_sv_blogs.yml