gnip-rules 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,20 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem 'httparty'
7
+ gem 'rake'
8
+ gem 'json'
9
+ gem 'activesupport'
10
+
11
+ # Add dependencies to develop your gem here.
12
+ # Include everything needed to run rake, tests, features, etc.
13
+ group :development do
14
+ gem 'shoulda-context'
15
+ gem 'turn'
16
+ gem 'assert2'
17
+ gem "bundler", "~> 1.0.0"
18
+ gem "jeweler", "~> 1.6.4"
19
+ gem "rcov", ">= 0"
20
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Spencer Markowski
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # gnip-rules
2
+
3
+ Provides a quick and easy way to manage your rules via Gnip Rules API.
4
+
5
+ ## Installation
6
+
7
+ ```ruby
8
+ gem 'gnip-rules'
9
+ ```
10
+
11
+ ## Configuration
12
+
13
+ There are two ways you can provide credentials to the gnip-api gem.
14
+
15
+ * Pass them to the initialize method
16
+
17
+ `Gnip::Rules.new( "chieflarl@larlbang.com", "larl!operator" ,'https://stream.gnip.com/.../YOUR_ACCOUNT/.../prod' )`
18
+
19
+ * Via a configuration file at config/gnip.yml
20
+
21
+ ```yaml
22
+ development: &development
23
+ username: chieflarl@larlbang.com
24
+ password: larl!operator
25
+ streaming_url:'https://stream.gnip.com:443/accounts/YOUR_ACCOUNT/publishers/twitter/streams/track/prod'
26
+ ```
27
+
28
+ ## Usage
29
+
30
+ ```ruby
31
+ @gnip_rules = Gnip::Rules.new
32
+ ```
33
+
34
+ ### Adding
35
+
36
+ ```ruby
37
+ rules = [Gnip::Rule.new "larl -bang", Gnip::Rule.new "#larloperator", Gnip::Rule.new "larlygag" , "some_tag"]
38
+ response = @gnip_rules.add( rules )
39
+ p response #=> 201 Created
40
+ ```
41
+
42
+ ### Removing
43
+
44
+ ```ruby
45
+ rules = [Gnip::Rule.new "larl -bang", Gnip::Rule.new "#larloperator"]
46
+ response = @gnip_rules.remove( rules )
47
+ p response #=> 200 OK
48
+ ```
49
+
50
+ ### Listing
51
+
52
+ ```ruby
53
+ response = @gnip_rules.list
54
+ p response #=> {"rules": {"value":"larl -bang", "value":"#larloperator"} }
55
+ ```
56
+
57
+ ### Removing All Rules
58
+
59
+ This is really just for convienience while testing. You probably shouldn't ever use this in production.
60
+
61
+ ```ruby
62
+ response = @gnip_rules.delete_all!
63
+ p response #=> 200 OK
64
+ @gnip.list["rules"].empty? #=> true
65
+ ```
66
+
67
+ ## Running Tests
68
+
69
+ Make sure you have the config file mentioned above at config/gnip.yml
70
+
71
+ ```ruby
72
+ rake test
73
+ ```
74
+
75
+ ## Contributing to gnip-rules
76
+
77
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
78
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
79
+ * Fork the project
80
+ * Start a feature/bugfix branch
81
+ * Commit and push until you are happy with your contribution
82
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
83
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
84
+
85
+ ## Copyright
86
+
87
+ Copyright (c) 2011 The Able Few. See LICENSE.txt for
88
+ further details.
89
+
90
+
data/Rakefile ADDED
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "gnip-rules"
18
+ gem.homepage = "http://github.com/theablefew/gnip-rules"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{A simple wrapper for the Gnip Rules API}
21
+ gem.description = %Q{Remove, Add and List your Gnip Rules}
22
+ gem.email = "spencer@theablefew.com"
23
+ gem.authors = ["Spencer Markowski", "The Able Few"]
24
+ end
25
+
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+
46
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
data/lib/gnip-rules.rb ADDED
@@ -0,0 +1,96 @@
1
+ require 'active_support'
2
+ require 'httparty'
3
+ require 'json'
4
+
5
+ module Gnip
6
+ class Rules
7
+ include HTTParty
8
+
9
+ headers 'Accept' => 'application/json', 'Content-Type' => 'application/json'
10
+ format :json
11
+
12
+ def initialize( username = nil, password = nil, uri = nil )
13
+ unless username && password && uri
14
+ load_credentials!
15
+ username = @config["username"]
16
+ password = @config["password"]
17
+ uri = @config["streaming_url"]
18
+ end
19
+
20
+ self.class.basic_auth username , password
21
+ self.class.base_uri uri
22
+ end
23
+
24
+ def add(rules)
25
+ options = ActiveSupport::JSON.encode( {:rules => rules} )
26
+ puts options
27
+ self.class.post('/rules.json', :body => options )
28
+ end
29
+
30
+ def remove( rules )
31
+ options = ActiveSupport::JSON.encode( {:rules => rules} )
32
+ self.class.delete('/rules.json', :body => options )
33
+ end
34
+
35
+ def list
36
+ self.class.get( '/rules.json' )
37
+ end
38
+
39
+ def delete_all!
40
+ rules = self.list["rules"]
41
+ self.remove( rules )
42
+ end
43
+
44
+ private
45
+
46
+ def load_credentials!
47
+ if File.exists?( 'config/gnip.yml' )
48
+ @config = YAML.load_file( "config/gnip.yml" )[environment.to_s]
49
+ puts "c: #{@config}"
50
+ else
51
+ raise Exception.new( <<-RUBY
52
+ You must provide a configuration file at config/gnip.yml
53
+
54
+ development: &development
55
+ username: omg@omg.com
56
+ password: larl!
57
+ account: larloperator
58
+ streaming_url: 'https://stream.gnip.com:443/accounts/YOUR_ACCOUNT/publishers/twitter/streams/track/prod/'
59
+
60
+ RUBY
61
+ )
62
+ end
63
+ end
64
+
65
+ def environment
66
+ #Clearly there's a better way.
67
+ if defined?(Rails)
68
+ Rails.env
69
+ elsif defined?(RAILS_ENV)
70
+ RAILS_ENV
71
+ elsif defined?(RACK_ENV)
72
+ RACK_ENV
73
+ else
74
+ :development
75
+ end
76
+ end
77
+
78
+ # -Rules
79
+ end
80
+
81
+ class Rule
82
+ attr_accessor :value, :tag
83
+
84
+ def initialize( v , t = nil )
85
+ @value = v
86
+ @tag = t
87
+ end
88
+
89
+ def to_json
90
+ o = {"value" => value}
91
+ o.merge!( "tag" => tag ) unless tag.nil?
92
+ JSON.generate( o )
93
+ end
94
+
95
+ end
96
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ Bundler.require( :default, :development )
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.puts e.message
8
+ $stderr.puts "Run `bundle install` to install missing gems"
9
+ exit e.status_code
10
+ end
11
+ require 'test/unit'
12
+ require 'logger'
13
+
14
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
16
+ require 'gnip-rules'
17
+
18
+ class Test::Unit::TestCase
19
+ def logger
20
+ Logger.new(STDOUT)
21
+ end
22
+
23
+ end
@@ -0,0 +1,36 @@
1
+ require 'helper'
2
+
3
+ class TestGnipRules < Test::Unit::TestCase
4
+ context 'Gnip' do
5
+ setup do
6
+ @gnip = Gnip::Rules.new
7
+ end
8
+
9
+ should "allow creation of rules" do
10
+ response = @gnip.add([Gnip::Rule.new( '"new spyro"' )])
11
+ assert{ response.response.class == Net::HTTPCreated }
12
+ end
13
+
14
+ should 'allow removal of rules' do
15
+ response = @gnip.remove([Gnip::Rule.new( '"new spyro"' )])
16
+ assert{ response.response.class == Net::HTTPOK }
17
+ end
18
+
19
+ should 'allow creation of tagged rules' do
20
+ response = @gnip.add([ Gnip::Rule.new('#skylanders -skylanders -spyro', 'Skylanders')])
21
+ assert{ response.response.class == Net::HTTPCreated }
22
+ end
23
+
24
+ should 'list all rules' do
25
+ response = @gnip.list
26
+ assert{ response.response.class == Net::HTTPOK }
27
+ end
28
+
29
+ should 'delete all rules' do
30
+ response = @gnip.delete_all!
31
+ assert{ response.response.class == Net::HTTPOK }
32
+ assert{ @gnip.list["rules"].empty? }
33
+ end
34
+
35
+ end
36
+ end
data/test/test_rule.rb ADDED
@@ -0,0 +1,43 @@
1
+ require 'helper'
2
+
3
+ class TestRule < Test::Unit::TestCase
4
+ context "Gnip Rules" do
5
+ context "without tags" do
6
+ setup do
7
+ @rule = Gnip::Rule.new( '"bangor slov"')
8
+ end
9
+
10
+ should "allow creation of quoted rule" do
11
+ assert{ @rule.value == "\"bangor slov\"" }
12
+ assert{ @rule.to_json == "{\"value\":\"\\\"bangor slov\\\"\"}" }
13
+ assert{ JSON.parse( @rule.to_json )["value"] == "\"bangor slov\"" }
14
+ end
15
+
16
+ should 'not have tag key as json' do
17
+ assert{ @rule.to_json == "{\"value\":\"\\\"bangor slov\\\"\"}" }
18
+ assert{ JSON.parse( @rule.to_json )["tag"].nil? }
19
+ end
20
+
21
+ should 'not have a tag value' do
22
+ assert{ @rule.tag.nil? }
23
+ end
24
+ end
25
+
26
+ context "with tags" do
27
+ setup do
28
+ @rule = Gnip::Rule.new( "gorgon" , "scary" )
29
+ end
30
+
31
+ should "convert to json" do
32
+ assert{ JSON.parse( @rule.to_json )['tag'] == "scary" }
33
+ assert{ JSON.parse( @rule.to_json )['value'] == "gorgon" }
34
+ end
35
+
36
+ should "have a tag value" do
37
+ assert{ @rule.tag == "scary" }
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gnip-rules
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Spencer Markowski
9
+ - The Able Few
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-12-19 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: httparty
17
+ requirement: &70314327301400 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70314327301400
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: &70314327454480 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *70314327454480
37
+ - !ruby/object:Gem::Dependency
38
+ name: json
39
+ requirement: &70314327533960 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *70314327533960
48
+ - !ruby/object:Gem::Dependency
49
+ name: activesupport
50
+ requirement: &70314327532360 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *70314327532360
59
+ - !ruby/object:Gem::Dependency
60
+ name: shoulda-context
61
+ requirement: &70314327529900 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *70314327529900
70
+ - !ruby/object:Gem::Dependency
71
+ name: turn
72
+ requirement: &70314327556440 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *70314327556440
81
+ - !ruby/object:Gem::Dependency
82
+ name: assert2
83
+ requirement: &70314327555220 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *70314327555220
92
+ - !ruby/object:Gem::Dependency
93
+ name: bundler
94
+ requirement: &70314327553660 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: 1.0.0
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: *70314327553660
103
+ - !ruby/object:Gem::Dependency
104
+ name: jeweler
105
+ requirement: &70314327552260 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 1.6.4
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: *70314327552260
114
+ - !ruby/object:Gem::Dependency
115
+ name: rcov
116
+ requirement: &70314327550220 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: *70314327550220
125
+ description: Remove, Add and List your Gnip Rules
126
+ email: spencer@theablefew.com
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files:
130
+ - LICENSE.txt
131
+ - README.md
132
+ files:
133
+ - .document
134
+ - Gemfile
135
+ - LICENSE.txt
136
+ - README.md
137
+ - Rakefile
138
+ - VERSION
139
+ - lib/gnip-rules.rb
140
+ - test/helper.rb
141
+ - test/test_gnip-rules.rb
142
+ - test/test_rule.rb
143
+ homepage: http://github.com/theablefew/gnip-rules
144
+ licenses:
145
+ - MIT
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ! '>='
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ segments:
157
+ - 0
158
+ hash: -1745993365718660061
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ requirements: []
166
+ rubyforge_project:
167
+ rubygems_version: 1.8.10
168
+ signing_key:
169
+ specification_version: 3
170
+ summary: A simple wrapper for the Gnip Rules API
171
+ test_files: []