alvarobp-acts_as_inverse_sortable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ init.rb
2
+ lib/acts_as_inverse_sortable.rb
3
+ Manifest
4
+ Rakefile
5
+ README.rdoc
6
+ test/acts_as_inverse_sortable_test.rb
7
+ test/schema.rb
8
+ test/test_helper.rb
9
+ TODO
@@ -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
@@ -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
+
@@ -0,0 +1,10 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+ create_table :films, :force => true do |t|
3
+ t.column :title, :string
4
+
5
+ t.column :created_at, :datetime
6
+ t.column :updated_at, :datetime
7
+
8
+ t.column :created_at_inverse, :integer
9
+ end
10
+ end
@@ -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
+