rbitter 0.0.8 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +21 -21
- data/.rspec +2 -2
- data/.travis.yml +15 -9
- data/Gemfile +12 -11
- data/LICENSE.txt +22 -22
- data/README.md +23 -16
- data/Rakefile +8 -8
- data/XMLRPC.md +19 -19
- data/bin/rbitter +20 -6
- data/lib/rbitter/arcserver.rb +126 -97
- data/lib/rbitter/console.rb +93 -61
- data/lib/rbitter/default/config_json.rb +38 -37
- data/lib/rbitter/dlthread.rb +66 -66
- data/lib/rbitter/env.rb +62 -59
- data/lib/rbitter/libtwitter_connection_override.rb +45 -45
- data/lib/rbitter/records.rb +121 -109
- data/lib/rbitter/records_migrate/20150327_add_index.rb +11 -7
- data/lib/rbitter/records_migrate/20150504_add_replyto_column.rb +12 -0
- data/lib/rbitter/streaming.rb +104 -75
- data/lib/rbitter/version.rb +20 -3
- data/lib/rbitter/xmlrpc.rb +3 -3
- data/lib/rbitter/xmlrpcd/base.rb +24 -24
- data/lib/rbitter/xmlrpcd/rpchandles.rb +11 -11
- data/lib/rbitter/xmlrpcd/xmlrpc_auth_server.rb +82 -83
- data/lib/rbitter/xmlrpcd/xmlrpcd.rb +69 -63
- data/lib/rbitter.rb +86 -92
- data/rbitter.gemspec +42 -42
- data/spec/config/default.json +32 -32
- data/spec/rbitter/arcserver_spec.rb +30 -9
- data/spec/rbitter/console_spec.rb +9 -9
- data/spec/rbitter/default/config_json_spec.rb +3 -3
- data/spec/rbitter/dlthread_spec.rb +13 -9
- data/spec/rbitter/env_spec.rb +62 -56
- data/spec/rbitter/libtwitter_connection_override_spec.rb +8 -8
- data/spec/rbitter/records_spec.rb +13 -13
- data/spec/rbitter/streaming_spec.rb +9 -9
- data/spec/rbitter/version_spec.rb +8 -8
- data/spec/rbitter/xmlrpc_spec.rb +8 -8
- data/spec/rbitter/xmlrpcd/base_spec.rb +29 -29
- data/spec/rbitter/xmlrpcd/rpchandles_spec.rb +10 -10
- data/spec/rbitter/xmlrpcd/xmlrpc_auth_server_spec.rb +8 -8
- data/spec/rbitter/xmlrpcd/xmlrpcd_spec.rb +9 -9
- data/spec/rbitter_spec.rb +42 -46
- data/spec/spec_helper.rb +39 -36
- metadata +68 -41
- data/config.json.example +0 -30
@@ -1,84 +1,83 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
|
4
|
-
require "rbitter/xmlrpcd/
|
5
|
-
require "
|
6
|
-
require "
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
next unless
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
#
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
and request.cookies[0].
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
response
|
79
|
-
response['Content-
|
80
|
-
response
|
81
|
-
|
82
|
-
|
83
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "rbitter/xmlrpcd/rpchandles"
|
4
|
+
require "rbitter/xmlrpcd/base"
|
5
|
+
require "xmlrpc/server"
|
6
|
+
require "webrick"
|
7
|
+
|
8
|
+
module XMLRPC
|
9
|
+
class HTTPAuthXMLRPCServer < XMLRPC::WEBrickServlet
|
10
|
+
def extract_method(methodname, *args)
|
11
|
+
for name, obj in @handler
|
12
|
+
if obj.kind_of? Proc
|
13
|
+
next unless methodname == name
|
14
|
+
else
|
15
|
+
next unless methodname =~ /^#{name}(.+)$/
|
16
|
+
next unless obj.respond_to? $1
|
17
|
+
return obj.method($1)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def service(request, response)
|
24
|
+
# Taken from xmlrpc/server.rb
|
25
|
+
if @valid_ip
|
26
|
+
raise WEBrick::HTTPStatus::Forbidden unless @valid_ip.any? { |ip| request.peeraddr[3] =~ ip }
|
27
|
+
end
|
28
|
+
|
29
|
+
if request.request_method != "POST"
|
30
|
+
raise WEBrick::HTTPStatus::MethodNotAllowed,
|
31
|
+
"unsupported method `#{request.request_method}'."
|
32
|
+
end
|
33
|
+
|
34
|
+
if parse_content_type(request['Content-type']).first != "text/xml"
|
35
|
+
raise WEBrick::HTTPStatus::BadRequest
|
36
|
+
end
|
37
|
+
|
38
|
+
length = (request['Content-length'] || 0).to_i
|
39
|
+
|
40
|
+
raise WEBrick::HTTPStatus::LengthRequired unless length > 0
|
41
|
+
|
42
|
+
data = request.body
|
43
|
+
|
44
|
+
if data.nil? or data.bytesize != length
|
45
|
+
raise WEBrick::HTTPStatus::BadRequest
|
46
|
+
end
|
47
|
+
|
48
|
+
# Originally, process(data) was here.
|
49
|
+
# We need to check whether a method requires authorization.
|
50
|
+
rpc_method_name, rpc_params = parser().parseMethodCall(data)
|
51
|
+
rpc_method = extract_method(rpc_method_name)
|
52
|
+
|
53
|
+
if RPCHandles.auth.nil?
|
54
|
+
resp = handle(rpc_method_name, *rpc_params)
|
55
|
+
else
|
56
|
+
if rpc_method.owner.ancestors.include?(RPCHandles::BaseHandle::Auth)
|
57
|
+
# Check cookie and check it's valid
|
58
|
+
if request.cookies.size == 1 \
|
59
|
+
and request.cookies[0].name == "auth_key" \
|
60
|
+
and RPCHandles.auth.include?(request.cookies[0].value)
|
61
|
+
resp = handle(rpc_method_name, *rpc_params)
|
62
|
+
else
|
63
|
+
# Permission required
|
64
|
+
raise WEBrick::HTTPStatus::Forbidden
|
65
|
+
end
|
66
|
+
elsif rpc_method.owner.ancestors.include?(RPCHandles::BaseHandle::NoAuth)
|
67
|
+
resp = handle(rpc_method_name, *rpc_params)
|
68
|
+
else
|
69
|
+
raise WEBrick::HTTPStatus::Forbidden
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
if resp.nil? or resp.bytesize <= 0
|
74
|
+
raise WEBrick::HTTPStatus::InternalServerError
|
75
|
+
end
|
76
|
+
|
77
|
+
response.status = 200
|
78
|
+
response['Content-Length'] = resp.bytesize
|
79
|
+
response['Content-Type'] = "text/xml; charset=utf-8"
|
80
|
+
response.body = resp
|
81
|
+
end
|
82
|
+
end
|
84
83
|
end
|
@@ -1,63 +1,69 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require "rbitter/xmlrpcd/rpchandles"
|
4
|
-
require "rbitter/xmlrpcd/xmlrpc_auth_server"
|
5
|
-
require "webrick"
|
6
|
-
|
7
|
-
module Rbitter
|
8
|
-
RPC_PREFIX="rbitter"
|
9
|
-
|
10
|
-
class RPCServer
|
11
|
-
def initialize bind_host, bind_port
|
12
|
-
@server = WEBrick::HTTPServer.new(:Port => bind_port.to_i, :BindAddress => bind_host.to_s, :MaxClients => 4, :Logger => WEBrick::Log.new($stdout))
|
13
|
-
@core = XMLRPC::HTTPAuthXMLRPCServer.new
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
fname
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
#
|
31
|
-
puts
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
@server.mount("/", @core)
|
52
|
-
@server.start
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "rbitter/xmlrpcd/rpchandles"
|
4
|
+
require "rbitter/xmlrpcd/xmlrpc_auth_server"
|
5
|
+
require "webrick"
|
6
|
+
|
7
|
+
module Rbitter
|
8
|
+
RPC_PREFIX="rbitter"
|
9
|
+
|
10
|
+
class RPCServer
|
11
|
+
def initialize bind_host, bind_port
|
12
|
+
@server = WEBrick::HTTPServer.new(:Port => bind_port.to_i, :BindAddress => bind_host.to_s, :MaxClients => 4, :Logger => WEBrick::Log.new($stdout))
|
13
|
+
@core = XMLRPC::HTTPAuthXMLRPCServer.new
|
14
|
+
@core.set_default_handler { |name, *args|
|
15
|
+
"NO_COMMAND: #{name} with args #{args.inspect}"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def load_all_handles
|
20
|
+
Rbitter["xmlrpc"]["handles"].each { |path|
|
21
|
+
puts "[xmlrpc] Scanning handles from (#{path})"
|
22
|
+
Dir.entries(path).each { |fname|
|
23
|
+
fname = File.join(path, fname)
|
24
|
+
if File.exist?(fname) and File.file?(fname)
|
25
|
+
if fname.match(/rh_\w+\.rb$/)
|
26
|
+
begin
|
27
|
+
load fname
|
28
|
+
rescue Exception => e
|
29
|
+
# stub
|
30
|
+
puts "Exception while loading #{fname}"
|
31
|
+
puts e.inspect
|
32
|
+
end
|
33
|
+
else
|
34
|
+
puts "Ignored: #{fname}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
puts "[xmlrpc] found #{RPCHandles.constants.length} constants."
|
41
|
+
RPCHandles.constants.each { |handler|
|
42
|
+
if RPCHandles.const_get(handler).is_a?(Class)
|
43
|
+
@core.add_handler(RPC_PREFIX, RPCHandles.const_get(handler).new)
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def main_loop
|
49
|
+
load_all_handles
|
50
|
+
|
51
|
+
@server.mount("/", @core)
|
52
|
+
@server.start
|
53
|
+
|
54
|
+
puts "[xmlrpc] XMLRPC started"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class DummyRPCServer
|
59
|
+
def initialize bind_host, bind_port; end
|
60
|
+
|
61
|
+
def load_all_handles; end
|
62
|
+
|
63
|
+
def main_loop
|
64
|
+
puts "[xmlrpc] DummyRPCServer started"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class NullRPCServer; end
|
69
|
+
end
|
data/lib/rbitter.rb
CHANGED
@@ -1,92 +1,86 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
#
|
3
|
-
|
4
|
-
require "rbitter/version"
|
5
|
-
require "rbitter/arcserver"
|
6
|
-
require "rbitter/env"
|
7
|
-
require "rbitter/console"
|
8
|
-
require "rbitter/xmlrpc"
|
9
|
-
|
10
|
-
module Rbitter
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
puts "
|
19
|
-
puts "
|
20
|
-
puts "
|
21
|
-
puts "
|
22
|
-
puts "|-
|
23
|
-
puts "|-
|
24
|
-
puts "
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
warn "[rbitter]
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
elsif args[0] == "
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
else
|
88
|
-
rbitter_header
|
89
|
-
rbitter_help_msg
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
|
4
|
+
require "rbitter/version"
|
5
|
+
require "rbitter/arcserver"
|
6
|
+
require "rbitter/env"
|
7
|
+
require "rbitter/console"
|
8
|
+
require "rbitter/xmlrpc"
|
9
|
+
|
10
|
+
module Rbitter
|
11
|
+
BOOTSTRAP_ARGS = ['configure', 'console', 'help', 'logs', 'serve']
|
12
|
+
|
13
|
+
def self.rbitter_header
|
14
|
+
puts "Rbitter #{VERSION} on #{RUBY_VERSION} (#{RUBY_PLATFORM})"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.rbitter_help_msg
|
18
|
+
puts "Rbitter is a Twitter streaming archiver, with XMLRPC access."
|
19
|
+
puts "-------"
|
20
|
+
puts "Usage: rbitter (application-mode)"
|
21
|
+
puts "application-mode's are:"
|
22
|
+
puts "|- serve : Launch Rbitter full system (Streaming + Database + XMLRPC)"
|
23
|
+
puts "|- console : Launch console application utilizing XMLRPC"
|
24
|
+
puts "|- configure: Write default configuration file 'config.json' in current folder"
|
25
|
+
puts "|- help : Show this message"
|
26
|
+
puts "`- logs : Show Rbitter internal logs"
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.prebootstrap
|
30
|
+
# Due to stalled socket problem, If unpatched twitter gem is installed.
|
31
|
+
# Twitter::Streaming::Connection will be monkey-patched.
|
32
|
+
patch_required = false
|
33
|
+
|
34
|
+
if Twitter::Version.const_defined?(:MAJOR)
|
35
|
+
b5_version = Twitter::Version::MAJOR * 10000
|
36
|
+
+ Twitter::Version::MINOR * 100 + Twitter::Version::PATCH
|
37
|
+
if b5_version <= 51400
|
38
|
+
warn "[rbitter] Monkey-patching Twitter::Streaming::Connection"
|
39
|
+
warn "[rbitter] Please upgrade twitter gem to apply streaming read timeout"
|
40
|
+
patch_required = true
|
41
|
+
end
|
42
|
+
else
|
43
|
+
b6_version = Twitter::Version.to_a
|
44
|
+
if b6_version[0] <= 6 and b6_version[1] <= 0 and b6_version[2] <= 0
|
45
|
+
patch_required = true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
require "rbitter/libtwitter_connection_override" if patch_required
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.bootstrap_configs
|
53
|
+
require "rbitter/default/config_json"
|
54
|
+
|
55
|
+
open(File.join(Dir.pwd, "config.json"), "w") { |io|
|
56
|
+
io.write(DEFAULT_CONFIG_JSON)
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.bootstrap args=[]
|
61
|
+
return nil if args.length < 1
|
62
|
+
|
63
|
+
if args[0] == "serve"
|
64
|
+
prebootstrap
|
65
|
+
|
66
|
+
Rbitter.config_initialize
|
67
|
+
|
68
|
+
archive_server = Rbitter::ArcServer.new
|
69
|
+
archive_server.main_loop
|
70
|
+
elsif args[0] == "help"
|
71
|
+
rbitter_help_msg
|
72
|
+
elsif args[0] == "configure"
|
73
|
+
bootstrap_configs
|
74
|
+
elsif args[0] == "console"
|
75
|
+
Rbitter.config_initialize
|
76
|
+
|
77
|
+
con = Rbitter::Console.new
|
78
|
+
con.start
|
79
|
+
elsif args[0] == "logs"
|
80
|
+
# show log in stdout
|
81
|
+
puts "Log buffer feature is in heavy development. Sorry."
|
82
|
+
else
|
83
|
+
fail StandardError, "Invalid bootstrap parameter: #{args[0]}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/rbitter.gemspec
CHANGED
@@ -1,42 +1,42 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
lib = File.expand_path('../lib', __FILE__)
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require 'rbitter/version'
|
6
|
-
|
7
|
-
Gem::Specification.new do |spec|
|
8
|
-
spec.name = "rbitter"
|
9
|
-
spec.version = Rbitter::VERSION
|
10
|
-
spec.authors = ["Nidev Plontra"]
|
11
|
-
spec.email = ["nidev.plontra@gmail.com"]
|
12
|
-
spec.summary = %q{Rbitter is a Twitter client specialized in archiving}
|
13
|
-
spec.description = %q{Rbitter archives all tweets appeared on user streaming using ActiveRecord. XMLRPC is used to serve archived tweets and useful features}
|
14
|
-
spec.homepage = "https://github.com/nidev/rbitter"
|
15
|
-
spec.license = "MIT"
|
16
|
-
|
17
|
-
spec.files = `git ls-files -z`.split("\x0")
|
18
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
-
spec.require_paths = ["lib"]
|
21
|
-
|
22
|
-
|
23
|
-
spec.add_dependency 'twitter', '~> 5.14'
|
24
|
-
spec.add_dependency 'json', '~> 1.7'
|
25
|
-
spec.add_dependency 'ripl', '~> 0'
|
26
|
-
spec.add_dependency 'activerecord', '~> 4.0'
|
27
|
-
|
28
|
-
if RUBY_PLATFORM == 'java'
|
29
|
-
spec.add_dependency 'activerecord-jdbc-adapter', '~> 1.3'
|
30
|
-
spec.add_dependency 'jdbc-sqlite3', '~> 3.8'
|
31
|
-
spec.add_dependency 'jdbc-mysql', '~> 5.1'
|
32
|
-
spec.add_dependency 'activerecord-jdbcsqlite3-adapter', '~> 1.3'
|
33
|
-
spec.add_dependency 'activerecord-jdbcmysql-adapter', '~> 1.3'
|
34
|
-
else
|
35
|
-
spec.add_dependency 'sqlite3', '~> 1.3'
|
36
|
-
spec.add_dependency 'mysql2', '~> 0.3'
|
37
|
-
spec.add_dependency 'activerecord-mysql2-adapter', '~> 0.0.3'
|
38
|
-
end
|
39
|
-
|
40
|
-
spec.add_development_dependency "bundler", "~> 1.6"
|
41
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
42
|
-
end
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'rbitter/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = "rbitter"
|
9
|
+
spec.version = Rbitter::VERSION
|
10
|
+
spec.authors = ["Nidev Plontra"]
|
11
|
+
spec.email = ["nidev.plontra@gmail.com"]
|
12
|
+
spec.summary = %q{Rbitter is a Twitter client specialized in archiving}
|
13
|
+
spec.description = %q{Rbitter archives all tweets appeared on user streaming using ActiveRecord. XMLRPC is used to serve archived tweets and useful features}
|
14
|
+
spec.homepage = "https://github.com/nidev/rbitter"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
|
23
|
+
spec.add_dependency 'twitter', '~> 5.14'
|
24
|
+
spec.add_dependency 'json', '~> 1.7'
|
25
|
+
spec.add_dependency 'ripl', '~> 0.7'
|
26
|
+
spec.add_dependency 'activerecord', '~> 4.0'
|
27
|
+
|
28
|
+
if RUBY_PLATFORM == 'java'
|
29
|
+
spec.add_dependency 'activerecord-jdbc-adapter', '~> 1.3'
|
30
|
+
spec.add_dependency 'jdbc-sqlite3', '~> 3.8'
|
31
|
+
spec.add_dependency 'jdbc-mysql', '~> 5.1'
|
32
|
+
spec.add_dependency 'activerecord-jdbcsqlite3-adapter', '~> 1.3'
|
33
|
+
spec.add_dependency 'activerecord-jdbcmysql-adapter', '~> 1.3'
|
34
|
+
else
|
35
|
+
spec.add_dependency 'sqlite3', '~> 1.3'
|
36
|
+
spec.add_dependency 'mysql2', '~> 0.3'
|
37
|
+
spec.add_dependency 'activerecord-mysql2-adapter', '~> 0.0.3'
|
38
|
+
end
|
39
|
+
|
40
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
41
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
42
|
+
end
|
data/spec/config/default.json
CHANGED
@@ -1,33 +1,33 @@
|
|
1
|
-
{
|
2
|
-
"twitter": {
|
3
|
-
"consumer_key": "",
|
4
|
-
"consumer_secret": "",
|
5
|
-
"access_token": "",
|
6
|
-
"access_token_secret": ""
|
7
|
-
},
|
8
|
-
"activerecord": "sqlite3",
|
9
|
-
"sqlite3": {
|
10
|
-
"dbfile": "rbitter.sqlite"
|
11
|
-
},
|
12
|
-
"mysql2": {
|
13
|
-
"host": "localhost",
|
14
|
-
"port": 3306,
|
15
|
-
"dbname": "archive",
|
16
|
-
"username": "",
|
17
|
-
"password": ""
|
18
|
-
},
|
19
|
-
"media_downloader": {
|
20
|
-
"cacert_path": "/cacerts/cacert.pem",
|
21
|
-
"download_dir": "imgs/"
|
22
|
-
},
|
23
|
-
"xmlrpc": {
|
24
|
-
"enable": true,
|
25
|
-
"bind_host": "0.0.0.0",
|
26
|
-
"bind_port": 1400,
|
27
|
-
"auth": {
|
28
|
-
"username": "username",
|
29
|
-
"password": "password"
|
30
|
-
},
|
31
|
-
"handles": ["/path/to/handles"]
|
32
|
-
}
|
1
|
+
{
|
2
|
+
"twitter": {
|
3
|
+
"consumer_key": "",
|
4
|
+
"consumer_secret": "",
|
5
|
+
"access_token": "",
|
6
|
+
"access_token_secret": ""
|
7
|
+
},
|
8
|
+
"activerecord": "sqlite3",
|
9
|
+
"sqlite3": {
|
10
|
+
"dbfile": "rbitter.sqlite"
|
11
|
+
},
|
12
|
+
"mysql2": {
|
13
|
+
"host": "localhost",
|
14
|
+
"port": 3306,
|
15
|
+
"dbname": "archive",
|
16
|
+
"username": "",
|
17
|
+
"password": ""
|
18
|
+
},
|
19
|
+
"media_downloader": {
|
20
|
+
"cacert_path": "/cacerts/cacert.pem",
|
21
|
+
"download_dir": "imgs/"
|
22
|
+
},
|
23
|
+
"xmlrpc": {
|
24
|
+
"enable": true,
|
25
|
+
"bind_host": "0.0.0.0",
|
26
|
+
"bind_port": 1400,
|
27
|
+
"auth": {
|
28
|
+
"username": "username",
|
29
|
+
"password": "password"
|
30
|
+
},
|
31
|
+
"handles": ["/path/to/handles"]
|
32
|
+
}
|
33
33
|
}
|