admin_data 1.1.8 → 1.1.9
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/README.md +3 -6
- data/app/controllers/admin_data/feed_controller.rb +10 -12
- data/app/controllers/admin_data/public_controller.rb +7 -4
- data/app/controllers/admin_data/search_controller.rb +1 -1
- data/app/helpers/admin_data/application_helper.rb +1 -1
- data/app/views/admin_data/feed/index.rss.builder +2 -2
- data/config/routes.rb +8 -9
- data/lib/admin_data.rb +12 -37
- data/lib/admin_data/authenticator.rb +15 -0
- data/lib/admin_data/config.rb +38 -0
- data/lib/admin_data/configuration.rb +14 -0
- data/lib/admin_data/date_util.rb +58 -0
- data/lib/admin_data/rails_version_check.rb +8 -0
- data/lib/admin_data/search.rb +2 -2
- data/lib/admin_data/setup_config.rb +24 -0
- data/lib/admin_data/util.rb +1 -2
- data/lib/admin_data/version.rb +1 -1
- data/test/rails_root/config/initializers/admin_data.rb +0 -7
- data/test/rails_root/features/step_definitions/configuration_steps.rb +61 -0
- data/test/rails_root/features/step_definitions/feed_steps.rb +8 -3
- data/test/rails_root/features/step_definitions/quick_search_steps.rb +7 -4
- data/test/rails_root/features/step_definitions/util.rb +2 -2
- data/test/rails_root/features/support/env.rb +8 -9
- data/test/rails_root/features/support/hooks.rb +9 -0
- metadata +13 -7
- data/lib/admin_data/deprecation.rb +0 -32
- data/lib/admin_data/extension.rb +0 -21
- data/lib/admin_data_date_validation.rb +0 -79
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# admin_data works with both Rails 2.3.x and Rails 3. #
|
2
|
+
|
2
3
|
# [Documentation](http://github.com/neerajdotname/admin_data/wiki) #
|
3
4
|
|
4
5
|
# [Installing in a Rails3 application](https://github.com/neerajdotname/admin_data/wiki/Installation-and-Usage-information-for-a-Rails-3-application) #
|
@@ -7,14 +8,10 @@
|
|
7
8
|
# [Live Demo](http://admin-data-test.heroku.com/admin_data) #
|
8
9
|
|
9
10
|
|
10
|
-
* admin_data works as a gem with Rails 3.x project. Source for that resides in master branch.
|
11
|
-
* admin_data works as a plugin with Rails 2.3.x project. Source code for that resides in branch called [rails2](https://github.com/neerajdotname/admin_data/tree/rails2) .
|
12
|
-
|
13
11
|
#Test#
|
14
12
|
|
15
|
-
cd _test/rails_app_ and read the instructions mentioned at README.md there
|
13
|
+
####cd _test/rails_app_ and read the instructions mentioned at README.md there.####
|
16
14
|
|
17
15
|
|
18
|
-
### License ###
|
19
16
|
|
20
|
-
|
17
|
+
[MIT](http://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt) License
|
@@ -3,15 +3,18 @@ module AdminData
|
|
3
3
|
class FeedController < ApplicationController
|
4
4
|
|
5
5
|
def index
|
6
|
-
|
6
|
+
if params[:klasss].blank?
|
7
|
+
render :text => "Usage: http://localhost:3000/admin_data/feed/user replace user with your model name"
|
8
|
+
return
|
9
|
+
end
|
7
10
|
|
8
11
|
begin
|
9
12
|
@klass = Util.camelize_constantize(params[:klasss])
|
10
13
|
@title = "Feeds from admin_data #{@klass.name}"
|
11
14
|
@description = "feeds from AdminData #{@klass.name}"
|
12
15
|
@records = @klass.find(:all, :order => "#{@klass.primary_key} desc", :limit => 100)
|
13
|
-
rescue NameError
|
14
|
-
render :text => "No constant was found with name #{params[:klasss]}"
|
16
|
+
rescue NameError
|
17
|
+
render :text => "No constant was found with name #{params[:klasss]}"
|
15
18
|
end
|
16
19
|
end
|
17
20
|
|
@@ -32,15 +35,10 @@ module AdminData
|
|
32
35
|
return false
|
33
36
|
end
|
34
37
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
def perform_basic_authentication(stored_userid, stored_password, controller)
|
41
|
-
controller.authenticate_or_request_with_http_basic do |input_userid, input_password|
|
42
|
-
(input_userid == stored_userid) && (input_password == stored_password)
|
43
|
-
end
|
38
|
+
userid = AdminData.config.feed_authentication_user_id
|
39
|
+
password = AdminData.config.feed_authentication_password
|
40
|
+
authenticator = AdminData::Authenticator.new(userid, password)
|
41
|
+
authenticator.verify(controller)
|
44
42
|
end
|
45
43
|
|
46
44
|
end
|
@@ -2,7 +2,7 @@ module AdminData
|
|
2
2
|
class PublicController < ApplicationController
|
3
3
|
|
4
4
|
def serve
|
5
|
-
path = File.join(AdminData
|
5
|
+
path = File.join(AdminData::LIBPATH, 'public', params[:file])
|
6
6
|
|
7
7
|
unless File.expand_path(path) =~ /admin_data/
|
8
8
|
render :nothing => true, :status => 404 and return
|
@@ -11,9 +11,12 @@ module AdminData
|
|
11
11
|
opts = {:text => File.read(path), :cache => true}
|
12
12
|
|
13
13
|
case params[:file]
|
14
|
-
when /\.css$/i
|
15
|
-
|
16
|
-
when /\.
|
14
|
+
when /\.css$/i
|
15
|
+
opts[:content_type] = "text/css"
|
16
|
+
when /\.js$/i
|
17
|
+
opts[:content_type] = "text/javascript"
|
18
|
+
when /\.png$/i
|
19
|
+
opts[:content_type] = "image/png"
|
17
20
|
else
|
18
21
|
render :nothing => true, :status => 404 and return
|
19
22
|
end
|
@@ -43,7 +43,7 @@ module AdminData
|
|
43
43
|
format.js {
|
44
44
|
|
45
45
|
unless hash[:errors].blank?
|
46
|
-
file =
|
46
|
+
file = File.join(AdminData::LIBPATH, '..', 'app','views', 'admin_data', 'search', 'search', '_errors.html.erb')
|
47
47
|
render :file => file, :locals => {:errors => errors}
|
48
48
|
return
|
49
49
|
end
|
@@ -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.
|
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)
|
@@ -17,8 +17,8 @@ xml.rss(:version => "2.0" ){
|
|
17
17
|
xml.description(desc)
|
18
18
|
d = record.respond_to?(:created_at) ? record.created_at : Time.now
|
19
19
|
xml.pubDate(d.strftime("%a, %d %b %Y %H:%M:%S %z"))
|
20
|
-
xml.link(
|
21
|
-
xml.guid(
|
20
|
+
xml.link(admin_data_url(:id => record, :klass => @klass.name))
|
21
|
+
xml.guid(admin_data_url(:id => record, :klass => @klass.name))
|
22
22
|
end
|
23
23
|
end
|
24
24
|
}
|
data/config/routes.rb
CHANGED
@@ -6,13 +6,12 @@ Rails.application.routes.draw do
|
|
6
6
|
|
7
7
|
namespace(:admin_data) do
|
8
8
|
scope :admin_data do
|
9
|
-
|
10
9
|
controller "crud" do
|
11
|
-
match '/klass/(:klass)', :to => :index, :as => :index,
|
12
|
-
match '/klass/(:klass)', :to => :create, :as => :index,
|
13
|
-
match '/klass/:klass/new', :to => :new, :as => :new,
|
14
|
-
match '/klass/:klass/:id/del', :to => :del, :as => :del,
|
15
|
-
match '/klass/:klass/:id/edit', :to => :edit, :as => :edit,
|
10
|
+
match '/klass/(:klass)', :to => :index, :as => :index, :via => :get
|
11
|
+
match '/klass/(:klass)', :to => :create, :as => :index, :via => :post
|
12
|
+
match '/klass/:klass/new', :to => :new, :as => :new, :via => :get
|
13
|
+
match '/klass/:klass/:id/del', :to => :del, :as => :del, :via => :delete
|
14
|
+
match '/klass/:klass/:id/edit', :to => :edit, :as => :edit, :via => :get
|
16
15
|
match '/klass/:klass/:id', :to => :show, :via => :get
|
17
16
|
match '/klass/:klass/:id', :to => :update, :via => :put
|
18
17
|
match '/klass/:klass/:id', :to => :destroy, :via => :delete
|
@@ -24,11 +23,11 @@ Rails.application.routes.draw do
|
|
24
23
|
end
|
25
24
|
|
26
25
|
match '/table_structure/:klass' => "table_structure#index", :as => :table_structure
|
27
|
-
match '/quick_search/:klass' => "search#quick_search",
|
28
|
-
match '/advance_search/:klass' => "search#advance_search",
|
26
|
+
match '/quick_search/:klass' => "search#quick_search", :as => :search
|
27
|
+
match '/advance_search/:klass' => "search#advance_search", :as => :advance_search
|
29
28
|
match '/public/*file' => "public#serve"
|
30
|
-
root :to => "home#index"
|
31
29
|
|
30
|
+
root :to => "home#index"
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
data/lib/admin_data.rb
CHANGED
@@ -1,46 +1,21 @@
|
|
1
|
+
require 'admin_data/rails_version_check'
|
1
2
|
require 'will_paginate'
|
2
|
-
require 'admin_data/configuration'
|
3
3
|
|
4
4
|
module AdminData
|
5
|
-
|
5
|
+
extend ActiveSupport::Autoload
|
6
6
|
|
7
|
-
|
8
|
-
File.expand_path(File.join(LIBPATH, '..')) + File::SEPARATOR
|
9
|
-
end
|
7
|
+
LIBPATH = File.dirname(__FILE__)
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
autoload :Configuration
|
10
|
+
autoload :Util
|
11
|
+
autoload :Config
|
12
|
+
autoload :ActiveRecordUtil
|
13
|
+
autoload :SetupConfig
|
14
|
+
autoload :DateUtil
|
15
|
+
autoload :Authenticator
|
14
16
|
|
15
|
-
|
16
|
-
# A configuration object that acts like a hash.
|
17
|
-
# See AdminData::Configuration for details.
|
18
|
-
attr_accessor :configuration
|
17
|
+
include SetupConfig
|
19
18
|
|
20
|
-
# Call this method to modify defaults in initializer.
|
21
|
-
#
|
22
|
-
# @example
|
23
|
-
# AdminData.config do |config|
|
24
|
-
# config.number_of_records_per_page = 20
|
25
|
-
# end
|
26
|
-
def config
|
27
|
-
self.configuration ||= Configuration.new
|
28
|
-
block_given? ? yield(self.configuration) : self.configuration
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
if Rails.version >= '3.0'
|
35
|
-
require 'admin_data/railtie'
|
36
|
-
else
|
37
|
-
raise "Please see documentation at http://github.com/neerajdotname/admin_data/wiki to find out how to use this gem with rails 2.3.x"
|
38
19
|
end
|
39
20
|
|
40
|
-
|
41
|
-
require 'admin_data_date_validation'
|
42
|
-
|
43
|
-
require 'admin_data/deprecation'
|
44
|
-
require 'admin_data/extension'
|
45
|
-
require 'admin_data/util'
|
46
|
-
require 'admin_data/active_record_util'
|
21
|
+
require 'admin_data/railtie'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# HttpBasic authenticator for feed authentication
|
2
|
+
module AdminData
|
3
|
+
class Authenticator
|
4
|
+
|
5
|
+
def initialize(userid, password)
|
6
|
+
@userid = userid
|
7
|
+
@password = password
|
8
|
+
end
|
9
|
+
|
10
|
+
def verify(controller)
|
11
|
+
controller.authenticate_or_request_with_http_basic { |_userid, _password| (_userid == @userid) && (_password == @password) }
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# Following code takes care of providing a nice error
|
2
|
+
# message to users who are using old API
|
3
|
+
module AdminData
|
4
|
+
|
5
|
+
class Config
|
6
|
+
cattr_accessor :setting
|
7
|
+
|
8
|
+
def self.set=(input = {})
|
9
|
+
|
10
|
+
msg=<<EOF
|
11
|
+
|
12
|
+
AdminData API has changed in version 1.1 .
|
13
|
+
|
14
|
+
The changes are very minor.
|
15
|
+
|
16
|
+
Instead of
|
17
|
+
|
18
|
+
AdminData::Config.set = {
|
19
|
+
:find_conditions => ....
|
20
|
+
}
|
21
|
+
|
22
|
+
Now you need to write in following style
|
23
|
+
|
24
|
+
AdminData.config do |config|
|
25
|
+
config.find_conditions = ...
|
26
|
+
end
|
27
|
+
|
28
|
+
Please refer to documentation at
|
29
|
+
https://github.com/neerajdotname/admin_data/wiki/Customizing-admin_data-for-a-Rails-3-application
|
30
|
+
for more information.
|
31
|
+
|
32
|
+
EOF
|
33
|
+
|
34
|
+
raise msg
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -107,6 +107,20 @@ module AdminData
|
|
107
107
|
@adapter_name = ActiveRecord::Base.connection.adapter_name
|
108
108
|
@ignore_column_limit = false
|
109
109
|
end
|
110
|
+
|
111
|
+
def display_assoc?( class_name )
|
112
|
+
case @drop_down_for_associations
|
113
|
+
when Hash
|
114
|
+
return @drop_down_for_associations[ class_name ]
|
115
|
+
when TrueClass, FalseClass
|
116
|
+
return @drop_down_for_associations
|
117
|
+
when NilClass
|
118
|
+
return false
|
119
|
+
else
|
120
|
+
raise "Configuration Error. #{@drop_down_for_associations} " \
|
121
|
+
"must be true, false or a Hash."
|
122
|
+
end
|
123
|
+
end
|
110
124
|
|
111
125
|
end
|
112
126
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module AdminData
|
4
|
+
class DateUtil
|
5
|
+
|
6
|
+
# returns a time object for the given input.
|
7
|
+
# validation is not done. It is assumed that client
|
8
|
+
# has done validation using .valid? method.
|
9
|
+
def self.valid?(input)
|
10
|
+
!!parse(input)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Usage:
|
14
|
+
#
|
15
|
+
# parase('13-feb-2008') # => time object
|
16
|
+
# parse('13-February-2008') # => time object
|
17
|
+
# parse('13-February-2008') # => time object
|
18
|
+
# parse('99-Feb-2008') #=> false
|
19
|
+
#
|
20
|
+
def self.parse(input)
|
21
|
+
return false if input.blank?
|
22
|
+
|
23
|
+
input.strip!
|
24
|
+
|
25
|
+
# remove all the white space characters
|
26
|
+
input.gsub!(/\s/,'')
|
27
|
+
|
28
|
+
return false if input.length < 9
|
29
|
+
|
30
|
+
dd,mm,yyyy = input.split('-')
|
31
|
+
return false if dd.nil? || mm.nil? || yyyy.nil?
|
32
|
+
|
33
|
+
# month must be of atleast three characters
|
34
|
+
return false if mm.length < 3
|
35
|
+
|
36
|
+
mm = mm.downcase[0,3]
|
37
|
+
|
38
|
+
months = {'jan' => 1, 'feb' => 2, 'mar' => 3, 'apr' => 4, 'may' => 5, 'jun' => 6,
|
39
|
+
'jul' => 7, 'aug' => 8, 'sep' => 9, 'oct' => 10, 'nov' => 11, 'dec' => 12 }
|
40
|
+
|
41
|
+
return false unless months.keys.include? mm
|
42
|
+
|
43
|
+
mm = months[mm].to_i
|
44
|
+
yyyy = yyyy.to_i
|
45
|
+
dd = dd.to_i
|
46
|
+
|
47
|
+
# validate date values
|
48
|
+
begin
|
49
|
+
Date.new(yyyy,mm,dd)
|
50
|
+
rescue
|
51
|
+
return false
|
52
|
+
end
|
53
|
+
|
54
|
+
Time.now.change(:year => yyyy, :month => mm, :day => dd, :hour => 0)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
unless Rails.version >= '3.0'
|
2
|
+
msg = []
|
3
|
+
msg << "It seems you are not using Rails 3."
|
4
|
+
msg << "Please see documentation at"
|
5
|
+
msg << "http://github.com/neerajdotname/admin_data/wiki"
|
6
|
+
msg << "to find out how to use this gem with rails 2.3.x"
|
7
|
+
raise msg.join(' ')
|
8
|
+
end
|
data/lib/admin_data/search.rb
CHANGED
@@ -139,7 +139,7 @@ module Search
|
|
139
139
|
def values_after_cast
|
140
140
|
case operator
|
141
141
|
when /(is_on|is_on_or_before_date|is_on_or_after_date)/
|
142
|
-
|
142
|
+
AdminData::DateUtil.parse(operands)
|
143
143
|
when /(is_equal_to|greater_than|less_than)/
|
144
144
|
operands.to_i
|
145
145
|
else
|
@@ -150,7 +150,7 @@ module Search
|
|
150
150
|
def validate
|
151
151
|
case operator
|
152
152
|
when /(is_on|is_on_or_before_date|is_on_or_after_date)/
|
153
|
-
"#{operands} is not a valid date" unless
|
153
|
+
"#{operands} is not a valid date" unless AdminData::DateUtil.valid?(operands)
|
154
154
|
when /(is_equal_to|greater_than|less_than)/
|
155
155
|
unless operands.blank?
|
156
156
|
"#{operands} is not a valid integer" unless operands =~ /^\d+$/
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module AdminData
|
2
|
+
|
3
|
+
module SetupConfig
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
|
8
|
+
# See AdminData::Configuration for details.
|
9
|
+
attr_accessor :configuration
|
10
|
+
|
11
|
+
# Call this method to customize the behavior of admin_data .
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# AdminData.config do |config|
|
15
|
+
# config.number_of_records_per_page = 20
|
16
|
+
# end
|
17
|
+
def config
|
18
|
+
self.configuration ||= Configuration.new
|
19
|
+
block_given? ? yield(configuration) : configuration
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/lib/admin_data/util.rb
CHANGED
@@ -6,8 +6,7 @@ module AdminData
|
|
6
6
|
tmp = view.get_value_for_column(column, model, :limit => nil)
|
7
7
|
sum << [ column.name, (tmp.html_safe? ? tmp : view.send(:h,tmp)) ]
|
8
8
|
end
|
9
|
-
|
10
|
-
data + extension
|
9
|
+
data
|
11
10
|
end
|
12
11
|
|
13
12
|
def self.custom_value_for_column(column, model)
|
data/lib/admin_data/version.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
AdminData.config do |config|
|
2
2
|
|
3
|
-
config.number_of_records_per_page = 2
|
4
|
-
|
5
3
|
config.is_allowed_to_view = lambda {|_| return true}
|
6
4
|
config.is_allowed_to_update = lambda {|_| return true}
|
7
5
|
|
@@ -10,13 +8,8 @@ AdminData.config do |config|
|
|
10
8
|
|
11
9
|
config.find_conditions = {'City' => lambda { |params| {:conditions => ["name =?", params[:id]] }}}
|
12
10
|
|
13
|
-
|
14
11
|
config.column_settings = { 'City' => { :data => lambda { |model| model.send(:data).to_a.flatten.inspect } } }
|
15
12
|
|
16
|
-
config.drop_down_for_associations = { 'PhoneNumber' => false}
|
17
|
-
|
18
13
|
config.columns_order = {'Website' => [:dns_provider, :user_id] }
|
19
14
|
|
20
|
-
config.column_headers = {'City' => {:id => 'ID', :name => 'City Name', :data => 'City Info'}}
|
21
|
-
|
22
15
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
When /^configured to display only (\d*) records per page$/ do |max_recs|
|
2
|
+
AdminData.config do |config|
|
3
|
+
config.number_of_records_per_page = max_recs.to_i
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
def col_for( string )
|
8
|
+
string.gsub(/^\:/,'').downcase.to_sym
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_to( config, param_sym, key1, key2, val)
|
12
|
+
hash = config.send( param_sym )
|
13
|
+
assign_sym = (param_sym.to_s + '=').to_sym
|
14
|
+
config.send( assign_sym, hash ||= {} )
|
15
|
+
hash[ key1 ] ||= {}
|
16
|
+
hash[ key1 ].store( key2, val )
|
17
|
+
end
|
18
|
+
|
19
|
+
# Assumes a table in the form:
|
20
|
+
# column, alias
|
21
|
+
# :city_name, City Name
|
22
|
+
When /^configured to rename (\w*) columns:$/ do |model, table|
|
23
|
+
@last_model = model
|
24
|
+
AdminData.config do |config|
|
25
|
+
table.hashes.each do |r|
|
26
|
+
add_to config, :column_headers, model, col_for(r['column']), r['alias']
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
When /^configured to display (\w*) column ([\:\w]*) as "([^"]*)"$/ do
|
32
|
+
|
33
|
+
|model, col_name, new_name|
|
34
|
+
|
35
|
+
@last_model = model
|
36
|
+
AdminData.config do |config|
|
37
|
+
add_to config, :column_headers, model, col_for(col_name), new_name
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Specify models to hide: Model1, Model2, Model3
|
42
|
+
Given /^configuration to (hide|show) the association drop down for ([\w\, ]*)$/ do |action,mods|
|
43
|
+
AdminData.config do |config|
|
44
|
+
|
45
|
+
hash = config.drop_down_for_associations
|
46
|
+
hash = {} if (hash == true || hash.nil?)
|
47
|
+
|
48
|
+
if action == "hide"
|
49
|
+
new_val = false
|
50
|
+
else
|
51
|
+
new_val = true
|
52
|
+
end
|
53
|
+
|
54
|
+
models = mods.split(', ')
|
55
|
+
models.each do |model|
|
56
|
+
hash.store( model.strip, new_val )
|
57
|
+
end
|
58
|
+
|
59
|
+
config.drop_down_for_associations = hash
|
60
|
+
end
|
61
|
+
end
|
@@ -1,3 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
AdminData::Authenticator.extend(
|
2
|
+
Module.new{
|
3
|
+
def verify(controller)
|
4
|
+
#TODO use rspec double code here. This is a very bad hack
|
5
|
+
true
|
6
|
+
end
|
7
|
+
}
|
8
|
+
)
|
@@ -1,12 +1,10 @@
|
|
1
1
|
Given /^user config has defined additional_column phone_numbers$/ do
|
2
2
|
AdminData.config.columns_order = AdminData.config.columns_order.merge('User' => [:id, :phone_numbers])
|
3
|
-
|
3
|
+
proc = lambda {|model| model.phone_numbers.map {|r| r.number}.join(', ') }
|
4
|
+
AdminData.config.column_settings = AdminData.config.column_settings.merge('User' => { :phone_numbers => proc })
|
4
5
|
end
|
5
6
|
|
6
7
|
Then /^table should have additional column phone_numbers with valid data$/ do
|
7
|
-
AdminData.config.columns_order = AdminData.config.columns_order.merge('User' => nil)
|
8
|
-
AdminData.config.column_settings = AdminData.config.column_settings.merge('User' => nil)
|
9
|
-
|
10
8
|
data = tableish('table.table tr', 'th,td')
|
11
9
|
data[0][0].should == "id"
|
12
10
|
data[0][1].should == "phone_numbers"
|
@@ -16,6 +14,11 @@ Then /^table should have additional column phone_numbers with valid data$/ do
|
|
16
14
|
assert_equal user.phone_numbers.map(&:number).join(', '),data[1][1]
|
17
15
|
end
|
18
16
|
|
17
|
+
Then /^reset columns_order and column_settings for User$/ do
|
18
|
+
AdminData.config.columns_order = AdminData.config.columns_order.merge('User' => nil)
|
19
|
+
AdminData.config.column_settings = AdminData.config.column_settings.merge('User' => nil)
|
20
|
+
end
|
21
|
+
|
19
22
|
|
20
23
|
Then /^I should see population_5000$/ do
|
21
24
|
assert page.has_content?("[:population, 5000]")
|
@@ -1,9 +1,9 @@
|
|
1
|
-
Then /^page should have
|
1
|
+
Then /^page should have (\w*) field css "(.*)" with user_id value$/ do |tag_name,css_selector|
|
2
2
|
elem = page.find(css_selector)
|
3
|
+
elem.tag_name.should == tag_name
|
3
4
|
elem.value.should == PhoneNumber.last.user.id.to_s
|
4
5
|
end
|
5
6
|
|
6
|
-
|
7
7
|
Then /^page should have id "remove_row_3"$/ do
|
8
8
|
page.has_css?("remove_row_3")
|
9
9
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
|
2
|
-
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
-
# newer version of cucumber-rails. Consider adding your own code to a new file
|
2
|
+
# It is recommended to regenerate this file in the future when you upgrade to a
|
3
|
+
# newer version of cucumber-rails. Consider adding your own code to a new file
|
4
4
|
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
|
5
5
|
# files.
|
6
6
|
|
@@ -22,7 +22,7 @@ require 'capybara/session'
|
|
22
22
|
# steps to use the XPath syntax.
|
23
23
|
Capybara.default_selector = :css
|
24
24
|
|
25
|
-
# If you set this to false, any error raised from within your app will bubble
|
25
|
+
# If you set this to false, any error raised from within your app will bubble
|
26
26
|
# up to your step definition and out to cucumber unless you catch it somewhere
|
27
27
|
# on the way. You can make Rails rescue errors and render error pages on a
|
28
28
|
# per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
|
@@ -34,15 +34,15 @@ Capybara.default_selector = :css
|
|
34
34
|
ActionController::Base.allow_rescue = false
|
35
35
|
|
36
36
|
# If you set this to true, each scenario will run in a database transaction.
|
37
|
-
# You can still turn off transactions on a per-scenario basis, simply tagging
|
37
|
+
# You can still turn off transactions on a per-scenario basis, simply tagging
|
38
38
|
# a feature or scenario with the @no-txn tag. If you are using Capybara,
|
39
39
|
# tagging with @culerity or @javascript will also turn transactions off.
|
40
40
|
#
|
41
41
|
# If you set this to false, transactions will be off for all scenarios,
|
42
42
|
# regardless of whether you use @no-txn or not.
|
43
43
|
#
|
44
|
-
# Beware that turning transactions off will leave data in your database
|
45
|
-
# after each scenario, which can lead to hard-to-debug failures in
|
44
|
+
# Beware that turning transactions off will leave data in your database
|
45
|
+
# after each scenario, which can lead to hard-to-debug failures in
|
46
46
|
# subsequent scenarios. If you do this, we recommend you create a Before
|
47
47
|
# block that will explicitly put your database in a known state.
|
48
48
|
Cucumber::Rails::World.use_transactional_fixtures = true
|
@@ -60,9 +60,8 @@ end
|
|
60
60
|
|
61
61
|
require 'factory_girl'
|
62
62
|
require Rails.root.join('test', 'factories')
|
63
|
-
Dir[Rails.root.join('test', 'factories', '*.rb')].each {|f| require f}
|
63
|
+
Dir[Rails.root.join('test', 'factories', '*.rb')].each {|f| require f}
|
64
64
|
require 'factory_girl/step_definitions'
|
65
65
|
require 'shoulda'
|
66
66
|
|
67
|
-
#Capybara.
|
68
|
-
#Capybara.default_wait_time = 40
|
67
|
+
#Capybara.default_wait_time = 40
|
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: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
9
|
+
- 9
|
10
|
+
version: 1.1.9
|
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-22 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -152,14 +152,16 @@ files:
|
|
152
152
|
- config/routes.rb
|
153
153
|
- lib/admin_data.rb
|
154
154
|
- lib/admin_data/active_record_util.rb
|
155
|
+
- lib/admin_data/authenticator.rb
|
156
|
+
- lib/admin_data/config.rb
|
155
157
|
- lib/admin_data/configuration.rb
|
156
|
-
- lib/admin_data/
|
157
|
-
- lib/admin_data/
|
158
|
+
- lib/admin_data/date_util.rb
|
159
|
+
- lib/admin_data/rails_version_check.rb
|
158
160
|
- lib/admin_data/railtie.rb
|
159
161
|
- lib/admin_data/search.rb
|
162
|
+
- lib/admin_data/setup_config.rb
|
160
163
|
- lib/admin_data/util.rb
|
161
164
|
- lib/admin_data/version.rb
|
162
|
-
- lib/admin_data_date_validation.rb
|
163
165
|
- lib/public/images/add.png
|
164
166
|
- lib/public/images/no.png
|
165
167
|
- lib/public/images/site.png
|
@@ -217,12 +219,14 @@ files:
|
|
217
219
|
- test/rails_root/features/step_definitions/advance_search_steps.rb
|
218
220
|
- test/rails_root/features/step_definitions/app_steps.rb
|
219
221
|
- test/rails_root/features/step_definitions/async.rb
|
222
|
+
- test/rails_root/features/step_definitions/configuration_steps.rb
|
220
223
|
- test/rails_root/features/step_definitions/crud_show_steps.rb
|
221
224
|
- test/rails_root/features/step_definitions/feed_steps.rb
|
222
225
|
- test/rails_root/features/step_definitions/quick_search_steps.rb
|
223
226
|
- test/rails_root/features/step_definitions/util.rb
|
224
227
|
- test/rails_root/features/step_definitions/web_steps.rb
|
225
228
|
- test/rails_root/features/support/env.rb
|
229
|
+
- test/rails_root/features/support/hooks.rb
|
226
230
|
- test/rails_root/features/support/paths.rb
|
227
231
|
- test/rails_root/test/factories.rb
|
228
232
|
- test/rails_root/test/performance/browsing_test.rb
|
@@ -290,12 +294,14 @@ test_files:
|
|
290
294
|
- test/rails_root/features/step_definitions/advance_search_steps.rb
|
291
295
|
- test/rails_root/features/step_definitions/app_steps.rb
|
292
296
|
- test/rails_root/features/step_definitions/async.rb
|
297
|
+
- test/rails_root/features/step_definitions/configuration_steps.rb
|
293
298
|
- test/rails_root/features/step_definitions/crud_show_steps.rb
|
294
299
|
- test/rails_root/features/step_definitions/feed_steps.rb
|
295
300
|
- test/rails_root/features/step_definitions/quick_search_steps.rb
|
296
301
|
- test/rails_root/features/step_definitions/util.rb
|
297
302
|
- test/rails_root/features/step_definitions/web_steps.rb
|
298
303
|
- test/rails_root/features/support/env.rb
|
304
|
+
- test/rails_root/features/support/hooks.rb
|
299
305
|
- test/rails_root/features/support/paths.rb
|
300
306
|
- test/rails_root/test/factories.rb
|
301
307
|
- test/rails_root/test/performance/browsing_test.rb
|
@@ -1,32 +0,0 @@
|
|
1
|
-
class AdminData::Config
|
2
|
-
|
3
|
-
cattr_accessor :setting
|
4
|
-
|
5
|
-
def self.set=(input = {})
|
6
|
-
|
7
|
-
msg=<<EOF
|
8
|
-
|
9
|
-
AdminData API has changed in version 1.1 .
|
10
|
-
|
11
|
-
The changes are very minor.
|
12
|
-
|
13
|
-
Instead of
|
14
|
-
|
15
|
-
AdminData::Config.set = {
|
16
|
-
:find_conditions => ....
|
17
|
-
}
|
18
|
-
|
19
|
-
Now you need to write in following style
|
20
|
-
|
21
|
-
AdminData.config do |config|
|
22
|
-
config.find_conditions = ...
|
23
|
-
end
|
24
|
-
|
25
|
-
Please refer to documentation at https://github.com/neerajdotname/admin_data/wiki/Customizing-admin_data-for-a-Rails-3-application for more information.
|
26
|
-
|
27
|
-
EOF
|
28
|
-
|
29
|
-
raise msg
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
data/lib/admin_data/extension.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
class AdminData::Extension
|
2
|
-
|
3
|
-
def self.show_info(model)
|
4
|
-
return []
|
5
|
-
klass = model.class
|
6
|
-
if klass == User
|
7
|
-
|
8
|
-
if (habtm_klasses = AdminData::ActiveRecordUtil.habtm_klasses_for(klass)).any?
|
9
|
-
habtm_klasses.each do |k|
|
10
|
-
name = k.columns.map(&:name).include?('name') ? :name : k.primary_key
|
11
|
-
data << [ k.table_name, model.send(k.table_name).map{ |e|
|
12
|
-
view.link_to(e.send(name), view.admin_data_path(:klass => k, :id => e.send(k.primary_key)))
|
13
|
-
}.join(", ").html_safe ]
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end # end of method
|
19
|
-
|
20
|
-
|
21
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
|
3
|
-
class AdminDataDateValidation
|
4
|
-
|
5
|
-
def self.validate_with_operator(input)
|
6
|
-
return false if input.blank?
|
7
|
-
|
8
|
-
input.strip!
|
9
|
-
|
10
|
-
# replace multiple consecutive white spaces by one single whitespace
|
11
|
-
input.gsub!(/\s+/,' ')
|
12
|
-
operator, date = input.split
|
13
|
-
return false if operator.nil?
|
14
|
-
return false unless %w(> < >= <= =).include? operator
|
15
|
-
validate(date)
|
16
|
-
end
|
17
|
-
|
18
|
-
# Usage:
|
19
|
-
#
|
20
|
-
# validate('13-feb-2008') # => time_object
|
21
|
-
# validate('13-February-2008') # => time_object
|
22
|
-
# validate('13-February-2008') # => time_object
|
23
|
-
# validate('30-Feb-2008') #=> false
|
24
|
-
#
|
25
|
-
def self.validate(input)
|
26
|
-
return false if input.nil?
|
27
|
-
|
28
|
-
input.strip!
|
29
|
-
|
30
|
-
# remove all the white space characters
|
31
|
-
input.gsub!(/\s/,'')
|
32
|
-
|
33
|
-
return false if input.length < 9
|
34
|
-
|
35
|
-
dd,mm,yyyy = input.split('-')
|
36
|
-
return false if dd.nil?
|
37
|
-
return false if mm.nil?
|
38
|
-
return false if yyyy.nil?
|
39
|
-
|
40
|
-
# month must be of aleast three characters
|
41
|
-
return false if mm.length < 3
|
42
|
-
|
43
|
-
mm = mm.downcase
|
44
|
-
|
45
|
-
#get only the first three characters
|
46
|
-
mm = mm[0,3]
|
47
|
-
|
48
|
-
months = {'jan' => 1,
|
49
|
-
'feb' => 2,
|
50
|
-
'mar' => 3,
|
51
|
-
'apr' => 4,
|
52
|
-
'may' => 5,
|
53
|
-
'jun' => 6,
|
54
|
-
'jul' => 7,
|
55
|
-
'aug' => 8,
|
56
|
-
'sep' => 9,
|
57
|
-
'oct' => 10,
|
58
|
-
'nov' => 11,
|
59
|
-
'dec' => 12 }
|
60
|
-
|
61
|
-
return false unless months.keys.include? mm
|
62
|
-
|
63
|
-
mm = months[mm]
|
64
|
-
mm = mm.to_i
|
65
|
-
yyyy = yyyy.to_i
|
66
|
-
dd = dd.to_i
|
67
|
-
|
68
|
-
# validate date values
|
69
|
-
begin
|
70
|
-
Date.new(yyyy,mm,dd)
|
71
|
-
rescue => e
|
72
|
-
return false
|
73
|
-
end
|
74
|
-
|
75
|
-
t = Time.now
|
76
|
-
t.change(:year => yyyy, :month => mm, :day => dd, :hour => 0)
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|