model_sorter 0.0.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 +7 -0
- data/.gitignore +23 -0
- data/Gemfile +5 -0
- data/README.md +63 -0
- data/Rakefile +2 -0
- data/lib/model_sorter.rb +20 -0
- data/lib/model_sorter/version.rb +3 -0
- data/model_sorter.gemspec +26 -0
- data/spec/model_sorter_spec.rb +42 -0
- metadata +109 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e0dbae7d4d8f161d6ed09382c9b497781cfc011f
|
4
|
+
data.tar.gz: f0291a180591de44b306682aacf9cf717b147b0d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6f68210638522b6c37fb4c8d8aa6542ceb18e24c511a1739e5ba443eb0e67d408f5d82f09b14df07f69c93fab8f4b54470cac1a6224420ae4c18d580d7de280d
|
7
|
+
data.tar.gz: d8fe2b50ea8b970a6dd5e3af7e4c79d0cca68525521f1487ac34a4af80111e2fed3dc43e1e4eff5349652944371737f12d5f8458da899f4daac0f3aeb2b71cee
|
data/.gitignore
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
23
|
+
/.idea
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# ModelSorter
|
2
|
+
|
3
|
+
用redis支持ActiveRecord的对象排序,免去在数据库中创建排序字段。
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'model_sorter'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install model-sorter
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
组装一个Hash:{ id: index, id: index, ... }
|
22
|
+
|
23
|
+
__In your Coffee__
|
24
|
+
|
25
|
+
```
|
26
|
+
$.ajax(
|
27
|
+
type: 'post',
|
28
|
+
url: 'update_serial_number',
|
29
|
+
data: { serial_hsh: {5:1, 6:2, 8:3, 1:4, 3:5} },
|
30
|
+
dataType: 'text',
|
31
|
+
success: (info) ->
|
32
|
+
# ...
|
33
|
+
)
|
34
|
+
```
|
35
|
+
|
36
|
+
__In your Model__
|
37
|
+
|
38
|
+
```
|
39
|
+
class Post < ActiveRecord::Base
|
40
|
+
include Redis::Objects
|
41
|
+
include ModelSorter::Associations
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
__In your Controller__
|
46
|
+
|
47
|
+
用sort_serial_number方法,传入hsh
|
48
|
+
|
49
|
+
```
|
50
|
+
def index
|
51
|
+
@posts = Post.sort_by!{ |p| p.__serial_number__.value }
|
52
|
+
end
|
53
|
+
|
54
|
+
def update_serial_number
|
55
|
+
serial_hsh = params[:serial_hsh]
|
56
|
+
if Post.sort_serial_number(serial_hsh)
|
57
|
+
return render text: "success"
|
58
|
+
else
|
59
|
+
return render text: "fail"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
data/Rakefile
ADDED
data/lib/model_sorter.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "model_sorter/version"
|
2
|
+
|
3
|
+
module ModelSorter
|
4
|
+
module Associations
|
5
|
+
def self.included(base)
|
6
|
+
base.class_eval do
|
7
|
+
counter :__serial_number__
|
8
|
+
|
9
|
+
def self.sort_serial_number hsh
|
10
|
+
results = self.redis.multi do
|
11
|
+
hsh.each do |id, sn|
|
12
|
+
self.redis.set "#{self.name.downcase}:#{id}:__serial_number__", sn.to_i
|
13
|
+
end
|
14
|
+
end
|
15
|
+
results.uniq == ["OK"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'model_sorter/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "model_sorter"
|
8
|
+
spec.version = ModelSorter::VERSION
|
9
|
+
spec.authors = ["Scott1743"]
|
10
|
+
spec.email = ["512981271@qq.com"]
|
11
|
+
spec.summary = ""
|
12
|
+
spec.description = %q{To sort the instance of ActiveRecord::Relation by Redis}
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency 'redis-objects', '~> 1.2.0'
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "rspec", "~> 3.1"
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
require "redis-objects"
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
5
|
+
require "model_sorter"
|
6
|
+
|
7
|
+
Redis.current = Redis.new(:host => '127.0.0.1', :port => 6379)
|
8
|
+
|
9
|
+
describe ModelSorter do
|
10
|
+
|
11
|
+
class User
|
12
|
+
include Redis::Objects
|
13
|
+
include ModelSorter::Associations
|
14
|
+
|
15
|
+
attr_accessor :id
|
16
|
+
|
17
|
+
def initialize args
|
18
|
+
@id = args.fetch(:id)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
before :each do
|
23
|
+
@users = []
|
24
|
+
@hsh = {}
|
25
|
+
i = 1
|
26
|
+
5.times do
|
27
|
+
@users << User.new(id: i)
|
28
|
+
@hsh[i] = 6 - i
|
29
|
+
i += 1
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
it "save_serial_number" do
|
35
|
+
User.sort_serial_number @hsh
|
36
|
+
|
37
|
+
arr = @users.map do |u|
|
38
|
+
u.__serial_number__.value
|
39
|
+
end
|
40
|
+
expect(arr).to eq([5, 4, 3, 2, 1])
|
41
|
+
end
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: model_sorter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Scott1743
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: redis-objects
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.2.0
|
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.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '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.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.1'
|
69
|
+
description: To sort the instance of ActiveRecord::Relation by Redis
|
70
|
+
email:
|
71
|
+
- 512981271@qq.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- Gemfile
|
78
|
+
- README.md
|
79
|
+
- Rakefile
|
80
|
+
- lib/model_sorter.rb
|
81
|
+
- lib/model_sorter/version.rb
|
82
|
+
- model_sorter.gemspec
|
83
|
+
- spec/model_sorter_spec.rb
|
84
|
+
homepage:
|
85
|
+
licenses:
|
86
|
+
- MIT
|
87
|
+
metadata: {}
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options: []
|
90
|
+
require_paths:
|
91
|
+
- lib
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
requirements: []
|
103
|
+
rubyforge_project:
|
104
|
+
rubygems_version: 2.2.2
|
105
|
+
signing_key:
|
106
|
+
specification_version: 4
|
107
|
+
summary: ''
|
108
|
+
test_files:
|
109
|
+
- spec/model_sorter_spec.rb
|