opensteam 0.9.1 → 0.9.2
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.
- data/CHANGELOG +12 -1
- data/generators/opensteam/opensteam_generator.rb +5 -0
- data/generators/opensteam/templates/app/controllers/admin/invoices_controller.rb +31 -25
- data/generators/opensteam/templates/app/controllers/admin/orders_controller.rb +22 -69
- data/generators/opensteam/templates/app/controllers/admin/shipments_controller.rb +29 -26
- data/generators/opensteam/templates/app/controllers/admin/users_controller.rb +28 -13
- data/generators/opensteam/templates/app/controllers/admin_controller.rb +39 -1
- data/generators/opensteam/templates/app/controllers/profile/orders_controller.rb +20 -59
- data/generators/opensteam/templates/app/helpers/webshop_helper.rb +3 -0
- data/generators/opensteam/templates/app/models/filter_entry.rb +17 -0
- data/generators/opensteam/templates/app/views/admin/filters/_filter.html.erb +14 -0
- data/generators/opensteam/templates/app/views/admin/filters/_filter_entry.html.erb +6 -0
- data/generators/opensteam/templates/app/views/admin/filters/_filter_fields.html.erb +8 -0
- data/generators/opensteam/templates/app/views/admin/invoices/_invoices.html.erb +9 -9
- data/generators/opensteam/templates/app/views/admin/invoices/index.html.erb +5 -1
- data/generators/opensteam/templates/app/views/admin/orders/_orders.html.erb +15 -16
- data/generators/opensteam/templates/app/views/admin/orders/show.html.erb +9 -8
- data/generators/opensteam/templates/app/views/admin/shipments/_shipments.html.erb +11 -11
- data/generators/opensteam/templates/app/views/admin/shipments/index.html.erb +3 -0
- data/generators/opensteam/templates/app/views/admin/users/edit.html.erb +3 -1
- data/generators/opensteam/templates/app/views/admin/users/index.html.erb +18 -6
- data/generators/opensteam/templates/app/views/admin/users/new.html.erb +2 -0
- data/generators/opensteam/templates/app/views/layouts/admin.html.erb +4 -0
- data/generators/opensteam/templates/app/views/profile/orders/_orders.html.erb +9 -19
- data/generators/opensteam/templates/config/initializers/opensteam_model_tables.rb +80 -41
- data/generators/opensteam/templates/db/migrate/20080609095728_create_order_items.rb +1 -0
- data/generators/opensteam/templates/db/migrate/20080609095729_create_orders.rb +2 -2
- data/generators/opensteam/templates/db/migrate/20080804152615_create_filter_entries.rb +16 -0
- data/generators/opensteam/templates/public/stylesheets/opensteam_white.css +25 -25
- data/generators/opensteam_product/templates/controllers/product_controller.rb +1 -1
- data/lib/opensteam/extension_base.rb +1 -0
- data/lib/opensteam/helpers/config_table_helper.rb +139 -0
- data/lib/opensteam/initializer.rb +3 -3
- data/lib/opensteam/invoice_base.rb +4 -0
- data/lib/opensteam/order_base.rb +5 -3
- data/lib/opensteam/shipment_base.rb +6 -0
- data/lib/opensteam/user_base.rb +1 -0
- data/lib/opensteam/version.rb +1 -1
- metadata +8 -3
- data/lib/opensteam/helper/configurable_table.rb +0 -228
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateFilterEntries < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :filter_entries do |t|
|
4
|
+
t.string :model, :null => false
|
5
|
+
t.string :key, :null => false
|
6
|
+
t.string :val, :null => false
|
7
|
+
t.string :op, :default => "LIKE"
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
drop_table :filter_entries
|
15
|
+
end
|
16
|
+
end
|
@@ -9,33 +9,32 @@ body {
|
|
9
9
|
}
|
10
10
|
|
11
11
|
#menu {
|
12
|
-
|
12
|
+
float:right;
|
13
13
|
}
|
14
14
|
|
15
15
|
#page {
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
margin-top:30px;
|
17
|
+
margin-left:50px;
|
18
|
+
margin-right:50px;
|
19
19
|
}
|
20
20
|
|
21
21
|
|
22
22
|
#header {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
padding-left:30px;
|
24
|
+
padding-top:30px;
|
25
|
+
padding-bottom:10px;
|
26
|
+
|
27
27
|
border-bottom:1px solid black;
|
28
28
|
}
|
29
29
|
|
30
30
|
#content_box {
|
31
|
-
|
31
|
+
clear:both;
|
32
32
|
}
|
33
33
|
|
34
34
|
#content_box div {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
;
|
35
|
+
padding:10px;
|
36
|
+
float:left
|
37
|
+
;
|
39
38
|
}
|
40
39
|
|
41
40
|
#content_box div * {
|
@@ -49,20 +48,21 @@ body {
|
|
49
48
|
|
50
49
|
|
51
50
|
#content_box div div {
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
border:none;
|
52
|
+
padding:10px;
|
53
|
+
clear:both;
|
55
54
|
}
|
56
55
|
|
57
56
|
#sidebar {
|
58
57
|
}
|
59
58
|
|
60
59
|
#content {
|
60
|
+
border-left: 1px solid #aaa ;
|
61
61
|
}
|
62
62
|
|
63
63
|
#footer {
|
64
|
-
|
65
|
-
|
64
|
+
border-top: 1px solid black;
|
65
|
+
clear:both;
|
66
66
|
}
|
67
67
|
|
68
68
|
#cart {
|
@@ -79,19 +79,19 @@ body {
|
|
79
79
|
}
|
80
80
|
|
81
81
|
.configured_table table {
|
82
|
-
|
83
|
-
|
84
|
-
|
82
|
+
border-collapse: collapse ;
|
83
|
+
border-spacing: 1px;
|
84
|
+
font-size:8pt;
|
85
85
|
}
|
86
86
|
|
87
87
|
.configured_table table th a {
|
88
|
-
|
89
|
-
|
90
|
-
|
88
|
+
width:100%;
|
89
|
+
color:black;
|
90
|
+
text-decoration:none;
|
91
91
|
}
|
92
92
|
|
93
93
|
.configured_table table th a:hover {
|
94
|
-
|
94
|
+
background-color:#eee;
|
95
95
|
}
|
96
96
|
|
97
97
|
.configured_table table td {
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module Opensteam::Helpers
|
2
|
+
|
3
|
+
|
4
|
+
module ConfigTableHelper
|
5
|
+
|
6
|
+
def self.included(base)
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
base.class_eval do
|
9
|
+
include InstanceMethods
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
module ClassMethods
|
20
|
+
|
21
|
+
def opensteam_filter(name, *args, &block )
|
22
|
+
@osteam_configtable = Opensteam::Helpers::ConfigTableHelper::Base.new( name, *args )
|
23
|
+
@osteam_configtable.instance_eval(&block) if block_given?
|
24
|
+
|
25
|
+
class << self ; attr_accessor :osteam_configtable ; end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
module InstanceMethods
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
class Base < ActionView::Base
|
37
|
+
|
38
|
+
include ActionView::Helpers::TagHelper
|
39
|
+
include ActionView::Helpers::FormTagHelper
|
40
|
+
|
41
|
+
attr_accessor :name, :default_include, :columns, :order_column
|
42
|
+
|
43
|
+
def initialize( name, *args )
|
44
|
+
# args = args.first if args.is_a?(Array)
|
45
|
+
@name = name
|
46
|
+
@default_include = [] #args[:default_include] || []
|
47
|
+
@columns = []
|
48
|
+
end
|
49
|
+
|
50
|
+
def include_associations(arr)
|
51
|
+
@default_include = arr
|
52
|
+
end
|
53
|
+
|
54
|
+
def column(id, *args)
|
55
|
+
@columns << Column.new( id, *args )
|
56
|
+
end
|
57
|
+
|
58
|
+
def default_order_column(id)
|
59
|
+
@order_column = id
|
60
|
+
end
|
61
|
+
|
62
|
+
def [](id)
|
63
|
+
@columns.find { |s| s.id.to_s == id.to_s }
|
64
|
+
end
|
65
|
+
|
66
|
+
def table_header( &block )
|
67
|
+
html_options = {}
|
68
|
+
content_tag( :thead, {} ) do
|
69
|
+
content_tag( :tr, html_options ) do
|
70
|
+
@columns.collect do |c|
|
71
|
+
content_tag( :th, {} ) do
|
72
|
+
block.call( c )
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
class Column
|
87
|
+
attr_accessor :name, :order, :sql, :id
|
88
|
+
def initialize(id, *args )
|
89
|
+
@args = args.is_a?( Array ) ? args.first : args
|
90
|
+
@id = id
|
91
|
+
@order = @args[:order] || @args[:sql]
|
92
|
+
@sql = @args[:sql] || @args[:order]
|
93
|
+
@name = @args[:name]
|
94
|
+
@method = @args[:method]
|
95
|
+
end
|
96
|
+
|
97
|
+
def sort
|
98
|
+
if @method
|
99
|
+
return Proc.new { |a,b| a.__send__( @id ).__send__(@method) <=> b.__send__( @id ).__send__( @method ) }
|
100
|
+
end
|
101
|
+
return @order
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
module HelperMethods
|
110
|
+
|
111
|
+
def osteam_sort_table( mdl, opts = {}, &block )
|
112
|
+
mdl = mdl.to_s.classify.constantize unless mdl.is_a?( Class )
|
113
|
+
config_table = mdl.osteam_configtable
|
114
|
+
|
115
|
+
content = capture( config_table, &block )
|
116
|
+
|
117
|
+
html_options = opts[:html] || {}
|
118
|
+
|
119
|
+
concat(
|
120
|
+
content_tag( :div, { :class => 'configured_table_containter' } ) do
|
121
|
+
content_tag( :table, html_options ) do
|
122
|
+
content
|
123
|
+
end
|
124
|
+
end, block.binding )
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
end
|
@@ -35,6 +35,8 @@ module Opensteam
|
|
35
35
|
|
36
36
|
def require_opensteam_after_initialize
|
37
37
|
require 'opensteam/user_base' ## AuthenticatedMethods include !!!
|
38
|
+
|
39
|
+
require 'opensteam/helpers/config_table_helper'
|
38
40
|
|
39
41
|
_logger "loaded!"
|
40
42
|
end
|
@@ -97,9 +99,7 @@ module Opensteam
|
|
97
99
|
require 'opensteam/cart_base'
|
98
100
|
require 'opensteam/checkout'
|
99
101
|
require 'opensteam/inventory_base'
|
100
|
-
|
101
|
-
|
102
|
-
require 'opensteam/helper/configurable_table'
|
102
|
+
|
103
103
|
|
104
104
|
|
105
105
|
end
|
@@ -41,6 +41,10 @@ module Opensteam
|
|
41
41
|
has_many :order_items, :class_name => 'Opensteam::OrderBase::OrderItem'
|
42
42
|
|
43
43
|
|
44
|
+
named_scope :by_order, lambda { |order_id| { :include => :order, :conditions => { :order_id => order_id } } }
|
45
|
+
named_scope :order_by, lambda { |by| { :include => Invoice.osteam_configtable.default_include, :order => Array(by).join(",") , :conditions => "orders.id = orders.id" } }
|
46
|
+
|
47
|
+
|
44
48
|
def initialize(*args)
|
45
49
|
super(*args)
|
46
50
|
if order
|
data/lib/opensteam/order_base.rb
CHANGED
@@ -46,9 +46,11 @@ module Opensteam
|
|
46
46
|
# Order Model
|
47
47
|
class Order < ActiveRecord::Base
|
48
48
|
include Opensteam::StateMachine
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
# include Opensteam::UUIDHelper
|
50
|
+
|
51
|
+
named_scope :order_by, lambda { |by| { :include => Order.osteam_configtable.default_include, :order => Array(by).join(",") , :conditions => "users.id = users.id" } }
|
52
|
+
named_scope :by_user, lambda { |user_id| { :include => [:customer ], :conditions => { :customer_id => user_id } } }
|
53
|
+
|
52
54
|
# associations
|
53
55
|
|
54
56
|
has_many :order_items, :class_name => 'Opensteam::OrderBase::OrderItem', :extend => OrderItemsExtension
|
@@ -38,6 +38,12 @@ module Opensteam
|
|
38
38
|
|
39
39
|
has_many :order_items, :class_name => 'Opensteam::OrderBase::OrderItem'
|
40
40
|
|
41
|
+
|
42
|
+
named_scope :by_order, lambda { |order_id| { :include => :order, :conditions => { :order_id => order_id } } }
|
43
|
+
named_scope :order_by, lambda { |by| { :include => Shipment.osteam_configtable.default_include, :order => Array(by).join(",") , :conditions => "orders.id = orders.id" } }
|
44
|
+
|
45
|
+
|
46
|
+
|
41
47
|
def initialize(*args)
|
42
48
|
super(*args)
|
43
49
|
|
data/lib/opensteam/user_base.rb
CHANGED
@@ -101,6 +101,7 @@ module Opensteam
|
|
101
101
|
|
102
102
|
|
103
103
|
named_scope :by_profile, lambda { |p| { :include => :profile, :conditions => "profiles.name = '#{p.to_s.classify}'" } }
|
104
|
+
named_scope :order_by, lambda { |by| { :include => Opensteam::UserBase::User.osteam_configtable.default_include, :order => by, :conditions => "profiles.id = profiles.id" } }
|
104
105
|
|
105
106
|
|
106
107
|
|
data/lib/opensteam/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opensteam
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Schaerfer
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-08-
|
12
|
+
date: 2008-08-07 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -43,7 +43,7 @@ files:
|
|
43
43
|
- lib/opensteam/inventory_base.rb
|
44
44
|
- lib/opensteam/initializer.rb
|
45
45
|
- lib/opensteam/history.rb
|
46
|
-
- lib/opensteam/
|
46
|
+
- lib/opensteam/helpers/config_table_helper.rb
|
47
47
|
- lib/opensteam/finder.rb
|
48
48
|
- lib/opensteam/extension_base.rb
|
49
49
|
- lib/opensteam/config.rb
|
@@ -122,6 +122,7 @@ files:
|
|
122
122
|
- generators/opensteam/templates/lib/authentication/by_password.rb
|
123
123
|
- generators/opensteam/templates/lib/authentication/by_cookie_token.rb
|
124
124
|
- generators/opensteam/templates/lib/authenticated_system.rb
|
125
|
+
- generators/opensteam/templates/db/migrate/20080804152615_create_filter_entries.rb
|
125
126
|
- generators/opensteam/templates/db/migrate/20080714131650_create_shipments.rb
|
126
127
|
- generators/opensteam/templates/db/migrate/20080714131513_create_invoices.rb
|
127
128
|
- generators/opensteam/templates/db/migrate/20080630114155_create_state_histories.rb
|
@@ -228,10 +229,14 @@ files:
|
|
228
229
|
- generators/opensteam/templates/app/views/admin/inventories/index.html.erb
|
229
230
|
- generators/opensteam/templates/app/views/admin/inventories/edit.html.erb
|
230
231
|
- generators/opensteam/templates/app/views/admin/index.html.erb
|
232
|
+
- generators/opensteam/templates/app/views/admin/filters/_filter_fields.html.erb
|
233
|
+
- generators/opensteam/templates/app/views/admin/filters/_filter_entry.html.erb
|
234
|
+
- generators/opensteam/templates/app/views/admin/filters/_filter.html.erb
|
231
235
|
- generators/opensteam/templates/app/views/admin/catalog.html.erb
|
232
236
|
- generators/opensteam/templates/app/views/admin/_nav.html.erb
|
233
237
|
- generators/opensteam/templates/app/views/admin/_address.html.erb
|
234
238
|
- generators/opensteam/templates/app/models/search.rb
|
239
|
+
- generators/opensteam/templates/app/models/filter_entry.rb
|
235
240
|
- generators/opensteam/templates/app/helpers/webshop_helper.rb
|
236
241
|
- generators/opensteam/templates/app/helpers/users_helper.rb
|
237
242
|
- generators/opensteam/templates/app/helpers/admin_helper.rb
|
@@ -1,228 +0,0 @@
|
|
1
|
-
module Opensteam
|
2
|
-
|
3
|
-
module Helper
|
4
|
-
|
5
|
-
|
6
|
-
# ConfigurableTable
|
7
|
-
#
|
8
|
-
# Module to Configure, Search and Sort a table, depending on a model-collection
|
9
|
-
#
|
10
|
-
module ConfigurableTableController
|
11
|
-
|
12
|
-
def self.included(base)
|
13
|
-
# base.extend( ClassMethods )
|
14
|
-
|
15
|
-
base.class_eval do
|
16
|
-
include InstanceMethods
|
17
|
-
before_filter :set_sort_column
|
18
|
-
private :sort_model, :set_sort_column
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
module InstanceMethods
|
24
|
-
|
25
|
-
# before_filter:
|
26
|
-
# if params[:sort] is set, it gets the current sort-column from the
|
27
|
-
# configured_table class variable
|
28
|
-
#
|
29
|
-
def set_sort_column
|
30
|
-
if params[:sort]
|
31
|
-
model = params[:model].demodulize.classify.constantize rescue nil
|
32
|
-
@sort_column = model.configured_table.get_column( params[:sort] ) || model.configured_table.default_sort
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def sort
|
37
|
-
if params[:sort]
|
38
|
-
self.class.to_s =~ /^(.+)Controller/
|
39
|
-
model = $1.demodulize.classify.constantize rescue nil
|
40
|
-
@result = sort_model( model, @sort_column )
|
41
|
-
end
|
42
|
-
render :action => :sort
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
# sort the current model by column
|
47
|
-
# finds all entries for current model (including all associations)
|
48
|
-
# sort entries either by "ORDER" SQL or by a ruby sort-block (depending on
|
49
|
-
# the configuration or wether the column is an association)
|
50
|
-
#
|
51
|
-
def sort_model( model, column, conditions = nil, includes = nil )
|
52
|
-
finder_args = {}
|
53
|
-
finder_args[:conditions] = conditions if conditions
|
54
|
-
finder_args[:include] = includes if includes
|
55
|
-
|
56
|
-
if column.order_ruby?
|
57
|
-
result = model.find( :all, finder_args )
|
58
|
-
result.sort!(&column.order)
|
59
|
-
else
|
60
|
-
finder_args[:order] = column.order
|
61
|
-
result = model.find(:all, finder_args )
|
62
|
-
end
|
63
|
-
toggle_sorted( model.to_s.demodulize )
|
64
|
-
result.reverse! if sorted?( model.to_s.demodulize )
|
65
|
-
result
|
66
|
-
end
|
67
|
-
|
68
|
-
# if model is currently sorted ascending
|
69
|
-
def sorted?(model)
|
70
|
-
session["#{model}_sorted".to_sym] ? true : false ;
|
71
|
-
end
|
72
|
-
|
73
|
-
|
74
|
-
# toggle the sorted-sesssion variable for the given model
|
75
|
-
def toggle_sorted(model)
|
76
|
-
session["#{model}_sorted".to_sym] = session["#{model}_sorted".to_sym] ? false : true
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
module ConfigurableTable
|
85
|
-
|
86
|
-
def self.included(base)
|
87
|
-
base.extend(ClassMethods)
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
|
-
module ClassMethods
|
93
|
-
# configure a table
|
94
|
-
# takes a block, like:
|
95
|
-
# configure_table :order do
|
96
|
-
# column :id, :name => "ID"
|
97
|
-
# end
|
98
|
-
#
|
99
|
-
def configure_table( mdl, &block )
|
100
|
-
mdl = mdl.to_s.classify.constantize unless mdl.is_a?( Class )
|
101
|
-
|
102
|
-
|
103
|
-
mdl.class_eval do
|
104
|
-
@configured_table = ConfigTable.new( self )
|
105
|
-
@configured_table.instance_eval( &block )
|
106
|
-
|
107
|
-
class << self ; attr_accessor :configured_table ; end
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
# ConfigTable
|
118
|
-
# Holds all the Columns defined fot the Configurable-Table
|
119
|
-
#
|
120
|
-
class ConfigTable
|
121
|
-
|
122
|
-
attr_accessor :columns, :model, :assocs, :assoc_names, :table_id
|
123
|
-
|
124
|
-
def initialize(mdl)
|
125
|
-
@columns = []
|
126
|
-
@model = mdl
|
127
|
-
@table_id = "#{@model.table_name}_configured_table"
|
128
|
-
@assocs = mdl.reflect_on_all_associations
|
129
|
-
@assoc_names = @assocs.collect(&:name)
|
130
|
-
end
|
131
|
-
|
132
|
-
|
133
|
-
def default_sort_col( id )
|
134
|
-
@default_sort = id.to_sym
|
135
|
-
end
|
136
|
-
|
137
|
-
def column( id, *args )
|
138
|
-
@columns << Column.new( id.to_sym, self, *args )
|
139
|
-
end
|
140
|
-
|
141
|
-
def get_column(id)
|
142
|
-
@columns.find { |s| s.id.to_sym == id.to_sym }
|
143
|
-
end
|
144
|
-
|
145
|
-
def default_sort ; get_column( @default_sort ) ; end
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
class Column
|
150
|
-
attr_accessor :id, :name, :opts, :order, :config_table, :method, :table_name, :sql_query
|
151
|
-
|
152
|
-
|
153
|
-
# initialize a column
|
154
|
-
# if column is an association of the current model, the entries
|
155
|
-
# are sorted either by a ruby-block (if a :method is defined to call on the
|
156
|
-
# association-object), by :size (ruby-block, if its a _has_many_ association) or
|
157
|
-
# simply by the id (ORDER-SQL statement)
|
158
|
-
# if columns is not an association, the entries are sorted by an ORDER-SQL statement.
|
159
|
-
#
|
160
|
-
def initialize( id, config_table, *args )
|
161
|
-
@id = id
|
162
|
-
@opts = *args || Hash.new(nil)
|
163
|
-
@method = @opts[:method]
|
164
|
-
@name = @opts[:name] || @id.to_s
|
165
|
-
@config_table = config_table
|
166
|
-
|
167
|
-
@assoc = @config_table.assocs.find { |s| s.name.to_sym == @id.to_sym }
|
168
|
-
|
169
|
-
@order = @opts[:sort]
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
unless @order
|
174
|
-
if is_assoc?
|
175
|
-
if @method
|
176
|
-
@order = Proc.new { |a,b|
|
177
|
-
a.__send__( @id ).__send__( @method ).to_s <=> b.__send__( @id ).__send__( @method ).to_s
|
178
|
-
}
|
179
|
-
# @order = "`#{assoc_table_name}`.`#{@method}`"
|
180
|
-
else
|
181
|
-
@order = is_has_many_assoc? ? Proc.new { |a,b| a.__send__(@method).size <=> b.__send__(@method).size } :
|
182
|
-
"`#{assoc_table_name}`.`id`"
|
183
|
-
end
|
184
|
-
else
|
185
|
-
@order = "`#{@config_table.model.table_name}`.`#{@id}`"
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
end
|
190
|
-
|
191
|
-
def sql_query
|
192
|
-
is_assoc? ? "`#{table_name}`.`#{@method =~ /size/ ? 'id' : @method}`" :
|
193
|
-
"`#{table_name}`.`#{@id}`" ;
|
194
|
-
end
|
195
|
-
|
196
|
-
def table_name
|
197
|
-
is_assoc? ? assoc_table_name : @config_table.model.table_name ;
|
198
|
-
end
|
199
|
-
|
200
|
-
def is_assoc? #:nodoc:
|
201
|
-
@assoc ? true : false
|
202
|
-
end
|
203
|
-
|
204
|
-
def is_has_many_assoc? #:nodoc:
|
205
|
-
@assoc.macro =~ /has_many/
|
206
|
-
end
|
207
|
-
|
208
|
-
def assoc_table_name #:nodoc:
|
209
|
-
@assoc.options.include?( :class_name ) ?
|
210
|
-
@assoc.options[:class_name].constantize.table_name :
|
211
|
-
@id.to_s.tableize
|
212
|
-
end
|
213
|
-
|
214
|
-
|
215
|
-
def order_ruby? #:nodoc:
|
216
|
-
@order.is_a?( Proc )
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
end
|
221
|
-
|
222
|
-
end
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
end
|