sf_commons 0.0.1

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 ADDED
@@ -0,0 +1,8 @@
1
+ source :rubygems
2
+ gemspec
3
+
4
+ group :test do
5
+ gem "rake"
6
+ gem "mocha"
7
+ gem "rspec"
8
+ end
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ sf_commons (0.0.1)
5
+ addressable
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ addressable (2.3.2)
11
+ diff-lcs (1.1.3)
12
+ metaclass (0.0.1)
13
+ mocha (0.13.2)
14
+ metaclass (~> 0.0.1)
15
+ rake (10.0.3)
16
+ rspec (2.12.0)
17
+ rspec-core (~> 2.12.0)
18
+ rspec-expectations (~> 2.12.0)
19
+ rspec-mocks (~> 2.12.0)
20
+ rspec-core (2.12.2)
21
+ rspec-expectations (2.12.1)
22
+ diff-lcs (~> 1.1.3)
23
+ rspec-mocks (2.12.2)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ bundler
30
+ mocha
31
+ rake
32
+ rspec
33
+ sf_commons!
@@ -0,0 +1,9 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+ require 'rspec/core/rake_task'
4
+
5
+ $LOAD_PATH.unshift 'lib'
6
+
7
+ RSpec::Core::RakeTask.new(:spec)
8
+
9
+ task :default => :spec
@@ -0,0 +1,4 @@
1
+ require 'addressable/uri'
2
+ require 'sf_commons/redis_uri'
3
+ require 'sf_commons/cassandra_uri'
4
+ require 'sf_commons/mysql_uri'
@@ -0,0 +1,22 @@
1
+ class CassandraURI
2
+ def initialize(uri)
3
+ @uri = Addressable::URI.parse(uri)
4
+ raise "Are you sure this is a cassandra server" if @uri.scheme != 'cassandra'
5
+ @options = @uri.query_values || {}
6
+ @poolsize = @options.delete("pool") || 25
7
+ end
8
+
9
+ def keyspace
10
+ @uri.basename if @uri.basename
11
+ end
12
+ def pool_size
13
+ @poolsize.to_i
14
+ end
15
+ def server
16
+ @uri.authority
17
+ end
18
+
19
+ def to_options
20
+ @options
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ class MysqlURI
2
+ def initialize(uri)
3
+ @uri = Addressable::URI.parse(uri)
4
+ if @uri.scheme != 'mysql2' && @uri.scheme != 'mysql' && @uri.scheme != 'socket'
5
+ raise "Are you sure this is a mysql server, mysql2 and socket schemes are supported"
6
+ end
7
+ end
8
+
9
+ def to_options
10
+ defaults = {pool: 25, adapter: 'mysql2', encoding: 'utf8', reconnect: true, verify_connection: true}
11
+ if @uri.scheme == 'socket'
12
+ defaults.merge(socket: @uri.path, database: @uri.query_values['database'])
13
+ else
14
+ defaults.merge(host: @uri.host, port: @uri.port|| 3306).tap do |x|
15
+ x[:username]= @uri.user if @uri.user
16
+ x[:password]= @uri.password if @uri.password
17
+ x[:db] = x[:database] = @uri.path.gsub('/','') if @uri.path
18
+ x[:timeout] = @uri.query_values['timeout'].to_i if @uri.query_values && @uri.query_values.key?('timeout')
19
+ x[:pool] = @uri.query_values['pool'].to_i if @uri.query_values && @uri.query_values.key?('pool')
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ class RedisURI
2
+ def initialize(uri)
3
+ @uri = Addressable::URI.parse(uri)
4
+ raise "Are you sure this is a redis server" if @uri.scheme != 'redis'
5
+ end
6
+
7
+ def to_options
8
+ {host: @uri.host, port: @uri.port|| 6379}.tap do |x|
9
+ x[:password]= @uri.password if @uri.password
10
+ x[:db] = @uri.path.gsub('/','').to_i if @uri.path
11
+ x[:timeout] = @uri.query_values['timeout'].to_i if @uri.query_values && @uri.query_values.key?('timeout')
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module SfCommons
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/sf_commons/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "sf_commons"
6
+ s.version = SfCommons::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Platform team"]
9
+ s.homepage = "http://github.com/althea/sf_commons.git"
10
+ s.description = s.summary = %q{commons extracted out...}
11
+
12
+ s.rubyforge_project = "sf_commons"
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_runtime_dependency(%q<addressable>)
21
+
22
+ s.add_development_dependency('rspec')
23
+ s.add_development_dependency('rake')
24
+ s.add_development_dependency('bundler')
25
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe MysqlURI do
4
+ it "parses simple urls" do
5
+ uri = MysqlURI.new('mysql://localhost')
6
+ options = uri.to_options
7
+ options[:host].should == 'localhost'
8
+ options[:port].should == 3306
9
+ end
10
+
11
+ it "raises error on a different adapter" do
12
+ begin
13
+ uri = MysqlURI.new('pg://localhost')
14
+ fail "Expected an error as the protocol is not supposed to be parsed"
15
+ rescue
16
+ end
17
+ end
18
+
19
+ it "defaults port to 3306 and allows mysq2" do
20
+ uri = MysqlURI.new('mysql2://localhost')
21
+ options = uri.to_options
22
+ options[:host].should == 'localhost'
23
+ options[:port].should == 3306
24
+ end
25
+
26
+ it "defaults standard things like poolsize and verify connection" do
27
+ uri = MysqlURI.new('mysql://localhost')
28
+ options = uri.to_options
29
+ options[:host].should == 'localhost'
30
+ options[:port].should == 3306
31
+ options[:pool].should == 25
32
+ options[:encoding].should == 'utf8'
33
+ options[:adapter].should == 'mysql2'
34
+ options[:verify_connection].should == true
35
+ end
36
+
37
+ it "uses correct database" do
38
+ uri = MysqlURI.new('mysql2://localhost:4009/foobar')
39
+ options = uri.to_options
40
+ options[:host].should == 'localhost'
41
+ options[:port].should == 4009
42
+ options[:database].should == 'foobar'
43
+
44
+ end
45
+ #
46
+ it "uses correct username/password" do
47
+ uri = MysqlURI.new('mysql2://foo:bar@localhost/9')
48
+ options = uri.to_options
49
+ options[:host].should == 'localhost'
50
+ options[:password].should == 'bar'
51
+ end
52
+
53
+ it "uses correct timeout" do
54
+ uri = MysqlURI.new('mysql2://localhost/foobar?timeout=3')
55
+ options = uri.to_options
56
+ options[:timeout].should == 3
57
+ end
58
+
59
+ it "uses correct connection poolsize" do
60
+ uri = MysqlURI.new('mysql2://localhost/foobar?timeout=3&pool=5')
61
+ options = uri.to_options
62
+ options[:pool].should == 5
63
+ end
64
+ end
@@ -0,0 +1,61 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe RedisURI do
4
+ it "parses simple urls" do
5
+ uri = RedisURI.new('redis://localhost:6379')
6
+ options = uri.to_options
7
+ options[:host].should == 'localhost'
8
+ options[:port].should == 6379
9
+ end
10
+
11
+ it "defaults port to 6379" do
12
+ uri = RedisURI.new('redis://localhost')
13
+ options = uri.to_options
14
+ options[:host].should == 'localhost'
15
+ options[:port].should == 6379
16
+ end
17
+
18
+ it "defaults port to 6379" do
19
+ uri = RedisURI.new('redis://localhost')
20
+ options = uri.to_options
21
+ options[:host].should == 'localhost'
22
+ options[:port].should == 6379
23
+ end
24
+
25
+ it "defaults db to 0" do
26
+ uri = RedisURI.new('redis://localhost')
27
+ options = uri.to_options
28
+ options[:host].should == 'localhost'
29
+ options[:port].should == 6379
30
+ options[:db].should == 0
31
+ end
32
+
33
+ it "uses correct database" do
34
+ uri = RedisURI.new('redis://localhost/9')
35
+ options = uri.to_options
36
+ options[:host].should == 'localhost'
37
+ options[:port].should == 6379
38
+ options[:db].should == 9
39
+ end
40
+
41
+ it "uses correct password" do
42
+ uri = RedisURI.new('redis://foo:bar@localhost/9')
43
+ options = uri.to_options
44
+ options[:host].should == 'localhost'
45
+ options[:password].should == 'bar'
46
+ end
47
+
48
+ it "uses correct timeout" do
49
+ uri = RedisURI.new('redis://localhost/9?timeout=3')
50
+ options = uri.to_options
51
+ options[:timeout].should == 3
52
+ end
53
+
54
+ it "ensures protocol is redis" do
55
+ begin
56
+ uri = RedisURI.new('foo://localhost')
57
+ fail
58
+ rescue
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,5 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/sf_commons')
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sf_commons
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Platform team
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: addressable
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: bundler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: commons extracted out...
79
+ email:
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files: []
83
+ files:
84
+ - Gemfile
85
+ - Gemfile.lock
86
+ - Rakefile
87
+ - lib/sf_commons.rb
88
+ - lib/sf_commons/cassandra_uri.rb
89
+ - lib/sf_commons/mysql_uri.rb
90
+ - lib/sf_commons/redis_uri.rb
91
+ - lib/sf_commons/version.rb
92
+ - sf_commons.gemspec
93
+ - spec/lib/mysql_url_spec.rb
94
+ - spec/lib/redis_uri_spec.rb
95
+ - spec/spec.opts
96
+ - spec/spec_helper.rb
97
+ homepage: http://github.com/althea/sf_commons.git
98
+ licenses: []
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ segments:
110
+ - 0
111
+ hash: 1065467839353441678
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ segments:
119
+ - 0
120
+ hash: 1065467839353441678
121
+ requirements: []
122
+ rubyforge_project: sf_commons
123
+ rubygems_version: 1.8.24
124
+ signing_key:
125
+ specification_version: 3
126
+ summary: commons extracted out...
127
+ test_files:
128
+ - spec/lib/mysql_url_spec.rb
129
+ - spec/lib/redis_uri_spec.rb
130
+ - spec/spec.opts
131
+ - spec/spec_helper.rb