haj 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.travis.yml +15 -0
- data/Dockerfile +63 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +21 -0
- data/README.md +86 -0
- data/Rakefile +13 -0
- data/bin/benchmark +67 -0
- data/bin/console +14 -0
- data/bin/rake +29 -0
- data/bin/rspec +29 -0
- data/bin/setup +8 -0
- data/docker-compose.yml +20 -0
- data/haj.gemspec +35 -0
- data/lib/haj.rb +10 -0
- data/lib/haj/pool.rb +6 -0
- data/lib/haj/version.rb +3 -0
- data/lib/haj_jars.rb +12 -0
- data/lib/org/apache/commons/commons-pool2/2.4.2/commons-pool2-2.4.2.jar +0 -0
- data/lib/redis/clients/jedis/2.9.0/jedis-2.9.0.jar +0 -0
- metadata +138 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 219dc1783cac1e87594e1cb9c035ebe1a9ece7636a35511d4184aca468e9e3f0
|
4
|
+
data.tar.gz: b560ac65c1cb1d7b262c9a73801038740edf4b0d3461166fbdfd9b5ae85ce8d0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 509ec3899d10345067f6a54dde60aec8a837ca7fbb91f8a9990c97495fe862d3c7eed1ac3d39d447238090f3bec5abc9ede818cb10833ba405d79c1417b7ceff
|
7
|
+
data.tar.gz: a42dcddc1b23cf7f0f2417f1cd835b023f9218a9a77a8ed5d824f5764b58a1989ceee4c07730abcf720cf2e7a4e375bd4f8eb0d4bed7f58a206649a915aaa21c
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
jruby-9.2.0.0
|
data/.travis.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
sudo: false
|
3
|
+
language: ruby
|
4
|
+
cache: bundler
|
5
|
+
rvm:
|
6
|
+
- jruby-9.2.0.0
|
7
|
+
before_install: gem install bundler -v 1.16.4
|
8
|
+
before_script:
|
9
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
10
|
+
- chmod +x ./cc-test-reporter
|
11
|
+
- ./cc-test-reporter before-build
|
12
|
+
script:
|
13
|
+
- jruby -G bin/rspec
|
14
|
+
after_script:
|
15
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/Dockerfile
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
FROM jruby:9.2.0.0
|
2
|
+
|
3
|
+
# Bundler options
|
4
|
+
#
|
5
|
+
# The default value is taken from Travis's build options, so they should be
|
6
|
+
# good enough for most cases. For development, be sure to set a blank default
|
7
|
+
# in docker-compose.override.yml.
|
8
|
+
ARG BUNDLER_OPTS="--jobs=3 \
|
9
|
+
--retry=3 \
|
10
|
+
--deployment"
|
11
|
+
|
12
|
+
# The home directory of the gem.
|
13
|
+
#
|
14
|
+
# During development, make sure that the APP_DIR environment variable is
|
15
|
+
# identical to the variable in your docker-compose.override.yml file,
|
16
|
+
# otherwise things might not work as expected.
|
17
|
+
ENV APP_DIR="/opt/haj-rb"
|
18
|
+
|
19
|
+
# The jruby image doesn't include git but the general pattern used in
|
20
|
+
# the gemspec is to shell out to git to figure out which files are specs.
|
21
|
+
# See this line in the gemspec:
|
22
|
+
#
|
23
|
+
# `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
24
|
+
#
|
25
|
+
# This will make the image slightly bigger but it should be fine as it's
|
26
|
+
# meant to be mainly a development aid.
|
27
|
+
RUN apt-get update -y \
|
28
|
+
&& apt-get install -y --no-install-recommends \
|
29
|
+
git-core \
|
30
|
+
&& rm -rf /var/lib/apt/lists/*
|
31
|
+
|
32
|
+
# Create a non-root user
|
33
|
+
RUN groupadd -r travis \
|
34
|
+
&& useradd -m -r -g travis travis
|
35
|
+
RUN mkdir -p ${APP_DIR} \
|
36
|
+
&& chown -R travis:travis ${APP_DIR}
|
37
|
+
|
38
|
+
# Move the the application folder to perform all the following tasks.
|
39
|
+
WORKDIR ${APP_DIR}
|
40
|
+
# Use the non-root user to perform any commands from this point forward.
|
41
|
+
#
|
42
|
+
# NOTE: The COPY command requires the --chown flag set otherwise it will
|
43
|
+
# copy things as root.
|
44
|
+
USER travis
|
45
|
+
|
46
|
+
# Copy the gem's gemspec file so `bundle install` can run when the
|
47
|
+
# container is initialized.
|
48
|
+
#
|
49
|
+
# The added benefit is that Docker will cache this file and will not trigger
|
50
|
+
# the bundle install unless the gemspec changed on the filesystem.
|
51
|
+
#
|
52
|
+
# NOTE: If the command fails because of the --chown flag, make sure you have a
|
53
|
+
# recent stable version of Docker.
|
54
|
+
COPY --chown=travis:travis . ./
|
55
|
+
|
56
|
+
RUN bundle install ${BUNDLER_OPTS}
|
57
|
+
|
58
|
+
# Copy over the files, in case the Docker Compose file does not specify a
|
59
|
+
# mount point.
|
60
|
+
COPY --chown=travis:travis . ./
|
61
|
+
|
62
|
+
ENTRYPOINT ["jruby", "-G"]
|
63
|
+
CMD ["bin/rspec"]
|
data/Gemfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in haj.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
# A bunch of gems required for benchmarking, so we're sure we're on the right
|
9
|
+
# track and actually providing a performance gain.
|
10
|
+
gem 'benchmark-ips', '~> 2.7'
|
11
|
+
|
12
|
+
gem 'faker'
|
13
|
+
gem 'sequel', '~> 5.12'
|
14
|
+
gem 'jdbc-postgres', '~> 42.1'
|
15
|
+
gem 'redis', '~> 4.0'
|
16
|
+
gem 'jedis_rb', '~> 2.7'
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2018 Andrei Maxim
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# Highly-Advanced Jedis client for Ruby
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/haj.svg)](https://badge.fury.io/rb/haj)
|
4
|
+
[![Build Status](https://travis-ci.org/andreimaxim/haj-rb.svg?branch=master)](https://travis-ci.org/andreimaxim/haj-rb)
|
5
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/40b89512493cb5356076/maintainability)](https://codeclimate.com/github/andreimaxim/haj-rb/maintainability)
|
6
|
+
[![Test Coverage](https://api.codeclimate.com/v1/badges/40b89512493cb5356076/test_coverage)](https://codeclimate.com/github/andreimaxim/haj-rb/test_coverage)
|
7
|
+
|
8
|
+
The raison d'être of this project can be pretty much described in one single
|
9
|
+
table:
|
10
|
+
|
11
|
+
```bash
|
12
|
+
Warming up --------------------------------------
|
13
|
+
Postgres 1.000 i/100ms
|
14
|
+
Redis 1.000 i/100ms
|
15
|
+
Jedis 1.000 i/100ms
|
16
|
+
Ruby hash 5.000 i/100ms
|
17
|
+
Calculating -------------------------------------
|
18
|
+
Postgres 2.289 (± 0.0%) i/s - 12.000 in 5.248779s
|
19
|
+
Redis 0.016 (± 0.0%) i/s - 1.000 in 60.470617s
|
20
|
+
Jedis 0.047 (± 0.0%) i/s - 1.000 in 21.109477s
|
21
|
+
Ruby hash 52.735 (±13.3%) i/s - 260.000 in 5.042344s
|
22
|
+
```
|
23
|
+
|
24
|
+
It looks slightly odd, but let's explain it a bit.
|
25
|
+
|
26
|
+
This is the result of a plain benchmark done on a Mac OS X development
|
27
|
+
machine using JRuby 9.2.0.0 and several libraries:
|
28
|
+
|
29
|
+
* [Sequel][sequel] with [jdbc-postgres][jdbc-pg] for the `Postgres` row
|
30
|
+
* Plain [redis-rb][redis-rb] for the `Redis` row
|
31
|
+
* For the `Jedis` row the [jedis_rb][jedis_rb] gem was used, which is a simple wrapper over the [jedis][jedis] Java library
|
32
|
+
* Finally, `Memory` meant using a plain Ruby hash
|
33
|
+
|
34
|
+
[sequel]: https://github.com/jeremyevans/sequel/
|
35
|
+
[jdbc-pg]: https://github.com/jruby/activerecord-jdbc-adapter/tree/master/jdbc-postgres
|
36
|
+
[redis-rb]: https://github.com/redis/redis-rb
|
37
|
+
[jedis_rb]:https://github.com/asmallworldsite/jedis_rb/tree/master/lib/jedis_rb
|
38
|
+
[jedis]: https://github.com/xetorthio/jedis
|
39
|
+
|
40
|
+
For the test, a table was created in a Postgres database that looked like a key-value store, something along the lines of:
|
41
|
+
|
42
|
+
```sql
|
43
|
+
SQL
|
44
|
+
CREATE TABLE IF NOT EXISTS things (
|
45
|
+
k text,
|
46
|
+
v text,
|
47
|
+
PRIMARY KEY (k)
|
48
|
+
);
|
49
|
+
TRUNCATE TABLE things;
|
50
|
+
SQL
|
51
|
+
```
|
52
|
+
|
53
|
+
The SQL query used:
|
54
|
+
|
55
|
+
```sql
|
56
|
+
SELECT v FROM things WHERE k='#{random_key}';
|
57
|
+
```
|
58
|
+
|
59
|
+
The Redis query used:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
redis.get(random_key)
|
63
|
+
```
|
64
|
+
|
65
|
+
Redis should be faster, especially when used as a key-value store, but Postgres actually blew it out of the water in this little test, which seemed odd.
|
66
|
+
|
67
|
+
First, let's talk about the elephant in the room, in this case the significant amount of time required by [redis-rb][redis-rb]: it's a plain Ruby application and a lot of time is spent in userland (280 seconds out of the 298 seconds), while the other libraries use faster languages (Java bindings for both the JDBC driver and Jedis and JRuby optimizes the hash quite nicely).
|
68
|
+
|
69
|
+
So, in this case, the language was the bottleneck and maybe some gains can be achieved if the JRuby team will look into the redis-rb gem and suggest some optimizations.
|
70
|
+
|
71
|
+
However, it's not so obvious why [jedis_rb][jedis_rb] was so slow compared to [Sequel][sequel] + [jdbc-postgres][jdbc-pg], especially since it's relying on the pretty fast [jedis][jedis] Java library (which is also one of the recommended libraries by Redis).
|
72
|
+
|
73
|
+
In this case, the answer lies in the smaller `real` time than the `total` time, which probably means that there are things happening in parallel. So the answer is probably in the connection pool.
|
74
|
+
|
75
|
+
There are two things you can do with a connection pool:
|
76
|
+
|
77
|
+
1. Create a limited set of connections that can be reused by the application when needed.
|
78
|
+
2. Parallelize the requests, when possible.
|
79
|
+
|
80
|
+
The [Sequel][sequel] gem was doing both, while [jedis_rb][jedis_rb] didn't even an option to set the number of concurrent connections. Actually, when digging a bit through [Sequel][sequel] but also through [jedis][jedis], it becomes rather obvious that the [Sequel][sequel] developers spent a lot of time and effort to maximize the output of the library by using as many of the connections in the connection pool as possible.
|
81
|
+
|
82
|
+
This is where HAJ comes in.
|
83
|
+
|
84
|
+
The goal of this project is to have __a more advanced connection pool__ for Jedis which can take advantage of __multiple parallel connections__ to Redis and *dramatically* increase the output.
|
85
|
+
|
86
|
+
Obviously, this is a work in progress so please don't use it in production.
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
|
6
|
+
require 'jars/installer'
|
7
|
+
|
8
|
+
desc 'Download and vendor the jars needed'
|
9
|
+
task :setup do
|
10
|
+
Jars::Installer.vendor_jars!
|
11
|
+
end
|
12
|
+
|
13
|
+
task :default => :spec
|
data/bin/benchmark
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
# require 'haj'
|
5
|
+
|
6
|
+
require 'faker'
|
7
|
+
require 'benchmark/ips'
|
8
|
+
require 'sequel'
|
9
|
+
require 'jdbc/postgres'
|
10
|
+
require 'redis'
|
11
|
+
require 'jedis_rb'
|
12
|
+
|
13
|
+
|
14
|
+
Jdbc::Postgres.load_driver
|
15
|
+
|
16
|
+
redis = Redis.new(host: 'redis')
|
17
|
+
redis.flushall
|
18
|
+
|
19
|
+
pool = JedisRb::Pool.new(host: 'redis')
|
20
|
+
|
21
|
+
conn = Sequel.connect('jdbc:postgresql://pg/hajrb', user: 'hajrb', password: 'hajrb')
|
22
|
+
|
23
|
+
conn.run <<-SQL
|
24
|
+
CREATE TABLE IF NOT EXISTS things (
|
25
|
+
k text,
|
26
|
+
v text,
|
27
|
+
PRIMARY KEY (k)
|
28
|
+
);
|
29
|
+
TRUNCATE TABLE things;
|
30
|
+
SQL
|
31
|
+
|
32
|
+
memory = {}
|
33
|
+
|
34
|
+
(1..1000).each do |k|
|
35
|
+
v = Faker::Lorem.paragraph(rand 1..10)
|
36
|
+
conn.run("insert into things (k, v) values ('#{k}', '#{v}')")
|
37
|
+
redis.set(k, v)
|
38
|
+
memory[k]=v
|
39
|
+
end
|
40
|
+
|
41
|
+
n = 100_000
|
42
|
+
random_keys = []
|
43
|
+
n.times { random_keys << rand(1..1000) }
|
44
|
+
|
45
|
+
Benchmark.ips do |x|
|
46
|
+
x.report('Postgres') do
|
47
|
+
n.times do |i|
|
48
|
+
conn.fetch("select v from things where k='#{random_keys[i]}'")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
x.report('Redis') do
|
52
|
+
n.times do |i|
|
53
|
+
redis.get(random_keys[i])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
x.report('Jedis') do
|
57
|
+
n.times do |i|
|
58
|
+
pool.execute(:get, random_keys[i].to_s)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
x.report('Ruby hash') do
|
62
|
+
n.times do |i|
|
63
|
+
memory[random_keys[i]]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'haj'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require 'irb'
|
14
|
+
IRB.start(__FILE__)
|
data/bin/rake
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env jruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rake' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("rake", "rake")
|
data/bin/rspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env jruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rspec' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "pathname"
|
12
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
13
|
+
Pathname.new(__FILE__).realpath)
|
14
|
+
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require "rubygems"
|
27
|
+
require "bundler/setup"
|
28
|
+
|
29
|
+
load Gem.bin_path("rspec-core", "rspec")
|
data/bin/setup
ADDED
data/docker-compose.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
version: '3'
|
2
|
+
|
3
|
+
services:
|
4
|
+
|
5
|
+
# Required for manual testing against a real Redis process.
|
6
|
+
redis:
|
7
|
+
image: "redis:3.2"
|
8
|
+
command: redis-server --appendonly yes
|
9
|
+
|
10
|
+
# The project was started due to the high performance of the
|
11
|
+
# Sequel + jdbc-postgres combo when compared with the performance
|
12
|
+
# of the existing Redis libraries on JRuby.
|
13
|
+
pg:
|
14
|
+
image: "postgres:9.6.10"
|
15
|
+
|
16
|
+
gem:
|
17
|
+
build: .
|
18
|
+
links:
|
19
|
+
- "redis:redis"
|
20
|
+
- "pg:pg"
|
data/haj.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'haj/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'haj'
|
8
|
+
spec.version = HAJ::VERSION
|
9
|
+
spec.authors = ['Andrei Maxim']
|
10
|
+
spec.email = ['andrei@andreimaxim.ro']
|
11
|
+
|
12
|
+
spec.summary = 'Highly-Advanced Jedis client for Ruby'
|
13
|
+
spec.homepage = 'https://github.com/andreimaxim/haj-rb'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
# Specify which files should be added to the gem when it is released.
|
17
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
18
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
19
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
|
+
end
|
21
|
+
|
22
|
+
spec.bindir = 'exe'
|
23
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
|
+
spec.require_paths = ['lib']
|
25
|
+
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
27
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
28
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
|
+
spec.add_development_dependency 'simplecov', '~> 0.16'
|
30
|
+
|
31
|
+
spec.add_development_dependency 'jar-dependencies', '~> 0.3'
|
32
|
+
|
33
|
+
# The Jedis JAR
|
34
|
+
spec.requirements << "jar redis.clients:jedis, '~> 2.9.0'"
|
35
|
+
end
|
data/lib/haj.rb
ADDED
data/lib/haj/pool.rb
ADDED
data/lib/haj/version.rb
ADDED
data/lib/haj_jars.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# this is a generated file, to avoid over-writing it just delete this comment
|
2
|
+
begin
|
3
|
+
require 'jar_dependencies'
|
4
|
+
rescue LoadError
|
5
|
+
require 'redis/clients/jedis/2.9.0/jedis-2.9.0.jar'
|
6
|
+
require 'org/apache/commons/commons-pool2/2.4.2/commons-pool2-2.4.2.jar'
|
7
|
+
end
|
8
|
+
|
9
|
+
if defined? Jars
|
10
|
+
require_jar 'redis.clients', 'jedis', '2.9.0'
|
11
|
+
require_jar 'org.apache.commons', 'commons-pool2', '2.4.2'
|
12
|
+
end
|
Binary file
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: haj
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrei Maxim
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-09-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '1.16'
|
19
|
+
name: bundler
|
20
|
+
prerelease: false
|
21
|
+
type: :development
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '10.0'
|
33
|
+
name: rake
|
34
|
+
prerelease: false
|
35
|
+
type: :development
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.0'
|
47
|
+
name: rspec
|
48
|
+
prerelease: false
|
49
|
+
type: :development
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0.16'
|
61
|
+
name: simplecov
|
62
|
+
prerelease: false
|
63
|
+
type: :development
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.16'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0.3'
|
75
|
+
name: jar-dependencies
|
76
|
+
prerelease: false
|
77
|
+
type: :development
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.3'
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- andrei@andreimaxim.ro
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rspec"
|
92
|
+
- ".ruby-version"
|
93
|
+
- ".travis.yml"
|
94
|
+
- Dockerfile
|
95
|
+
- Gemfile
|
96
|
+
- LICENSE.txt
|
97
|
+
- README.md
|
98
|
+
- Rakefile
|
99
|
+
- bin/benchmark
|
100
|
+
- bin/console
|
101
|
+
- bin/rake
|
102
|
+
- bin/rspec
|
103
|
+
- bin/setup
|
104
|
+
- data/redis/.gitkeep
|
105
|
+
- docker-compose.yml
|
106
|
+
- haj.gemspec
|
107
|
+
- lib/haj.rb
|
108
|
+
- lib/haj/pool.rb
|
109
|
+
- lib/haj/version.rb
|
110
|
+
- lib/haj_jars.rb
|
111
|
+
- lib/org/apache/commons/commons-pool2/2.4.2/commons-pool2-2.4.2.jar
|
112
|
+
- lib/redis/clients/jedis/2.9.0/jedis-2.9.0.jar
|
113
|
+
homepage: https://github.com/andreimaxim/haj-rb
|
114
|
+
licenses:
|
115
|
+
- MIT
|
116
|
+
metadata: {}
|
117
|
+
post_install_message:
|
118
|
+
rdoc_options: []
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
requirements:
|
132
|
+
- jar redis.clients:jedis, '~> 2.9.0'
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 2.7.6
|
135
|
+
signing_key:
|
136
|
+
specification_version: 4
|
137
|
+
summary: Highly-Advanced Jedis client for Ruby
|
138
|
+
test_files: []
|