wando_grid 0.0.1

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.
Files changed (2) hide show
  1. data/lib/wando_grid.rb +167 -0
  2. metadata +45 -0
data/lib/wando_grid.rb ADDED
@@ -0,0 +1,167 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module WandoGrids
3
+ # Author: Justin
4
+ # Comment: 构造Wando.Grid的后台数据
5
+ # date: 2013-03-04
6
+ # params: 前台wando_grid默认传入参数,用于数据查找,考虑不需要传该参数
7
+ # object: 传入你需要获取数据的 object 名字,object.class必须为ActivityRecord
8
+ # options: 传入附加的条件
9
+ # loadData: 是否自动加载数据
10
+
11
+ # wando_grid的入口函数,返回请求记录,和记录总数
12
+ def hello
13
+ puts "world"
14
+ end
15
+
16
+ def wando_grid(params, object, option = {}, toLoadData = true)
17
+ object, result = wando_grid_in_json(params, object, option, toLoadData)
18
+
19
+ result = { :total => object.count, :result => result }
20
+ render_json result
21
+ end
22
+
23
+ # 构造JSON格式的Grid记录
24
+ def wando_grid_in_json(params, object, option, toLoadData)
25
+ unless toLoadData
26
+ return [], []
27
+ end
28
+
29
+ order = "updated_at DESC"
30
+ unless params[:sort].nil?
31
+ JSON.parse(params[:sort]).each do |k|
32
+ if object.column_names.include?(k["property"])
33
+ order = k["property"].to_s + " " + k["direction"].to_s
34
+ else
35
+ order = 'id' + ' ' + k["direction"].to_s
36
+ end
37
+ end
38
+ end
39
+
40
+ default_options = {
41
+ :order => params[:order],
42
+ :offset => params[:offeset].to_i,
43
+ :start => params[:start].to_i || 0,
44
+ :limit => params[:limit].to_i || 20
45
+ }
46
+ fields, column_name, result = [], [], []
47
+
48
+ relations = JSON.parse(params[:columnsConfig])
49
+ relations.each do |o ,e|
50
+ fields << e
51
+ column_name << o
52
+ end
53
+
54
+ column_name.push("id")
55
+ offset = default_options[:offeset].to_i + default_options[:start].to_i
56
+ records = object.where(option)
57
+ .order(order)
58
+ .limit(params[:limit])
59
+ .offset(offset)
60
+ .search(build_filter_options(object, params[:filter]))
61
+ .result(:distinct => true)
62
+ .provide(*column_name)
63
+
64
+ records.each do |r|
65
+ result << Hash[r.map {|k, v| [relations[k], v] }]
66
+ end
67
+
68
+ return object.where(option), result
69
+ end
70
+
71
+ # 通过Grid的Field来构造Record记录
72
+ def get_record_by_fields(fields, object, option = {})
73
+ fields = JSON.parse(fields) unless fields.is_a?(Array)
74
+ records = object.where(option).provide(*fields)
75
+
76
+ result = { :result => records }
77
+ render_json result
78
+ end
79
+
80
+ # Grid每一列的查询
81
+ def build_filter_options(object, filter_hash)
82
+ return {} if filter_hash.nil?
83
+
84
+ fs = {}
85
+ filter_hash = filter_hash.delete_if { |key, value| value.blank? }
86
+
87
+ filter_hash.each do |columns, fvals|
88
+ fs_tmp = {}
89
+ relation = JSON.parse(params[:columnsConfig])
90
+ gf_field = relation.invert[fvals[:field]].downcase.gsub("/", "_")
91
+ gf_type = fvals[:data][:type].downcase
92
+ gf_value = fvals[:data][:value]
93
+ gf_comparison = fvals[:data][:comparison]
94
+
95
+ case gf_type
96
+ when 'numeric'
97
+ case gf_comparison
98
+ when 'gt'
99
+ gf_field += "_gt"
100
+ when 'lt'
101
+ gf_field += "_lt"
102
+ when 'eq'
103
+ gf_field += "_eq"
104
+ when 'ne'
105
+ gf_field += "_neq"
106
+ end
107
+
108
+ fs_tmp[gf_field.to_sym] = gf_value.to_i
109
+ when 'string'
110
+ gf_field += "_cont"
111
+
112
+ fs_tmp[gf_field.to_sym] = gf_value.to_s
113
+ when 'boolean'
114
+ gf_value = gf_value.downcase
115
+
116
+ if gf_value == 'true' or gf_value == 'false'
117
+ gf_field += "_" + gf_value
118
+ fs_tmp[gf_field.to_sym] = "1"
119
+ end
120
+ when 'list'
121
+ gf_field += "_cont"
122
+
123
+ fs_tmp[gf_field.to_sym] = gf_value.to_s
124
+ when 'date'
125
+ case gf_comparison
126
+ when 'gt'
127
+ gf_field += '_gt'
128
+ when 'lt'
129
+ gf_field += '_lt'
130
+ when 'eq'
131
+ gf_field += '_eq'
132
+ when 'ne'
133
+ gf_field += '_neq'
134
+ end
135
+
136
+ fs_tmp[gf_field.to_sym] = gf_value
137
+ end
138
+
139
+ unless fs_tmp.empty?
140
+ fs.merge!(fs_tmp)
141
+ end
142
+ end
143
+
144
+ fs
145
+ end
146
+
147
+ #def wando_grid_for_array params, array
148
+ # fields, column_name, result = [], [], []
149
+
150
+ # relations = JSON.parse(params[:columnsConfig])
151
+ # relations.each do |o ,e|
152
+ # fields << e
153
+ # column_name << o
154
+ # end
155
+
156
+ # column_name.push("id")
157
+ # records = array.provide(*column_name)
158
+
159
+ # records.each do |r|
160
+ # result << Hash[r.map {|k, v| [relations[k], v] }]
161
+ # end
162
+
163
+ # render :json => { :success => true, :total => array.count, :result => result }
164
+
165
+ #end
166
+
167
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wando_grid
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Justin_lu
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-15 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: organize a extjs grid that you can load data from rails
15
+ email: gdjyluxiaoyong@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/wando_grid.rb
21
+ homepage: http://rubygems.org/gems/wando_grid
22
+ licenses: []
23
+ post_install_message:
24
+ rdoc_options: []
25
+ require_paths:
26
+ - lib
27
+ required_ruby_version: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 1.8.24
42
+ signing_key:
43
+ specification_version: 3
44
+ summary: extjs4 grid
45
+ test_files: []