admin_data 1.1.9 → 1.1.10
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/admin_data/application_controller.rb +1 -8
- data/app/controllers/admin_data/crud_controller.rb +2 -2
- data/app/controllers/admin_data/feed_controller.rb +2 -0
- data/app/controllers/admin_data/public_controller.rb +4 -6
- data/app/controllers/admin_data/search_controller.rb +3 -1
- data/app/helpers/admin_data/application_helper.rb +8 -8
- data/app/views/admin_data/crud/association/_association_info.html.erb +1 -1
- data/app/views/admin_data/crud/association/_belongs_to_info.html.erb +1 -1
- data/app/views/admin_data/crud/association/_habtm_info.html.erb +1 -1
- data/app/views/admin_data/crud/association/_has_many_info.html.erb +1 -1
- data/app/views/admin_data/crud/association/_has_one_info.html.erb +1 -1
- data/app/views/admin_data/crud/misc/_form.html.erb +1 -1
- data/config/routes.rb +5 -4
- data/lib/admin_data/active_record_util.rb +43 -35
- data/lib/admin_data/authenticator.rb +1 -1
- data/lib/admin_data/version.rb +1 -1
- data/test/rails_root/features/step_definitions/feed_steps.rb +22 -6
- metadata +4 -4
@@ -10,7 +10,7 @@ module AdminData
|
|
10
10
|
|
11
11
|
before_filter :build_klasses, :build_drop_down_for_klasses, :check_page_parameter, :prepare_drop_down_klasses
|
12
12
|
|
13
|
-
attr_reader :klass
|
13
|
+
attr_reader :klass
|
14
14
|
|
15
15
|
protected
|
16
16
|
|
@@ -56,13 +56,6 @@ module AdminData
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def _build_custom_klasses
|
60
|
-
_build_all_klasses.compact.select do |klass_local|
|
61
|
-
@klass = klass_local
|
62
|
-
is_allowed_to_view_klass?
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
59
|
def remove_klasses_without_table(klasses)
|
67
60
|
klasses.select { |k| k.ancestors.include?(ActiveRecord::Base) && k.connection.table_exists?(k.table_name) }
|
68
61
|
end
|
@@ -82,8 +82,8 @@ module AdminData
|
|
82
82
|
condition = {primary_key => conditional_id}
|
83
83
|
|
84
84
|
_proc = AdminData.config.find_conditions[@klass.name]
|
85
|
-
if _proc && find_conditions = _proc.call(params)
|
86
|
-
condition = find_conditions.fetch(:conditions)
|
85
|
+
if _proc && (find_conditions = _proc.call(params)) && find_conditions.has_key?(:conditions)
|
86
|
+
condition = find_conditions.fetch(:conditions)
|
87
87
|
end
|
88
88
|
|
89
89
|
unless @model = @klass.find(:first, :conditions => condition)
|
@@ -8,20 +8,18 @@ module AdminData
|
|
8
8
|
render :nothing => true, :status => 404 and return
|
9
9
|
end
|
10
10
|
|
11
|
-
opts = {:text => File.read(path), :cache => true}
|
12
|
-
|
13
11
|
case params[:file]
|
14
12
|
when /\.css$/i
|
15
|
-
|
13
|
+
content_type = "text/css"
|
16
14
|
when /\.js$/i
|
17
|
-
|
15
|
+
content_type = "text/javascript"
|
18
16
|
when /\.png$/i
|
19
|
-
|
17
|
+
content_type = "image/png"
|
20
18
|
else
|
21
19
|
render :nothing => true, :status => 404 and return
|
22
20
|
end
|
23
21
|
|
24
|
-
render
|
22
|
+
render({:text => File.read(path), :cache => true, :content_type => content_type})
|
25
23
|
end
|
26
24
|
|
27
25
|
end
|
@@ -75,7 +75,9 @@ module AdminData
|
|
75
75
|
render :text => "#{params[:base]} is an invalid value", :status => :not_found
|
76
76
|
return
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
|
+
ar_util = ActiveRecordUtil.new(model_klass)
|
80
|
+
if ar_util.declared_has_many_association_names.include?(params[:children]) || ar_util.declared_habtm_association_names.include?(params[:children])
|
79
81
|
#proceed
|
80
82
|
else
|
81
83
|
render :text => "#{params[:children]} is not a valid has_many association", :status => :not_found
|
@@ -62,7 +62,7 @@ module AdminData
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def has_one(model, klass)
|
65
|
-
tmp = AdminData::ActiveRecordUtil.
|
65
|
+
tmp = AdminData::ActiveRecordUtil.new(klass).declared_has_one_association_names
|
66
66
|
tmp.inject('') do |output, ho|
|
67
67
|
begin
|
68
68
|
label = ho
|
@@ -79,13 +79,13 @@ module AdminData
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def has_many_data(model, klass)
|
82
|
-
array = AdminData::ActiveRecordUtil.
|
82
|
+
array = AdminData::ActiveRecordUtil.new(klass).declared_has_many_association_names.map do |m|
|
83
83
|
begin
|
84
84
|
count = model.send(m.intern).count
|
85
85
|
label = m.to_s + '(' + count.to_s + ')'
|
86
86
|
output = label
|
87
87
|
if count > 0
|
88
|
-
has_many_klass_name = AdminData::ActiveRecordUtil.
|
88
|
+
has_many_klass_name = AdminData::ActiveRecordUtil.new(model.class).klass_for_association_type_and_name(:has_many, m).name.underscore
|
89
89
|
output = link_to(label, admin_data_search_path( :klass => has_many_klass_name,
|
90
90
|
:children => m,
|
91
91
|
:base => klass.name.underscore,
|
@@ -100,7 +100,7 @@ module AdminData
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def belongs_to_data(model, klass)
|
103
|
-
AdminData::ActiveRecordUtil.
|
103
|
+
AdminData::ActiveRecordUtil.new(klass).declared_belongs_to_association_names.map do |assoc_name|
|
104
104
|
begin
|
105
105
|
output = assoc_name
|
106
106
|
if belongs_to_record = model.send(assoc_name)
|
@@ -114,14 +114,14 @@ module AdminData
|
|
114
114
|
end
|
115
115
|
|
116
116
|
def habtm_data(model, klass)
|
117
|
-
AdminData::ActiveRecordUtil.
|
117
|
+
AdminData::ActiveRecordUtil.new(klass).declared_habtm_association_names.map do |assoc_name|
|
118
118
|
begin
|
119
119
|
count = model.send(assoc_name.intern).count
|
120
120
|
label = assoc_name + '(' + count.to_s + ')'
|
121
121
|
output = label
|
122
122
|
|
123
123
|
if count > 0 then
|
124
|
-
has_many_klass_name = AdminData::ActiveRecordUtil.
|
124
|
+
has_many_klass_name = AdminData::ActiveRecordUtil.new(model.class).klass_for_association_type_and_name(:has_and_belongs_to_many, assoc_name).name.underscore
|
125
125
|
output = link_to(label, admin_data_search_path( :klass => has_many_klass_name,
|
126
126
|
:children => assoc_name,
|
127
127
|
:base => klass.name.underscore,
|
@@ -148,7 +148,7 @@ module AdminData
|
|
148
148
|
|
149
149
|
if col.primary
|
150
150
|
html << model.new_record? ? '(auto)' : model.id
|
151
|
-
elsif get_reflection_for_column(klass, col) && AdminData.config.display_assoc?( klass.name )
|
151
|
+
elsif get_reflection_for_column(klass, col) && AdminData.config.display_assoc?( klass.name )
|
152
152
|
form_field_for_association_records(klass, col, f, html)
|
153
153
|
else
|
154
154
|
handle_column_type(col, html, model, column_value, f)
|
@@ -180,7 +180,7 @@ module AdminData
|
|
180
180
|
def form_field_for_habtm_records(klass, model, f, html)
|
181
181
|
begin
|
182
182
|
html = []
|
183
|
-
AdminData::ActiveRecordUtil.
|
183
|
+
AdminData::ActiveRecordUtil.new(klass).delcared_habtm_association_names.each do |k|
|
184
184
|
assoc_klass = AdminData::Util.get_class_name_for_habtm_association(model, k)
|
185
185
|
|
186
186
|
html << "<div class='col_box'>"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="block rounded">
|
2
2
|
<h3>Association Information</h3>
|
3
3
|
<div class='content association_info'>
|
4
|
-
<% if AdminData::ActiveRecordUtil.
|
4
|
+
<% if AdminData::ActiveRecordUtil.new(klass).has_association_info? %>
|
5
5
|
<%= render 'admin_data/crud/association/belongs_to_info' , :klass => klass, :model => model %>
|
6
6
|
<%= render 'admin_data/crud/association/has_one_info', :klass => klass, :model => model %>
|
7
7
|
<%= render 'admin_data/crud/association/has_many_info' , :klass => klass, :model => model %>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
</div>
|
9
9
|
<% end %>
|
10
10
|
|
11
|
-
<% if AdminData::ActiveRecordUtil.
|
11
|
+
<% if AdminData::ActiveRecordUtil.new(klass).declared_habtm_association_names.any? %>
|
12
12
|
<div class='data'>
|
13
13
|
<%= form_field_for_habtm_records(klass, @model, f, '').html_safe %>
|
14
14
|
</div>
|
data/config/routes.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
|
3
|
-
namespace(:admin_data) do
|
4
|
-
match '/feed/:klasss' => "feed#index", :defaults => { :format =>'rss' }, :as => :feed
|
5
|
-
end
|
6
|
-
|
7
3
|
namespace(:admin_data) do
|
8
4
|
scope :admin_data do
|
9
5
|
controller "crud" do
|
@@ -23,8 +19,13 @@ Rails.application.routes.draw do
|
|
23
19
|
end
|
24
20
|
|
25
21
|
match '/table_structure/:klass' => "table_structure#index", :as => :table_structure
|
22
|
+
|
26
23
|
match '/quick_search/:klass' => "search#quick_search", :as => :search
|
24
|
+
|
27
25
|
match '/advance_search/:klass' => "search#advance_search", :as => :advance_search
|
26
|
+
|
27
|
+
match '/feed/:klasss' => "feed#index", :defaults => { :format =>'rss' }, :as => :feed
|
28
|
+
|
28
29
|
match '/public/*file' => "public#serve"
|
29
30
|
|
30
31
|
root :to => "home#index"
|
@@ -1,54 +1,50 @@
|
|
1
1
|
module AdminData
|
2
2
|
class ActiveRecordUtil
|
3
3
|
|
4
|
+
attr_accessor :klass
|
5
|
+
|
6
|
+
def initialize(klass)
|
7
|
+
@klass = klass
|
8
|
+
end
|
9
|
+
|
4
10
|
# class User
|
5
11
|
# has_and_belongs_to_many :clubs
|
6
12
|
# end
|
7
13
|
#
|
8
|
-
# User.declared_habtm_association_names
|
14
|
+
# ActiveRecordUtil.new(User).declared_habtm_association_names
|
9
15
|
# #=> ['clubs']
|
10
|
-
def
|
11
|
-
delcared_association_names_for(
|
16
|
+
def declared_habtm_association_names
|
17
|
+
delcared_association_names_for(:has_and_belongs_to_many).map(&:name).map(&:to_s)
|
12
18
|
end
|
13
19
|
|
14
20
|
# class User
|
15
21
|
# belongs_to :club
|
16
22
|
# end
|
17
23
|
#
|
18
|
-
# User.declared_belongs_to_association_names
|
24
|
+
# ActiveRecordUtil.new(User).declared_belongs_to_association_names
|
19
25
|
# #=> ['club']
|
20
|
-
def
|
21
|
-
delcared_association_names_for(
|
26
|
+
def declared_belongs_to_association_names
|
27
|
+
delcared_association_names_for(:belongs_to).map(&:name).map(&:to_s)
|
22
28
|
end
|
23
29
|
|
24
30
|
# class User
|
25
31
|
# has_one :car
|
26
32
|
# end
|
27
33
|
#
|
28
|
-
# User.declared_has_one_association_names
|
34
|
+
# ActiveRecordUtil.new(User).declared_has_one_association_names
|
29
35
|
# #=> ['car']
|
30
|
-
def
|
31
|
-
delcared_association_names_for(
|
36
|
+
def declared_has_one_association_names
|
37
|
+
delcared_association_names_for(:has_one).map(&:name).map(&:to_s)
|
32
38
|
end
|
33
39
|
|
34
40
|
# class User
|
35
41
|
# has_many :cars
|
36
42
|
# end
|
37
43
|
#
|
38
|
-
# User.declared_has_many_association_names
|
44
|
+
# ActiveRecordUtil.new(User).declared_has_many_association_names
|
39
45
|
# #=> ['cars']
|
40
|
-
def
|
41
|
-
delcared_association_names_for(
|
42
|
-
end
|
43
|
-
|
44
|
-
# returns declared association names like
|
45
|
-
# #=> ['comments']
|
46
|
-
# #=> ['positive_comments']
|
47
|
-
# #=> ['negative_comments']
|
48
|
-
def self.delcared_association_names_for(klass, association_type)
|
49
|
-
klass.name.camelize.constantize.reflections.values.select do |value|
|
50
|
-
value.macro == association_type
|
51
|
-
end
|
46
|
+
def declared_has_many_association_names
|
47
|
+
delcared_association_names_for(:has_many).map(&:name).map(&:to_s)
|
52
48
|
end
|
53
49
|
|
54
50
|
# returns an array of classes
|
@@ -57,11 +53,11 @@ module AdminData
|
|
57
53
|
# has_and_belongs_to_many :clubs
|
58
54
|
# end
|
59
55
|
#
|
60
|
-
# ActiveRecordUtil.
|
56
|
+
# ActiveRecordUtil.new(User).habtm_klasses_for
|
61
57
|
# #=> [Club]
|
62
|
-
def
|
63
|
-
declared_habtm_association_names
|
64
|
-
klass_for_association_type_and_name(
|
58
|
+
def habtm_klasses_for
|
59
|
+
declared_habtm_association_names.map do |assoc_name|
|
60
|
+
klass_for_association_type_and_name(:has_and_belongs_to_many, assoc_name)
|
65
61
|
end
|
66
62
|
end
|
67
63
|
|
@@ -71,23 +67,35 @@ module AdminData
|
|
71
67
|
# has_many :comments
|
72
68
|
# end
|
73
69
|
#
|
74
|
-
# ActiveRecordUtil.klass_for_association_type_and_name(
|
70
|
+
# ActiveRecordUtil.new(User).klass_for_association_type_and_name(:has_many, 'comments')
|
71
|
+
# #=> Comment
|
75
72
|
#
|
76
|
-
def
|
73
|
+
def klass_for_association_type_and_name(association_type, association_name)
|
77
74
|
data = klass.name.camelize.constantize.reflections.values.detect do |value|
|
78
75
|
value.macro == association_type && value.name.to_s == association_name
|
79
76
|
end
|
80
77
|
data.klass if data # output of detect from hash is an array with key and value
|
81
78
|
end
|
82
|
-
# TODO test with polymorphic
|
83
|
-
|
84
79
|
|
85
80
|
# returns false if the given Klass has no association info. Otherwise returns true.
|
86
|
-
def
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
81
|
+
def has_association_info?
|
82
|
+
declared_belongs_to_association_names.any? ||
|
83
|
+
declared_has_many_association_names.any? ||
|
84
|
+
declared_has_many_association_names.any? ||
|
85
|
+
declared_habtm_association_names.any?
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
# returns declared association names like
|
91
|
+
#
|
92
|
+
# #=> ['comments']
|
93
|
+
# #=> ['positive_comments']
|
94
|
+
# #=> ['negative_comments']
|
95
|
+
def delcared_association_names_for(association_type)
|
96
|
+
klass.name.camelize.constantize.reflections.values.select do |value|
|
97
|
+
value.macro == association_type
|
98
|
+
end
|
91
99
|
end
|
92
100
|
|
93
101
|
end
|
@@ -8,7 +8,7 @@ module AdminData
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def verify(controller)
|
11
|
-
controller.authenticate_or_request_with_http_basic { |
|
11
|
+
controller.authenticate_or_request_with_http_basic { |_u, _p| (_u == @userid) && (_p == @password) }
|
12
12
|
end
|
13
13
|
|
14
14
|
end
|
data/lib/admin_data/version.rb
CHANGED
@@ -1,8 +1,24 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
def mock_authenticator_with_authentication_returning_true
|
2
|
+
#TODO use rspec double code here. This is a very bad hack
|
3
|
+
AdminData::Authenticator.class_eval do
|
4
|
+
def verify(*args)
|
5
5
|
true
|
6
6
|
end
|
7
|
-
|
8
|
-
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def mock_authenticator_with_authentication_returning_false
|
11
|
+
AdminData::Authenticator.class_eval do
|
12
|
+
def verify(*args)
|
13
|
+
false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
When /^mocked feed authentication returns true$/ do
|
19
|
+
mock_authenticator_with_authentication_returning_true
|
20
|
+
end
|
21
|
+
|
22
|
+
When /^mocked feed authentication returns false$/ do
|
23
|
+
mock_authenticator_with_authentication_returning_false
|
24
|
+
end
|
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: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
9
|
+
- 10
|
10
|
+
version: 1.1.10
|
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-12-
|
18
|
+
date: 2010-12-23 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|