acts_as_rrranking 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: fc2f6c1349ba756e777a24e5d8ca1d5721c38ff6
4
- data.tar.gz: be7ecce8285070de6899ddecdfa77ec462acdfed
5
- SHA512:
6
- metadata.gz: 07ec55ba8a410e1747c3a36295ad6bbc146e5e7fd304d847820002cad10a1e0869d58384c3e564a1389bada7692ab1bc95e44ef36a10c5158415c5056bfe8a62
7
- data.tar.gz: df8b110ba2930ff6dfb294b230b1b5323f47b4433e3e43b6b58d5ad80091cb956636975fd5567edbeb64fcb3bf3e8460bff350930fbf5690390d0032472381b7
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDMyMDhlMDE1NWFlMmVmMmZmZWZkMTQ2Njg1NjU1YjdhZWIxZDJjYg==
5
+ data.tar.gz: !binary |-
6
+ YjA2NWY5NTM0NThkY2VhMjFlNWEyM2MxOWI4YmI2NWVkYWQwOWFiYg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZjNmZWRhZGZhYWM2NmI4ZWZmMjA5NzVmYjc4OGU2YjVjMDBiZWQyNDFmNDNm
10
+ NGMwMzk2ZmJiZmNmYjg2OWQ3YjYyNmVlMzgzOTQ0YzE5NDc3OGFlMzdlOTY5
11
+ MTRhZTM5OTIxY2MyZmZjODM3MzIyMzc3ZjI2NjZjNTkzMWVkYTk=
12
+ data.tar.gz: !binary |-
13
+ NjI5NDQ4MDhlNzk4NDVmZjU5Y2E3ZDMzOTUwM2IxMTM5NWIxNjNiZDAwNDlk
14
+ ZTBlNDIzNmVhNzg5NzBmYjMyNDNlZDI2OTVjZDBlYmVmZDllNzliOTU0OGEw
15
+ NGIxNzgwZTIwNGZjYTkyYWE4ZDUxNWMwMGEwYTllNDIxNzgzYzY=
@@ -1,3 +1,3 @@
1
1
  module ActsAsRrranking
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -29,12 +29,12 @@ module ActsAsRrranking
29
29
 
30
30
  instance_eval <<-STR
31
31
  def top_#{@ranking_key.to_s.pluralize}(limit = 10, offset = 0)
32
- self.redis.zrange('#{@redis_ranking_key}', offset, limit)
32
+ self.redis.zrange('#{@redis_ranking_key}', -limit - offset, -1 - offset).reverse.map(&:to_i)
33
33
  end
34
34
 
35
35
  def top_#{@ranking_key}_#{self.name.demodulize.underscore.pluralize}(limit = 10, offset = 0)
36
36
  ids = self.top_#{@ranking_key.to_s.pluralize}(limit, offset)
37
- self.where(#{@ranking_id}: ids)
37
+ self.where(#{@ranking_id}: ids).order(self.ranking_order_by_statement(ids))
38
38
  end
39
39
 
40
40
  def redis_ranking_key
@@ -43,6 +43,26 @@ module ActsAsRrranking
43
43
  STR
44
44
  end
45
45
 
46
+ def ranking_order_by_statement(ids)
47
+ case self.db_adapter
48
+ when /^mysql/
49
+ "FIELD(id, #{ids.join(',')})"
50
+ when /^sqlite/
51
+ stat = "CASE id"
52
+ ids.each_with_index do |id, index|
53
+ stat << " WHEN #{id} THEN #{index}"
54
+ end
55
+ stat << " END"
56
+ stat
57
+ else
58
+ raise "Database not supported"
59
+ end
60
+ end
61
+
62
+ def db_adapter
63
+ @db_name ||= ActiveRecord::Base.connection_config[:adapter]
64
+ end
65
+
46
66
  def redis
47
67
  @redis ||= Redis.new
48
68
  end
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_rrranking
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weihu Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-06 00:00:00.000000000 Z
11
+ date: 2013-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.1.0
20
20
  type: :runtime
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: 3.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: redis
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 3.0.0
34
34
  type: :runtime
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: 3.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sqlite3
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: factory_girl_rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ! '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ! '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: A rails plugin use redis to sort models on real time.
@@ -102,17 +102,17 @@ require_paths:
102
102
  - lib
103
103
  required_ruby_version: !ruby/object:Gem::Requirement
104
104
  requirements:
105
- - - '>='
105
+ - - ! '>='
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - '>='
110
+ - - ! '>='
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  requirements: []
114
114
  rubyforge_project:
115
- rubygems_version: 2.0.6
115
+ rubygems_version: 2.0.3
116
116
  signing_key:
117
117
  specification_version: 4
118
118
  summary: Redis Realtime Ranking