admin_data 1.1.9 → 1.1.10
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/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
|