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