hypesets 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.
@@ -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: []