faalis 2.1.1 → 2.2.0.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/faalis/dashboard/application.js.erb +1 -1
  3. data/app/assets/javascripts/faalis/dashboard/init.js.coffee +1 -2
  4. data/app/assets/javascripts/faalis/dashboard/manifest.js +5 -0
  5. data/app/assets/javascripts/faalis/simple.js +1 -1
  6. data/app/assets/stylesheets/faalis/dashboard/ltr/application.css +4 -2
  7. data/app/assets/stylesheets/faalis/dashboard/rtl/application.css +4 -0
  8. data/app/assets/stylesheets/faalis/dashboard/share.scss +6 -0
  9. data/app/controllers/faalis/dashboard/groups_controller.rb +0 -1
  10. data/app/controllers/faalis/dashboard/users_controller.rb +6 -2
  11. data/app/helpers/faalis/dashboard_helper.rb +8 -9
  12. data/app/models/faalis/concerns/user/permission.rb +7 -2
  13. data/app/models/faalis/concerns/user/user_roles.rb +15 -11
  14. data/app/models/faalis/user_message.rb +1 -0
  15. data/app/policies/faalis/application_policy.rb +6 -2
  16. data/app/views/faalis/dashboard/resource/create.js.erb +1 -1
  17. data/app/views/faalis/dashboard/resource/index.html.slim +2 -1
  18. data/app/views/faalis/dashboard/resource/update.js.erb +1 -1
  19. data/app/views/faalis/dashboard/users/_form.html.slim +1 -1
  20. data/app/views/layouts/faalis/dashboard.html.erb +1 -1
  21. data/config/locales/devise.fa.yml +7 -0
  22. data/config/locales/faalis.fa.yml +46 -3
  23. data/db/migrate/20131013091000_devise_create_faalis_users.rb +4 -1
  24. data/db/migrate/20131020124701_create_faalis_groups.rb +4 -1
  25. data/db/migrate/20131021170923_create_faalis_permissions.rb +4 -1
  26. data/db/migrate/20131123120422_add_permissions_groups_table.rb +11 -3
  27. data/db/migrate/20140613120923_add_users_groups_table.rb +7 -2
  28. data/db/migrate/20160310105736_create_faalis_user_messages.rb +13 -4
  29. data/lib/faalis.rb +12 -5
  30. data/lib/faalis/concerns/authorizable.rb +3 -1
  31. data/lib/faalis/configuration.rb +17 -2
  32. data/lib/faalis/dashboard.rb +4 -5
  33. data/lib/faalis/dashboard/dsl.rb +0 -1
  34. data/lib/faalis/dashboard/dsl/base.rb +6 -3
  35. data/lib/faalis/dashboard/dsl/create.rb +0 -1
  36. data/lib/faalis/dashboard/dsl/index.rb +2 -0
  37. data/lib/faalis/dashboard/models.rb +2 -0
  38. data/lib/faalis/dashboard/models/sidebar.rb +1 -1
  39. data/lib/faalis/dashboard/sections.rb +2 -0
  40. data/lib/faalis/dashboard/sections/resource.rb +41 -54
  41. data/lib/faalis/dashboard/sections/resource_create.rb +17 -3
  42. data/lib/faalis/dashboard/sections/resources_index.rb +5 -3
  43. data/lib/faalis/engine.rb +6 -0
  44. data/lib/faalis/i18n.rb +2 -1
  45. data/lib/faalis/liquid.rb +7 -0
  46. data/lib/faalis/liquid/block.rb +14 -0
  47. data/lib/faalis/liquid/render_tag.rb +50 -0
  48. data/lib/faalis/liquid/tag.rb +51 -0
  49. data/lib/faalis/orm.rb +1 -0
  50. data/lib/faalis/{route.rb → routes.rb} +42 -20
  51. data/lib/faalis/version.rb +1 -1
  52. data/test/controllers/faalis/dashboard/resource_test.rb +118 -0
  53. data/test/dummy/config/boot.rb +1 -1
  54. metadata +60 -79
  55. checksums.yaml.gz.sig +0 -4
  56. data.tar.gz.sig +0 -1
  57. data/app/models/faalis/permissions/auth.rb +0 -8
  58. data/test/dummy/db/test.sqlite3 +0 -0
  59. data/test/dummy/log/test.log +0 -0
  60. metadata.gz.sig +0 -0
@@ -1,8 +1,13 @@
1
1
  class AddUsersGroupsTable < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :faalis_groups_users do |t|
4
- t.belongs_to :user
5
- t.belongs_to :group
4
+ if Faalis::Engine.use_uuid
5
+ t.uuid :user_id
6
+ t.uuid :group_id
7
+ else
8
+ t.belongs_to :user
9
+ t.belongs_to :group
10
+ end
6
11
  end
7
12
  end
8
13
  end
@@ -1,8 +1,17 @@
1
1
  class CreateFaalisUserMessages < ActiveRecord::Migration
2
2
  def change
3
- create_table :faalis_user_messages do |t|
4
- t.integer :sender_id
5
- t.integer :reciver_id
3
+ args = {}
4
+ args[:id] = :uuid if Faalis::Engine.use_uuid
5
+
6
+ create_table :faalis_user_messages, **args do |t|
7
+ if Faalis::Engine.use_uuid
8
+ t.uuid :sender_id
9
+ t.uuid :receiver_id
10
+ else
11
+ t.integer :sender_id
12
+ t.integer :receiver_id
13
+ end
14
+
6
15
  t.boolean :read_only
7
16
  t.text :content
8
17
  t.text :raw_content
@@ -11,6 +20,6 @@ class CreateFaalisUserMessages < ActiveRecord::Migration
11
20
  end
12
21
 
13
22
  add_index :faalis_user_messages, :sender_id
14
- add_index :faalis_user_messages, :reciver_id
23
+ add_index :faalis_user_messages, :receiver_id
15
24
  end
16
25
  end
@@ -11,17 +11,24 @@ require 'amd'
11
11
 
12
12
  # Faalis Module
13
13
  module Faalis
14
-
14
+ autoload :Helpers, 'faalis/helpers/autoload_helper'
15
+ autoload :Routes, 'faalis/routes'
16
+ autoload :RouteHelpers, 'faalis/routes'
17
+ autoload :Liquid, 'faalis/liquid'
18
+ # autoload :Engine, 'faalis/engine'
19
+ autoload :Dashboard, 'faalis/dashboard'
20
+ autoload :Concerns, 'faalis/concerns'
21
+ autoload :ORM, 'faalis/orm'
15
22
  end
16
23
 
17
24
  require 'faalis/engine'
18
- require 'faalis/orm'
19
- require 'faalis/concerns'
20
- require 'faalis/dashboard'
25
+ #require 'faalis/orm'
26
+ #require 'faalis/concerns'
27
+ #require 'faalis/dashboard'
21
28
  require 'faalis/extension'
22
29
  require 'faalis/omniauth'
23
30
  require 'faalis/i18n'
24
- require 'faalis/route'
31
+ #require 'faalis/route'
25
32
  require 'faalis/action_dispatch'
26
33
  require 'faalis/discovery'
27
34
  require 'faalis/fake_assets'
@@ -26,16 +26,19 @@ module Faalis
26
26
  strings = []
27
27
  model_name = model.to_s
28
28
  humanize_name = ActiveModel::Name.new(model).human
29
+
29
30
  if model.respond_to? :model_name
30
31
  model_name = model.model_name
31
32
  humanize_name = model_name.human
32
33
  end
34
+
33
35
  @@permissions.each do |key, value|
34
36
  strings << {
35
37
  name: "#{key}|#{model_name}",
36
38
  string: t("faalis.permission_string", action: key.to_s, model: humanize_name)
37
39
  }
38
40
  end
41
+
39
42
  strings
40
43
  end
41
44
 
@@ -45,7 +48,6 @@ module Faalis
45
48
 
46
49
  # Define permissions using this method
47
50
  def permissions(*args)
48
-
49
51
  args.each do |permission|
50
52
  if permission.class == Symbol
51
53
  if not @@permissions.include? permission
@@ -1,4 +1,6 @@
1
1
  module Faalis
2
+ # This module contains all the configuration of `Faalis::Engine`
3
+ # which can be setup in `config/initializer/faalis.rb`
2
4
  module Configuration
3
5
 
4
6
  @@modules_to_load = {}
@@ -32,6 +34,10 @@ module Faalis
32
34
  end
33
35
  end
34
36
 
37
+ mattr_accessor :i18n_debug do
38
+ false
39
+ end
40
+
35
41
  # Site Title
36
42
  attr_accessor :site_title do
37
43
  'Faalis'
@@ -58,6 +64,11 @@ module Faalis
58
64
  {}
59
65
  end
60
66
 
67
+ # Whether using UUID with models or not.
68
+ mattr_accessor :use_uuid do
69
+ false
70
+ end
71
+
61
72
  mattr_accessor :amd_dir do
62
73
  'amd'
63
74
  end
@@ -65,11 +76,15 @@ module Faalis
65
76
  mattr_accessor :amd do
66
77
  true
67
78
  end
68
-
79
+ # This hash map contains all the features as keys and
80
+ # the required dependencies of each feature in form of
81
+ # an array as value
69
82
  @@modules_to_load[:amd] = ['amd']
70
83
 
84
+ # Load all the features dependencies based on their configuration
85
+ # value. For example if `amd` class method returns true all of its
86
+ # dependencies will be loaded.
71
87
  def load_dependencies_based_on_configuration
72
-
73
88
  @@modules_to_load.each do |k, v|
74
89
  v.map { |mod| require mod } if send(k)
75
90
  end
@@ -1,12 +1,11 @@
1
- require_dependency 'faalis/dashboard/dsl'
1
+ #require_dependency 'faalis/dashboard/dsl'
2
2
 
3
3
  module Faalis::Dashboard
4
- module DSL
5
- end
4
+ autoload :DSL, 'faalis/dashboard/dsl'
6
5
 
7
6
  module Helpers
8
7
  end
9
8
 
10
- module Sections
11
- end
9
+ autoload :Models, 'faalis/dashboard/models'
10
+ autoload :Sections, 'faalis/dashboard/sections.rb'
12
11
  end
@@ -28,7 +28,6 @@ module Faalis::Dashboard
28
28
  # override the default view for given views or the result
29
29
  # of the given block, by the one from the application
30
30
  def override_views(*views, &block)
31
- views.concat(block.call) if block_given?
32
31
 
33
32
  define_method(:_override_views) do
34
33
  result = views || []
@@ -34,6 +34,9 @@ module Faalis::Dashboard::DSL
34
34
  @fields = resolve_model_reflections.reject do |field|
35
35
  options[:except].include? field.to_sym
36
36
  end
37
+ elsif options.include? :append
38
+
39
+ @fields += options[:append]
37
40
  else
38
41
 
39
42
  # Check for valid field names
@@ -57,8 +60,8 @@ module Faalis::Dashboard::DSL
57
60
  # You can easily change it via the corresponding section dsl.
58
61
  # For example in case of `index` section:
59
62
  #
60
- # in_index do
61
- # scope do |params|
63
+ # in_index do |index|
64
+ # index.scope do |params|
62
65
  # YourModel.all
63
66
  # end
64
67
  #
@@ -83,7 +86,7 @@ module Faalis::Dashboard::DSL
83
86
  # Define a new action on the `action` place of the current section
84
87
  # **options**: Is a hash which contains the action button properties.
85
88
  #
86
- # `label`: Label to use with the button.
89
+ # `name`: Label to use with the button.
87
90
  # `href`: The link href to use in the `a` tag
88
91
  # `class`: classes of the button.
89
92
  # `icon_class`: font awesome icon to use in button.
@@ -81,7 +81,6 @@ module Faalis::Dashboard::DSL
81
81
  if respond_to?("setup_#{type}".to_sym, true)
82
82
  return send("setup_#{type}", name)
83
83
  end
84
-
85
84
  { as: type.to_sym }
86
85
  end
87
86
 
@@ -12,6 +12,8 @@ module Faalis::Dashboard::DSL
12
12
  @fields = resolve_model_reflections.reject do |field|
13
13
  options[:except].include? field.to_sym
14
14
  end
15
+ elsif options.include? :append
16
+ @fields += options[:append]
15
17
  else
16
18
  # set new value for fields
17
19
  @fields = fields_name.map(&:to_s) unless fields_name.empty?
@@ -0,0 +1,2 @@
1
+ module Faalis::Dashboard::Models
2
+ end
@@ -112,7 +112,7 @@ module Faalis::Dashboard::Models
112
112
 
113
113
  end
114
114
 
115
- menu(t('faalis.dashboard.user_messages'),
115
+ menu(t('faalis.dashboard.user_message'),
116
116
  icon: 'fa fa-envelope-o',
117
117
  model: 'Faalis::UserMessage') do
118
118
 
@@ -0,0 +1,2 @@
1
+ module Faalis::Dashboard::Sections
2
+ end
@@ -1,4 +1,6 @@
1
1
  module Faalis::Dashboard::Sections
2
+ # This module contains several helpers method which would
3
+ # be useful for the rest of faalis dashboard operation.
2
4
  module Resource
3
5
 
4
6
  extend ActiveSupport::Concern
@@ -32,7 +34,7 @@ module Faalis::Dashboard::Sections
32
34
  fail NameError, msg
33
35
  end
34
36
 
35
- def namespace
37
+ def _namespace
36
38
  pieces = controller_path.gsub('dashboard/', '').split('/')
37
39
  return '' if pieces.length == 1
38
40
 
@@ -41,10 +43,10 @@ module Faalis::Dashboard::Sections
41
43
  end
42
44
 
43
45
  def _route_engine
44
- if namespace.empty?
46
+ if _namespace.empty?
45
47
  Rails.application
46
48
  else
47
- engine = "#{namespace.split('/')[0]}::Engine".classify
49
+ engine = "#{_namespace.split('/')[0]}::Engine".classify
48
50
  if Object.const_defined? engine
49
51
  engine.constantize
50
52
  else
@@ -82,56 +84,41 @@ module Faalis::Dashboard::Sections
82
84
  !attachment_fields.empty?
83
85
  end
84
86
 
85
- def guess_index_route(scope = 'dashboard')
86
- scope_ = "#{scope}_"
87
- scope_ = "#{scope_}#{namespace}_" if !namespace.blank? && _engine.nil?
88
-
89
- name = controller_name
90
- if name.singularize == name.pluralize
91
- "#{scope_}#{name}_index_path"
92
- else
93
- "#{scope_}#{name}_path"
87
+ def _index_route
88
+ if respond_to? :index
89
+ url_for(controller: params[:controller],
90
+ action: :index)
94
91
  end
95
92
  end
96
93
 
97
- def guess_show_route(scope = 'dashboard')
98
- scope_ = "#{scope}_"
99
- scope_ = "#{scope_}#{namespace}_" if !namespace.blank? && _engine.nil?
100
-
101
- resource_name = controller_name.singularize.underscore
102
- "#{scope_}#{resource_name}_path".gsub('/', '_')
103
- end
104
-
105
- def guess_edit_route(scope = 'dashboard')
106
- scope_ = "#{scope}_"
107
- scope_ = "#{scope_}#{namespace}_" if !namespace.blank? && _engine.nil?
108
-
109
- resource_name = controller_name.singularize.underscore
110
- "edit_#{scope_}#{resource_name}_path".gsub('/', '_')
94
+ def _show_route(id)
95
+ if respond_to? :show
96
+ url_for(controller: params[:controller],
97
+ action: :show,
98
+ id: id)
99
+ end
111
100
  end
112
101
 
113
- def guess_new_route(scope = 'dashboard')
114
- scope_ = "#{scope}_"
115
- scope_ = "#{scope_}#{namespace}_" if !namespace.blank? && _engine.nil?
116
-
117
- resource_name = controller_name.singularize.underscore
118
- "new_#{scope_}#{resource_name}_path".gsub('/', '_')
102
+ def _edit_route(id)
103
+ if respond_to? :edit
104
+ url_for(controller: params[:controller],
105
+ action: :edit,
106
+ id: id)
107
+ end
119
108
  end
120
109
 
121
- def guess_edit_route(scope = 'dashboard')
122
- scope_ = "#{scope}_"
123
- scope_ = "#{scope_}#{namespace}_" if !namespace.blank? && _engine.nil?
124
-
125
- resource_name = controller_name.singularize.underscore
126
- "edit_#{scope_}#{resource_name}_path".gsub('/', '_')
110
+ def _new_route
111
+ if respond_to? :new
112
+ url_for(controller: params[:controller], action: :new)
113
+ end
127
114
  end
128
115
 
129
116
  def setup_named_routes
130
117
  @engine = _engine || _route_engine
131
- @index_route = guess_index_route
132
- @new_route = guess_new_route
133
- @show_route = guess_show_route
134
- @edit_route = guess_edit_route
118
+ @index_route = method(:_index_route)
119
+ @new_route = method(:_new_route)
120
+ @show_route = method(:_show_route)
121
+ @edit_route = method(:_edit_route)
135
122
  end
136
123
 
137
124
  def successful_response(section, msg = nil)
@@ -143,12 +130,9 @@ module Faalis::Dashboard::Sections
143
130
  f.html
144
131
  else
145
132
  flash[:success] = msg
146
- # Engine to fetch the route from
147
- engine = _engine || Rails.application
148
- path = engine.routes.url_helpers.send(@index_route)
149
- # TODO: We really need to put setup routed on top of this method
133
+
150
134
  f.js { render "faalis/dashboard/resource/#{section}" }
151
- f.html { redirect_to path }
135
+ f.html { redirect_to _index_route }
152
136
  end
153
137
  end
154
138
  end
@@ -163,16 +147,11 @@ module Faalis::Dashboard::Sections
163
147
  else
164
148
  flash[:error] = msg
165
149
 
166
- # Engine to fetch the route from
167
- engine = _engine || Rails.application
168
- path = engine.routes.url_helpers.send(@index_route)
169
- # TODO: We really need to put setup routed on top of this method
170
-
171
- f.js { render 'faalis/shared/errors' }
150
+ f.js { render 'faalis/dashboard/shared/errors' }
172
151
  if block_given?
173
152
  f.html(&block)
174
153
  else
175
- f.html { redirect_to path }
154
+ f.html { redirect_to _index_route }
176
155
  end
177
156
  end
178
157
  end
@@ -205,6 +184,14 @@ module Faalis::Dashboard::Sections
205
184
  end
206
185
  end
207
186
 
187
+ # Using this method user can override the route namespace guessed by
188
+ # Faalis.
189
+ def route_namespace(name, &block)
190
+ define_method(:_namespace) do
191
+ return block.call if block_given?
192
+ name
193
+ end
194
+ end
208
195
  # Set the engine name of current controller. It's necessary to provide and
209
196
  # engine name if the controller belongs to an engine other than Faalis or
210
197
  # Rails.application.
@@ -47,7 +47,7 @@ module Faalis::Dashboard::Sections
47
47
  new_params = creation_params
48
48
  new_params.merge(reflections_hash) if reflections_hash
49
49
 
50
- # Customize update behaviour
50
+ # Customize update behaviour before updating resource
51
51
  before_update_hook(@resource)
52
52
 
53
53
  # TODO: Move this method to a suitable place instead of controller
@@ -57,6 +57,8 @@ module Faalis::Dashboard::Sections
57
57
  @resource.assign_attributes(**new_params)
58
58
 
59
59
  if @resource.save
60
+ # Customize update behaviour after updating resource
61
+ after_update_hook(@resource)
60
62
  successful_response(:update)
61
63
  else
62
64
  errorful_resopnse(:update, @resource.errors) do
@@ -77,6 +79,7 @@ module Faalis::Dashboard::Sections
77
79
 
78
80
  # TODO: Handle M2M relations in here
79
81
  if @resource.save
82
+ after_create_hook(@resource)
80
83
  successful_response(:create)
81
84
  else
82
85
  errorful_resopnse(:create, @resource.errors) do
@@ -132,15 +135,26 @@ module Faalis::Dashboard::Sections
132
135
  private
133
136
 
134
137
  # You can override this method to change the behaviour of `create`
135
- # action
138
+ # action before save resource
136
139
  def before_create_hook(resource)
137
140
  end
138
141
 
142
+ # You can override this method to change the behaviour of `create`
143
+ # action afer save resource
144
+ def after_create_hook(resource)
145
+ end
146
+
139
147
  # You can override this method to change the behaviour of `update`
140
- # action
148
+ # action before save resource
141
149
  def before_update_hook(resource)
142
150
  end
143
151
 
152
+
153
+ # You can override this method to change the behaviour of `update`
154
+ # action after save resource
155
+ def after_update_hook(resource)
156
+ end
157
+
144
158
  # You can override this method to change the behaviour of `new`
145
159
  # action
146
160
  def new_hook(resource)