gnip-rule 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: