gnip-rule 0.2 → 0.3

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.
@@ -2,4 +2,6 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 1.8.7
5
+ - jruby-19mode
6
+ - rbx-19mode
5
7
  script: rspec spec
@@ -0,0 +1,5 @@
1
+ guard 'rspec', :cli => '--drb --format Fuubar --color', :version => 2 do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # gnip-rule [![Build Status](https://secure.travis-ci.org/eriwen/gnip-rule.png)](http://travis-ci.org/eriwen/gnip-rule)
1
+ # gnip-rule [![Build Status](https://secure.travis-ci.org/eriwen/gnip-rule.png)](http://travis-ci.org/eriwen/gnip-rule) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/eriwen/gnip-rule)
2
2
  This gem simplifies the effort to add/delete/list rules using the [Gnip Rules API](http://support.gnip.com/customer/portal/articles/477713-rules-methods-documentation). It handles HTTP request/response and helps your rules conform to Gnip's restrictions.
3
3
 
4
4
  ## Installation
@@ -20,8 +20,26 @@ Gem::Specification.new do |s|
20
20
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
21
  s.require_paths = ['lib']
22
22
 
23
- s.add_development_dependency 'rspec'
23
+ s.add_development_dependency 'rake', '~> 0.9.2'
24
+ s.add_development_dependency 'rspec', '~> 2.10.0'
25
+ s.add_development_dependency 'webmock', '~> 1.8.11'
26
+ s.add_development_dependency 'guard', '~> 1.4.0'
27
+ s.add_development_dependency 'guard-rspec', '~> 1.2.0'
28
+ s.add_development_dependency 'fuubar', '~> 1.1.0'
24
29
 
25
- s.add_dependency 'curb', '>= 0.8.0', '< 0.9.0'
26
- s.add_dependency 'json', '>= 1.6.0', '< 1.7.0'
30
+ if RbConfig::CONFIG['host_os'] =~ /darwin/
31
+ s.add_development_dependency 'rb-fsevent'
32
+ s.add_development_dependency 'ruby_gntp'
33
+ elsif RbConfig::CONFIG['host_os'] =~ /linux/
34
+ s.add_development_dependency 'rb-inotify'
35
+ s.add_development_dependency 'libnotify'
36
+ elsif RbConfig::CONFIG['host_os'] =~ /msmin|mingw/
37
+ s.add_development_dependency 'wdm'
38
+ s.add_development_dependency 'rb-notifu'
39
+ end
40
+
41
+ s.add_dependency 'rest-client', '~> 1.6.7'
42
+ s.add_dependency 'json', '~> 1.7.0'
43
+ s.add_dependency 'jruby-openssl' if RUBY_PLATFORM == 'java'
44
+ s.add_dependency 'openssl' if RUBY_PLATFORM == 'ruby'
27
45
  end
@@ -1,4 +1,4 @@
1
- require 'curb'
1
+ require 'rest-client'
2
2
  require 'json'
3
3
  require 'gnip-rule/rule'
4
4
 
@@ -18,21 +18,14 @@ module GnipRule
18
18
  end
19
19
 
20
20
  def delete(value, tag=nil)
21
- post("#{@url}?_method=delete", jsonify_rules(value, tag))
21
+ post("#@url?_method=delete", jsonify_rules(value, tag))
22
22
  end
23
23
 
24
24
  def list()
25
- rules = nil
26
- Curl::Easy.http_get(@url) do |curl|
27
- curl.http_auth_types = :basic
28
- curl.username = @username
29
- curl.password = @password
30
- curl.on_body do |obj|
31
- rules = JSON.parse(obj)['rules'].collect { |o| Rule.new(o['value'], o['tag']) }
32
- obj.size
33
- end
34
- end
35
- rules
25
+ response = RestClient::Request.new(:method => :get, :url => @url,
26
+ :user => @username, :password => @password,
27
+ :headers => { :accept => :json }).execute
28
+ JSON.parse(response.to_s)['rules'].collect { |o| Rule.new(o['value'], o['tag']) }
36
29
  end
37
30
 
38
31
  def jsonify_rules(values, tag=nil)
@@ -49,18 +42,8 @@ module GnipRule
49
42
 
50
43
  protected
51
44
  def post(url, data)
52
- err = nil
53
- Curl::Easy.http_post(url, data) do |curl|
54
- curl.http_auth_types = :basic
55
- curl.username = @username
56
- curl.password = @password
57
- curl.on_complete do |res|
58
- if res.response_code >= 400
59
- err = "Got #{res.response_code}; body: #{res.body_str}"
60
- end
61
- end
62
- end
63
- raise err if err
45
+ RestClient::Request.new(:method => :post, :url => url, :payload => data,
46
+ :user => @username, :password => @password, :headers => { :content_type => :json, :accept => :json }).execute
64
47
  end
65
48
  end
66
49
  end
@@ -1,3 +1,3 @@
1
1
  module GnipRule
2
- VERSION = '0.2'
2
+ VERSION = '0.3'
3
3
  end
@@ -3,38 +3,55 @@ require 'spec-helper'
3
3
  require 'gnip-rule/client'
4
4
 
5
5
  describe GnipRule::Client do
6
- let(:fake_curb) { double("Curl::Easy") }
7
- before do
8
- Curl::Easy.stub(:http_post => fake_curb)
9
- Curl::Easy.stub(:http_get => fake_curb)
10
- end
11
-
12
- subject { GnipRule::Client.new('https://api.gnip.com:443/accounts/foo/publishers/twitter/streams/track/prod/rules.json', 'username', 'password') }
6
+ let(:base_url) { 'https://api.gnip.com:443/accounts/foo/publishers/twitter/streams/track/prod/rules.json' }
7
+ let(:base_url_with_auth) { 'https://username:password@api.gnip.com:443/accounts/foo/publishers/twitter/streams/track/prod/rules.json' }
8
+ subject { GnipRule::Client.new(base_url, 'username', 'password') }
13
9
 
14
10
  describe '#initialize' do
15
11
  it 'should convert XML URLs to JSON' do
16
- subject.url.should == 'https://api.gnip.com:443/accounts/foo/publishers/twitter/streams/track/prod/rules.json'
12
+ subject.url.should == base_url
17
13
  end
18
14
  end
19
15
 
20
16
  describe '#add' do
21
17
  it 'should POST rule to the given URL with given credentials' do
22
- Curl::Easy.should_receive(:http_post)
18
+ stub_request(:post, base_url_with_auth).
19
+ with(:body => '{"rules":[{"value":"value","tag":"tag"}]}').
20
+ to_return(:status => 200, :body => '', :headers => {})
23
21
  subject.add('value', 'tag')
24
22
  end
23
+
24
+ it 'should raise an error if Gnip returns HTTP error' do
25
+ stub_request(:post, base_url_with_auth).
26
+ with(:body => '{"rules":[{"value":"value","tag":"tag"}]}').
27
+ to_return(:status => 401, :body => 'Error message', :headers => {})
28
+ lambda { subject.add('value', 'tag') }.should raise_error
29
+ end
25
30
  end
26
31
 
27
32
  describe '#delete' do
28
33
  it 'should POST rule json to a URL with given credentials' do
29
- Curl::Easy.should_receive(:http_post)
34
+ stub_request(:post, "#{base_url_with_auth}?_method=delete").
35
+ with(:body => '{"rules":[{"value":"value","tag":"tag"}]}').
36
+ to_return(:status => 200, :body => '', :headers => {})
30
37
  subject.delete('value', 'tag')
31
38
  end
32
39
  end
33
40
 
34
41
  describe '#list' do
35
42
  it 'should GET a URL with given credentials' do
36
- Curl::Easy.should_receive(:http_get)
37
- subject.list()
43
+ stub_request(:get, base_url_with_auth).
44
+ to_return(:status => 200, :body => '{"rules":[{"value":"foo","tag":"baz"},{"value":"bar","tag":"baz"}]}')
45
+ rules = subject.list()
46
+ rules.size.should == 2
47
+ rules.map { |r| r.valid?.should == true }
48
+ end
49
+
50
+ it 'should raise an error if Gnip returns HTTP error' do
51
+ stub_request(:get, base_url).
52
+ with(:body => '{"rules":[{"value":"value","tag":"tag"}]}').
53
+ to_return(:status => 401, :body => 'Error message', :headers => {})
54
+ lambda { subject.list() }.should raise_error
38
55
  end
39
56
  end
40
57
 
@@ -2,3 +2,4 @@ require 'bundler'
2
2
  Bundler.setup
3
3
 
4
4
  require 'rspec'
5
+ require 'webmock/rspec'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnip-rule
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,106 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-21 00:00:00.000000000 Z
12
+ date: 2012-11-02 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.9.2
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.9.2
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 2.10.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.10.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: webmock
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 1.8.11
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.8.11
62
+ - !ruby/object:Gem::Dependency
63
+ name: guard
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.4.0
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.4.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: guard-rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 1.2.0
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 1.2.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: fuubar
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.1.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.1.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: rb-fsevent
16
112
  requirement: !ruby/object:Gem::Requirement
17
113
  none: false
18
114
  requirements:
@@ -28,36 +124,43 @@ dependencies:
28
124
  - !ruby/object:Gem::Version
29
125
  version: '0'
30
126
  - !ruby/object:Gem::Dependency
31
- name: curb
127
+ name: ruby_gntp
32
128
  requirement: !ruby/object:Gem::Requirement
33
129
  none: false
34
130
  requirements:
35
131
  - - ! '>='
36
132
  - !ruby/object:Gem::Version
37
- version: 0.8.0
38
- - - <
39
- - !ruby/object:Gem::Version
40
- version: 0.9.0
41
- type: :runtime
133
+ version: '0'
134
+ type: :development
42
135
  prerelease: false
43
136
  version_requirements: !ruby/object:Gem::Requirement
44
137
  none: false
45
138
  requirements:
46
139
  - - ! '>='
47
140
  - !ruby/object:Gem::Version
48
- version: 0.8.0
49
- - - <
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: rest-client
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
50
148
  - !ruby/object:Gem::Version
51
- version: 0.9.0
149
+ version: 1.6.7
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 1.6.7
52
158
  - !ruby/object:Gem::Dependency
53
159
  name: json
54
160
  requirement: !ruby/object:Gem::Requirement
55
161
  none: false
56
162
  requirements:
57
- - - ! '>='
58
- - !ruby/object:Gem::Version
59
- version: 1.6.0
60
- - - <
163
+ - - ~>
61
164
  - !ruby/object:Gem::Version
62
165
  version: 1.7.0
63
166
  type: :runtime
@@ -65,10 +168,7 @@ dependencies:
65
168
  version_requirements: !ruby/object:Gem::Requirement
66
169
  none: false
67
170
  requirements:
68
- - - ! '>='
69
- - !ruby/object:Gem::Version
70
- version: 1.6.0
71
- - - <
171
+ - - ~>
72
172
  - !ruby/object:Gem::Version
73
173
  version: 1.7.0
74
174
  description: Ruby library for working with the Gnip Rules API
@@ -84,6 +184,7 @@ files:
84
184
  - .travis.yml
85
185
  - CONTRIBUTING.md
86
186
  - Gemfile
187
+ - Guardfile
87
188
  - LICENSE
88
189
  - README.md
89
190
  - Rakefile
@@ -123,3 +224,4 @@ test_files:
123
224
  - spec/gnip-rule/client_spec.rb
124
225
  - spec/gnip-rule/rule_spec.rb
125
226
  - spec/spec-helper.rb
227
+ has_rdoc: