top_n 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -2
  3. data/README.rdoc +2 -0
  4. data/VERSION +1 -1
  5. data/lib/top_n.rb +21 -34
  6. data/top_n.gemspec +8 -10
  7. metadata +22 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 803c6da6c638a4f7c2ae8ac20eb92d1e39703df9
4
- data.tar.gz: 57b04413328c9c6c114603a752a188f99abb648e
3
+ metadata.gz: 8a95b484a24704e1a68d399bbb3c32b42f008c79
4
+ data.tar.gz: 3c41b43c8e2571b2da0fe566144e612a755f8998
5
5
  SHA512:
6
- metadata.gz: 4cf9a41e670df85e675638d9fa6078889113bcd7dfc957287b5082522969251ae6f2c36489b1650c23856846a551fb50ccc2a5b3035a7af47787404e4bc56d50
7
- data.tar.gz: 0f4bd0478afba479f1a10a443b4786f9b0d32f7599efe7cbdd356557502c5a00987c7fc38e8c7af7cf7035653d714a58219f80b9000b3b13cdd01eb7b92eeb4e
6
+ metadata.gz: 5b56b5bb3bce8fef458595791ca6165a8efc21e318e09308224e6e4bf5e2c9f82c410fa0cbabb577ba698d7c4bc4635875c42179f107f26898b0066b67273a05
7
+ data.tar.gz: 8609d1808d140374a7e978093df4b75d4a6a76c5ba081eac95812f85637943e2aa3b851336a1d82e19b3963064f6395d84cd76e0893ce9b3950be69f0d597702
data/Gemfile CHANGED
@@ -8,9 +8,8 @@ source "http://rubygems.org"
8
8
  group :development do
9
9
  gem "minitest", ">= 0"
10
10
  gem "yard", "~> 0.7"
11
- gem "rdoc", "~> 3.12"
12
11
  gem "bundler", "~> 1.0"
13
- gem "jeweler", "~> 1.8.7"
12
+ gem "jeweler"
14
13
  gem "guard"
15
14
  gem 'guard-minitest'
16
15
 
@@ -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.0
1
+ 1.1.1
@@ -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 < @threshold_key
110
+ return value if compare_to_threshold(key)
128
111
  delete(@threshold_key)
129
- @threshold_key = keys.min
112
+ adjust_threshold
130
113
  end
131
114
  super_store(key, [ value ])
132
- @threshold_key = key if key < @threshold_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
- # Add a (key, value) when the direction is :bottom.
140
- def add_bottom(key, value)
141
- @threshold_key ||= key
121
+ # Behave like #store, with the same semantics.
122
+ def []=(key, value)
123
+ store(key, value)
124
+ end
142
125
 
143
- if has_key?key
144
- fetch(key) << value
126
+ private
127
+
128
+ def compare_to_threshold(key)
129
+ if @direction == :top
130
+ key < @threshold_key
145
131
  else
146
- if size >= @maxkeys
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
- value
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
@@ -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.0"
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 = "2013-12-16"
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.require_paths = ["lib"]
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>, ["~> 1.8.7"])
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>, ["~> 1.8.7"])
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>, ["~> 1.8.7"])
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.0
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: 2013-12-16 00:00:00.000000000 Z
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: 1.8.7
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: 1.8.7
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.14
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