padrino-admin 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/padrino-admin/ext_js/controller.rb +37 -59
- data/padrino-admin.gemspec +2 -3
- data/test/test_controller.rb +61 -10
- data/test/test_mongo_mapper.rb +3 -1
- metadata +2 -3
- data/lib/padrino-admin/support.rb +0 -12
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.6
|
@@ -49,78 +49,56 @@ module Padrino
|
|
49
49
|
# end
|
50
50
|
#
|
51
51
|
module Controller
|
52
|
-
def self.column_store_for(model,
|
53
|
-
ColumnStore.new(model,
|
52
|
+
def self.column_store_for(model, config)
|
53
|
+
ColumnStore.new(model, config)
|
54
54
|
end
|
55
55
|
|
56
56
|
class ColumnStore #:nodoc:
|
57
57
|
attr_reader :data
|
58
58
|
|
59
|
-
def initialize(model,
|
59
|
+
def initialize(model, config) #:nodoc
|
60
60
|
@model = model
|
61
|
-
@data = []
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
61
|
+
@data = config["columns"].map do |column|
|
62
|
+
|
63
|
+
# Reformat our config
|
64
|
+
column["header"] ||= column["method"].to_s
|
65
|
+
column["dataIndex"] ||= column["method"]
|
66
|
+
column["sortable"] ||= column["sortable"].nil? ? true : column["sortable"]
|
67
|
+
column["header"] = @model.human_attribute_name(column["header"]) # try to translate with I18n the column name
|
68
|
+
|
69
|
+
# Try to reformat the dataIndex
|
70
|
+
data_indexes = Array(column["dataIndex"]).collect do |data_index|
|
71
|
+
if data_index =~ /\./ # if we have some like categories.names we use this
|
72
|
+
cols = data_index.split(".")
|
73
|
+
column["name"] ||= cols[0] + "[" + cols[1..-1].join("][") + "]" # accounts.name will be => accounts[name]
|
74
|
+
else
|
75
|
+
column["name"] ||= "#{@model.table_name.singularize}[#{data_index}]"
|
76
|
+
data_index = "#{@model.table_name}.#{data_index}"
|
77
|
+
end
|
78
|
+
data_index
|
79
|
+
end
|
78
80
|
|
79
|
-
|
80
|
-
|
81
|
-
options[:sortable] = options[:sortable].nil? ? true : options[:sortable]
|
81
|
+
# Now we join our data indexes
|
82
|
+
column["dataIndex"] = data_indexes.compact.uniq.join(",")
|
82
83
|
|
83
|
-
|
84
|
-
|
84
|
+
# Reformat mapping like a div id
|
85
|
+
column["mapping"] ||= column["name"].sub(/\[/,"_").sub(/\]$/, "").sub(/\]\[/,"_")
|
85
86
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
87
|
+
# Now is necessary for our columns an ID
|
88
|
+
# TODO: check duplicates here
|
89
|
+
column["id"] = column["mapping"]
|
90
|
+
|
90
91
|
|
91
|
-
|
92
|
-
|
93
|
-
when String then data_index
|
94
|
-
when Symbol
|
95
|
-
if data_index.missing_methods.size == 1
|
96
|
-
options[:name] ||= "#{@model.table_name.singularize}[#{data_index}]"
|
97
|
-
data_index = "#{@model.table_name}.#{data_index}"
|
98
|
-
else
|
99
|
-
columns = data_index.missing_methods
|
100
|
-
options[:name] ||= columns.at(0) + "[" + columns[1..-1].collect(&:to_s).join("][") + "]"
|
101
|
-
data_index = columns[0..-2].collect { |c| c.to_s.pluralize }.join(".") + "." + columns.at(-1).to_s
|
102
|
-
end
|
103
|
-
end
|
104
|
-
data_index
|
92
|
+
# Finally we can return our column
|
93
|
+
column
|
105
94
|
end
|
106
|
-
|
107
|
-
options[:dataIndex] = data_indexes.compact.uniq.join(",")
|
108
|
-
|
109
|
-
# Reformat mapping like a div id
|
110
|
-
options[:mapping] ||= options[:name].sub(/\[/,"_").sub(/\]$/, "").sub(/\]\[/,"_")
|
111
|
-
|
112
|
-
# Now is necessary for our columns an ID
|
113
|
-
# TODO: check duplicates here
|
114
|
-
options[:id] = options[:mapping]
|
115
|
-
|
116
|
-
@data << options
|
117
95
|
end
|
118
96
|
|
119
97
|
# Return an array config for build an Ext.grid.ColumnModel() config
|
120
98
|
def column_fields
|
121
99
|
@data.map do |data|
|
122
|
-
data.delete(
|
123
|
-
data.delete(
|
100
|
+
data.delete("method")
|
101
|
+
data.delete("mapping")
|
124
102
|
data
|
125
103
|
end
|
126
104
|
end
|
@@ -128,8 +106,8 @@ module Padrino
|
|
128
106
|
# Return an array config for build an Ext.data.GroupingStore()
|
129
107
|
def store_fields
|
130
108
|
@data.map do |data|
|
131
|
-
hash = { :name => data[
|
132
|
-
hash.merge!(:type => data[
|
109
|
+
hash = { :name => data["dataIndex"], :mapping => data["mapping"] }
|
110
|
+
hash.merge!(:type => data["renderer"]) if data["renderer"] && [:date, :datetime, :time_to_date].include?(data["renderer"])
|
133
111
|
hash
|
134
112
|
end
|
135
113
|
end
|
@@ -138,7 +116,7 @@ module Padrino
|
|
138
116
|
def store_data_from(collection)
|
139
117
|
collection.map do |c|
|
140
118
|
@data.dup.inject({ "id" => c.id }) do |options, data|
|
141
|
-
options[data[
|
119
|
+
options[data["mapping"]] = (c.instance_eval(data["method"]) rescue I18n.t("padrino.admin.labels.not_found"))
|
142
120
|
options
|
143
121
|
end
|
144
122
|
end
|
data/padrino-admin.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{padrino-admin}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Padrino Team", "Nathan Esquenazi", "Davide D'Agostino", "Arthur Chiu"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-07}
|
13
13
|
s.description = %q{Admin View for Padrino applications}
|
14
14
|
s.email = %q{nesquena@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -33,7 +33,6 @@ Gem::Specification.new do |s|
|
|
33
33
|
"lib/padrino-admin/ext_js/controller.rb",
|
34
34
|
"lib/padrino-admin/generators/backend.rb",
|
35
35
|
"lib/padrino-admin/locale/en.yml",
|
36
|
-
"lib/padrino-admin/support.rb",
|
37
36
|
"lib/padrino-admin/utils/crypt.rb",
|
38
37
|
"padrino-admin.gemspec",
|
39
38
|
"test/fixtures/active_record.rb",
|
data/test/test_controller.rb
CHANGED
@@ -4,25 +4,76 @@ class TestController < Test::Unit::TestCase
|
|
4
4
|
|
5
5
|
def setup
|
6
6
|
load_fixture 'data_mapper'
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
config = Padrino::ExtJs::Config.load <<-YAML
|
8
|
+
columns:
|
9
|
+
- method: name.upcase
|
10
|
+
header: Name Upcase
|
11
|
+
dataIndex: name
|
12
|
+
- method: surname
|
13
|
+
- method: category.name
|
14
|
+
- method: email
|
15
|
+
header: E-mail
|
16
|
+
sortable: false
|
17
|
+
- method: role
|
18
|
+
YAML
|
19
|
+
@column_store = Padrino::ExtJs::Controller.column_store_for(Account, config)
|
14
20
|
end
|
15
21
|
|
16
22
|
should 'have correct column fileds' do
|
17
|
-
|
23
|
+
result = [
|
24
|
+
{"name"=>"account[name]",
|
25
|
+
"sortable"=>true,
|
26
|
+
"header"=>"Name upcase",
|
27
|
+
"id"=>"account_name",
|
28
|
+
"dataIndex"=>"accounts.name"},
|
29
|
+
{"name"=>"account[surname]",
|
30
|
+
"sortable"=>true,
|
31
|
+
"header"=>"Surname",
|
32
|
+
"id"=>"account_surname",
|
33
|
+
"dataIndex"=>"accounts.surname"},
|
34
|
+
{"name"=>"category[name]",
|
35
|
+
"sortable"=>true,
|
36
|
+
"header"=>"Category.name",
|
37
|
+
"id"=>"category_name",
|
38
|
+
"dataIndex"=>"category.name"},
|
39
|
+
{"name"=>"account[email]",
|
40
|
+
"sortable"=>false,
|
41
|
+
"header"=>"E-mail",
|
42
|
+
"id"=>"account_email",
|
43
|
+
"dataIndex"=>"accounts.email"},
|
44
|
+
{"name"=>"account[role]",
|
45
|
+
"sortable"=>true,
|
46
|
+
"header"=>"Role",
|
47
|
+
"id"=>"account_role",
|
48
|
+
"dataIndex"=>"accounts.role"}]
|
49
|
+
assert_equal result, @column_store.column_fields
|
18
50
|
end
|
19
51
|
|
20
52
|
should 'have correct store fields' do
|
21
|
-
|
53
|
+
result = [
|
54
|
+
{:mapping=>"account_name", :name=>"accounts.name"},
|
55
|
+
{:mapping=>"account_surname", :name=>"accounts.surname"},
|
56
|
+
{:mapping=>"category_name", :name=>"category.name"},
|
57
|
+
{:mapping=>"account_email", :name=>"accounts.email"},
|
58
|
+
{:mapping=>"account_role", :name=>"accounts.role"}]
|
59
|
+
assert_equal result, @column_store.store_fields
|
22
60
|
end
|
23
61
|
|
24
62
|
should 'store data' do
|
25
|
-
|
63
|
+
result = {:results=>[
|
64
|
+
{"account_surname"=>"Not found",
|
65
|
+
"account_email"=>"d.dagostino@lipsiasoft.com",
|
66
|
+
"category_name"=>"Not found",
|
67
|
+
"id"=>1,
|
68
|
+
"account_role"=>"Admin",
|
69
|
+
"account_name"=>"DADDYE"},
|
70
|
+
{"account_surname"=>"Not found",
|
71
|
+
"account_email"=>"editor@lipsiasoft.com",
|
72
|
+
"category_name"=>"Not found",
|
73
|
+
"id"=>2,
|
74
|
+
"account_role"=>"Editor",
|
75
|
+
"account_name"=>"DEXTER"}], :count=>2}
|
76
|
+
assert_equal result, @column_store.store_data(:fields => "name,role", :query => "d", :sort => :name, :dir => :asc, :limit => 2, :offset => 0)
|
26
77
|
end
|
27
78
|
|
28
79
|
end
|
data/test/test_mongo_mapper.rb
CHANGED
@@ -20,8 +20,10 @@ class TestMongoMapper < Test::Unit::TestCase
|
|
20
20
|
|
21
21
|
should 'correctly authenticate an account' do
|
22
22
|
account = Account.create(:email => "auth@lipsia.org", :role => "some", :password => "some", :password_confirmation => "some")
|
23
|
+
assert account.valid?
|
24
|
+
assert ! account.id.nil?
|
23
25
|
assert_equal "some", account.password_clean
|
24
|
-
account_r = Account.
|
26
|
+
account_r = Account.first(:conditions => { :email => "auth@lipsia.org" })
|
25
27
|
assert_equal account_r, account
|
26
28
|
end
|
27
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: padrino-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Padrino Team
|
@@ -12,7 +12,7 @@ autorequire:
|
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
14
|
|
15
|
-
date: 2010-01-
|
15
|
+
date: 2010-01-07 00:00:00 +01:00
|
16
16
|
default_executable:
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
@@ -121,7 +121,6 @@ files:
|
|
121
121
|
- lib/padrino-admin/ext_js/controller.rb
|
122
122
|
- lib/padrino-admin/generators/backend.rb
|
123
123
|
- lib/padrino-admin/locale/en.yml
|
124
|
-
- lib/padrino-admin/support.rb
|
125
124
|
- lib/padrino-admin/utils/crypt.rb
|
126
125
|
- padrino-admin.gemspec
|
127
126
|
- test/fixtures/active_record.rb
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class Symbol
|
2
|
-
|
3
|
-
def method_missing(method, *args)
|
4
|
-
super and return if method.to_s =~ /table_name/
|
5
|
-
(self.to_s + ".#{method}(#{args.collect(&:inspect).join(",")})").to_sym
|
6
|
-
end
|
7
|
-
|
8
|
-
def missing_methods
|
9
|
-
self.to_s.gsub(/(\(.*\))/,"").split(".")
|
10
|
-
end
|
11
|
-
|
12
|
-
end
|