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.
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