top_n 1.1.0 → 1.1.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -2
- data/README.rdoc +2 -0
- data/VERSION +1 -1
- data/lib/top_n.rb +21 -34
- data/top_n.gemspec +8 -10
- metadata +22 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a95b484a24704e1a68d399bbb3c32b42f008c79
|
4
|
+
data.tar.gz: 3c41b43c8e2571b2da0fe566144e612a755f8998
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b56b5bb3bce8fef458595791ca6165a8efc21e318e09308224e6e4bf5e2c9f82c410fa0cbabb577ba698d7c4bc4635875c42179f107f26898b0066b67273a05
|
7
|
+
data.tar.gz: 8609d1808d140374a7e978093df4b75d4a6a76c5ba081eac95812f85637943e2aa3b851336a1d82e19b3963064f6395d84cd76e0893ce9b3950be69f0d597702
|
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
= top_n
|
2
2
|
|
3
3
|
{<img src="https://travis-ci.org/skandragon/top_n.png?branch=master" alt="Build Status" />}[https://travis-ci.org/skandragon/top_n]
|
4
|
+
{<img src="https://gemnasium.com/skandragon/top_n.png" alt="Dependency Status" />}[https://gemnasium.com/skandragon/top_n]
|
5
|
+
{<img src="https://codeclimate.com/github/skandragon/top_n.png" />}[https://codeclimate.com/github/skandragon/top_n]
|
4
6
|
|
5
7
|
This gem allows tracking of the top N (or bottom N) keys added to a list.
|
6
8
|
Each key can have an optional value, which is then added to a list of values for that key. It acts a lot like a norman Ruby Hash type, but with a limited number of keys based on sorting order.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.1
|
data/lib/top_n.rb
CHANGED
@@ -101,57 +101,44 @@ class TopN < Hash
|
|
101
101
|
# @return [Object] the value passed in. This will be returned even if
|
102
102
|
# the value is not added because there are too many keys already present.
|
103
103
|
def store(key, value)
|
104
|
-
if @direction == :top
|
105
|
-
add_top(key, value)
|
106
|
-
else
|
107
|
-
add_bottom(key, value)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
# Behave like #store, with the same semantics.
|
112
|
-
def []=(key, value)
|
113
|
-
store(key, value)
|
114
|
-
end
|
115
|
-
|
116
|
-
private
|
117
|
-
|
118
|
-
##
|
119
|
-
# Add a (key, value) when the direction is :top.
|
120
|
-
def add_top(key, value)
|
121
104
|
@threshold_key ||= key
|
122
105
|
|
123
106
|
if has_key?key
|
124
107
|
fetch(key) << value
|
125
108
|
else
|
126
109
|
if size >= @maxkeys
|
127
|
-
return value if key
|
110
|
+
return value if compare_to_threshold(key)
|
128
111
|
delete(@threshold_key)
|
129
|
-
|
112
|
+
adjust_threshold
|
130
113
|
end
|
131
114
|
super_store(key, [ value ])
|
132
|
-
@threshold_key = key if key
|
115
|
+
@threshold_key = key if compare_to_threshold(key)
|
133
116
|
end
|
134
117
|
|
135
118
|
value
|
136
119
|
end
|
137
120
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
121
|
+
# Behave like #store, with the same semantics.
|
122
|
+
def []=(key, value)
|
123
|
+
store(key, value)
|
124
|
+
end
|
142
125
|
|
143
|
-
|
144
|
-
|
126
|
+
private
|
127
|
+
|
128
|
+
def compare_to_threshold(key)
|
129
|
+
if @direction == :top
|
130
|
+
key < @threshold_key
|
145
131
|
else
|
146
|
-
|
147
|
-
return value if key > @threshold_key
|
148
|
-
delete(@threshold_key)
|
149
|
-
@threshold_key = keys.max
|
150
|
-
end
|
151
|
-
super_store(key, [ value ])
|
152
|
-
@threshold_key = key if key > @threshold_key
|
132
|
+
key > @threshold_key
|
153
133
|
end
|
134
|
+
end
|
154
135
|
|
155
|
-
|
136
|
+
def adjust_threshold
|
137
|
+
if @direction == :top
|
138
|
+
@threshold_key = keys.min
|
139
|
+
else
|
140
|
+
@threshold_key = keys.max
|
141
|
+
end
|
156
142
|
end
|
143
|
+
|
157
144
|
end
|
data/top_n.gemspec
CHANGED
@@ -2,14 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: top_n 1.1.1 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "top_n"
|
8
|
-
s.version = "1.1.
|
9
|
+
s.version = "1.1.1"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
11
13
|
s.authors = ["Michael Graff"]
|
12
|
-
s.date = "
|
14
|
+
s.date = "2014-03-27"
|
13
15
|
s.description = "Track the top (or bottom) N keys added to a list, and discard the remainder."
|
14
16
|
s.email = "explorer@flame.org"
|
15
17
|
s.extra_rdoc_files = [
|
@@ -34,8 +36,7 @@ Gem::Specification.new do |s|
|
|
34
36
|
]
|
35
37
|
s.homepage = "http://github.com/skandragon/top_n"
|
36
38
|
s.licenses = ["MIT"]
|
37
|
-
s.
|
38
|
-
s.rubygems_version = "2.0.14"
|
39
|
+
s.rubygems_version = "2.2.0"
|
39
40
|
s.summary = "Track the top (or bottom) N keys added to a list"
|
40
41
|
|
41
42
|
if s.respond_to? :specification_version then
|
@@ -44,18 +45,16 @@ Gem::Specification.new do |s|
|
|
44
45
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
45
46
|
s.add_development_dependency(%q<minitest>, [">= 0"])
|
46
47
|
s.add_development_dependency(%q<yard>, ["~> 0.7"])
|
47
|
-
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
48
48
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
49
|
-
s.add_development_dependency(%q<jeweler>, ["
|
49
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
50
50
|
s.add_development_dependency(%q<guard>, [">= 0"])
|
51
51
|
s.add_development_dependency(%q<guard-minitest>, [">= 0"])
|
52
52
|
s.add_development_dependency(%q<rubysl>, [">= 0"])
|
53
53
|
else
|
54
54
|
s.add_dependency(%q<minitest>, [">= 0"])
|
55
55
|
s.add_dependency(%q<yard>, ["~> 0.7"])
|
56
|
-
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
57
56
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
58
|
-
s.add_dependency(%q<jeweler>, ["
|
57
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
59
58
|
s.add_dependency(%q<guard>, [">= 0"])
|
60
59
|
s.add_dependency(%q<guard-minitest>, [">= 0"])
|
61
60
|
s.add_dependency(%q<rubysl>, [">= 0"])
|
@@ -63,9 +62,8 @@ Gem::Specification.new do |s|
|
|
63
62
|
else
|
64
63
|
s.add_dependency(%q<minitest>, [">= 0"])
|
65
64
|
s.add_dependency(%q<yard>, ["~> 0.7"])
|
66
|
-
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
67
65
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
68
|
-
s.add_dependency(%q<jeweler>, ["
|
66
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
69
67
|
s.add_dependency(%q<guard>, [">= 0"])
|
70
68
|
s.add_dependency(%q<guard-minitest>, [">= 0"])
|
71
69
|
s.add_dependency(%q<rubysl>, [">= 0"])
|
metadata
CHANGED
@@ -1,125 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: top_n
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Graff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: yard
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0.7'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.7'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rdoc
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.12'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.12'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: bundler
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- - ~>
|
45
|
+
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
47
|
version: '1.0'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- - ~>
|
52
|
+
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '1.0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: jeweler
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
|
-
- -
|
59
|
+
- - ">="
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
61
|
+
version: '0'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- -
|
66
|
+
- - ">="
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
68
|
+
version: '0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: guard
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- -
|
73
|
+
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
75
|
version: '0'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- -
|
80
|
+
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: guard-minitest
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- -
|
87
|
+
- - ">="
|
102
88
|
- !ruby/object:Gem::Version
|
103
89
|
version: '0'
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- -
|
94
|
+
- - ">="
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: rubysl
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
|
-
- -
|
108
|
+
- - ">="
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0'
|
125
111
|
description: Track the top (or bottom) N keys added to a list, and discard the remainder.
|
@@ -130,7 +116,7 @@ extra_rdoc_files:
|
|
130
116
|
- LICENSE.txt
|
131
117
|
- README.rdoc
|
132
118
|
files:
|
133
|
-
- .travis.yml
|
119
|
+
- ".travis.yml"
|
134
120
|
- Gemfile
|
135
121
|
- Guardfile
|
136
122
|
- LICENSE.txt
|
@@ -154,17 +140,17 @@ require_paths:
|
|
154
140
|
- lib
|
155
141
|
required_ruby_version: !ruby/object:Gem::Requirement
|
156
142
|
requirements:
|
157
|
-
- -
|
143
|
+
- - ">="
|
158
144
|
- !ruby/object:Gem::Version
|
159
145
|
version: '0'
|
160
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
147
|
requirements:
|
162
|
-
- -
|
148
|
+
- - ">="
|
163
149
|
- !ruby/object:Gem::Version
|
164
150
|
version: '0'
|
165
151
|
requirements: []
|
166
152
|
rubyforge_project:
|
167
|
-
rubygems_version: 2.0
|
153
|
+
rubygems_version: 2.2.0
|
168
154
|
signing_key:
|
169
155
|
specification_version: 4
|
170
156
|
summary: Track the top (or bottom) N keys added to a list
|