rbitter 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f7b80e94710352473dc6934be1af715dd8be3ff
4
- data.tar.gz: 6a9cf2305b5d255311a8b6d83f660b1e3fd38a8e
3
+ metadata.gz: 7e12755836fb33a945c9f9e6c48dc911fc7ac1a5
4
+ data.tar.gz: 15d8892a885d452f71fa90c58a018693e7c582f9
5
5
  SHA512:
6
- metadata.gz: d78351f985d2aba67be9fcb1c2b5b4cdb168bee90b7b294b4606914731029dd3f48b253978f8d3b3760bab96025428e7a3d8f8b414b3a4b6379f544a90153460
7
- data.tar.gz: a1c84643f11a6964e070ffe52964aafb8c577ed550601434a473332441dc16596565735ca784eff921bc94adfa66bf07aaba9cc7a027cb2d566d07e00e2ea3b9
6
+ metadata.gz: d8ae6dc9b1dfab693a6dedc5bb1eefb6d6e0c1c8ec4455abfbd2cf4f0fc8c365ffa172e76f59496aef7cd6e802f5945d308532460512251662568055d08b0265
7
+ data.tar.gz: 88992b4711bffd9e80aafbd01b3d98a7ff13c0ddec852380544f939b636a64ecf5c7929284066a26814c9471b0fd51d5eb9b30d5d032f8f4ae573d17538e2c51
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ mkmf.log
20
20
  *.png
21
21
  .rbitter
22
22
  .rbitter/*
23
+ .ruby-version
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  group :test do
4
- gem 'rspec', '~>3.0'
5
4
  gem 'simplecov', :require => false, :group => :test
6
5
  gem 'coveralls', :require => false
7
6
  end
@@ -114,6 +114,7 @@ module Rbitter
114
114
 
115
115
  streaming_adapter.new(Rbitter['twitter']).run { |a|
116
116
  @dt << a['media_urls']
117
+ draw "[rbitter] saving @#{a['screen_name']}:#{a['tweetid']}"
117
118
 
118
119
  record = Record.find_or_initialize_by(tweetid: a['tweetid'])
119
120
  record.update({:marker => 0,
@@ -128,7 +129,7 @@ module Rbitter
128
129
  :fav_count => a['fav_count']})
129
130
 
130
131
  record.save
131
- draw "[rbitter] saving tweet: #{a['tweetid']}"
132
+ draw "[rbitter] saved @#{a['screen_name']}:#{a['tweetid']}"
132
133
  }
133
134
  rescue Interrupt => e
134
135
  puts ""
@@ -146,7 +147,7 @@ module Rbitter
146
147
 
147
148
  retry if resurrect_loop?
148
149
  rescue Resolv::ResolvError, Errno::ECONNABORTED,
149
- Errno::ECONNREFUSED, Errno::ECONNRESET => e
150
+ Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::ETIMEDOUT => e
150
151
  puts "Network problem. Retry in 5 seconds..."
151
152
  mark_error(e.to_s, "(retry) Network problem")
152
153
 
@@ -5,6 +5,8 @@ require "openssl"
5
5
 
6
6
  module Rbitter
7
7
  class DLThread
8
+ MAX_THREADS = 20
9
+
8
10
  def initialize(dlfolder, large_flag)
9
11
  @dest = dlfolder
10
12
  if not File.directory?(dlfolder)
@@ -23,27 +25,34 @@ module Rbitter
23
25
  end
24
26
 
25
27
  def <<(url_array)
26
- download_task = Thread.new {
28
+ if @pool.length >= MAX_THREADS
29
+ job_cleanup
30
+ end
31
+
32
+ download_task = Thread.new do
27
33
  url_array.each { |url|
28
34
  uri = URI.parse(@large_image ? url + ":large" : url)
29
- ssl = uri.scheme.downcase == 'https'
30
-
31
- Net::HTTP.start(uri.host, uri.port, :use_ssl => ssl) { |h|
32
- req = Net::HTTP::Get.new uri.request_uri
33
- h.request(req) { |res|
34
- case res
35
- when Net::HTTPOK
36
- fname = File.basename(url)
37
-
38
- puts "[fetch] remote: #{uri.path} => local: #{fname}"
39
- open(File.join(@dest, fname), "wb") { |file|
40
- res.read_body { |chunk| file.write(chunk) }
41
- }
42
- end
35
+
36
+ begin
37
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme.downcase == 'https') { |h|
38
+ req = Net::HTTP::Get.new uri.request_uri
39
+ h.request(req) { |res|
40
+ case res
41
+ when Net::HTTPOK
42
+ fname = File.basename(url)
43
+
44
+ puts "[fetch] remote: #{uri.path} => local: #{fname}"
45
+ open(File.join(@dest, fname), "wb") { |file|
46
+ res.read_body { |chunk| file.write(chunk) }
47
+ }
48
+ end
49
+ }
43
50
  }
44
- }
51
+ rescue => e
52
+ puts "[dlthread] exception from thread -> #{e.to_s}"
53
+ end
45
54
  }
46
- }
55
+ end
47
56
 
48
57
  @pool.push download_task
49
58
  end
@@ -52,12 +61,10 @@ module Rbitter
52
61
  until @pool.empty?
53
62
  dlthrd = @pool.shift
54
63
 
55
- if dlthrd.alive?
56
- puts "[dlthread] Thread forceful cleaning up [remains: #{@pool.length}]"
57
- dlthrd.terminate
58
- dlthrd.join
64
+ if dlthrd.join(5).nil?
65
+ puts "[dlthread] #{dlthrd.to_s} is still running. (timeout: 5sec)"
59
66
  end
60
67
  end
61
68
  end
62
69
  end
63
- end
70
+ end
data/lib/rbitter/env.rb CHANGED
@@ -63,7 +63,7 @@ module Rbitter
63
63
  # Level: warning since it is not utilized at all.
64
64
  currents.each { |conf|
65
65
  unless defaults.include?(conf)
66
- warn "[config.json] Unused config: #{conf}. You can safely remove it."
66
+ warn "[config.json] Unsupported field: #{conf}"
67
67
  end
68
68
  }
69
69
 
@@ -71,7 +71,7 @@ module Rbitter
71
71
  # Level: error and program should stop. (return false for this)
72
72
  defaults.each { |conf|
73
73
  unless currents.include?(conf)
74
- warn "[config.json] Config not found: #{conf}. Invalid configuration!"
74
+ warn "[config.json] Error! Missing field: #{conf}"
75
75
  not_errored = false
76
76
  end
77
77
  }
@@ -88,9 +88,9 @@ module Rbitter
88
88
  }
89
89
 
90
90
  return @@env if env_valid?
91
- fail StandardError, "Invalid configuration"
91
+ fail StandardError, "Void configuration. Maybe failure on load?"
92
92
  rescue => e
93
- fail ConfigFileError, "Load Failure (#{json_path}): #{e.to_s}"
93
+ fail ConfigFileError, "Config error on (#{json_path}): #{e.to_s}"
94
94
  end
95
95
  end
96
96
 
@@ -111,6 +111,6 @@ module Rbitter
111
111
  fail ConfigFileError, "No config.json on #{locations.join(' or ')}" if @@env.empty?
112
112
  fail ConfigFileError, "Configuration outdated. Please see above messages to update it" if not env_valid?
113
113
 
114
- puts "[config.json] Loaded configuration is valid. good to go!"
114
+ puts "[config.json] JSON data structure is safe to go."
115
115
  end
116
116
  end
@@ -10,7 +10,10 @@ module Rbitter
10
10
  def draw sentence
11
11
  $> << sentence
12
12
  if sentence.length < @@last_draw
13
- $> << " "*(@@last_draw - sentence.length)
13
+ clear_char_len = @@last_draw - sentence.length
14
+ clear_char_len.times {
15
+ $> << " "
16
+ }
14
17
  end
15
18
  @@last_draw = sentence.length
16
19
  putback
@@ -47,7 +47,10 @@ module ARSupport
47
47
  timeout: 10000) # Long timeout for slow computer
48
48
  end
49
49
  elsif Rbitter['activerecord'] == 'mysql2'
50
- Jdbc::MySQL.load_driver if RUBY_PLATFORM == 'java'
50
+ if RUBY_PLATFORM == 'java'
51
+ require 'jdbc/mysql'
52
+ Jdbc::MySQL.load_driver
53
+ end
51
54
 
52
55
  ActiveRecord::Base.establish_connection(
53
56
  adapter: (RUBY_PLATFORM == 'java' ? 'jdbcmysql' : 'mysql2'),
@@ -1,6 +1,6 @@
1
1
  module Rbitter
2
2
  PRODUCT_NAME = "Rbitter"
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.3"
4
4
 
5
5
  def major
6
6
  VERSION.match(/^([0-9]+)\./)[1]
data/rbitter.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'twitter', '~> 5.14'
24
24
  spec.add_dependency 'json', '~> 1.7'
25
25
  spec.add_dependency 'ripl', '~> 0.7'
26
- spec.add_dependency 'activerecord', '~> 4.0'
26
+ spec.add_dependency 'activerecord', '~> 4.2'
27
27
 
28
28
  if RUBY_PLATFORM == 'java'
29
29
  spec.platform = 'java'
@@ -38,9 +38,9 @@ Gem::Specification.new do |spec|
38
38
 
39
39
  spec.add_dependency 'sqlite3', '~> 1.3'
40
40
  spec.add_dependency 'mysql2', '~> 0.3'
41
- spec.add_dependency 'activerecord-mysql2-adapter', '~> 0.0.3'
42
41
  end
43
42
 
44
43
  spec.add_development_dependency "bundler", "~> 1.6"
45
44
  spec.add_development_dependency "rake", "~> 10.0"
45
+ spec.add_development_dependency "rspec", "~> 3.3"
46
46
  end
metadata CHANGED
@@ -1,24 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nidev Plontra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-07 00:00:00.000000000 Z
11
+ date: 2015-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: twitter
15
- prerelease: false
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
17
  - - "~>"
19
18
  - !ruby/object:Gem::Version
20
19
  version: '5.14'
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
@@ -26,13 +26,13 @@ dependencies:
26
26
  version: '5.14'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
- prerelease: false
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - "~>"
33
32
  - !ruby/object:Gem::Version
34
33
  version: '1.7'
35
34
  type: :runtime
35
+ prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
@@ -40,13 +40,13 @@ dependencies:
40
40
  version: '1.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ripl
43
- prerelease: false
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
45
  - - "~>"
47
46
  - !ruby/object:Gem::Version
48
47
  version: '0.7'
49
48
  type: :runtime
49
+ prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
@@ -54,27 +54,27 @@ dependencies:
54
54
  version: '0.7'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activerecord
57
- prerelease: false
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
59
  - - "~>"
61
60
  - !ruby/object:Gem::Version
62
- version: '4.0'
61
+ version: '4.2'
63
62
  type: :runtime
63
+ prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '4.0'
68
+ version: '4.2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
- prerelease: false
72
71
  requirement: !ruby/object:Gem::Requirement
73
72
  requirements:
74
73
  - - "~>"
75
74
  - !ruby/object:Gem::Version
76
75
  version: '1.3'
77
76
  type: :runtime
77
+ prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
@@ -82,60 +82,60 @@ dependencies:
82
82
  version: '1.3'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: mysql2
85
- prerelease: false
86
85
  requirement: !ruby/object:Gem::Requirement
87
86
  requirements:
88
87
  - - "~>"
89
88
  - !ruby/object:Gem::Version
90
89
  version: '0.3'
91
90
  type: :runtime
91
+ prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.3'
97
97
  - !ruby/object:Gem::Dependency
98
- name: activerecord-mysql2-adapter
99
- prerelease: false
98
+ name: bundler
100
99
  requirement: !ruby/object:Gem::Requirement
101
100
  requirements:
102
101
  - - "~>"
103
102
  - !ruby/object:Gem::Version
104
- version: 0.0.3
105
- type: :runtime
103
+ version: '1.6'
104
+ type: :development
105
+ prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.0.3
110
+ version: '1.6'
111
111
  - !ruby/object:Gem::Dependency
112
- name: bundler
113
- prerelease: false
112
+ name: rake
114
113
  requirement: !ruby/object:Gem::Requirement
115
114
  requirements:
116
115
  - - "~>"
117
116
  - !ruby/object:Gem::Version
118
- version: '1.6'
117
+ version: '10.0'
119
118
  type: :development
119
+ prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '1.6'
124
+ version: '10.0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: rake
127
- prerelease: false
126
+ name: rspec
128
127
  requirement: !ruby/object:Gem::Requirement
129
128
  requirements:
130
129
  - - "~>"
131
130
  - !ruby/object:Gem::Version
132
- version: '10.0'
131
+ version: '3.3'
133
132
  type: :development
133
+ prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '10.0'
138
+ version: '3.3'
139
139
  description: Rbitter archives all tweets appeared on user streaming using ActiveRecord.
140
140
  XMLRPC is used to serve archived tweets and useful features
141
141
  email:
@@ -216,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
216
  version: '0'
217
217
  requirements: []
218
218
  rubyforge_project:
219
- rubygems_version: 2.4.6
219
+ rubygems_version: 2.4.5.1
220
220
  signing_key:
221
221
  specification_version: 4
222
222
  summary: Rbitter is a Twitter client specialized in archiving