resort 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -6,3 +6,4 @@ graph.png
6
6
  .yardoc/*
7
7
  doc/*
8
8
  tmp
9
+ *.rbc
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm --create use ruby-1.9.2@resort
1
+ rvm --create use ruby-1.9.3-p0@resort
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ # http://about.travis-ci.org/docs/user/build-configuration/
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - ree
6
+ - ruby-head
7
+ - rbx
8
+ - rbx-2.0
data/Gemfile CHANGED
@@ -1,3 +1,12 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
+
5
+ #group :development, :test do
6
+ # # For debugging under ruby 1.9 special gems are needed
7
+ # gem 'ruby-debug19', :platform => :mri
8
+ # # See http://blog.wyeworks.com/2011/11/1/ruby-1-9-3-and-ruby-debug
9
+ # gem 'ruby-debug-base19', '>=0.11.26'
10
+ # gem 'linecache19', '>=0.5.13'
11
+ #end
12
+
data/Readme.md CHANGED
@@ -8,7 +8,9 @@ Resort provides sorting capabilities to your Rails 3 models.
8
8
 
9
9
  Or in your Gemfile:
10
10
 
11
- gem 'resort'
11
+ ```ruby
12
+ gem 'resort'
13
+ ```
12
14
 
13
15
  ##Rationale
14
16
 
@@ -30,44 +32,120 @@ First, run the migration for the model you want to Resort:
30
32
 
31
33
  Then in your Product model:
32
34
 
33
- class Product < ActiveRecord::Base
34
- resort!
35
- end
35
+ ```ruby
36
+ class Product < ActiveRecord::Base
37
+ resort!
38
+ end
39
+ ```
36
40
 
37
41
  **NOTE**: By default, Resort will treat _all products_ as a single big tree.
38
42
  If you wanted to limit the tree scope, i.e. treating every ProductLine as a
39
43
  separate tree of sortable products, you must override the `siblings` method:
40
44
 
41
- class Product < ActiveRecord::Base
42
- resort!
45
+ ```ruby
46
+ class Product < ActiveRecord::Base
47
+ resort!
43
48
 
44
- def siblings
45
- # Tree contains only products from my own product line
46
- self.product_line.products
47
- end
48
- end
49
+ def siblings
50
+ # Tree contains only products from my own product line
51
+ self.product_line.products
52
+ end
53
+ end
54
+ ```
49
55
 
50
56
  ### Concurrency
51
57
 
52
58
  Multiple users modifying the same list at the same time could be a problem,
53
59
  so it's always a good practice to wrap the changes in a transaction:
54
60
 
55
- Product.transaction do
56
- my_product.append_to(another_product)
57
- end
61
+ ```ruby
62
+ Product.transaction do
63
+ my_product.append_to(another_product)
64
+ end
65
+ ```
58
66
 
59
67
  ###API
60
68
 
61
- Every time a product is created, it will be appended after the last element.
69
+ **Every time a product is created, it will be appended after the last element.**
62
70
 
63
71
  Moreover, now a `product` responds to the following methods:
64
72
 
65
73
  * `first?` &mdash; Returns true if the element is the first of the tree.
66
74
  * `append_to(other_element)` &mdash; Appends the element _after_ another element.
75
+ * `next` &mdash; Returns the next element in the list
76
+ * `previous` &mdash; Returns the previous element in the list
67
77
 
68
78
  And the class Product has a new scope named `ordered` that returns the
69
79
  products in order.
70
80
 
81
+ ### Examples
82
+
83
+ Given our `Product` example defined before, we can do things like:
84
+
85
+ Getting products in order:
86
+
87
+ ```ruby
88
+ Product.first_in_order # returns the first ordered product.
89
+ Product.last_in_order # returns the last ordered product.
90
+ Product.ordered # returns all products ordered as an Array, not a Relation!
91
+ ```
92
+
93
+ Find ordered products with scopes or conditions:
94
+
95
+ ```ruby
96
+ Product.where('price > 10').ordered # => Ordered array of products with price > 10
97
+ Product.with_custom_scope.ordered # => Ordered array of products with your custom conditions
98
+ ```
99
+
100
+ Modify the list of products:
101
+
102
+ ```ruby
103
+ product = Product.create(:name => 'Bread')
104
+ product.first? # => true
105
+
106
+ another_product = Product.create(:name => 'Milk')
107
+ yet_another_product = Product.create(:name => 'Salami')
108
+
109
+ yet_another_product.append_to(product) # puts the products right after the first one
110
+
111
+ Product.ordered.map(&:name) # => ['Bread', 'Salami', 'Milk']
112
+ ```
113
+
114
+ Check neighbours:
115
+
116
+ ```ruby
117
+ product = Product.create(:name => 'Bread')
118
+ second_product = Product.create(:name => 'Milk')
119
+ third_product = Product.create(:name => 'Salami')
120
+
121
+ second_product.previous.name # => 'Bread'
122
+ second_product.next.name # => 'Salami'
123
+
124
+ third_product.next # => nil
125
+ ```
126
+
127
+ Maybe you need different orders depending on the product vendor:
128
+
129
+ ```ruby
130
+ class Product < ActiveRecord::Base
131
+ resort!
132
+
133
+ belongs_to :vendor
134
+
135
+ def siblings
136
+ self.vendor.products
137
+ end
138
+ end
139
+
140
+ bread = Product.create(:name => 'Bread', :vendor => Vendor.where(:name => 'Bread factory'))
141
+ bread.first? # => true
142
+
143
+ milk = Product.create(:name => 'Milk', :vendor => Vendor.where(:name => 'Cow world'))
144
+ milk.first? # => true
145
+
146
+ # bread and milk aren't neighbours
147
+ ```
148
+
71
149
  ##Under the hood
72
150
 
73
151
  Run the test suite by typing:
data/lib/resort.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'generators/active_record/resort_generator' if defined?(Rails)
2
+ require 'active_record' unless defined?(ActiveRecord)
2
3
 
3
4
  # # Resort
4
5
  #
@@ -155,10 +156,10 @@ module Resort
155
156
  if _siblings.count > 0
156
157
  delete_from_list
157
158
  old_first = _siblings.first_in_order
158
- self.update_attribute(:next_id, old_first.id)
159
- old_first.update_attribute(:first, false)
159
+ raise(ActiveRecord::RecordNotSaved) unless self.update_attribute(:next_id, old_first.id)
160
+ raise(ActiveRecord::RecordNotSaved) unless old_first.update_attribute(:first, false)
160
161
  end
161
- self.update_attribute(:first, true)
162
+ raise(ActiveRecord::RecordNotSaved) unless self.update_attribute(:first, true)
162
163
  end
163
164
  end
164
165
 
@@ -177,8 +178,12 @@ module Resort
177
178
  return if another.next_id == id
178
179
  another.lock!
179
180
  delete_from_list
180
- self.update_attribute(:next_id, another.next_id) if self.next_id or (another && another.next_id)
181
- another.update_attribute(:next_id, self.id) if another
181
+ if self.next_id or (another && another.next_id)
182
+ raise(ActiveRecord::RecordNotSaved) unless self.update_attribute(:next_id, another.next_id)
183
+ end
184
+ if another
185
+ raise(ActiveRecord::RecordNotSaved) unless another.update_attribute(:next_id, self.id)
186
+ end
182
187
  end
183
188
  end
184
189
 
@@ -187,16 +192,16 @@ module Resort
187
192
  def delete_from_list
188
193
  if first? && self.next
189
194
  self.next.lock!
190
- self.next.update_attribute(:first, true)
195
+ raise(ActiveRecord::RecordNotSaved) unless self.next.update_attribute(:first, true)
191
196
  elsif self.previous
192
197
  self.previous.lock!
193
- self.previous.update_attribute(:next_id, self.next_id)
198
+ p = self.previous
199
+ self.previous = nil unless frozen?
200
+ raise(ActiveRecord::RecordNotSaved) unless p.update_attribute(:next_id, self.next_id)
194
201
  end
195
-
196
202
  unless frozen?
197
203
  self.first = false
198
204
  self.next = nil
199
- self.previous = nil
200
205
  save!
201
206
  end
202
207
  end
@@ -208,7 +213,7 @@ module Resort
208
213
  def last!
209
214
  self.class.transaction do
210
215
  self.lock!
211
- _siblings.last_in_order.update_attribute(:next_id, self.id)
216
+ raise(ActiveRecord::RecordNotSaved) unless _siblings.last_in_order.update_attribute(:next_id, self.id)
212
217
  end
213
218
  end
214
219
 
@@ -229,5 +234,4 @@ module Resort
229
234
  end
230
235
  end
231
236
 
232
- require 'active_record' unless defined?(ActiveRecord)
233
237
  ActiveRecord::Base.extend Resort::ClassMethods
@@ -1,4 +1,4 @@
1
1
  module Resort
2
2
  # Resort's version number
3
- VERSION = "0.2.3"
3
+ VERSION = "0.3.0"
4
4
  end
data/resort.gemspec CHANGED
@@ -14,7 +14,8 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.rubyforge_project = "resort"
16
16
 
17
- s.add_runtime_dependency 'activerecord', '~> 3.0.5'
17
+ s.add_runtime_dependency 'activerecord', '>= 3.0.5', '< 3.2'
18
+ # s.add_runtime_dependency 'activerecord', '~> 3.0.5'
18
19
  s.add_development_dependency 'sqlite3'
19
20
  s.add_development_dependency 'rspec', '~> 2.5.0'
20
21
  s.add_development_dependency 'yard'
data/spec/resort_spec.rb CHANGED
@@ -17,7 +17,7 @@ module Resort
17
17
  (class << subject.class; self; end).ancestors.should include(Sortable::ClassMethods)
18
18
  end
19
19
  it 'defines a siblings method' do
20
- subject.class.instance_methods.should include(:siblings)
20
+ subject.should respond_to(:siblings)
21
21
  end
22
22
  end
23
23
 
@@ -67,8 +67,8 @@ module Resort
67
67
 
68
68
  describe "siblings" do
69
69
  before do
70
- one_list = List.create(:name => 'My list')
71
- another_list = List.create(:name => 'My other list')
70
+ one_list = OrderedList.create(:name => 'My list')
71
+ another_list = OrderedList.create(:name => 'My other list')
72
72
 
73
73
  4.times do |i|
74
74
  one_list.items << ListItem.new(:name => "My list item #{i}")
@@ -79,22 +79,22 @@ module Resort
79
79
 
80
80
  describe "#first_in_order" do
81
81
  it 'returns the first element of the list' do
82
- List.find_by_name('My list').items.first_in_order.name.should == "My list item 0"
83
- List.find_by_name('My other list').items.first_in_order.name.should == "My other list item 0"
82
+ OrderedList.find_by_name('My list').items.first_in_order.name.should == "My list item 0"
83
+ OrderedList.find_by_name('My other list').items.first_in_order.name.should == "My other list item 0"
84
84
  end
85
85
  end
86
86
 
87
87
  describe "#last_in_order" do
88
88
  it 'returns the last element of the list' do
89
- List.find_by_name('My list').items.last_in_order.name.should == "My list item 3"
90
- List.find_by_name('My other list').items.last_in_order.name.should == "My other list item 3"
89
+ OrderedList.find_by_name('My list').items.last_in_order.name.should == "My list item 3"
90
+ OrderedList.find_by_name('My other list').items.last_in_order.name.should == "My other list item 3"
91
91
  end
92
92
  end
93
93
 
94
94
  describe "#ordered" do
95
95
  it 'returns all elements ordered' do
96
- List.find_by_name('My list').items.ordered.map(&:name).should == ['My list item 0', 'My list item 1', 'My list item 2', 'My list item 3']
97
- List.find_by_name('My other list').items.ordered.map(&:name).should == ['My other list item 0', 'My other list item 1', 'My other list item 2', 'My other list item 3']
96
+ OrderedList.find_by_name('My list').items.ordered.map(&:name).should == ['My list item 0', 'My list item 1', 'My list item 2', 'My list item 3']
97
+ OrderedList.find_by_name('My other list').items.ordered.map(&:name).should == ['My other list item 0', 'My other list item 1', 'My other list item 2', 'My other list item 3']
98
98
  end
99
99
 
100
100
  it 'raises when ordering without scope' do
@@ -105,7 +105,7 @@ module Resort
105
105
  end
106
106
 
107
107
  after do
108
- List.destroy_all
108
+ OrderedList.destroy_all
109
109
  ListItem.destroy_all
110
110
  end
111
111
  end
@@ -143,9 +143,9 @@ module Resort
143
143
 
144
144
  context 'when there are no siblings' do
145
145
  it 'prepends the element' do
146
- one_list = List.create(:name => 'My list')
147
- another_list = List.create(:name => 'My other list')
148
- item = ListItem.create(:name => "My list item", :list => one_list)
146
+ one_list = OrderedList.create(:name => 'My list')
147
+ another_list = OrderedList.create(:name => 'My other list')
148
+ item = ListItem.create(:name => "My list item", :ordered_list => one_list)
149
149
 
150
150
  item.should be_first
151
151
  item.next.should be_nil
@@ -154,10 +154,10 @@ module Resort
154
154
  end
155
155
  context 'otherwise' do
156
156
  it 'appends the element' do
157
- one_list = List.create(:name => 'My list')
158
- another_list = List.create(:name => 'My other list')
159
- ListItem.create(:name => "1", :list => one_list)
160
- ListItem.create(:name => "last!", :list => one_list)
157
+ one_list = OrderedList.create(:name => 'My list')
158
+ another_list = OrderedList.create(:name => 'My other list')
159
+ ListItem.create(:name => "1", :ordered_list => one_list)
160
+ ListItem.create(:name => "last!", :ordered_list => one_list)
161
161
 
162
162
  first = ListItem.find_by_name('1')
163
163
  last = ListItem.find_by_name('last!')
@@ -170,15 +170,15 @@ module Resort
170
170
  end
171
171
 
172
172
  it 'prepends the last element' do
173
- one_list = List.create(:name => 'My list')
174
- ListItem.create(:name => "First", :list => one_list)
175
- ListItem.create(:name => "Second", :list => one_list)
176
- third = ListItem.create(:name => "Third", :list => one_list)
173
+ one_list = OrderedList.create(:name => 'My list')
174
+ ListItem.create(:name => "First", :ordered_list => one_list)
175
+ ListItem.create(:name => "Second", :ordered_list => one_list)
176
+ third = ListItem.create(:name => "Third", :ordered_list => one_list)
177
177
 
178
178
  third.prepend
179
- first = ListItem.where(:name => "First", :list_id => one_list).first
180
- second = ListItem.where(:name => "Second", :list_id => one_list).first
181
- third = ListItem.where(:name => "Third", :list_id => one_list).first
179
+ first = ListItem.where(:name => "First", :ordered_list_id => one_list).first
180
+ second = ListItem.where(:name => "Second", :ordered_list_id => one_list).first
181
+ third = ListItem.where(:name => "Third", :ordered_list_id => one_list).first
182
182
 
183
183
  first.should_not be_first
184
184
  second.should_not be_first
@@ -187,9 +187,10 @@ module Resort
187
187
  first.next.name.should == 'Second'
188
188
  second.next.should be_nil
189
189
  end
190
+
190
191
  end
191
192
  after do
192
- List.destroy_all
193
+ OrderedList.destroy_all
193
194
  ListItem.destroy_all
194
195
  end
195
196
  end
@@ -259,7 +260,7 @@ module Resort
259
260
  @article3 = Article.find_by_name('3')
260
261
  @article4 = Article.find_by_name('4')
261
262
  end
262
-
263
+
263
264
  describe "#push" do
264
265
  it "appends the element to the list" do
265
266
  @article1.push
@@ -299,6 +300,11 @@ module Resort
299
300
  article4.next.name.should == '1'
300
301
  end
301
302
 
303
+ it 'will raise ActiveRecord::RecordNotSaved if update fails' do
304
+ @article2.should_receive(:update_attribute).and_return(false)
305
+ expect { @article2.prepend }.to raise_error(ActiveRecord::RecordNotSaved)
306
+ end
307
+
302
308
  context 'when the article is already first' do
303
309
  it 'does nothing' do
304
310
  @article1.prepend
@@ -310,6 +316,11 @@ module Resort
310
316
  end
311
317
 
312
318
  describe "#append_to" do
319
+ it 'will raise ActiveRecord::RecordNotSaved if update fails' do
320
+ @article2.should_receive(:update_attribute).and_return(false)
321
+ expect { @article2.append_to(@article3) }.to raise_error(ActiveRecord::RecordNotSaved)
322
+ end
323
+
313
324
  context 'appending 1 after 2' do
314
325
  it "appends the element after another element" do
315
326
  @article1.append_to(@article2)
@@ -357,7 +368,7 @@ module Resort
357
368
 
358
369
  article1 = Article.find_by_name('1')
359
370
  article1.next.name.should == '3'
360
-
371
+
361
372
  article2 = Article.find_by_name('2')
362
373
  article2.previous.name.should == '3'
363
374
  article2.next.name.should == '4'
@@ -405,7 +416,7 @@ module Resort
405
416
 
406
417
  article1 = Article.find_by_name('1')
407
418
  article1.next.name.should == '3'
408
-
419
+
409
420
  article2 = Article.find_by_name('2')
410
421
  article2.previous.name.should == '3'
411
422
  article2.next.name.should == '4'
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,12 @@
1
1
  require 'rspec'
2
2
 
3
3
  module Rails
4
+ class << self
5
+ # 3.0 defaults this, 3.1 does not
6
+ def application
7
+ "application"
8
+ end
9
+ end
4
10
  end
5
11
 
6
12
  require 'resort'
@@ -22,7 +28,7 @@ ActiveRecord::Schema.define do
22
28
  t.timestamps
23
29
  end
24
30
 
25
- create_table :lists do |t|
31
+ create_table :ordered_lists do |t|
26
32
  t.string :name
27
33
  t.timestamps
28
34
  end
@@ -31,7 +37,7 @@ ActiveRecord::Schema.define do
31
37
  t.string :name
32
38
  t.boolean :first
33
39
  t.references :next
34
- t.references :list
40
+ t.references :ordered_list
35
41
  t.timestamps
36
42
  end
37
43
  end
@@ -42,17 +48,17 @@ class Article < ActiveRecord::Base
42
48
  resort!
43
49
  end
44
50
 
45
- class List < ActiveRecord::Base
51
+ class OrderedList < ActiveRecord::Base
46
52
  has_many :items, :class_name => 'ListItem'
47
53
  end
48
54
 
49
55
  class ListItem < ActiveRecord::Base
50
- belongs_to :list
56
+ belongs_to :ordered_list
51
57
  resort!
52
58
 
53
59
  default_scope :order => 'created_at desc'
54
60
 
55
61
  def siblings
56
- self.list.items
62
+ self.ordered_list.items
57
63
  end
58
64
  end
metadata CHANGED
@@ -1,99 +1,98 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: resort
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
4
5
  prerelease:
5
- version: 0.2.3
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Oriol Gual
9
9
  - Josep M. Bach
10
10
  - Josep Jaume Rey
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
-
15
- date: 2011-04-19 00:00:00 +02:00
16
- default_executable:
17
- dependencies:
18
- - !ruby/object:Gem::Dependency
14
+ date: 2012-02-18 00:00:00.000000000Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
19
17
  name: activerecord
20
- prerelease: false
21
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirement: &70302327492940 !ruby/object:Gem::Requirement
22
19
  none: false
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
26
23
  version: 3.0.5
24
+ - - <
25
+ - !ruby/object:Gem::Version
26
+ version: '3.2'
27
27
  type: :runtime
28
- version_requirements: *id001
29
- - !ruby/object:Gem::Dependency
30
- name: sqlite3
31
28
  prerelease: false
32
- requirement: &id002 !ruby/object:Gem::Requirement
29
+ version_requirements: *70302327492940
30
+ - !ruby/object:Gem::Dependency
31
+ name: sqlite3
32
+ requirement: &70302327491540 !ruby/object:Gem::Requirement
33
33
  none: false
34
- requirements:
35
- - - ">="
36
- - !ruby/object:Gem::Version
37
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
38
  type: :development
39
- version_requirements: *id002
40
- - !ruby/object:Gem::Dependency
41
- name: rspec
42
39
  prerelease: false
43
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: *70302327491540
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: &70302327490080 !ruby/object:Gem::Requirement
44
44
  none: false
45
- requirements:
45
+ requirements:
46
46
  - - ~>
47
- - !ruby/object:Gem::Version
47
+ - !ruby/object:Gem::Version
48
48
  version: 2.5.0
49
49
  type: :development
50
- version_requirements: *id003
51
- - !ruby/object:Gem::Dependency
52
- name: yard
53
50
  prerelease: false
54
- requirement: &id004 !ruby/object:Gem::Requirement
51
+ version_requirements: *70302327490080
52
+ - !ruby/object:Gem::Dependency
53
+ name: yard
54
+ requirement: &70302327489380 !ruby/object:Gem::Requirement
55
55
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- version: "0"
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
60
  type: :development
61
- version_requirements: *id004
62
- - !ruby/object:Gem::Dependency
63
- name: bluecloth
64
61
  prerelease: false
65
- requirement: &id005 !ruby/object:Gem::Requirement
62
+ version_requirements: *70302327489380
63
+ - !ruby/object:Gem::Dependency
64
+ name: bluecloth
65
+ requirement: &70302327488200 !ruby/object:Gem::Requirement
66
66
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: "0"
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
71
  type: :development
72
- version_requirements: *id005
73
- - !ruby/object:Gem::Dependency
74
- name: generator_spec
75
72
  prerelease: false
76
- requirement: &id006 !ruby/object:Gem::Requirement
73
+ version_requirements: *70302327488200
74
+ - !ruby/object:Gem::Dependency
75
+ name: generator_spec
76
+ requirement: &70302327487300 !ruby/object:Gem::Requirement
77
77
  none: false
78
- requirements:
78
+ requirements:
79
79
  - - ~>
80
- - !ruby/object:Gem::Version
80
+ - !ruby/object:Gem::Version
81
81
  version: 0.8.1
82
82
  type: :development
83
- version_requirements: *id006
83
+ prerelease: false
84
+ version_requirements: *70302327487300
84
85
  description: Positionless model sorting for Rails 3.
85
- email:
86
+ email:
86
87
  - info@codegram.com
87
88
  executables: []
88
-
89
89
  extensions: []
90
-
91
90
  extra_rdoc_files: []
92
-
93
- files:
91
+ files:
94
92
  - .gitignore
95
93
  - .rspec
96
94
  - .rvmrc
95
+ - .travis.yml
97
96
  - Gemfile
98
97
  - LICENSE
99
98
  - Rakefile
@@ -106,35 +105,32 @@ files:
106
105
  - spec/generators/migration_spec.rb
107
106
  - spec/resort_spec.rb
108
107
  - spec/spec_helper.rb
109
- has_rdoc: true
110
108
  homepage: http://codegram.github.com/resort
111
109
  licenses: []
112
-
113
110
  post_install_message:
114
111
  rdoc_options: []
115
-
116
- require_paths:
112
+ require_paths:
117
113
  - lib
118
- required_ruby_version: !ruby/object:Gem::Requirement
114
+ required_ruby_version: !ruby/object:Gem::Requirement
119
115
  none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: "0"
124
- required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
121
  none: false
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- version: "0"
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
130
126
  requirements: []
131
-
132
127
  rubyforge_project: resort
133
- rubygems_version: 1.6.1
128
+ rubygems_version: 1.8.10
134
129
  signing_key:
135
130
  specification_version: 3
136
131
  summary: Positionless model sorting for Rails 3.
137
- test_files:
132
+ test_files:
138
133
  - spec/generators/migration_spec.rb
139
134
  - spec/resort_spec.rb
140
135
  - spec/spec_helper.rb
136
+ has_rdoc: