hypesets 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e1c8471a47597233c9efcd2be6132e5fd9514ae3
4
+ data.tar.gz: 9c7f716a1123a29bf19a0ddf4b90ccff471e47ef
5
+ SHA512:
6
+ metadata.gz: 3abc5fcd43aaadcda97b7f5ff099670523cdc3fac07dc4fb460a567a62e36b7a20c0c522476a64f706a5baa11067787ac2d6c651fed6c183ed66b9b01923cd86
7
+ data.tar.gz: 6cdcae11003c8a397b86b31f7e04d089ba3830f0d2a32090d7098c05b37db81ed233078a818e242094dd4d1dca7ea3a4bc85998a0437b808017d9d0c50c88e18
@@ -0,0 +1,2 @@
1
+ require_relative 'hypesets/client'
2
+ require_relative 'hypesets/estimation'
@@ -0,0 +1,40 @@
1
+ require 'socket'
2
+
3
+ module Hypesets
4
+ class Client
5
+ attr_reader :connection
6
+
7
+ def initialize(hostname = 'localhost', port = 30303)
8
+ @hostname = hostname
9
+ @port = port
10
+ end
11
+
12
+ def add(set_name, element)
13
+ connection.puts "ADD #{set_name} #{element}"
14
+
15
+ :ok if fetch_response == "DONE\n"
16
+ end
17
+
18
+ def estimate(start_name, end_name)
19
+ connection.puts "ESTIMATE #{start_name} #{end_name}"
20
+
21
+ fetch_response.split("\n")[0..-2].map do |estimation|
22
+ set_name, cardinality = estimation.split(',')
23
+ Estimation.new set_name, cardinality.to_i
24
+ end
25
+ end
26
+
27
+ protected
28
+
29
+ def fetch_response
30
+ fetched_response = ''
31
+ fetched_response += connection.gets until fetched_response.end_with? "DONE\n"
32
+ fetched_response
33
+ end
34
+
35
+ def connection
36
+ @connection ||= TCPSocket.new @hostname, @port
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,14 @@
1
+ module Hypesets
2
+ class Estimation
3
+ attr_reader :set_name, :cardinality
4
+
5
+ def initialize(set_name, cardinality)
6
+ @set_name = set_name
7
+ @cardinality = cardinality
8
+ end
9
+
10
+ def ==(other)
11
+ @set_name == other.set_name && @cardinality == other.cardinality
12
+ end
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hypesets
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kacper Bielecki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-16 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Client for Hypesets database. Hypesets is a persisted database for counting
14
+ unique objects.
15
+ email: kazjote@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/hypesets.rb
21
+ - lib/hypesets/client.rb
22
+ - lib/hypesets/estimation.rb
23
+ homepage: https://github.com/hypesets/hypesets-ruby
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.4.2
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Client for Hypesets database.
47
+ test_files: []