asc_desc 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## v0.0.1
2
+
3
+ * initial release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :rubygems
2
+
3
+ # Specify your gem's dependencies in asc_desc.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 David Werlen
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # asc_desc [![Build Status](https://secure.travis-ci.org/dwerlen/asc_desc.png)](https://secure.travis-ci.org/dwerlen/asc_desc)
2
+
3
+ This gem adds two new methods to ActiveRecord (and ActiveRecord::Relation) that allows to sort SQL queries without using
4
+ the "ASC" and "DESC" SQL keywords.
5
+
6
+ ## Remark
7
+
8
+ `asc_desc` was developed in order to experiment the creation of a ruby gem.
9
+ It was conducted on the basis of the excellent tutorials from Ryan Bates, namely:
10
+
11
+ * ["#301 Extracting a Ruby Gem"](http://railscasts.com/episodes/301-extracting-a-ruby-gem)
12
+ * ["#303 Publishing a Gem"](http://railscasts.com/episodes/303-publishing-a-gem)
13
+
14
+
15
+ ## Installation
16
+
17
+ Add to your Gemfile and run the `bundle` command to install it.
18
+
19
+ ```ruby
20
+ gem 'asc_desc', git: 'git@github.com:dwerlen/asc_desc.git'
21
+ ```
22
+
23
+
24
+ ## Requirements
25
+
26
+ * Ruby 1.8.7 or later
27
+ * Ruby on Rails 3.0 or later
28
+
29
+
30
+ ## Usage
31
+
32
+ Call `asc` on an ActiveRecord object or on an ActiveRecord::Relation object to sort the column(s) in an ascending way.
33
+
34
+ ```ruby
35
+ # using a symbol for the name of the column
36
+ Candy.where(:sugar => true).asc(:name)
37
+
38
+ # using a string for the name of the column
39
+ Candy.where(:sugar => true).asc('name')
40
+
41
+ # using multiple parameters to specify more than one column for the sort clause
42
+ Candy.where(:sugar => true).asc(:classification, :name)
43
+
44
+ # using an array to pass mutliple argument
45
+ Candy.where(:sugar => true).asc([:classification, :name])
46
+
47
+ # using a string to specify more than one column for the sort clause
48
+ Candy.where(:sugar => true).asc('classification, name')
49
+
50
+ # the method is chainable
51
+ Candy.where(:sugar => true).asc(:classification).asc(:name)
52
+ ```
53
+
54
+ `ascending` and `ascending_order` are aliases of `asc`.
55
+
56
+
57
+ Call `desc` on an ActiveRecord object or on an ActiveRecord::Relation object to sort the column(s) in a descending way.
58
+
59
+ ```ruby
60
+ # using a symbol for the name of the column
61
+ Candy.where(:sugar => true).desc(:name)
62
+
63
+ # using a string for the name of the column
64
+ Candy.where(:sugar => true).desc('name')
65
+
66
+ # using multiple parameters to specify more than one column for the sort clause
67
+ Candy.where(:sugar => true).desc(:classification, :name)
68
+
69
+ # using an array to pass mutliple argument
70
+ Candy.where(:sugar => true).desc([:classification, :name])
71
+
72
+ # using a string to specify more than one column for the sort clause
73
+ Candy.where(:sugar => true).desc('classification, name')
74
+
75
+ # the method is chainable
76
+ Candy.where(:sugar => true).desc(:classification).desc(:name)
77
+ ```
78
+
79
+ `descending` and `descending_order` are aliases of `desc`.
80
+
81
+
82
+ ## Development
83
+
84
+ Questions or problems? Please post them on the [issue tracker](https://github.com/dwerlen/asc_desc/issues).
85
+ You can contribute changes by forking the project and submitting a pull request.
86
+ You can ensure the tests passing by running `bundle` and `rake`.
87
+
88
+ This gem is created by David Werlen and is under the MIT License.
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => :spec
data/asc_desc.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'asc_desc/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'asc_desc'
7
+ s.version = AscDesc::VERSION
8
+ s.authors = ['David Werlen']
9
+ s.email = ['werlen@icare.ch']
10
+ s.homepage = 'http://github.com/dwerlen/asc_desc'
11
+ s.summary = %q{add "asc" and "desc" methods to ActiveRecord}
12
+ s.description = %q{This gem adds two new methods to ActiveRecord (and ActiveRecord::Relation) that allow to sort SQL queries without using the "ASC" and "DESC" SQL keywords.}
13
+
14
+ s.rubyforge_project = 'asc_desc'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ['lib']
20
+
21
+ s.add_development_dependency 'rake'
22
+ s.add_development_dependency 'rspec'
23
+ s.add_development_dependency 'with_model'
24
+ s.add_development_dependency 'activerecord', '~> 3.2.1'
25
+ s.add_development_dependency 'sqlite3', '~> 1.3.5'
26
+ end
@@ -0,0 +1,60 @@
1
+ module AscDesc
2
+ module ModelAdditions
3
+
4
+ # Call <tt>asc</tt> on an ActiveRecord object or on an ActiveRecord::Relation object to sort
5
+ # the column(s) in an ascending way.
6
+ #
7
+ # using a symbol for the name of the column
8
+ # Candy.where(:sugar => true).asc(:name)
9
+ #
10
+ # using a string for the name of the column
11
+ # Candy.where(:sugar => true).asc('name')
12
+ #
13
+ # using multiple parameters to specify more than one column for the sort clause
14
+ # Candy.where(:sugar => true).asc(:classification, :name)
15
+ #
16
+ # using an array to pass mutliple argument
17
+ # Candy.where(:sugar => true).asc([:classification, :name])
18
+ #
19
+ # using a string to specify more than one column for the sort clause
20
+ # Candy.where(:sugar => true).asc('classification, name')
21
+ #
22
+ # the method is chainable
23
+ # Candy.where(:sugar => true).asc(:classification).asc(:name)
24
+ #
25
+ def asc(*args)
26
+ self.order AscDesc.format_order_clause(*args << AscDesc::ASC)
27
+ end
28
+ alias :ascending :asc
29
+ alias :ascending_order :asc
30
+
31
+
32
+ # Call <tt>desc</tt> on an ActiveRecord object or on an ActiveRecord::Relation object to sort
33
+ # the column(s) in a descending way.
34
+ #
35
+ # using a symbol for the name of the column
36
+ # Candy.where(:sugar => true).desc(:name)
37
+ #
38
+ # using a string for the name of the column
39
+ # Candy.where(:sugar => true).desc('name')
40
+ #
41
+ # using multiple parameters to specify more than one column for the sort clause
42
+ # Candy.where(:sugar => true).desc(:classification, :name)
43
+ #
44
+ # using an array to pass mutliple argument
45
+ # Candy.where(:sugar => true).desc([:classification, :name])
46
+ #
47
+ # using a string to specify more than one column for the sort clause
48
+ # Candy.where(:sugar => true).desc('classification, name')
49
+ #
50
+ # the method is chainable
51
+ # Candy.where(:sugar => true).desc(:classification).desc(:name)
52
+ #
53
+ def desc(*args)
54
+ self.order AscDesc.format_order_clause(*args << AscDesc::DESC)
55
+ end
56
+ alias :descending :desc
57
+ alias :descending_order :desc
58
+
59
+ end
60
+ end
@@ -0,0 +1,9 @@
1
+ module AscDesc
2
+ class Railtie < Rails::Railtie
3
+ initializer 'asc_desc.model_additions' do
4
+ ActiveSupport.on_load :active_record do
5
+ extend ModelAdditions
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module AscDesc
2
+ VERSION = '0.0.1'
3
+ end
data/lib/asc_desc.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'asc_desc/version'
2
+ require 'asc_desc/model_additions'
3
+ require 'asc_desc/railtie' if defined? Rails
4
+
5
+ module AscDesc
6
+
7
+ ASC = 'ASC'
8
+ DESC = 'DESC'
9
+
10
+ def self.format_order_clause(*args)
11
+ order = args.last
12
+ args[0..-2].map do |column|
13
+ if column.is_a?(Array)
14
+ format_order_clause(*column << order)
15
+ elsif column.respond_to?('include?') and column.include?(',')
16
+ format_order_clause(*column.split(',') << order)
17
+ else
18
+ "#{column.to_s.strip} #{order}"
19
+ end
20
+ end.join(', ')
21
+ end
22
+
23
+ end
@@ -0,0 +1,139 @@
1
+ require 'spec_helper'
2
+
3
+ describe AscDesc::ModelAdditions do
4
+
5
+ with_model :Candy do
6
+ # The table block works just like a migration.
7
+ table do |t|
8
+ t.string :name
9
+ t.string :classification
10
+ t.boolean :sugar
11
+ t.timestamps
12
+ end
13
+ # The model block works just like the class definition.
14
+ model do
15
+ extend AscDesc::ModelAdditions
16
+ end
17
+ end
18
+
19
+ it 'respond to a class method named "asc"' do
20
+ Candy.respond_to?(:asc).should be_true
21
+ Candy.respond_to?(:ascending).should be_true
22
+ Candy.respond_to?(:ascending_order).should be_true
23
+ end
24
+
25
+ it 'respond to a class method named "desc"' do
26
+ Candy.respond_to?(:desc).should be_true
27
+ Candy.respond_to?(:descending).should be_true
28
+ Candy.respond_to?(:descending_order).should be_true
29
+ end
30
+
31
+ describe '.asc' do
32
+
33
+ it 'should return an ActiveRecord Relation' do
34
+ candies = Candy.asc(:name)
35
+ candies.should be_an_instance_of(ActiveRecord::Relation)
36
+ end
37
+
38
+ it 'can format a symbol for the name of the column' do
39
+ candies = Candy.asc(:name)
40
+ candies.to_sql.should be_end_with('ORDER BY name ASC')
41
+ end
42
+
43
+ it 'can format a string for the name of the column' do
44
+ candies = Candy.asc('name')
45
+ candies.to_sql.should be_end_with('ORDER BY name ASC')
46
+ end
47
+
48
+ it 'can format multiple parameters to specify more than one column for the sort clause' do
49
+ candies = Candy.asc(:classification, :name)
50
+ candies.to_sql.should be_end_with('ORDER BY classification ASC, name ASC')
51
+
52
+ candies = Candy.asc('classification', 'name')
53
+ candies.to_sql.should be_end_with('ORDER BY classification ASC, name ASC')
54
+ end
55
+
56
+ it 'can format an array as mutliple argument' do
57
+ candies = Candy.asc([:classification, :name])
58
+ candies.to_sql.should be_end_with('ORDER BY classification ASC, name ASC')
59
+ candies = Candy.asc([:classification, :name], :sugar)
60
+ candies.to_sql.should be_end_with('ORDER BY classification ASC, name ASC, sugar ASC')
61
+
62
+ candies = Candy.asc(['classification', 'name'])
63
+ candies.to_sql.should be_end_with('ORDER BY classification ASC, name ASC')
64
+ candies = Candy.asc(['classification', 'name'], 'sugar')
65
+ candies.to_sql.should be_end_with('ORDER BY classification ASC, name ASC, sugar ASC')
66
+ end
67
+
68
+ it 'can format a string to specify more than one column for the sort clause' do
69
+ candies = Candy.asc('classification, name', :sugar)
70
+ candies.to_sql.should be_end_with('ORDER BY classification ASC, name ASC, sugar ASC')
71
+
72
+ candies = Candy.asc(['classification, name', :sugar])
73
+ candies.to_sql.should be_end_with('ORDER BY classification ASC, name ASC, sugar ASC')
74
+ end
75
+
76
+ it 'should be chainable' do
77
+ candies = Candy.asc(:name)
78
+ candies = candies.asc(:sugar)
79
+ candies.should be_an_instance_of(ActiveRecord::Relation)
80
+ candies.to_sql.should be_end_with('ORDER BY name ASC, sugar ASC')
81
+ end
82
+
83
+ end
84
+
85
+ describe '.desc' do
86
+
87
+ it 'should return an ActiveRecord Relation' do
88
+ candies = Candy.desc(:name)
89
+ candies.should be_an_instance_of(ActiveRecord::Relation)
90
+ end
91
+
92
+ it 'can format a symbol for the name of the column' do
93
+ candies = Candy.desc(:name)
94
+ candies.to_sql.should be_end_with('ORDER BY name DESC')
95
+ end
96
+
97
+ it 'can format a string for the name of the column' do
98
+ candies = Candy.desc('name')
99
+ candies.to_sql.should be_end_with('ORDER BY name DESC')
100
+ end
101
+
102
+ it 'can format multiple parameters to specify more than one column for the sort clause' do
103
+ candies = Candy.desc(:classification, :name)
104
+ candies.to_sql.should be_end_with('ORDER BY classification DESC, name DESC')
105
+
106
+ candies = Candy.desc('classification', 'name')
107
+ candies.to_sql.should be_end_with('ORDER BY classification DESC, name DESC')
108
+ end
109
+
110
+ it 'can format an array as mutliple argument' do
111
+ candies = Candy.desc([:classification, :name])
112
+ candies.to_sql.should be_end_with('ORDER BY classification DESC, name DESC')
113
+ candies = Candy.desc([:classification, :name], :sugar)
114
+ candies.to_sql.should be_end_with('ORDER BY classification DESC, name DESC, sugar DESC')
115
+
116
+ candies = Candy.desc(['classification', 'name'])
117
+ candies.to_sql.should be_end_with('ORDER BY classification DESC, name DESC')
118
+ candies = Candy.desc(['classification', 'name'], 'sugar')
119
+ candies.to_sql.should be_end_with('ORDER BY classification DESC, name DESC, sugar DESC')
120
+ end
121
+
122
+ it 'can format a string to specify more than one column for the sort clause' do
123
+ candies = Candy.desc('classification, name', :sugar)
124
+ candies.to_sql.should be_end_with('ORDER BY classification DESC, name DESC, sugar DESC')
125
+
126
+ candies = Candy.desc(['classification, name', :sugar])
127
+ candies.to_sql.should be_end_with('ORDER BY classification DESC, name DESC, sugar DESC')
128
+ end
129
+
130
+ it 'should be chainable' do
131
+ candies = Candy.desc(:name)
132
+ candies = candies.desc(:sugar)
133
+ candies.should be_an_instance_of(ActiveRecord::Relation)
134
+ candies.to_sql.should be_end_with('ORDER BY name DESC, sugar DESC')
135
+ end
136
+
137
+ end
138
+
139
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe AscDesc do
4
+
5
+ it 'has a constant for the ASC SQL keyword' do
6
+ AscDesc.const_defined?(:ASC).should be_true
7
+ AscDesc.const_get(:ASC).should eq('ASC')
8
+ end
9
+
10
+ it 'has a constant for the DESC SQL keyword' do
11
+ AscDesc.const_defined?(:DESC).should be_true
12
+ AscDesc.const_get(:DESC).should eq('DESC')
13
+ end
14
+
15
+ describe '.format_order_clause' do
16
+
17
+ it 'respond to a class method named "format_order_clause"' do
18
+ AscDesc.respond_to?(:format_order_clause)
19
+ end
20
+
21
+ it 'can format a symbol for the name of the column' do
22
+ AscDesc.format_order_clause(:name, AscDesc::ASC).should eq('name ASC')
23
+ AscDesc.format_order_clause(:name, AscDesc::DESC).should eq('name DESC')
24
+ end
25
+
26
+ it 'can format a string for the name of the column' do
27
+ AscDesc.format_order_clause('name', AscDesc::ASC).should eq('name ASC')
28
+ AscDesc.format_order_clause('name', AscDesc::DESC).should eq('name DESC')
29
+ end
30
+
31
+ it 'can format multiple parameters to specify more than one column for the sort clause' do
32
+ AscDesc.format_order_clause(:classification, :name, AscDesc::ASC).should eq('classification ASC, name ASC')
33
+ AscDesc.format_order_clause(:classification, :name, AscDesc::DESC).should eq('classification DESC, name DESC')
34
+ AscDesc.format_order_clause('classification', 'name', AscDesc::ASC).should eq('classification ASC, name ASC')
35
+ AscDesc.format_order_clause('classification', 'name', AscDesc::DESC).should eq('classification DESC, name DESC')
36
+ end
37
+
38
+ it 'can format an array as mutliple argument' do
39
+ AscDesc.format_order_clause([:classification, :name], AscDesc::ASC).should eq('classification ASC, name ASC')
40
+ AscDesc.format_order_clause([:classification, :name], AscDesc::DESC).should eq('classification DESC, name DESC')
41
+ AscDesc.format_order_clause([:classification, :name], :sugar, AscDesc::DESC).should eq('classification DESC, name DESC, sugar DESC')
42
+ AscDesc.format_order_clause(['classification', 'name'], AscDesc::ASC).should eq('classification ASC, name ASC')
43
+ AscDesc.format_order_clause(['classification', 'name'], AscDesc::DESC).should eq('classification DESC, name DESC')
44
+ AscDesc.format_order_clause(['classification', 'name'], 'sugar', AscDesc::DESC).should eq('classification DESC, name DESC, sugar DESC')
45
+ end
46
+
47
+ it 'can formata string to specify more than one column for the sort clause' do
48
+ AscDesc.format_order_clause('classification, name', :sugar, AscDesc::ASC).should eq('classification ASC, name ASC, sugar ASC')
49
+ AscDesc.format_order_clause(['classification, name', :sugar], AscDesc::ASC).should eq('classification ASC, name ASC, sugar ASC')
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,9 @@
1
+ require 'active_record'
2
+ require 'with_model'
3
+ require 'asc_desc'
4
+
5
+ RSpec.configure do |config|
6
+ config.extend ::WithModel
7
+ end
8
+
9
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: asc_desc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - David Werlen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-20 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70196428113380 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70196428113380
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70196428112960 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70196428112960
36
+ - !ruby/object:Gem::Dependency
37
+ name: with_model
38
+ requirement: &70196428112540 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70196428112540
47
+ - !ruby/object:Gem::Dependency
48
+ name: activerecord
49
+ requirement: &70196428112040 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 3.2.1
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70196428112040
58
+ - !ruby/object:Gem::Dependency
59
+ name: sqlite3
60
+ requirement: &70196428111540 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.3.5
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70196428111540
69
+ description: This gem adds two new methods to ActiveRecord (and ActiveRecord::Relation)
70
+ that allow to sort SQL queries without using the "ASC" and "DESC" SQL keywords.
71
+ email:
72
+ - werlen@icare.ch
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .gitignore
78
+ - .rspec
79
+ - .travis.yml
80
+ - CHANGELOG.md
81
+ - Gemfile
82
+ - LICENSE
83
+ - README.md
84
+ - Rakefile
85
+ - asc_desc.gemspec
86
+ - lib/asc_desc.rb
87
+ - lib/asc_desc/model_additions.rb
88
+ - lib/asc_desc/railtie.rb
89
+ - lib/asc_desc/version.rb
90
+ - spec/asc_desc/model_additions_spec.rb
91
+ - spec/asc_desc_spec.rb
92
+ - spec/spec_helper.rb
93
+ homepage: http://github.com/dwerlen/asc_desc
94
+ licenses: []
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project: asc_desc
113
+ rubygems_version: 1.8.6
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: add "asc" and "desc" methods to ActiveRecord
117
+ test_files:
118
+ - spec/asc_desc/model_additions_spec.rb
119
+ - spec/asc_desc_spec.rb
120
+ - spec/spec_helper.rb