driq 0.1.0

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
+ SHA256:
3
+ metadata.gz: 928a688785848c1ee8fd6ab30a97dcff67841258534ee7ab5ba693eafceb4435
4
+ data.tar.gz: c47f7acca5bb201da01d2d0a6b387970472933921789d8e3cfa5630ffb8d9978
5
+ SHA512:
6
+ metadata.gz: 3749819f51a541b94e40b67f3722ab68493ac71984a9b68af9403ac9885645472778918bbceae17ec7b33b2c63a05e40d63c60be63fe018172b21d9a628f8ae1
7
+ data.tar.gz: b6d3ddd4c45f8f25a971f9e49d024ce8cb30489b57d6c9fb6fd4068c3b7c0cdfc6bcd59690b3a19105d6b71d52b552e56ec120f014b804d1e5ae291c7ddc8c5d
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/Gemfile ADDED
@@ -0,0 +1,6 @@
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 driq.gemspec
6
+ gemspec
@@ -0,0 +1,6 @@
1
+ # Driq
2
+
3
+ Driq = Dri**p** - **p**ersisitence + **q**ueue
4
+
5
+ Extreme simple RD stream for server sent events.
6
+
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/test*.rb']
7
+ t.verbose = true
8
+ end
@@ -0,0 +1,29 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "driq/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "driq"
8
+ spec.version = Driq::VERSION
9
+ spec.authors = ["Masatoshi SEKI"]
10
+ spec.email = ["m_seki@mva.biglobe.ne.jp"]
11
+
12
+ spec.summary = %q{simple rd-stream}
13
+ spec.description = %q{simple rd-stream}
14
+ spec.homepage = "https://github.com/seki/Driq"
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
+ spec.bindir = "exe"
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_development_dependency "test-unit", "~> 3.3"
26
+ spec.add_development_dependency "bundler", "~> 1.17"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rspec", "~> 3.0"
29
+ end
@@ -0,0 +1,68 @@
1
+ require "driq/version"
2
+ require "monitor"
3
+
4
+ class Driq
5
+ include MonitorMixin
6
+
7
+ def initialize(max_size=100)
8
+ super()
9
+ @last = 0
10
+ @max_size = max_size
11
+ @list = []
12
+ @event = new_cond
13
+ @closed = false
14
+ end
15
+
16
+ def write(value)
17
+ synchronize do
18
+ cell = [make_key, value]
19
+ @list.push(cell)
20
+ @event.broadcast
21
+ return cell.first
22
+ end
23
+ end
24
+ alias push write
25
+
26
+ def read(key)
27
+ readpartial(key, 1).first
28
+ end
29
+
30
+ def last(if_empty=nil)
31
+ synchronize do
32
+ @list.empty? ? if_empty : read(@last - 1)
33
+ end
34
+ end
35
+
36
+ def readpartial(key, size)
37
+ synchronize do
38
+ key = @last unless key
39
+ raise ClosedQueueError if @closed
40
+ idx = seek(key)
41
+ if idx.nil?
42
+ key = @last
43
+ @event.wait
44
+ idx = seek(key)
45
+ end
46
+ raise ClosedQueueError if @closed
47
+ @list.slice(idx, size)
48
+ end
49
+ end
50
+
51
+ def close
52
+ synchronize do
53
+ @closed = true;
54
+ @event.broadcast
55
+ end
56
+ end
57
+
58
+ private
59
+ def make_key(time=Time.now)
60
+ key = [time.tv_sec * 1000000 + time.tv_usec, @last + 1].max
61
+ ensure
62
+ @last = key
63
+ end
64
+
65
+ def seek(key)
66
+ @list.bsearch_index {|x| x.first > key}
67
+ end
68
+ end
@@ -0,0 +1,3 @@
1
+ class Driq
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: driq
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Masatoshi SEKI
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: test-unit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.17'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.17'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ description: simple rd-stream
70
+ email:
71
+ - m_seki@mva.biglobe.ne.jp
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - README.md
79
+ - Rakefile
80
+ - driq.gemspec
81
+ - lib/driq.rb
82
+ - lib/driq/version.rb
83
+ homepage: https://github.com/seki/Driq
84
+ licenses: []
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubygems_version: 3.0.4
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: simple rd-stream
105
+ test_files: []