typus 3.0.8 → 3.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +8 -1
- data/README.md +2 -2
- data/Rakefile +6 -14
- data/app/controllers/admin/base_controller.rb +1 -1
- data/app/controllers/admin/dashboard_controller.rb +0 -1
- data/app/controllers/admin/resources_controller.rb +8 -11
- data/app/controllers/admin/session_controller.rb +5 -4
- data/app/helpers/admin/base_helper.rb +9 -2
- data/app/helpers/admin/dashboard_helper.rb +0 -6
- data/app/helpers/admin/display_helper.rb +1 -0
- data/app/helpers/admin/file_preview_helper.rb +0 -2
- data/app/helpers/admin/filters_helper.rb +6 -3
- data/app/helpers/admin/form_helper.rb +2 -4
- data/app/helpers/admin/list_helper.rb +1 -3
- data/app/helpers/admin/relationships_helper.rb +2 -4
- data/app/helpers/admin/resources_helper.rb +0 -2
- data/app/helpers/admin/search_helper.rb +0 -2
- data/app/helpers/admin/sidebar_helper.rb +0 -2
- data/app/helpers/admin/table_helper.rb +3 -6
- data/app/views/admin/account/forgot_password.html.erb +2 -2
- data/app/views/admin/account/new.html.erb +3 -7
- data/app/views/admin/{helpers/dashboard → dashboard}/_applications.html.erb +0 -0
- data/app/views/admin/dashboard/_sidebar.html.erb +1 -1
- data/app/views/admin/dashboard/show.html.erb +7 -1
- data/app/views/admin/helpers/base/_apps.html.erb +1 -1
- data/app/views/admin/helpers/base/_login_info.html.erb +2 -2
- data/app/views/admin/helpers/filters/_filters.html.erb +3 -1
- data/app/views/admin/resources/_form.html.erb +5 -2
- data/app/views/admin/resources/edit.html.erb +1 -1
- data/app/views/admin/resources/index.html.erb +1 -1
- data/app/views/admin/resources/show.html.erb +2 -2
- data/app/views/admin/session/new.html.erb +3 -7
- data/app/views/admin/templates/_belongs_to.html.erb +8 -1
- data/app/views/admin/templates/_belongs_to_with_autocomplete.html.erb +1 -1
- data/app/views/admin/templates/_relate_form.html.erb +1 -1
- data/app/views/admin/templates/_relate_form_with_autocomplete.html.erb +3 -1
- data/app/views/admin/templates/_string.html.erb +1 -1
- data/app/views/admin/templates/_text.html.erb +1 -1
- data/app/views/layouts/admin/base.html.erb +2 -0
- data/app/views/layouts/admin/headless.html.erb +2 -0
- data/app/views/layouts/admin/session.html.erb +6 -0
- data/config/routes.rb +4 -1
- data/lib/support/active_record.rb +0 -10
- data/lib/support/fake_user.rb +4 -6
- data/lib/support/object.rb +4 -0
- data/lib/support/string.rb +0 -8
- data/lib/typus.rb +2 -3
- data/lib/typus/authentication/base.rb +0 -1
- data/lib/typus/authentication/session.rb +22 -29
- data/lib/typus/orm/active_record.rb +5 -5
- data/lib/typus/orm/active_record/admin_user_v1.rb +93 -0
- data/lib/typus/orm/active_record/admin_user_v2.rb +49 -0
- data/lib/typus/orm/active_record/class_methods.rb +23 -143
- data/lib/typus/orm/active_record/user/instance_methods.rb +64 -0
- data/lib/typus/orm/base.rb +170 -0
- data/lib/typus/orm/mongo/class_methods.rb +11 -0
- data/lib/typus/resources.rb +2 -1
- data/lib/typus/version.rb +1 -1
- data/test/app/controllers/admin/account_controller_test.rb +4 -2
- data/test/app/controllers/admin/assets_controller_test.rb +12 -12
- data/test/app/controllers/admin/categories_controller_test.rb +5 -12
- data/test/app/controllers/admin/comments_controller_test.rb +1 -1
- data/test/app/controllers/admin/image_holders_controller_test.rb +1 -1
- data/test/app/controllers/admin/invoices_controller_test.rb +1 -1
- data/test/app/controllers/admin/posts_controller_test.rb +32 -32
- data/test/app/controllers/admin/projects_controller_test.rb +1 -1
- data/test/app/controllers/admin/typus_users_controller_test.rb +13 -17
- data/test/app/controllers/admin/users_controller_test.rb +9 -9
- data/test/app/helpers/admin/list_helper_test.rb +17 -0
- data/test/app/models/admin_user_test.rb +5 -0
- data/test/app/models/typus_user_roles_test.rb +1 -0
- data/test/app/models/typus_user_test.rb +45 -11
- data/test/factories.rb +1 -1
- data/test/fixtures/rails_app/app/controllers/admin/hits_controller.rb +40 -0
- data/test/fixtures/rails_app/app/controllers/admin_user.rb +3 -0
- data/test/fixtures/rails_app/app/models/asset.rb +0 -6
- data/test/fixtures/rails_app/app/models/hit.rb +27 -0
- data/test/fixtures/rails_app/app/views/admin/hits/_edit.html.erb +7 -0
- data/test/fixtures/rails_app/app/views/admin/hits/_index.html.erb +3 -0
- data/test/fixtures/rails_app/app/views/admin/hits/index.html.erb +28 -0
- data/test/fixtures/rails_app/config/boot.rb +3 -10
- data/test/fixtures/rails_app/config/deploy.rb +1 -1
- data/test/fixtures/rails_app/config/mongoid.yml +20 -0
- data/test/fixtures/rails_app/config/typus/crud_extended.yml +2 -0
- data/test/fixtures/rails_app/config/typus/mongo_db.yml +4 -0
- data/test/fixtures/rails_app/config/typus/mongo_db_roles.yml +2 -0
- data/test/fixtures/rails_app/db/schema.rb +11 -0
- data/test/lib/support/fake_user_test.rb +4 -0
- data/test/lib/support/string_test.rb +0 -18
- data/test/lib/typus/orm/active_record/class_methods_test.rb +14 -2
- data/test/lib/typus/orm/active_record/search_test.rb +1 -1
- data/test/lib/typus_test.rb +2 -1
- data/typus.gemspec +1 -1
- metadata +32 -45
- data/lib/typus/orm/active_record/instance_methods.rb +0 -13
- data/lib/typus/orm/active_record/user.rb +0 -157
- data/test/fixtures/rails_app/public/javascripts/application.js +0 -2
- data/test/fixtures/rails_app/public/javascripts/controls.js +0 -965
- data/test/fixtures/rails_app/public/javascripts/dragdrop.js +0 -974
- data/test/fixtures/rails_app/public/javascripts/effects.js +0 -1123
- data/test/fixtures/rails_app/public/javascripts/prototype.js +0 -6001
- data/test/fixtures/rails_app/public/javascripts/rails.js +0 -175
data/Gemfile
CHANGED
@@ -15,7 +15,7 @@ gem 'rack-cache', :require => 'rack/cache'
|
|
15
15
|
gem 'rails', '~> 3.0'
|
16
16
|
|
17
17
|
group :test do
|
18
|
-
gem 'shoulda'
|
18
|
+
gem 'shoulda-context'
|
19
19
|
gem 'mocha' # Make sure mocha is loaded at the end ...
|
20
20
|
end
|
21
21
|
|
@@ -39,6 +39,13 @@ group :development, :test do
|
|
39
39
|
|
40
40
|
end
|
41
41
|
|
42
|
+
# MongoDB support is still in "beta" mode, so I'm not testing it for the moment.
|
43
|
+
group :production do
|
44
|
+
# MongoDB support
|
45
|
+
gem 'mongoid', '2.0.0.rc.7'
|
46
|
+
gem 'bson_ext'
|
47
|
+
end
|
48
|
+
|
42
49
|
group :production do
|
43
50
|
|
44
51
|
platforms :jruby do
|
data/README.md
CHANGED
@@ -17,8 +17,8 @@ Français, Magyar, Italiano, Portuguese, Russian, 中文)
|
|
17
17
|
- Customizable and extensible templates.
|
18
18
|
- Integrated [paperclip][1] and [dragonfly][2] attachments viewer.
|
19
19
|
- Low memory footprint.
|
20
|
-
- Works with `Rails 3.0`.
|
21
|
-
- Tested with `
|
20
|
+
- Works with `Rails 3.0.5`.
|
21
|
+
- Tested with `ruby-1.8.7-p334`, `ree-1.8.7-2011.03` and `ruby-1.9.2-p180` and `jruby-1.5.6`.
|
22
22
|
- Tested with `SQLite`, `MySQL` and `PostgreSQL`.
|
23
23
|
- MIT License, the same as Rails.
|
24
24
|
|
data/Rakefile
CHANGED
@@ -15,7 +15,6 @@ Rake::TestTask.new(:test) do |t|
|
|
15
15
|
t.verbose = true
|
16
16
|
end
|
17
17
|
|
18
|
-
=begin
|
19
18
|
desc 'Generate plugin documentation.'
|
20
19
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
21
20
|
rdoc.rdoc_dir = 'rdoc'
|
@@ -24,39 +23,32 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
24
23
|
rdoc.rdoc_files.include('README.rdoc')
|
25
24
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
26
25
|
end
|
27
|
-
=end
|
28
26
|
|
27
|
+
desc "Deploy test/fixtures/rails_app"
|
29
28
|
task :deploy do
|
30
29
|
system "cd test/fixtures/rails_app && cap deploy"
|
31
30
|
end
|
32
31
|
|
33
|
-
RUBIES = [
|
32
|
+
RUBIES = %w[1.8.7 ree 1.9.2 jruby].join(",")
|
34
33
|
|
35
34
|
namespace :setup do
|
36
35
|
|
37
36
|
desc "Setup test environment"
|
38
37
|
task :test_environment do
|
39
|
-
|
38
|
+
system "rvm install #{RUBIES}"
|
40
39
|
end
|
41
40
|
|
42
41
|
desc "Setup CI Joe"
|
43
42
|
task :cijoe do
|
44
|
-
system "git config --replace-all cijoe.runner 'rake test:
|
43
|
+
system "git config --replace-all cijoe.runner 'rake test:rubies'"
|
45
44
|
end
|
46
45
|
|
47
46
|
end
|
48
47
|
|
49
48
|
namespace :test do
|
50
49
|
|
51
|
-
task :
|
52
|
-
RUBIES
|
53
|
-
system "rvm use #{ruby}"
|
54
|
-
system "rm -f Gemfile.lock"
|
55
|
-
system "bundle install"
|
56
|
-
system "rake"
|
57
|
-
# system "rake DB=postgresql"
|
58
|
-
# system "rake DB=mysql"
|
59
|
-
end
|
50
|
+
task :rubies do
|
51
|
+
system "rvm #{RUBIES} rake"
|
60
52
|
end
|
61
53
|
|
62
54
|
end
|
@@ -6,13 +6,13 @@ class Admin::ResourcesController < Admin::BaseController
|
|
6
6
|
include Typus::Controller::Filters
|
7
7
|
include Typus::Controller::Format
|
8
8
|
|
9
|
+
Whitelist = [:edit, :update, :destroy, :toggle, :position, :relate, :unrelate]
|
10
|
+
|
9
11
|
before_filter :get_model
|
10
12
|
before_filter :set_scope
|
11
|
-
before_filter :get_object, :only => [:show
|
12
|
-
before_filter :check_resource_ownership, :only =>
|
13
|
+
before_filter :get_object, :only => Whitelist + [:show]
|
14
|
+
before_filter :check_resource_ownership, :only => Whitelist
|
13
15
|
before_filter :check_if_user_can_perform_action_on_resources
|
14
|
-
before_filter :set_order, :only => [:index]
|
15
|
-
before_filter :set_fields, :only => [:index, :new, :edit, :create, :update, :show]
|
16
16
|
|
17
17
|
##
|
18
18
|
# This is the main index of the model. With filters, conditions and more.
|
@@ -89,7 +89,6 @@ class Admin::ResourcesController < Admin::BaseController
|
|
89
89
|
respond_to do |format|
|
90
90
|
if @item.update_attributes(attributes)
|
91
91
|
set_attributes_on_update
|
92
|
-
reload_locales
|
93
92
|
format.html { redirect_on_success }
|
94
93
|
format.json { render :json => @item }
|
95
94
|
else
|
@@ -119,10 +118,7 @@ class Admin::ResourcesController < Admin::BaseController
|
|
119
118
|
end
|
120
119
|
format.json { render :json => @item }
|
121
120
|
else
|
122
|
-
format.html
|
123
|
-
set_fields
|
124
|
-
render :edit
|
125
|
-
end
|
121
|
+
format.html { render :edit }
|
126
122
|
format.json { render :json => @item.errors, :status => :unprocessable_entity }
|
127
123
|
end
|
128
124
|
end
|
@@ -239,9 +235,10 @@ class Admin::ResourcesController < Admin::BaseController
|
|
239
235
|
@resource = @resource.order(set_order).includes(eager_loading)
|
240
236
|
end
|
241
237
|
|
242
|
-
def
|
243
|
-
@
|
238
|
+
def fields
|
239
|
+
@resource.typus_fields_for(params[:action])
|
244
240
|
end
|
241
|
+
helper_method :fields
|
245
242
|
|
246
243
|
def set_order
|
247
244
|
params[:sort_order] ||= "desc"
|
@@ -2,7 +2,6 @@ class Admin::SessionController < Admin::BaseController
|
|
2
2
|
|
3
3
|
skip_before_filter :reload_config_and_roles
|
4
4
|
skip_before_filter :authenticate
|
5
|
-
skip_before_filter :set_locale
|
6
5
|
|
7
6
|
before_filter :create_an_account?, :only => [:new, :create]
|
8
7
|
|
@@ -23,9 +22,7 @@ class Admin::SessionController < Admin::BaseController
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def destroy
|
26
|
-
|
27
|
-
I18n.locale = I18n.default_locale
|
28
|
-
redirect_to :action => :new
|
25
|
+
deauthenticate
|
29
26
|
end
|
30
27
|
|
31
28
|
private
|
@@ -34,4 +31,8 @@ class Admin::SessionController < Admin::BaseController
|
|
34
31
|
redirect_to new_admin_account_path if Typus.user_class.count.zero?
|
35
32
|
end
|
36
33
|
|
34
|
+
def set_locale
|
35
|
+
I18n.locale = I18n.default_locale
|
36
|
+
end
|
37
|
+
|
37
38
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module Admin
|
2
|
-
|
3
2
|
module BaseHelper
|
4
3
|
|
5
4
|
def title(page_title)
|
@@ -24,6 +23,15 @@ module Admin
|
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
26
|
+
def admin_sign_out_path
|
27
|
+
case Typus.authentication
|
28
|
+
when :devise
|
29
|
+
send("destroy_#{Typus.user_class_name.underscore}_session")
|
30
|
+
else
|
31
|
+
destroy_admin_session_path
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
27
35
|
def display_flash_message(message = flash)
|
28
36
|
if message.compact.any?
|
29
37
|
render "admin/helpers/base/flash_message",
|
@@ -33,5 +41,4 @@ module Admin
|
|
33
41
|
end
|
34
42
|
|
35
43
|
end
|
36
|
-
|
37
44
|
end
|
@@ -1,16 +1,10 @@
|
|
1
1
|
module Admin
|
2
|
-
|
3
2
|
module DashboardHelper
|
4
3
|
|
5
|
-
def applications
|
6
|
-
render "admin/helpers/dashboard/applications"
|
7
|
-
end
|
8
|
-
|
9
4
|
def resources(admin_user)
|
10
5
|
available = Typus.resources.delete_if { |r| !(admin_user.is_a?(FakeUser) || admin_user.resources.include?(r)) }
|
11
6
|
render "admin/helpers/dashboard/resources", :resources => available
|
12
7
|
end
|
13
8
|
|
14
9
|
end
|
15
|
-
|
16
10
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module Admin
|
2
|
-
|
3
2
|
module FiltersHelper
|
4
3
|
|
5
4
|
def build_filters(resource = @resource, params = params)
|
@@ -80,7 +79,12 @@ module Admin
|
|
80
79
|
end
|
81
80
|
|
82
81
|
def string_filter(filter)
|
83
|
-
values = @resource
|
82
|
+
values = if @resource.const_defined?(filter.to_s.upcase)
|
83
|
+
@resource::const_get(filter.to_s.upcase).to_a
|
84
|
+
else
|
85
|
+
@resource.send(filter.to_s).to_a
|
86
|
+
end
|
87
|
+
|
84
88
|
items = [[Typus::I18n.t("Show by %{attribute}", :attribute => @resource.human_attribute_name(filter).downcase), ""]]
|
85
89
|
array = values.first.is_a?(Array) ? values : values.map { |i| [i, i] }
|
86
90
|
items += array
|
@@ -91,5 +95,4 @@ module Admin
|
|
91
95
|
end
|
92
96
|
|
93
97
|
end
|
94
|
-
|
95
98
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module Admin
|
2
|
-
|
3
2
|
module FormHelper
|
4
3
|
|
5
4
|
def build_form(fields, form)
|
@@ -19,7 +18,7 @@ module Admin
|
|
19
18
|
typus_template_field(key, :string, form)
|
20
19
|
end
|
21
20
|
end
|
22
|
-
end
|
21
|
+
end.html_safe
|
23
22
|
end
|
24
23
|
|
25
24
|
def typus_tree_field(attribute, form)
|
@@ -38,7 +37,7 @@ module Admin
|
|
38
37
|
next if admin_user.cannot?('read', association.class_name.typus_constantize)
|
39
38
|
html << send("typus_form_#{association.macro}", relationship)
|
40
39
|
end
|
41
|
-
end
|
40
|
+
end.html_safe
|
42
41
|
end
|
43
42
|
|
44
43
|
def typus_template_field(attribute, template, form)
|
@@ -74,5 +73,4 @@ module Admin
|
|
74
73
|
end
|
75
74
|
|
76
75
|
end
|
77
|
-
|
78
76
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module Admin
|
2
|
-
|
3
2
|
module ListHelper
|
4
3
|
|
5
4
|
def resources_actions
|
@@ -12,7 +11,7 @@ module Admin
|
|
12
11
|
path = params.dup.merge!(url).compact.cleanup
|
13
12
|
link_to Typus::I18n.t(body), path, options
|
14
13
|
end
|
15
|
-
end.join(" / ").html_safe
|
14
|
+
end.compact.join(" / ").html_safe
|
16
15
|
end
|
17
16
|
|
18
17
|
#--
|
@@ -27,5 +26,4 @@ module Admin
|
|
27
26
|
end
|
28
27
|
|
29
28
|
end
|
30
|
-
|
31
29
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module Admin
|
2
|
-
|
3
2
|
module RelationshipsHelper
|
4
3
|
|
5
4
|
def setup_relationship(field)
|
@@ -107,7 +106,7 @@ module Admin
|
|
107
106
|
|
108
107
|
def set_condition
|
109
108
|
if @resource.typus_user_id? && admin_user.is_not_root?
|
110
|
-
|
109
|
+
admin_user.owns?(@item)
|
111
110
|
else
|
112
111
|
true
|
113
112
|
end
|
@@ -152,7 +151,7 @@ module Admin
|
|
152
151
|
# Pass the resource_id only to edit/update because only there is where
|
153
152
|
# the record actually exists.
|
154
153
|
options.merge!(:resource_id => @item.id) if %w(edit update).include?(params[:action])
|
155
|
-
message = link_to Typus::I18n.t("Add"), options
|
154
|
+
message = link_to Typus::I18n.t("Add new"), options
|
156
155
|
end
|
157
156
|
|
158
157
|
# Set the template.
|
@@ -183,5 +182,4 @@ module Admin
|
|
183
182
|
end
|
184
183
|
|
185
184
|
end
|
186
|
-
|
187
185
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module Admin
|
2
|
-
|
3
2
|
module TableHelper
|
4
3
|
|
5
4
|
def build_table(model, fields, items, link_options = {}, association = nil, association_name = nil)
|
@@ -15,7 +14,7 @@ module Admin
|
|
15
14
|
def table_header(model, fields, params = params)
|
16
15
|
fields.map do |key, value|
|
17
16
|
|
18
|
-
key = key.gsub(".", " ") if key.match(/\./)
|
17
|
+
key = key.gsub(".", " ") if key.to_s.match(/\./)
|
19
18
|
content = model.human_attribute_name(key)
|
20
19
|
|
21
20
|
if params[:action].eql?('index') && model.typus_options_for(:sortable)
|
@@ -80,12 +79,10 @@ module Admin
|
|
80
79
|
|
81
80
|
alias :table_has_many_field :table_has_and_belongs_to_many_field
|
82
81
|
|
83
|
-
def
|
82
|
+
def table_text_field(attribute, item)
|
84
83
|
(raw_content = item.send(attribute)).present? ? truncate(raw_content) : "—".html_safe
|
85
84
|
end
|
86
85
|
|
87
|
-
alias :table_text_field :table_string_field
|
88
|
-
|
89
86
|
def table_generic_field(attribute, item)
|
90
87
|
(raw_content = item.send(attribute)).present? ? raw_content : "—".html_safe
|
91
88
|
end
|
@@ -94,6 +91,7 @@ module Admin
|
|
94
91
|
alias :table_integer_field :table_generic_field
|
95
92
|
alias :table_decimal_field :table_generic_field
|
96
93
|
alias :table_virtual_field :table_generic_field
|
94
|
+
alias :table_string_field :table_generic_field
|
97
95
|
|
98
96
|
def table_selector_field(attribute, item)
|
99
97
|
item.mapping(attribute)
|
@@ -159,5 +157,4 @@ module Admin
|
|
159
157
|
end
|
160
158
|
|
161
159
|
end
|
162
|
-
|
163
160
|
end
|
@@ -9,11 +9,11 @@
|
|
9
9
|
|
10
10
|
<li>
|
11
11
|
<%= form.label :email, Typus.user_class.human_attribute_name(:email) %>
|
12
|
-
<%= form.text_field :email, :size => 20, :class => "text" %>
|
12
|
+
<%= form.text_field :email, :size => 20, :class => "text", :autofocus => 'autofocus' %>
|
13
13
|
</li>
|
14
14
|
|
15
15
|
<li>
|
16
|
-
<%= submit_tag Typus::I18n.t("Submit"), :class => "button" %> <%= link_to Typus::I18n.t("I remember my password"), new_admin_session_path %>
|
16
|
+
<%= submit_tag Typus::I18n.t("Submit"), :class => "button", :disable_with => Typus::I18n.t("Sending data ...") %> <%= link_to Typus::I18n.t("I remember my password"), new_admin_session_path %>
|
17
17
|
</li>
|
18
18
|
|
19
19
|
</ul>
|