e9_rails 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,42 +13,44 @@ module E9Rails::Controllers
13
13
  def ordered_if; params[:action] == 'index' end
14
14
 
15
15
  included do
16
- has_scope :ordered_on, :if => :ordered_if, :default => lambda {|c| c.send(:default_ordered_on) } do |controller, scope, val|
17
- begin
18
- # determine the dir from params or controller default
19
- dir = case controller.params[:dir]
20
- when /^desc$/i then 'DESC'
21
- when /^asc$/i then 'ASC'
22
- else controller.send(:default_ordered_dir) rescue ''
23
- end
16
+ if respond_to?(:resource_class)
17
+ has_scope :ordered_on, :if => :ordered_if, :default => lambda {|c| c.send(:default_ordered_on) } do |controller, scope, val|
18
+ begin
19
+ # determine the dir from params or controller default
20
+ dir = case controller.params[:dir]
21
+ when /^desc$/i then 'DESC'
22
+ when /^asc$/i then 'ASC'
23
+ else controller.send(:default_ordered_dir) rescue ''
24
+ end
24
25
 
25
- # split the ordered_param on commas and periods, the idea being that
26
- # it can take multiple columns, and on assocation columns
27
- val = val.split(',').map {|v| v.split('.') }
26
+ # split the ordered_param on commas and periods, the idea being that
27
+ # it can take multiple columns, and on assocation columns
28
+ val = val.split(',').map {|v| v.split('.') }
28
29
 
29
- val = val.map {|v|
30
- # if val split on '.', try to constantize the parsed class
31
- if v.length > 1
32
- klass = v.first.classify.constantize rescue nil
33
- # and if it succeeds
34
- if klass
35
- # apply the join to the scope.
36
- # NOTE there's no checking whatsoever here as to:
37
- # A.) is this class an association?
38
- # B.) does this class have the passed column?
39
- scope = scope.joins(v.first.underscore.to_sym)
40
- "#{klass.table_name}.#{v.last} #{dir}"
30
+ val = val.map {|v|
31
+ # if val split on '.', try to constantize the parsed class
32
+ if v.length > 1
33
+ klass = v.first.classify.constantize rescue nil
34
+ # and if it succeeds
35
+ if klass
36
+ # apply the join to the scope.
37
+ # NOTE there's no checking whatsoever here as to:
38
+ # A.) is this class an association?
39
+ # B.) does this class have the passed column?
40
+ scope = scope.joins(v.first.underscore.to_sym)
41
+ "#{klass.table_name}.#{v.last} #{dir}"
42
+ end
43
+ else
44
+ # else we're assuming the column is on the table
45
+ "#{resource_class.table_name}.#{v.last} #{dir}"
41
46
  end
42
- else
43
- # else we're assuming the column is on the table
44
- "#{resource_class.table_name}.#{v.last} #{dir}"
45
- end
46
- }.compact.join(', ')
47
+ }.compact.join(', ')
47
48
 
48
- scope.order(val)
49
- rescue => e
50
- raise e
51
- scope
49
+ scope.order(val)
50
+ rescue => e
51
+ Rails.logger.error("Orderable ordered_on scope : #{e.message}")
52
+ scope
53
+ end
52
54
  end
53
55
  end
54
56
  end
@@ -0,0 +1,46 @@
1
+ module E9Rails::Controllers
2
+ #
3
+ # Module to give a controller "sortable" functionality.
4
+ #
5
+ # To implement this there must exist a POST route to the collection url
6
+ # named update_order which passes an array, "ids", representing the new order, e.g.
7
+ #
8
+ # resources :sortable_things do
9
+ # collection { post :update_order }
10
+ # end
11
+ #
12
+ module Sortable
13
+ extend ActiveSupport::Concern
14
+
15
+ def update_order(options = {}, &block)
16
+ if params[:ids].is_a?(Array)
17
+ pos = 0
18
+ params[:ids].each {|id| pos += 1; _do_position_update(id, :position => pos) }
19
+ flash[:notice] = I18n.t(:notice, :scope => :"flash.actions.update_order")
20
+ else
21
+ flash[:alert] = I18n.t(:alert, :scope => :"flash.actions.update_order")
22
+ end
23
+
24
+ block ||= proc {|format| format.js { head :ok } }
25
+
26
+ respond_with(collection, &block)
27
+ end
28
+
29
+ alias :update_order! :update_order
30
+
31
+ #
32
+ # Override _do_position_update in your controller to define a different method to
33
+ # update a record's position.
34
+ #
35
+ # The out-of-the-box implementation assumes two things:
36
+ #
37
+ # 1. An InheritedResources controller
38
+ # 2. A vanilla (position column) acts_as_list install.
39
+ #
40
+ def _do_position_update(id, hash_with_position)
41
+ resource_class.update(id, hash_with_position)
42
+ end
43
+
44
+ private :_do_position_update
45
+ end
46
+ end
@@ -1,3 +1,3 @@
1
1
  module E9Rails
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
data/lib/e9_rails.rb CHANGED
@@ -11,6 +11,7 @@ module E9Rails
11
11
 
12
12
  module Controllers
13
13
  autoload :Orderable, 'e9_rails/controllers/orderable'
14
+ autoload :Sortable, 'e9_rails/controllers/sortable'
14
15
  end
15
16
 
16
17
  module Helpers
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: e9_rails
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 7
9
- version: 0.0.7
4
+ prerelease:
5
+ version: 0.0.8
10
6
  platform: ruby
11
7
  authors:
12
8
  - Travis Cox
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-04-15 00:00:00 -04:00
13
+ date: 2011-04-18 00:00:00 -04:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -25,10 +21,6 @@ dependencies:
25
21
  requirements:
26
22
  - - ~>
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 3
30
- - 0
31
- - 0
32
24
  version: 3.0.0
33
25
  type: :runtime
34
26
  version_requirements: *id001
@@ -40,8 +32,6 @@ dependencies:
40
32
  requirements:
41
33
  - - ">="
42
34
  - !ruby/object:Gem::Version
43
- segments:
44
- - 0
45
35
  version: "0"
46
36
  type: :runtime
47
37
  version_requirements: *id002
@@ -65,6 +55,7 @@ files:
65
55
  - lib/e9_rails/active_record/inheritable_options.rb
66
56
  - lib/e9_rails/active_record/sti.rb
67
57
  - lib/e9_rails/controllers/orderable.rb
58
+ - lib/e9_rails/controllers/sortable.rb
68
59
  - lib/e9_rails/helpers/pagination.rb
69
60
  - lib/e9_rails/helpers/resource_error_messages.rb
70
61
  - lib/e9_rails/helpers/title.rb
@@ -84,21 +75,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
75
  requirements:
85
76
  - - ">="
86
77
  - !ruby/object:Gem::Version
87
- segments:
88
- - 0
89
78
  version: "0"
90
79
  required_rubygems_version: !ruby/object:Gem::Requirement
91
80
  none: false
92
81
  requirements:
93
82
  - - ">="
94
83
  - !ruby/object:Gem::Version
95
- segments:
96
- - 0
97
84
  version: "0"
98
85
  requirements: []
99
86
 
100
87
  rubyforge_project: e9_rails
101
- rubygems_version: 1.3.7
88
+ rubygems_version: 1.6.2
102
89
  signing_key:
103
90
  specification_version: 3
104
91
  summary: A collection of helpers and extensions used in e9 Rails 3 projects