admin_data 1.0.19 → 1.0.21
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/History.txt +3 -0
- data/app/controllers/admin_data/base_controller.rb +1 -1
- data/app/controllers/admin_data/main_controller.rb +19 -2
- data/app/controllers/admin_data/public_controller.rb +18 -0
- data/app/controllers/admin_data/search_controller.rb +4 -2
- data/app/views/admin_data/main/association/_association_info.html.erb +1 -0
- data/app/views/admin_data/main/association/_habtm_info.html.erb +7 -0
- data/app/views/admin_data/main/misc/_form.html.erb +6 -0
- data/config/routes.rb +2 -0
- data/lib/admin_data/helpers.rb +70 -0
- data/lib/admin_data/util.rb +23 -10
- data/lib/admin_data/version.rb +1 -1
- metadata +6 -4
data/History.txt
CHANGED
@@ -64,7 +64,7 @@ class AdminData::BaseController < ApplicationController
|
|
64
64
|
return $admin_data_all_klasses
|
65
65
|
else
|
66
66
|
model_dir = File.join(Rails.root, 'app', 'models')
|
67
|
-
model_names = Dir.chdir(model_dir) { Dir["
|
67
|
+
model_names = Dir.chdir(model_dir) { Dir["*.rb"] }
|
68
68
|
klasses = get_klass_names(model_names)
|
69
69
|
$admin_data_all_klasses = remove_klasses_without_table(klasses).sort_by {|r| r.name.underscore}
|
70
70
|
end
|
@@ -67,8 +67,9 @@ class AdminData::MainController < AdminData::BaseController
|
|
67
67
|
|
68
68
|
def update
|
69
69
|
model_name_underscored = @klass.name.underscore
|
70
|
-
model_attrs = params[model_name_underscored]
|
70
|
+
model_attrs = update_model_with_assoc(params[model_name_underscored])
|
71
71
|
@columns = columns_list
|
72
|
+
|
72
73
|
respond_to do |format|
|
73
74
|
if @model.update_attributes(model_attrs)
|
74
75
|
format.html do
|
@@ -85,7 +86,7 @@ class AdminData::MainController < AdminData::BaseController
|
|
85
86
|
|
86
87
|
def create
|
87
88
|
model_name_underscored = @klass.name.underscore
|
88
|
-
model_attrs = params[model_name_underscored]
|
89
|
+
model_attrs = update_model_with_assoc(params[model_name_underscored])
|
89
90
|
@model = @klass.create(model_attrs)
|
90
91
|
@columns = columns_list
|
91
92
|
|
@@ -104,6 +105,22 @@ class AdminData::MainController < AdminData::BaseController
|
|
104
105
|
end
|
105
106
|
|
106
107
|
private
|
108
|
+
|
109
|
+
# If this class has any habtm relationships, update the parameters
|
110
|
+
# in the model with the actual objects so they can be saved properly
|
111
|
+
def update_model_with_assoc(model_attrs)
|
112
|
+
if AdminData::Util.habtm_what(@klass).any? then
|
113
|
+
AdminData::Util.habtm_what(klass).each do |k|
|
114
|
+
assoc_klass = AdminData::Util.get_class_name_for_habtm_association(@model || @klass, k)
|
115
|
+
if model_attrs.include? assoc_klass.table_name then
|
116
|
+
model_attrs[assoc_klass.table_name].map! do |s|
|
117
|
+
assoc_klass.find(s.to_i)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
model_attrs
|
123
|
+
end
|
107
124
|
|
108
125
|
def get_model_and_verify_it
|
109
126
|
primary_key = @klass.primary_key.intern
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
class AdminData::PublicController < AdminData::BaseController
|
3
|
+
|
4
|
+
def serve
|
5
|
+
f = File.join(AdminData::Config.setting[:plugin_dir], 'lib', params[:file])
|
6
|
+
if not File.exists? f then
|
7
|
+
return render :nothing => true, :status => 404
|
8
|
+
end
|
9
|
+
opts = {:text => File.new(f).read, :cache => true}
|
10
|
+
if f =~ /css$/ then
|
11
|
+
opts[:content_type] = "text/css"
|
12
|
+
elsif f =~ /js$/ then
|
13
|
+
opts[:content_type] = "text/javascript"
|
14
|
+
end
|
15
|
+
render opts
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -79,8 +79,10 @@ class AdminData::SearchController < AdminData::BaseController
|
|
79
79
|
render :text => "#{params[:base]} is an invalid value", :status => :not_found
|
80
80
|
return
|
81
81
|
end
|
82
|
-
|
83
|
-
|
82
|
+
if AdminData::Util.has_many_what(model_klass).include?(params[:children]) || AdminData::Util.habtm_what(model_klass).include?(params[:children])
|
83
|
+
#proceed
|
84
|
+
else
|
85
|
+
render :text => "#{params[:children]} is not a valid has_many association",
|
84
86
|
:status => :not_found
|
85
87
|
return
|
86
88
|
end
|
@@ -5,6 +5,7 @@
|
|
5
5
|
<%= render 'admin_data/main/association/belongs_to_info' , :klass => klass, :model => model %>
|
6
6
|
<%= render 'admin_data/main/association/has_one_info', :klass => klass, :model => model %>
|
7
7
|
<%= render 'admin_data/main/association/has_many_info' , :klass => klass, :model => model %>
|
8
|
+
<%= render 'admin_data/main/association/habtm_info' , :klass => klass, :model => model %>
|
8
9
|
<% end %>
|
9
10
|
</div>
|
10
11
|
</div>
|
@@ -8,6 +8,12 @@
|
|
8
8
|
</div>
|
9
9
|
<% end %>
|
10
10
|
|
11
|
+
<% if AdminData::Util.habtm_what(klass).any? %>
|
12
|
+
<div class='data'>
|
13
|
+
<%= admin_data_form_field_for_habtm_records(klass, @model, f, '').html_safe %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
|
11
17
|
<div class='group navform' style='padding-top:10px;'>
|
12
18
|
<% if params[:action] == 'edit' || params[:action] == 'update' %>
|
13
19
|
<% label = 'Update' %>
|
data/config/routes.rb
CHANGED
@@ -11,6 +11,8 @@ Rails.application.routes.draw do
|
|
11
11
|
|
12
12
|
match '/quick_search/:klass' => "search#quick_search", :as => :search
|
13
13
|
match '/advance_search/:klass' => "search#advance_search", :as => :advance_search
|
14
|
+
|
15
|
+
match '/public/*file' => "public#serve"
|
14
16
|
end
|
15
17
|
|
16
18
|
scope '/admin_data' do
|
data/lib/admin_data/helpers.rb
CHANGED
@@ -100,6 +100,36 @@ module AdminData::Helpers
|
|
100
100
|
end
|
101
101
|
array.join(', ')
|
102
102
|
end
|
103
|
+
|
104
|
+
def admin_data_habtm_data(model, klass)
|
105
|
+
array = AdminData::Util.habtm_what(klass).inject([]) do |output, m|
|
106
|
+
# same as admin_data_has_many_data()
|
107
|
+
begin
|
108
|
+
label = m + '(' + AdminData::Util.habtm_count(model, m).to_s + ')'
|
109
|
+
if AdminData::Util.habtm_count(model, m) > 0 then
|
110
|
+
has_many_klass_name = AdminData::Util.get_class_name_for_habtm_association(model,m).name.underscore
|
111
|
+
output << link_to(label, admin_data_search_path( :klass => has_many_klass_name,
|
112
|
+
:children => m,
|
113
|
+
:base => klass.name.underscore,
|
114
|
+
:model_id => model.id))
|
115
|
+
else
|
116
|
+
output << label
|
117
|
+
end
|
118
|
+
rescue => e
|
119
|
+
Rails.logger.info AdminData::Util.exception_info(e)
|
120
|
+
end
|
121
|
+
output
|
122
|
+
end
|
123
|
+
array.join(', ')
|
124
|
+
end
|
125
|
+
|
126
|
+
def admin_data_habtm_values_for(model, klass)
|
127
|
+
assoc_klass = AdminData::Util.get_class_name_for_habtm_association(model, klass)
|
128
|
+
name = assoc_klass.columns.map(&:name).include?('name') ? :name : assoc_klass.primary_key
|
129
|
+
model.send(assoc_klass.table_name).map{ |e|
|
130
|
+
link_to(e.send(name), admin_data_on_k_path(:klass => assoc_klass, :id => e.id))
|
131
|
+
}.join(", ").html_safe
|
132
|
+
end
|
103
133
|
|
104
134
|
def admin_data_breadcrum(&block)
|
105
135
|
render(:partial => '/admin_data/shared/breadcrum', :locals => {:data => capture(&block)})
|
@@ -144,6 +174,31 @@ module AdminData::Helpers
|
|
144
174
|
'could not retrieve' # returning nil
|
145
175
|
end
|
146
176
|
end
|
177
|
+
|
178
|
+
def admin_data_form_field_for_habtm_records(klass, model, f, html)
|
179
|
+
begin
|
180
|
+
html = []
|
181
|
+
AdminData::Util.habtm_what(klass).each do |k|
|
182
|
+
assoc_klass = AdminData::Util.get_class_name_for_habtm_association(model, k)
|
183
|
+
|
184
|
+
html << "<div class='col_box'>"
|
185
|
+
html << " <span class='col_name'>#{assoc_klass.table_name}</span>"
|
186
|
+
html << " <span class='col_type'>[integer]</span>"
|
187
|
+
html << "</div>"
|
188
|
+
|
189
|
+
order_by = assoc_klass.columns.map(&:name).include?('name') ? :name : assoc_klass.primary_key
|
190
|
+
all = assoc_klass.all(:order => order_by)
|
191
|
+
selected = model.send(assoc_klass.table_name).map{|e| e.id}
|
192
|
+
html << f.collection_select(assoc_klass.table_name, all, :id, order_by,
|
193
|
+
{:include_blank => false, :selected => selected},
|
194
|
+
{:multiple => true, :size => (all.count > 10 ? 8 : 4)})
|
195
|
+
end
|
196
|
+
html.join
|
197
|
+
rescue Exception => e
|
198
|
+
Rails.logger.info AdminData::Util.exception_info(e)
|
199
|
+
'could not retrieve' # returning nil
|
200
|
+
end
|
201
|
+
end
|
147
202
|
|
148
203
|
def admin_data_handle_column_type(col, html, model, column_value, f)
|
149
204
|
case col.type
|
@@ -215,6 +270,21 @@ module AdminData::Helpers
|
|
215
270
|
'<actual data is not being shown because truncate method failed.>'
|
216
271
|
end
|
217
272
|
else
|
273
|
+
|
274
|
+
# check for an associated class id and add it's name to the value
|
275
|
+
ar = model.class.reflections.values.detect{ |v| v.primary_key_name == column.name}
|
276
|
+
if not ar.nil? then
|
277
|
+
name = ar.klass.columns.map(&:name).include?('name') ? :name : ar.klass.primary_key
|
278
|
+
assoc = model.send(ar.name)
|
279
|
+
if not name.nil? then
|
280
|
+
value = ("#{value} (" +
|
281
|
+
link_to(
|
282
|
+
assoc.send(name),
|
283
|
+
admin_data_on_k_path(:klass => ar.klass,
|
284
|
+
:id => assoc.send(ar.klass.primary_key))) + ")").html_safe
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
218
288
|
value
|
219
289
|
end
|
220
290
|
end
|
data/lib/admin_data/util.rb
CHANGED
@@ -49,10 +49,11 @@ class AdminData::Util
|
|
49
49
|
|
50
50
|
|
51
51
|
def self.label_values_pair_for(model, view)
|
52
|
-
model.class.columns.inject([]) do |sum, column|
|
52
|
+
data = model.class.columns.inject([]) do |sum, column|
|
53
53
|
tmp = view.admin_data_get_value_for_column(column, model, :limit => nil)
|
54
|
-
sum << [column.name, view.send(:h,tmp)]
|
54
|
+
sum << [ column.name, (tmp.html_safe? ? tmp : view.send(:h,tmp)) ]
|
55
55
|
end
|
56
|
+
data
|
56
57
|
end
|
57
58
|
|
58
59
|
def self.custom_value_for_column(column, model)
|
@@ -137,19 +138,27 @@ class AdminData::Util
|
|
137
138
|
end
|
138
139
|
|
139
140
|
def self.javascript_include_tag(*args)
|
140
|
-
data = args.inject(
|
141
|
-
|
142
|
-
sum <<
|
141
|
+
data = args.inject([]) do |sum, arg|
|
142
|
+
arg = "#{arg}.js" if arg !~ /js$/
|
143
|
+
sum << ['<script type="text/javascript" src="/admin_data/public/js/', arg, '"></script>'].join
|
143
144
|
end
|
144
|
-
|
145
|
+
data.join("\n")
|
145
146
|
end
|
146
147
|
|
147
148
|
def self.stylesheet_link_tag(*args)
|
148
|
-
data = args.inject(
|
149
|
-
|
150
|
-
sum <<
|
149
|
+
data = args.inject([]) do |sum, arg|
|
150
|
+
arg = "#{arg}.css" if arg !~ /css$/
|
151
|
+
sum << ['<link href="/admin_data/public/css/', arg, '" media="screen" rel="stylesheet" type="text/css" />'].join
|
151
152
|
end
|
152
|
-
|
153
|
+
data.join("\n")
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.get_class_name_for_habtm_association(model, has_many_string)
|
157
|
+
klass = model.kind_of?(Class) ? model : model.class
|
158
|
+
data = klass.name.camelize.constantize.reflections.values.detect do |value|
|
159
|
+
value.macro == :has_and_belongs_to_many && value.name.to_s == has_many_string
|
160
|
+
end
|
161
|
+
data.klass if data # output of detect from hash is an array with key and value
|
153
162
|
end
|
154
163
|
|
155
164
|
def self.get_class_name_for_has_many_association(model, has_many_string)
|
@@ -192,6 +201,10 @@ class AdminData::Util
|
|
192
201
|
def self.habtm_what(klass)
|
193
202
|
associations_for(klass, :has_and_belongs_to_many).map(&:name).map(&:to_s)
|
194
203
|
end
|
204
|
+
|
205
|
+
def self.habtm_count(model, m)
|
206
|
+
model.send(m.intern).count
|
207
|
+
end
|
195
208
|
|
196
209
|
def self.association_info_size(k)
|
197
210
|
belongs_to_what(k).any? || has_many_what(k).any? || has_one_what(k).any? || habtm_what(k).any?
|
data/lib/admin_data/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: admin_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 21
|
10
|
+
version: 1.0.21
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Neeraj Singh
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-19 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -113,11 +113,13 @@ files:
|
|
113
113
|
- app/controllers/admin_data/feed_controller.rb
|
114
114
|
- app/controllers/admin_data/main_controller.rb
|
115
115
|
- app/controllers/admin_data/migration_controller.rb
|
116
|
+
- app/controllers/admin_data/public_controller.rb
|
116
117
|
- app/controllers/admin_data/search_controller.rb
|
117
118
|
- app/views/admin_data/feed/index.rss.builder
|
118
119
|
- app/views/admin_data/main/all_models.html.erb
|
119
120
|
- app/views/admin_data/main/association/_association_info.html.erb
|
120
121
|
- app/views/admin_data/main/association/_belongs_to_info.html.erb
|
122
|
+
- app/views/admin_data/main/association/_habtm_info.html.erb
|
121
123
|
- app/views/admin_data/main/association/_has_many_info.html.erb
|
122
124
|
- app/views/admin_data/main/association/_has_one_info.html.erb
|
123
125
|
- app/views/admin_data/main/edit.html.erb
|