cinch-links-tumblr 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -12,6 +12,7 @@ lib/bundler/man
12
12
  pkg
13
13
  rdoc
14
14
  spec/reports
15
+ spec/secret.rb
15
16
  test/tmp
16
17
  test/version_tmp
17
18
  tmp
data/.travis.yml ADDED
@@ -0,0 +1,27 @@
1
+ ---
2
+ language: ruby
3
+ rvm:
4
+ - 1.9.2
5
+ - 1.9.3
6
+ env:
7
+ global:
8
+ - secure: ! 'bANxESoL2yYVy4pzpRKSWqQkQ4e5kplZbVgUwjplXU91HfJbnubgdFPcQ9ol
9
+
10
+ /Df9+Fq9kZ6Kc2JIXeVB/Rd1knse+ZtJloCiVpCwtrhrp66anjJmq4awZwcr
11
+
12
+ WJrkUtmwOi0wahkGr1J4B3mukCQSqr/ygD0C1Vu1CIuGmjmDSNc='
13
+ - secure: ! 'HpgfiFkdpMBppgOHMSX9fn1gZWldqvnp2DrwiIhPT5jxm6vUnrMkxv1C2oY1
14
+
15
+ uWnJEo4k1Bj8VYtDfzOABhV4hi5+rBRbjSLNxe4FP0biT45guQ5DmSHIlk/x
16
+
17
+ EZfqHalormTJnPBpval5+3rNPJCh5Ti+X7sdExI7hLdog0WmhsY='
18
+ - secure: ! 'NTyLUDha9LG8B6KwZvqTWQQTicVptMKW27qnEXxgVcHoPu4U/KqLSGNEXyL7
19
+
20
+ CsdF/L8OTctdjBXzQhQjgT2sQAyrO1tIkcK2flV3YH8GpHaVOfvRJmY+0Fqr
21
+
22
+ S/xbgOnegiOsm+xOVMw3zw4dMsdcVejV6IUJrShiMkN8VlT1MRY='
23
+ - secure: ! 'l9HRgebKrJYXeiGzWxtKOO8I/j0u/u+V7b8SpDcq7UUi+ViXvHajYy3HIJ9M
24
+
25
+ Hh1KwfAtf/FExDTXALQMVJqxavpHsvmjq7tZZSk/0NGCxWMjSt1AvbJkxc7H
26
+
27
+ s3iSP2fiWsOEtDV/zCCJ6mEa6li4QQFYRc0RWXZggbyh7PPzqdg='
data/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Cinch::Plugins::LinksTumblr
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/cinch-links-tumblr.png)](http://badge.fury.io/rb/cinch-links-tumblr)
4
+ [![Dependency Status](https://gemnasium.com/bhaberer/cinch-links-tumblr.png)](https://gemnasium.com/bhaberer/cinch-links-tumblr)
5
+ [![Build Status](https://travis-ci.org/bhaberer/cinch-links-tumblr.png?branch=master)](https://travis-ci.org/bhaberer/cinch-links-tumblr)
6
+ [![Coverage Status](https://coveralls.io/repos/bhaberer/cinch-links-tumblr/badge.png?branch=master)](https://coveralls.io/r/bhaberer/cinch-links-tumblr?branch=master)
7
+ [![Code Climate](https://codeclimate.com/github/bhaberer/cinch-links-tumblr.png)](https://codeclimate.com/github/bhaberer/cinch-links-tumblr)
8
+
3
9
  This plugin takes all links from the channel and posts them to a Tumblr.
4
10
 
5
11
  You can optionally specify a password if you want to use a private Tumblr.
@@ -54,7 +60,7 @@ Once you have your Tumblr credentials, you need to add them to the configuration
54
60
  end
55
61
 
56
62
  That should be all you need to get the Plugin working! Users can get the Tumblr info
57
- (hostname / password) at any time by using `.tumblr` in the channel.
63
+ (hostname / password) at any time by using `!tumblr` in the channel.
58
64
 
59
65
  By default links tumbled will be logged to `yaml/tumblr.yml`, you can change this by specifying
60
66
  a different loation with `c.plugins.options[Cinch::Plugins::LinksTumblr][:filename] = NEW_PATH`.
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -17,9 +17,15 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency('cinch-storage', '>= 0.0.1')
21
- gem.add_dependency('cinch-toolbox', '>= 0.0.5')
22
- gem.add_dependency('cinch', '>= 2.0.0')
23
- gem.add_dependency('tumblr-rb', '>= 2.0.0')
24
- gem.add_dependency('weary', '>= 1.1.3')
20
+ gem.add_development_dependency 'rake'
21
+ gem.add_development_dependency 'rspec'
22
+ gem.add_development_dependency 'coveralls'
23
+ gem.add_development_dependency 'cinch-test'
24
+ gem.add_development_dependency 'json'
25
+
26
+ gem.add_dependency 'cinch-storage', '~> 1.0.0'
27
+ gem.add_dependency 'cinch-toolbox', '~> 1.0.3'
28
+ gem.add_dependency 'cinch', '~> 2.0.5'
29
+ gem.add_dependency 'tumblr-rb', '~> 2.1.1'
30
+ gem.add_dependency 'weary', '~> 1.1.3'
25
31
  end
@@ -1,83 +1,75 @@
1
1
  # -*- coding: utf-8 -*-
2
- require 'nokogiri'
3
2
  require 'open-uri'
4
3
  require 'tumblr'
4
+ require 'cinch'
5
5
  require 'cinch-storage'
6
- require 'cinch-toolbox'
6
+ require 'cinch/toolbox'
7
7
 
8
8
  module Cinch::Plugins
9
9
  class LinksTumblr
10
10
  include Cinch::Plugin
11
11
 
12
12
  listen_to :channel
13
+
13
14
  match /tumblr/
14
15
 
15
16
  self.help = 'Use .tumblr for the url and password (if any) for the channel\'s tumblr.'
16
17
 
17
-
18
18
  def initialize(*args)
19
19
  super
20
20
  @storage = CinchStorage.new(config[:filename] || 'yaml/tumblr.yml')
21
- @storage.data[:history] ||= Hash.new
22
- @hostname = config[:hostname]
21
+ @storage.data ||= {}
22
+ @hostname = config[:hostname]
23
23
  @password = config[:password]
24
- @creds = { :consumer_key => config[:consumer_key],
25
- :consumer_secret => config[:consumer_secret],
26
- :token => config[:token],
27
- :token_secret => config[:token_secret] }
24
+ @creds = { consumer_key: config[:consumer_key],
25
+ consumer_secret: config[:consumer_secret],
26
+ token: config[:token],
27
+ token_secret: config[:token_secret] }
28
+ credential_check
28
29
  end
29
30
 
30
31
  def execute(m)
31
- if m.channel.nil?
32
- # Tumblr's are channel bound, so require the user to be in a channel
33
- m.user.msg "You must use that command in the main channel."
34
- return
35
- else
36
- if @hostname
37
- msg = "Links are available @ http://#{@hostname}"
38
- msg << " Password: #{@password}" unless @password.nil?
39
- m.user.send msg
40
- else
41
- debug "ERROR: Tumblr hostname has not been specified, see docs for info."
42
- end
32
+ return if Cinch::Toolbox.sent_via_private_message?(m)
33
+
34
+ if @hostname
35
+ msg = "Links are available @ http://#{@hostname}"
36
+ msg << " Password: #{@password}" unless @password.nil?
37
+ m.user.send msg
43
38
  end
44
39
  end
45
40
 
46
41
  def listen(m)
47
42
  urls = URI.extract(m.message, ["http", "https"])
48
43
  urls.each do |url|
49
- @storage.data[:history][m.channel.name] ||= Hash.new
44
+ @storage.data[m.channel.name] ||= []
50
45
 
51
46
  # Check to see if we've seen the link
52
- unless @storage.data[:history][m.channel.name].key?(url)
53
- short_url = Cinch::Toolbox.shorten(url)
54
- title = Cinch::Toolbox.get_page_title(url)
55
- tumble(url, title, m.user.nick)
47
+ unless @storage.data[m.channel.name].include?(url)
48
+ tumble(url, m.user.nick)
56
49
 
57
50
  # Store the links to try and cut down on popular urls getting tumbled 20 times
58
- @storage.data[:history][m.channel.name][url] = { :time => Time.now }
59
- end
60
- end
61
-
62
- if urls
63
- synchronize(:save_links) do
64
- @storage.save
51
+ @storage.data[m.channel.name] << url
65
52
  end
53
+ @storage.synced_save(@bot)
66
54
  end
67
55
  end
68
56
 
69
57
  private
70
58
 
71
- def tumble(url, title, nick)
72
- # Redit
59
+ def tumble(url, nick)
60
+ title = Cinch::Toolbox.get_page_title(url)
61
+ # Parse out common Redit formats
73
62
  if redit = url.match(/^https?:\/\/.*imgur\.com.*\/([A-Za-z0-9]+\.\S{3})/)
74
63
  post_image("http://i.imgur.com/#{redit[1]}", title, nick)
64
+ elsif redit = url.match(/^https?:\/\/.*imgur\.com.*\/([A-Za-z0-9]+)\/?/)
65
+ # It may not be a jpg, but most browsers will read the meta regardless.
66
+ post_image("http://i.imgur.com/#{redit[1]}.jpg", title, nick)
75
67
  # Images
76
68
  elsif url.match(/\.jpg|jpeg|gif|png$/i)
77
69
  post_image(url, title, nick)
78
70
  # Youtube / Vimeo
79
71
  elsif url.match(/https?:\/\/[^\/]*\.?(youtube|youtu|vimeo)\./)
80
- post_video(url, nil, nick)
72
+ post_video(url, title, nick)
81
73
  # Everything else
82
74
  else
83
75
  post_link(url, title, nick)
@@ -85,37 +77,37 @@ module Cinch::Plugins
85
77
  end
86
78
 
87
79
  def post_link(url, title = nil, nick = nil)
88
- document = tumblr_header('link', { 'name' => title, 'tags' => nick })
80
+ document = tumblr_header(:link, { title: title, tags: nick })
89
81
  document << url
90
- tublr_post(document)
91
- end
92
-
93
- def post_quote(quote, source, nick = nil)
94
- document = tumblr_header('quote', { 'source' => source, 'tags' => [nick, 'twitter'] })
95
- document << quote
96
- tublr_post(document)
82
+ tumblr_post(document)
97
83
  end
98
84
 
99
85
  def post_image(url, title = nil, nick = nil)
100
- document = tumblr_header('text', { 'title' => title, 'tags' => [nick, 'image'] })
86
+ document = tumblr_header(:text, { title: title, tags: [nick, 'image'] })
101
87
  document << "<p><a href='#{url}'><img src='#{url}' style='max-width: 650px;'/></a><br/><a href='#{url}'>#{url}</a></p>"
102
- tublr_post(document)
88
+ tumblr_post(document)
103
89
  end
104
90
 
105
91
  def post_video(url, title, nick = nil)
106
- document = tumblr_header('video', { 'caption' => title, 'tags' => [nick, 'video'] })
92
+ document = tumblr_header(:video, { caption: title, tags: [nick, 'video'] })
107
93
  document << url
108
- tublr_post(document)
94
+ tumblr_post(document)
109
95
  end
110
96
 
111
- def tumblr_header(type = 'text', options = {})
112
- opts = { 'type' => type, 'hostname' => @hostname }.update(options)
97
+ def tumblr_header(type = :text, options = {})
98
+ opts = { type: type, hostname: @hostname }.update(options)
113
99
  doc = YAML::dump(opts)
114
100
  doc << "---\n"
115
101
  return doc
116
102
  end
117
103
 
118
- def tublr_post(doc)
104
+ def credential_check
105
+ if @creds.values.include?(nil)
106
+ raise ArgumentError, 'Credentials are not set correctly, please see documentation.'
107
+ end
108
+ end
109
+
110
+ def tumblr_post(doc)
119
111
  client = Tumblr::Client.new(@hostname, @creds)
120
112
  post = Tumblr::Post.load(doc)
121
113
  request = post.post(client)
@@ -1,7 +1,7 @@
1
1
  module Cinch
2
2
  module Plugins
3
3
  class LinksTumblr
4
- VERSION = "0.0.3"
4
+ VERSION = "1.0.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,111 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'cinch'
3
+ require 'spec_helper'
4
+ describe Cinch::Plugins::LinksTumblr do
5
+ include Cinch::Test
6
+
7
+ before(:all) do
8
+ @bot = build_bot('password')
9
+ end
10
+
11
+ after(:all) do
12
+ purge_tumblr_posts
13
+ end
14
+
15
+ it 'should return the links url and password if one is defined' do
16
+ get_replies(make_message(@bot, '!tumblr', { channel: '#foo', nick: 'bar' })).
17
+ first.text.should == "Links are available @ http://marvintesting.tumblr.com Password: password"
18
+ end
19
+
20
+ it 'should not send url and password if sent via pm' do
21
+ get_replies(make_message(@bot, '!tumblr')).
22
+ first.text.should == "You must use that command in the main channel."
23
+ end
24
+
25
+ it 'should not return a password if one is not defined' do
26
+ get_replies(make_message(build_bot, '!tumblr', { channel: '#foo', nick: 'bar' })).
27
+ first.text.should == "Links are available @ http://marvintesting.tumblr.com"
28
+ end
29
+
30
+ it 'should capture links' do
31
+ get_replies(make_message(@bot, 'http://github.com', { channel: '#foo', nick: 'bar' }))
32
+ post = get_last_tumblr_post
33
+ post['url'].should == 'http://github.com'
34
+ post["type"].should == 'link'
35
+ end
36
+
37
+ it 'should capture youtube links and post them as videos' do
38
+ get_replies(make_message(@bot, 'https://www.youtube.com/watch?v=-xiAbDkXDgg', { channel: '#foo', nick: 'bar' }))
39
+ post = get_last_tumblr_post
40
+ post['caption'].should == '<p>Lo Pan Style (Gangnam Style Parody) Official - YouTube</p>'
41
+ post['tags'].should == ['bar', 'video']
42
+ post['type'].should == 'video'
43
+ end
44
+
45
+ it 'should capture imgur links' do
46
+ get_replies(make_message(@bot, 'http://imgur.com/oMndYK7', { channel: '#foo', nick: 'bar' }))
47
+ post = get_last_tumblr_post
48
+ post['title'].should == 'Anybody with a cat will relate. - Imgur'
49
+ post['type'].should == 'text'
50
+ end
51
+
52
+ it 'should capture imgur links and tumble them with title' do
53
+ get_replies(make_message(@bot, 'http://i.imgur.com/NWq5WIq.gif', { channel: '#foo', nick: 'bar' }))
54
+ post = get_last_tumblr_post
55
+ post['title'].should == '"ball, ball, ball, BALL!!" - Corgi - Imgur'
56
+ post['type'].should == 'text'
57
+ end
58
+
59
+ it 'should capture image links' do
60
+ get_replies(make_message(@bot, 'http://tmp.weirdo513.org/choc.jpg', { channel: '#foo', nick: 'bar' }))
61
+ post = get_last_tumblr_post
62
+ post['title'].should == 'Image from http://tmp.weirdo513.org'
63
+ post['type'].should == 'text'
64
+ end
65
+ end
66
+
67
+ def get_last_tumblr_post
68
+ sleep 60
69
+ posts = JSON.parse(get_client.posts.perform.body)["response"]["posts"][0]
70
+ end
71
+
72
+ def get_tumblr_posts
73
+ client = get_client
74
+ JSON.parse(client.posts.perform.body)["response"]["posts"]
75
+ end
76
+
77
+ def purge_tumblr_posts
78
+ client = get_client
79
+ entries = JSON.parse(client.posts.perform.body)["response"]["posts"]
80
+ entries.map! { |p| p["id"] }
81
+
82
+ entries.each do |id|
83
+ client.delete(id: id).perform do |response|
84
+ if response.success?
85
+ puts "Deleted #{id}"
86
+ else
87
+ puts "Something went wrong posting to Tumblr #{response.code} #{response.message}"
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ def get_client
94
+ @creds = { consumer_key: ENV['CONSUMER_KEY'],
95
+ consumer_secret: ENV['CONSUMER_SECRET'],
96
+ token: ENV['TOKEN'],
97
+ token_secret: ENV['TOKEN_SECRET'] }
98
+ Tumblr::Client.new('marvintesting.tumblr.com', @creds)
99
+ end
100
+
101
+ def build_bot(password = nil)
102
+ conf = { filename: '/dev/null',
103
+ hostname: 'marvintesting.tumblr.com',
104
+ consumer_key: ENV['CONSUMER_KEY'],
105
+ consumer_secret: ENV['CONSUMER_SECRET'],
106
+ token: ENV['TOKEN'],
107
+ token_secret: ENV['TOKEN_SECRET'] }
108
+ conf[:password] = password unless password.nil?
109
+
110
+ make_bot(Cinch::Plugins::LinksTumblr, conf)
111
+ end
@@ -0,0 +1,16 @@
1
+ require 'coveralls'
2
+ require 'simplecov'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start
9
+
10
+ if File::exist? File.join(File.dirname(__FILE__), "secret.rb")
11
+ require 'secret'
12
+ end
13
+
14
+ require 'json'
15
+ require 'cinch-links-tumblr'
16
+ require 'cinch/test'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cinch-links-tumblr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,78 +9,158 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-23 00:00:00.000000000 Z
12
+ date: 2013-08-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: cinch-storage
15
+ name: rake
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.0.1
22
- type: :runtime
21
+ version: '0'
22
+ type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.0.1
29
+ version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: cinch-toolbox
31
+ name: rspec
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: 0.0.5
38
- type: :runtime
37
+ version: '0'
38
+ type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: 0.0.5
45
+ version: '0'
46
46
  - !ruby/object:Gem::Dependency
47
- name: cinch
47
+ name: coveralls
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
51
51
  - - ! '>='
52
52
  - !ruby/object:Gem::Version
53
- version: 2.0.0
54
- type: :runtime
53
+ version: '0'
54
+ type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
- version: 2.0.0
61
+ version: '0'
62
62
  - !ruby/object:Gem::Dependency
63
- name: tumblr-rb
63
+ name: cinch-test
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
67
  - - ! '>='
68
68
  - !ruby/object:Gem::Version
69
- version: 2.0.0
70
- type: :runtime
69
+ version: '0'
70
+ type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
- version: 2.0.0
77
+ version: '0'
78
78
  - !ruby/object:Gem::Dependency
79
- name: weary
79
+ name: json
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
83
  - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '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: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: cinch-storage
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.0.0
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.0.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: cinch-toolbox
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 1.0.3
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 1.0.3
126
+ - !ruby/object:Gem::Dependency
127
+ name: cinch
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 2.0.5
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 2.0.5
142
+ - !ruby/object:Gem::Dependency
143
+ name: tumblr-rb
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 2.1.1
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: 2.1.1
158
+ - !ruby/object:Gem::Dependency
159
+ name: weary
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
84
164
  - !ruby/object:Gem::Version
85
165
  version: 1.1.3
86
166
  type: :runtime
@@ -88,7 +168,7 @@ dependencies:
88
168
  version_requirements: !ruby/object:Gem::Requirement
89
169
  none: false
90
170
  requirements:
91
- - - ! '>='
171
+ - - ~>
92
172
  - !ruby/object:Gem::Version
93
173
  version: 1.1.3
94
174
  description: Cinch gem that logs every link posted in the channel to a Tumblr
@@ -99,6 +179,7 @@ extensions: []
99
179
  extra_rdoc_files: []
100
180
  files:
101
181
  - .gitignore
182
+ - .travis.yml
102
183
  - Gemfile
103
184
  - LICENSE.txt
104
185
  - README.md
@@ -107,6 +188,8 @@ files:
107
188
  - lib/cinch-links-tumblr.rb
108
189
  - lib/cinch/plugins/links-tumblr/links-tumblr.rb
109
190
  - lib/cinch/plugins/links-tumblr/version.rb
191
+ - spec/cinch-links-tumblr_spec.rb
192
+ - spec/spec_helper.rb
110
193
  homepage: https://github.com/bhaberer/cinch-links-tumblr
111
194
  licenses: []
112
195
  post_install_message:
@@ -127,8 +210,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
210
  version: '0'
128
211
  requirements: []
129
212
  rubyforge_project:
130
- rubygems_version: 1.8.24
213
+ rubygems_version: 1.8.25
131
214
  signing_key:
132
215
  specification_version: 3
133
216
  summary: Cinch Tumblr Plugin
134
- test_files: []
217
+ test_files:
218
+ - spec/cinch-links-tumblr_spec.rb
219
+ - spec/spec_helper.rb
220
+ has_rdoc: