alvarobp-acts_as_inverse_sortable 0.1.0
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.
- data/Manifest +9 -0
- data/README.rdoc +23 -0
- data/Rakefile +12 -0
- data/TODO +1 -0
- data/acts_as_inverse_sortable.gemspec +22 -0
- data/init.rb +1 -0
- data/lib/acts_as_inverse_sortable.rb +25 -0
- data/test/acts_as_inverse_sortable_test.rb +21 -0
- data/test/schema.rb +10 -0
- data/test/test_helper.rb +21 -0
- metadata +63 -0
data/Manifest
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
= acts_as_inverse_sortable
|
2
|
+
|
3
|
+
Sets a negative timestamp on an Active Record model for efficiently sort on created_at inverse order.
|
4
|
+
|
5
|
+
== Install
|
6
|
+
|
7
|
+
gem install alvarobp-acts_as_inverse_sortable --source http://gems.github.com
|
8
|
+
|
9
|
+
== Usage
|
10
|
+
|
11
|
+
As a very simple plugin, using it is simple. Just add an integer attribute called "created_at_inverse" to your model. Afterwards you can make that model inverse sortable, for example:
|
12
|
+
|
13
|
+
class Film < ActiveRecord::Base
|
14
|
+
acts_as_inverse_sortable
|
15
|
+
end
|
16
|
+
|
17
|
+
Therefore, you can get an inverse sorted array of Films with Film.find(:all, :order => 'created_at_inverse') working on an efficient way.
|
18
|
+
|
19
|
+
== Test
|
20
|
+
|
21
|
+
Just do
|
22
|
+
|
23
|
+
rake test
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('acts_as_inverse_sortable', '0.1.0') do |p|
|
6
|
+
p.description = "Sets a negative timestamp on an Active Record model for efficiently sort on created_at inverse order"
|
7
|
+
p.url = "http://github.com/alvarobp/acts_as_inverse_sortable"
|
8
|
+
p.author = "Alvaro Bautista Pino"
|
9
|
+
p.email = "alvarobp@gmail.com"
|
10
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
|
+
p.development_dependencies = []
|
12
|
+
end
|
data/TODO
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
- Go deep in the fact that in Rails 2.3 on before_create record attributes information is not available.
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{acts_as_inverse_sortable}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Alvaro Bautista"]
|
9
|
+
s.date = %q{2009-03-18}
|
10
|
+
s.description = %q{Negative timestamp on an Active Record model}
|
11
|
+
s.email = ["alvarobp@gmail.com"]
|
12
|
+
s.files = ["init.rb", "lib/acts_as_inverse_sortable.rb", "Manifest", "Rakefile", "README.rdoc", "test/acts_as_inverse_sortable_test.rb", "test/schema.rb", "test/test_helper.rb", "TODO", "acts_as_inverse_sortable.gemspec"]
|
13
|
+
s.has_rdoc = false
|
14
|
+
s.require_paths = ["lib"]
|
15
|
+
s.rubygems_version = %q{1.3.1}
|
16
|
+
s.summary = %q{Sets a negative timestamp on an Active Record model for efficiently sort on created_at inverse order.}
|
17
|
+
|
18
|
+
if s.respond_to? :specification_version then
|
19
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
20
|
+
s.specification_version = 2
|
21
|
+
end
|
22
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'acts_as_inverse_sortable'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ActsAsInverseSortable
|
2
|
+
def self.included(base)
|
3
|
+
super
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def acts_as_inverse_sortable
|
9
|
+
include ActsAsInverseSortable::InstanceMethods
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module InstanceMethods
|
14
|
+
def set_created_at_inverse
|
15
|
+
self.update_attribute(:created_at_inverse, -self.created_at.to_i)
|
16
|
+
end
|
17
|
+
|
18
|
+
def after_create
|
19
|
+
set_created_at_inverse
|
20
|
+
super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
ActiveRecord::Base.send :include, ActsAsInverseSortable
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class Film
|
4
|
+
acts_as_inverse_sortable
|
5
|
+
end
|
6
|
+
|
7
|
+
class ActsAsInverseSortableTest < Test::Unit::TestCase
|
8
|
+
context "A model that acts as an inverse sortable" do
|
9
|
+
should "have the inverse of his created_at time when is created" do
|
10
|
+
new_film = Film.create(:title => "Test film")
|
11
|
+
|
12
|
+
assert_not_nil new_film.created_at_inverse
|
13
|
+
assert_equal -new_film.created_at.to_i, new_film.created_at_inverse
|
14
|
+
end
|
15
|
+
|
16
|
+
teardown do
|
17
|
+
File.delete('test/test.db')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
data/test/schema.rb
ADDED
data/test/test_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'active_record'
|
7
|
+
require 'shoulda'
|
8
|
+
|
9
|
+
require 'ruby-debug'
|
10
|
+
|
11
|
+
require File.dirname(__FILE__) + '/../lib/acts_as_inverse_sortable'
|
12
|
+
|
13
|
+
ActiveRecord::Base.establish_connection({
|
14
|
+
:adapter => "sqlite3",
|
15
|
+
:dbfile => "test/test.db"
|
16
|
+
})
|
17
|
+
|
18
|
+
class Film < ActiveRecord::Base
|
19
|
+
end
|
20
|
+
|
21
|
+
load(File.dirname(__FILE__) + "/schema.rb")
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: alvarobp-acts_as_inverse_sortable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alvaro Bautista
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-03-18 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Negative timestamp on an Active Record model
|
17
|
+
email:
|
18
|
+
- alvarobp@gmail.com
|
19
|
+
executables: []
|
20
|
+
|
21
|
+
extensions: []
|
22
|
+
|
23
|
+
extra_rdoc_files: []
|
24
|
+
|
25
|
+
files:
|
26
|
+
- init.rb
|
27
|
+
- lib/acts_as_inverse_sortable.rb
|
28
|
+
- Manifest
|
29
|
+
- Rakefile
|
30
|
+
- README.rdoc
|
31
|
+
- test/acts_as_inverse_sortable_test.rb
|
32
|
+
- test/schema.rb
|
33
|
+
- test/test_helper.rb
|
34
|
+
- TODO
|
35
|
+
- acts_as_inverse_sortable.gemspec
|
36
|
+
has_rdoc: false
|
37
|
+
homepage:
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
version:
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
requirements: []
|
56
|
+
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 1.2.0
|
59
|
+
signing_key:
|
60
|
+
specification_version: 2
|
61
|
+
summary: Sets a negative timestamp on an Active Record model for efficiently sort on created_at inverse order.
|
62
|
+
test_files: []
|
63
|
+
|