rbitter 0.0.8 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +21 -21
  3. data/.rspec +2 -2
  4. data/.travis.yml +15 -9
  5. data/Gemfile +12 -11
  6. data/LICENSE.txt +22 -22
  7. data/README.md +23 -16
  8. data/Rakefile +8 -8
  9. data/XMLRPC.md +19 -19
  10. data/bin/rbitter +20 -6
  11. data/lib/rbitter/arcserver.rb +126 -97
  12. data/lib/rbitter/console.rb +93 -61
  13. data/lib/rbitter/default/config_json.rb +38 -37
  14. data/lib/rbitter/dlthread.rb +66 -66
  15. data/lib/rbitter/env.rb +62 -59
  16. data/lib/rbitter/libtwitter_connection_override.rb +45 -45
  17. data/lib/rbitter/records.rb +121 -109
  18. data/lib/rbitter/records_migrate/20150327_add_index.rb +11 -7
  19. data/lib/rbitter/records_migrate/20150504_add_replyto_column.rb +12 -0
  20. data/lib/rbitter/streaming.rb +104 -75
  21. data/lib/rbitter/version.rb +20 -3
  22. data/lib/rbitter/xmlrpc.rb +3 -3
  23. data/lib/rbitter/xmlrpcd/base.rb +24 -24
  24. data/lib/rbitter/xmlrpcd/rpchandles.rb +11 -11
  25. data/lib/rbitter/xmlrpcd/xmlrpc_auth_server.rb +82 -83
  26. data/lib/rbitter/xmlrpcd/xmlrpcd.rb +69 -63
  27. data/lib/rbitter.rb +86 -92
  28. data/rbitter.gemspec +42 -42
  29. data/spec/config/default.json +32 -32
  30. data/spec/rbitter/arcserver_spec.rb +30 -9
  31. data/spec/rbitter/console_spec.rb +9 -9
  32. data/spec/rbitter/default/config_json_spec.rb +3 -3
  33. data/spec/rbitter/dlthread_spec.rb +13 -9
  34. data/spec/rbitter/env_spec.rb +62 -56
  35. data/spec/rbitter/libtwitter_connection_override_spec.rb +8 -8
  36. data/spec/rbitter/records_spec.rb +13 -13
  37. data/spec/rbitter/streaming_spec.rb +9 -9
  38. data/spec/rbitter/version_spec.rb +8 -8
  39. data/spec/rbitter/xmlrpc_spec.rb +8 -8
  40. data/spec/rbitter/xmlrpcd/base_spec.rb +29 -29
  41. data/spec/rbitter/xmlrpcd/rpchandles_spec.rb +10 -10
  42. data/spec/rbitter/xmlrpcd/xmlrpc_auth_server_spec.rb +8 -8
  43. data/spec/rbitter/xmlrpcd/xmlrpcd_spec.rb +9 -9
  44. data/spec/rbitter_spec.rb +42 -46
  45. data/spec/spec_helper.rb +39 -36
  46. metadata +68 -41
  47. data/config.json.example +0 -30
@@ -1,84 +1,83 @@
1
- # encoding: utf-8
2
- #
3
-
4
- require "rbitter/xmlrpcd/rpchandles"
5
- require "rbitter/xmlrpcd/base"
6
- require "xmlrpc/server"
7
- require "webrick"
8
-
9
- module XMLRPC
10
- class HTTPAuthXMLRPCServer < XMLRPC::WEBrickServlet
11
- def extract_method(methodname, *args)
12
- for name, obj in @handler
13
- if obj.kind_of? Proc
14
- next unless methodname == name
15
- else
16
- next unless methodname =~ /^#{name}(.+)$/
17
- next unless obj.respond_to? $1
18
- return obj.method($1)
19
- end
20
- end
21
- nil
22
- end
23
-
24
- def service(request, response)
25
- # Taken from xmlrpc/server.rb
26
- if @valid_ip
27
- raise WEBrick::HTTPStatus::Forbidden unless @valid_ip.any? { |ip| request.peeraddr[3] =~ ip }
28
- end
29
-
30
- if request.request_method != "POST"
31
- raise WEBrick::HTTPStatus::MethodNotAllowed,
32
- "unsupported method `#{request.request_method}'."
33
- end
34
-
35
- if parse_content_type(request['Content-type']).first != "text/xml"
36
- raise WEBrick::HTTPStatus::BadRequest
37
- end
38
-
39
- length = (request['Content-length'] || 0).to_i
40
-
41
- raise WEBrick::HTTPStatus::LengthRequired unless length > 0
42
-
43
- data = request.body
44
-
45
- if data.nil? or data.bytesize != length
46
- raise WEBrick::HTTPStatus::BadRequest
47
- end
48
-
49
- # Originally, process(data) was here.
50
- # We need to check whether a method requires authorization.
51
- rpc_method_name, rpc_params = parser().parseMethodCall(data)
52
- rpc_method = extract_method(rpc_method_name)
53
-
54
- if RPCHandles.auth.nil?
55
- resp = handle(rpc_method_name, *rpc_params)
56
- else
57
- if rpc_method.owner.ancestors.include?(RPCHandles::BaseHandle::Auth)
58
- # Check cookie and check it's valid
59
- if request.cookies.size == 1 \
60
- and request.cookies[0].name == "auth_key" \
61
- and RPCHandles.auth.include?(request.cookies[0].value)
62
- resp = handle(rpc_method_name, *rpc_params)
63
- else
64
- # Permission required
65
- raise WEBrick::HTTPStatus::Forbidden
66
- end
67
- elsif rpc_method.owner.ancestors.include?(RPCHandles::BaseHandle::NoAuth)
68
- resp = handle(rpc_method_name, *rpc_params)
69
- else
70
- raise WEBrick::HTTPStatus::Forbidden
71
- end
72
- end
73
-
74
- if resp.nil? or resp.bytesize <= 0
75
- raise WEBrick::HTTPStatus::InternalServerError
76
- end
77
-
78
- response.status = 200
79
- response['Content-Length'] = resp.bytesize
80
- response['Content-Type'] = "text/xml; charset=utf-8"
81
- response.body = resp
82
- end
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
- load_all_handles
15
- @core.set_default_handler { |name, *args|
16
- "NO_COMMAND: #{name} with args #{args.inspect}"
17
- }
18
- end
19
-
20
- def load_all_handles
21
- Rbitter.env["xmlrpc"]["handles"].each { |path|
22
- puts "[xmlrpc] Scanning handles from (#{path})"
23
- Dir.entries(path).each { |fname|
24
- fname = File.join(path, fname)
25
- if File.exist?(fname) and File.file?(fname)
26
- if fname.match(/rh_\w+\.rb$/)
27
- begin
28
- load fname
29
- rescue Exception => e
30
- # stub
31
- puts "Exception while loading #{fname}"
32
- puts e.inspect
33
- end
34
- else
35
- puts "Ignored: #{fname}"
36
- end
37
- end
38
- }
39
- }
40
-
41
- puts "[xmlrpc] found #{RPCHandles.constants.length} constants."
42
- RPCHandles.constants.each { |handler|
43
- if RPCHandles.const_get(handler).is_a?(Class)
44
- @core.add_handler(RPC_PREFIX, RPCHandles.const_get(handler).new)
45
- end
46
- }
47
- end
48
-
49
- def main_loop
50
- puts "RPCServer starts"
51
- @server.mount("/", @core)
52
- @server.start
53
- end
54
- end
55
- end
56
-
57
-
58
- if __FILE__ == $0
59
- puts "Local testing server starts..."
60
- rpcd = Rbitter::RPCServer.new('127.0.0.1', 1300)
61
- rpcd.main_loop
62
- end
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
- def self.rbitter_header
12
- puts "Rbitter #{VERSION} on Ruby-#{RUBY_VERSION} (#{RUBY_PLATFORM})"
13
- end
14
-
15
- def self.rbitter_help_msg
16
- puts "Rbitter is a Twitter streaming archiver, with XMLRPC access."
17
- puts "-------"
18
- puts "Usage: rbitter (application-mode)"
19
- puts "application-mode's are:"
20
- puts "|- serve : Launch Rbitter full system (Streaming + Database + XMLRPC)"
21
- puts "|- console : Launch console application utilizing XMLRPC"
22
- puts "|- configure: Write default configuration file 'config.json' in current folder"
23
- puts "|- help : Show this message"
24
- puts "`- logs : Show Rbitter internal logs"
25
- end
26
-
27
- def self.prebootstrap
28
- # Due to stalled socket problem, If unpatched twitter gem is installed.
29
- # Twitter::Streaming::Connection will be monkey-patched.
30
- patch_required = false
31
-
32
- if Twitter::Version.const_defined?(:MAJOR)
33
- b5_version = Twitter::Version::MAJOR * 10000
34
- + Twitter::Version::MINOR * 100 + Twitter::Version::PATCH
35
- if b5_version <= 51400
36
- warn "[rbitter] Monkey-patching Twitter::Streaming::Connection..."
37
- warn "[rbitter] Gem installed on here seemed that it doesn't handle socket read timeout."
38
- warn "[rbitter] Please upgrade twitter gem"
39
- patch_required = true
40
- end
41
- else
42
- b6_version = Twitter::Version.to_a
43
- if b6_version[0] <= 6 and b6_version[1] <= 0 and b6_version[2] <= 0
44
- patch_required = true
45
- end
46
- end
47
-
48
- require "rbitter/libtwitter_connection_override" if patch_required
49
- end
50
-
51
- def self.bootstrap args=[]
52
- prebootstrap
53
-
54
- if args.length == 0
55
- rbitter_header
56
- elsif args[0] == "serve"
57
- Rbitter.config_initialize
58
-
59
- main = Rbitter::ArcServer.new
60
- if env['xmlrpc']['enable']
61
- $rpc_service_thread = Thread.new {
62
- rpc_server = Rbitter::RPCServer.new(env['xmlrpc']['bind_host'], env['xmlrpc']['bind_port'])
63
- rpc_server.main_loop
64
- }
65
- $rpc_service_thread.run
66
- end
67
- main.main_loop
68
- elsif args[0] == "configure"
69
- require "rbitter/default/config_json"
70
-
71
- puts "Writing config.json now"
72
- open(File.join(Dir.pwd, "config.json"), "w") { |io|
73
- io.write(DEFAULT_CONFIG_JSON)
74
- }
75
- puts "Writing finished"
76
- puts "You can put config.json one of these locations:"
77
- puts "[1] config.json (current folder)"
78
- puts "[2] .rbitter/config.json (current folder)"
79
- elsif args[0] == "console"
80
- Rbitter.config_initialize
81
-
82
- con = Rbitter::Console.new
83
- con.start
84
- elsif args[0] == "logs"
85
- # show log in stdout
86
- puts "This feature is in heavy development. Sorry."
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
@@ -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
  }