robotwitter 0.1.3 → 0.2.0
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.
- data/Gemfile +8 -8
- data/Rakefile +0 -7
- data/VERSION +1 -1
- data/example/settings.yml +5 -5
- data/example/tweets.db +0 -0
- data/lib/robotwitter.rb +41 -67
- data/lib/robotwitter/db.rb +7 -7
- data/robotwitter.gemspec +20 -24
- data/spec/robotwitter/robotwitter_spec.rb +91 -39
- data/spec/spec_helper.rb +6 -6
- metadata +29 -31
data/Gemfile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
source
|
2
|
-
gem
|
3
|
-
gem
|
4
|
-
gem
|
1
|
+
source :rubygems
|
2
|
+
gem 'twitter'
|
3
|
+
gem 'sqlite3'
|
4
|
+
gem 'fakeweb'
|
5
|
+
gem 'minitest'
|
6
|
+
gem 'pry'
|
5
7
|
|
6
8
|
group :development do
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
gem "jeweler", "~> 1.5.2"
|
10
|
-
gem "rcov", ">= 0"
|
9
|
+
gem 'shoulda'
|
10
|
+
gem 'jeweler'
|
11
11
|
end
|
data/Rakefile
CHANGED
@@ -33,13 +33,6 @@ Rake::TestTask.new(:test) do |test|
|
|
33
33
|
test.verbose = true
|
34
34
|
end
|
35
35
|
|
36
|
-
require 'rcov/rcovtask'
|
37
|
-
Rcov::RcovTask.new do |test|
|
38
|
-
test.libs << 'test'
|
39
|
-
test.pattern = 'test/**/test_*.rb'
|
40
|
-
test.verbose = true
|
41
|
-
end
|
42
|
-
|
43
36
|
task :default => :test
|
44
37
|
|
45
38
|
require 'rake/rdoctask'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/example/settings.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
consumer_key:
|
3
|
-
consumer_secret:
|
4
|
-
oauth_token:
|
5
|
-
oauth_token_secret:
|
1
|
+
serialmaniak_ru:
|
2
|
+
consumer_key: qhQYAKHy5mVWhdqPD0DX1g
|
3
|
+
consumer_secret: bFgbeWrr6y10qtFrC089WswSgbhWdmQPYZxbvB30uwk
|
4
|
+
oauth_token: 27295510-cZOZYtSnRHYEdnLyIcEbWPFaDQz0Ev7RdZanUbZY
|
5
|
+
oauth_token_secret: 6bIrZX6burEjHS5BMrYcQDBFKvtK2lsr4E2sOcnOQYg
|
data/example/tweets.db
CHANGED
Binary file
|
data/lib/robotwitter.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'twitter'
|
3
|
+
require 'twitter/error/unauthorized'
|
3
4
|
require 'open-uri'
|
4
5
|
require 'yaml'
|
5
6
|
require 'sqlite3'
|
@@ -16,56 +17,46 @@ module Robotwitter
|
|
16
17
|
# which returns string
|
17
18
|
# example of getter
|
18
19
|
#
|
19
|
-
# SQLITE_GETTER = lambda do
|
20
|
+
# SQLITE_GETTER = lambda do
|
20
21
|
# db = SQLite3::Database.new("database.db")
|
21
22
|
# db.get_first_row( "select * from table" )
|
22
23
|
# end
|
23
24
|
def initialize(path, section, &getter)
|
24
|
-
@getter
|
25
|
-
@followers_ids = nil
|
26
|
-
@following_ids = nil
|
27
|
-
@path = path
|
25
|
+
@getter, @path, @followers_ids, @following_ids = getter, path, nil, nil
|
28
26
|
|
29
27
|
@logger = Logger.new('tweelog.txt', 'weekly')
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
@logger.error %/error occurred: #{exception.inspect}\n#{exception.backtrace.join("\n")}/
|
29
|
+
|
30
|
+
path ||= ''
|
31
|
+
path += '/' if path != ''
|
32
|
+
|
33
|
+
yml = YAML.load_file(path + "settings.yml")
|
34
|
+
Twitter.configure do |config|
|
35
|
+
config.consumer_key = yml[section]['consumer_key']
|
36
|
+
config.consumer_secret = yml[section]['consumer_secret']
|
37
|
+
config.oauth_token = yml[section]['oauth_token']
|
38
|
+
config.oauth_token_secret = yml[section]['oauth_token_secret']
|
42
39
|
end
|
40
|
+
@client = Twitter::Client.new
|
41
|
+
@search_client = Twitter
|
43
42
|
end
|
44
43
|
|
45
44
|
# follow who follows me
|
46
45
|
def follow_all_back
|
47
|
-
get_followers_ids
|
48
|
-
get_following_ids
|
49
|
-
|
50
|
-
follow_them = @followers_ids - @following_ids
|
51
|
-
@logger.info 'follows:'
|
46
|
+
follow_them = get_followers_ids - get_following_ids
|
52
47
|
follow_them.each do |id|
|
53
|
-
|
54
|
-
|
55
|
-
rescue
|
56
|
-
end
|
57
|
-
@logger.info id
|
48
|
+
@client.follow(id)
|
49
|
+
@logger.info 'following' + id.to_s
|
58
50
|
end
|
59
51
|
end
|
60
52
|
|
61
53
|
# string '_msg_ somth'
|
62
54
|
def send_message(pattern)
|
63
55
|
phrase = get_phrase
|
64
|
-
p phrase
|
65
56
|
return if phrase == ''
|
66
57
|
send = pattern.gsub('_msg_', phrase)
|
67
|
-
@client.update
|
68
|
-
@logger.info
|
58
|
+
@client.update(send)
|
59
|
+
@logger.info(send)
|
69
60
|
end
|
70
61
|
|
71
62
|
def retweet_about(word)
|
@@ -73,70 +64,54 @@ module Robotwitter
|
|
73
64
|
init_db
|
74
65
|
search.each do |result|
|
75
66
|
next if @db.retweeted?(result)
|
76
|
-
retweet
|
77
|
-
@db.save_retweet
|
78
|
-
@logger.info
|
67
|
+
retweet(result)
|
68
|
+
@db.save_retweet(result)
|
69
|
+
@logger.info(result['id'])
|
79
70
|
end
|
80
71
|
end
|
81
72
|
|
82
73
|
# follow who tweet about word
|
83
74
|
def follow_users_tweets_about(word)
|
84
|
-
users = search_users_tweets_about
|
75
|
+
users = search_users_tweets_about(word)
|
85
76
|
|
86
77
|
get_followers_ids
|
87
78
|
get_following_ids
|
88
|
-
@logger.info
|
79
|
+
@logger.info(users)
|
89
80
|
users.each do |user|
|
90
81
|
id = user['from_user_id']
|
91
82
|
name = user['from_user']
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
@logger.info name
|
96
|
-
end
|
97
|
-
rescue Exception => msg
|
98
|
-
@logger.error "Error #{msg}"
|
83
|
+
if (not @followers_ids.include?(id)) and (not @following_ids.include?(id))
|
84
|
+
@client.follow(name)
|
85
|
+
@logger.info(name)
|
99
86
|
end
|
100
87
|
end
|
101
88
|
end
|
102
89
|
|
103
90
|
#unfollow who not following me
|
104
91
|
def unfollow_users
|
105
|
-
get_followers_ids
|
106
|
-
get_following_ids
|
107
|
-
|
108
|
-
unfollow_them = @following_ids - @followers_ids
|
92
|
+
unfollow_them = get_following_ids - get_followers_ids
|
109
93
|
unfollow_them.each do |id|
|
110
|
-
|
111
|
-
|
112
|
-
rescue
|
113
|
-
end
|
114
|
-
@logger.info id
|
94
|
+
@client.unfollow(id)
|
95
|
+
@logger.info(id)
|
115
96
|
end
|
116
97
|
end
|
117
98
|
|
118
99
|
protected
|
119
100
|
|
120
101
|
def init_db
|
121
|
-
@db
|
122
|
-
@db
|
102
|
+
@db ||= Robotwitter::Db.new('tweets', @path)
|
123
103
|
end
|
124
104
|
|
125
|
-
# get phrase
|
105
|
+
# get phrase from internal resource
|
126
106
|
def get_phrase
|
127
107
|
@getter.call(self)
|
128
108
|
rescue
|
129
109
|
""
|
130
110
|
end
|
131
111
|
|
132
|
-
#
|
112
|
+
# search for users tweets about
|
133
113
|
def search_users_tweets_about(word, count = 5)
|
134
|
-
|
135
|
-
if resp.is_a?(Twitter::Unauthorized)
|
136
|
-
@logger.error 'unauthorized'
|
137
|
-
return []
|
138
|
-
end
|
139
|
-
resp
|
114
|
+
@search_client.search(word, :locale => 'ru', :result_type => 'resent', :rpp => count)
|
140
115
|
end
|
141
116
|
|
142
117
|
# get follower ids
|
@@ -152,20 +127,19 @@ module Robotwitter
|
|
152
127
|
if @following_ids.nil?
|
153
128
|
@following_ids = @client.friend_ids['ids']
|
154
129
|
end
|
130
|
+
@following_ids
|
155
131
|
end
|
156
132
|
|
157
|
-
#
|
133
|
+
# retweet
|
158
134
|
# result - hash от поиска
|
159
135
|
def retweet(result)
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
@logger.error 'error: ' + desc.inspect
|
164
|
-
end
|
136
|
+
@client.retweet(result['id'])
|
137
|
+
rescue => detail
|
138
|
+
@logger.error(detail)
|
165
139
|
end
|
166
140
|
|
167
141
|
def rate_limit
|
168
|
-
@logger.error
|
142
|
+
@logger.error(@client.rate_limit_status.remaining_hits.to_s + ' Twitter API request(s) remaining this hour')
|
169
143
|
end
|
170
144
|
end
|
171
145
|
end
|
data/lib/robotwitter/db.rb
CHANGED
@@ -11,12 +11,12 @@ module Robotwitter
|
|
11
11
|
def create_db(name)
|
12
12
|
db = SQLite3::Database.new("#{name}.db")
|
13
13
|
|
14
|
-
sql =
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
SQL
|
14
|
+
sql = <<-SQL
|
15
|
+
create table #{TABLENAME} (
|
16
|
+
id integer PRIMARY KEY AUTOINCREMENT,
|
17
|
+
tweet_id string
|
18
|
+
);
|
19
|
+
SQL
|
20
20
|
|
21
21
|
db.execute_batch(sql)
|
22
22
|
end
|
@@ -36,7 +36,7 @@ SQL
|
|
36
36
|
# сохраняем ретвитт, чтобы не ретвиттить снова
|
37
37
|
# result - результат twitter.search
|
38
38
|
def save_retweet result
|
39
|
-
id = result['id_str']
|
39
|
+
id = result.attrs['id_str']
|
40
40
|
sql = "insert into #{TABLENAME} (tweet_id) values (#{id})"
|
41
41
|
@db.query(sql)
|
42
42
|
end
|
data/robotwitter.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = "robotwitter"
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
11
|
+
s.authors = ["Krivich Ekaterina"]
|
12
|
+
s.date = "2012-03-13"
|
13
|
+
s.description = "automate twitter tasks, such as retweetting, following, unfollowing"
|
14
|
+
s.email = "krivich.ekaterina@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.rdoc"
|
@@ -33,15 +33,11 @@ Gem::Specification.new do |s|
|
|
33
33
|
"spec/robotwitter/robotwitter_spec.rb",
|
34
34
|
"spec/spec_helper.rb"
|
35
35
|
]
|
36
|
-
s.homepage =
|
37
|
-
s.licenses = [
|
38
|
-
s.require_paths = [
|
39
|
-
s.rubygems_version =
|
40
|
-
s.summary =
|
41
|
-
s.test_files = [
|
42
|
-
"spec/robotwitter/robotwitter_spec.rb",
|
43
|
-
"spec/spec_helper.rb"
|
44
|
-
]
|
36
|
+
s.homepage = "http://github.com/kiote/robotwitter"
|
37
|
+
s.licenses = ["MIT"]
|
38
|
+
s.require_paths = ["lib"]
|
39
|
+
s.rubygems_version = "1.8.17"
|
40
|
+
s.summary = "automate some twitter tasks"
|
45
41
|
|
46
42
|
if s.respond_to? :specification_version then
|
47
43
|
s.specification_version = 3
|
@@ -50,27 +46,27 @@ Gem::Specification.new do |s|
|
|
50
46
|
s.add_runtime_dependency(%q<twitter>, [">= 0"])
|
51
47
|
s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
|
52
48
|
s.add_runtime_dependency(%q<fakeweb>, [">= 0"])
|
49
|
+
s.add_runtime_dependency(%q<minitest>, [">= 0"])
|
50
|
+
s.add_runtime_dependency(%q<pry>, [">= 0"])
|
53
51
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
54
|
-
s.add_development_dependency(%q<
|
55
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
56
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
52
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
57
53
|
else
|
58
54
|
s.add_dependency(%q<twitter>, [">= 0"])
|
59
55
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
60
56
|
s.add_dependency(%q<fakeweb>, [">= 0"])
|
57
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
58
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
61
59
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
62
|
-
s.add_dependency(%q<
|
63
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
64
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
60
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
65
61
|
end
|
66
62
|
else
|
67
63
|
s.add_dependency(%q<twitter>, [">= 0"])
|
68
64
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
69
65
|
s.add_dependency(%q<fakeweb>, [">= 0"])
|
66
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
67
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
70
68
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
71
|
-
s.add_dependency(%q<
|
72
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
73
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
69
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
74
70
|
end
|
75
71
|
end
|
76
72
|
|
@@ -1,60 +1,112 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH << File.expand_path('../../', __FILE__)
|
2
|
+
require 'spec_helper'
|
2
3
|
|
3
|
-
describe
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
:body => %|{"ids": [1,2,3]}|)
|
8
|
-
# GET https://api.twitter.com/1/friends/ids.json
|
9
|
-
FakeWeb.register_uri(:get, %r|https://api\.twitter\.com/1/friends/ids\.json|,
|
10
|
-
:body => %|{"ids": [1,2,3]}|)
|
11
|
-
# POST https://api.twitter.com/1/statuses/update.json
|
12
|
-
FakeWeb.register_uri(:post, %r|https://api\.twitter\.com/1/statuses/update\.json|,
|
13
|
-
:body => '')
|
14
|
-
# POST https://api.twitter.com/1/statuses/retweet/
|
15
|
-
FakeWeb.register_uri(:post, %r|https://api\.twitter\.com/1/statuses/retweet|,
|
16
|
-
:body => '')
|
4
|
+
describe Robotwitter do
|
5
|
+
def mock_client(object)
|
6
|
+
@mock = MiniTest::Mock.new
|
7
|
+
object.instance_variable_set(:@client, @mock)
|
17
8
|
end
|
18
9
|
|
19
|
-
|
20
|
-
|
10
|
+
def follower_and_friends
|
11
|
+
ids = [1,2,3,4]
|
12
|
+
@mock.expect(:follower_ids, 'ids' => ids)
|
13
|
+
@mock.expect(:friend_ids, 'ids' => [4,5,6,7,8])
|
14
|
+
ids
|
21
15
|
end
|
22
16
|
|
23
|
-
|
24
|
-
|
25
|
-
@client = Robotwitter::Robot.new @settings_path, 'test_login', &POSTER
|
17
|
+
def tweet_params
|
18
|
+
['id' => 'kolyan', 'from_user_id' => 'vasyan_id', 'from_user' => 'vasyan']
|
26
19
|
end
|
27
20
|
|
28
|
-
|
29
|
-
@
|
21
|
+
before do
|
22
|
+
@robotwitter = Robotwitter::Robot.new('', 'test_login') do
|
23
|
+
'hello'
|
24
|
+
end
|
25
|
+
mock_client(@robotwitter)
|
30
26
|
end
|
31
27
|
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
# мы фалловим 5 пользователей: [4,5,6,7,8]
|
29
|
+
# нас фалловят 4: [1,2,3,4]
|
30
|
+
# follow_all_back должна зафалловить 3х пользователей: [1,2,3]
|
31
|
+
describe 'follow_all_back' do
|
32
|
+
before do
|
33
|
+
ids = follower_and_friends
|
34
|
+
ids.pop
|
35
|
+
ids.each { |id| @mock.expect(:follow, [], [id]) }
|
36
|
+
end
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
+
it 'should follow those, who follows me' do
|
39
|
+
@robotwitter.follow_all_back
|
40
|
+
end
|
38
41
|
end
|
39
42
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
+
# тестируем отправку сообщений
|
44
|
+
# перед отправкой сообщение получается из внешнего источника
|
45
|
+
describe 'send_message' do
|
46
|
+
before do
|
47
|
+
@mock.expect(:update, nil, ['hello there'])
|
48
|
+
end
|
43
49
|
|
44
|
-
|
45
|
-
|
50
|
+
it 'should successfully sends message' do
|
51
|
+
@robotwitter.send_message('_msg_ there')
|
52
|
+
end
|
46
53
|
end
|
47
54
|
|
48
|
-
|
49
|
-
|
55
|
+
describe 'containing' do
|
56
|
+
# сначала мокаем search_client
|
57
|
+
# он вызывает кучу методов через method chaining и возвращает id твитта
|
58
|
+
before do
|
59
|
+
sk = MiniTest::Mock.new
|
60
|
+
sk.expect(:search, tweet_params, %w/hell/)
|
61
|
+
@robotwitter.instance_variable_set(:@search_client, sk)
|
62
|
+
end
|
63
|
+
|
64
|
+
# тестируем ретвит о каком-то слове
|
65
|
+
describe 'retweet_about' do
|
66
|
+
# мокаем сохраниение в базе
|
67
|
+
before do
|
68
|
+
db = MiniTest::Mock.new
|
69
|
+
db.expect(:nil?, false)
|
70
|
+
db.expect(:retweeted?, false, tweet_params)
|
71
|
+
db.expect(:save_retweet, false, tweet_params)
|
72
|
+
|
73
|
+
@robotwitter.instance_variable_set(:@db, db)
|
74
|
+
@mock.expect(:retweet, nil, %w/kolyan/)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should retweet' do
|
78
|
+
@robotwitter.retweet_about('hell')
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# тестируем фолловинг пользователей, которые пишут о...
|
83
|
+
describe 'follow_users_tweets_about' do
|
84
|
+
before do
|
85
|
+
follower_and_friends
|
86
|
+
@mock.expect(:follow, [], ['vasyan'])
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should follow users' do
|
90
|
+
@robotwitter.follow_users_tweets_about('hell')
|
91
|
+
end
|
92
|
+
end
|
50
93
|
end
|
51
94
|
|
52
|
-
|
53
|
-
|
54
|
-
|
95
|
+
# мы фалловим 5 пользователей: [4,5,6,7,8]
|
96
|
+
# нас фалловят 4: [1,2,3,4]
|
97
|
+
# follow_all_back должна отфалловить 3х пользователей: [1,2,3]
|
98
|
+
describe 'unfollow_users' do
|
99
|
+
before do
|
100
|
+
follower_and_friends
|
101
|
+
(1..3).to_a.map {|i| @mock.expect(:unfollow, [], [i])}
|
55
102
|
end
|
56
103
|
|
57
|
-
|
58
|
-
|
104
|
+
it 'should unfollow' do
|
105
|
+
@robotwitter.unfollow_users
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
after do
|
110
|
+
@mock.verify
|
59
111
|
end
|
60
112
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
2
|
+
require 'robotwitter'
|
3
|
+
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'minitest/mock'
|
6
|
+
require 'pry'
|
3
7
|
|
4
|
-
require 'twitter'
|
5
|
-
require 'rspec'
|
6
|
-
require 'fakeweb'
|
7
|
-
require 'robotwitter'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: robotwitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-03-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: twitter
|
16
|
-
requirement: &
|
16
|
+
requirement: &70334826215500 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70334826215500
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &70334826214720 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70334826214720
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: fakeweb
|
38
|
-
requirement: &
|
38
|
+
requirement: &70334826214180 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,43 +43,43 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70334826214180
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement: &
|
48
|
+
name: minitest
|
49
|
+
requirement: &70334826211800 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
type: :
|
55
|
+
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70334826211800
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
requirement: &
|
59
|
+
name: pry
|
60
|
+
requirement: &70334826210940 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
|
-
- -
|
63
|
+
- - ! '>='
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version:
|
66
|
-
type: :
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70334826210940
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
71
|
-
requirement: &
|
70
|
+
name: shoulda
|
71
|
+
requirement: &70334826188940 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ! '>='
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70334826188940
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
|
-
name:
|
82
|
-
requirement: &
|
81
|
+
name: jeweler
|
82
|
+
requirement: &70334826187180 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70334826187180
|
91
91
|
description: automate twitter tasks, such as retweetting, following, unfollowing
|
92
92
|
email: krivich.ekaterina@gmail.com
|
93
93
|
executables: []
|
@@ -126,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
126
|
version: '0'
|
127
127
|
segments:
|
128
128
|
- 0
|
129
|
-
hash:
|
129
|
+
hash: 1002785137624157305
|
130
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
131
|
none: false
|
132
132
|
requirements:
|
@@ -135,10 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
135
|
version: '0'
|
136
136
|
requirements: []
|
137
137
|
rubyforge_project:
|
138
|
-
rubygems_version: 1.8.
|
138
|
+
rubygems_version: 1.8.17
|
139
139
|
signing_key:
|
140
140
|
specification_version: 3
|
141
141
|
summary: automate some twitter tasks
|
142
|
-
test_files:
|
143
|
-
- spec/robotwitter/robotwitter_spec.rb
|
144
|
-
- spec/spec_helper.rb
|
142
|
+
test_files: []
|