faalis 0.24.4 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/faalis/dashboard/modules/auth/group.js +7 -1
- data/app/assets/javascripts/faalis/dashboard/modules/fields/relation.js +50 -3
- data/app/assets/stylesheets/faalis/base.css.scss +16 -1
- data/app/assets/stylesheets/faalis/ltr/foundation_and_overrides.scss +4 -0
- data/app/assets/stylesheets/faalis/rtl/foundation_and_overrides.css.scss +1 -1
- data/app/assets/stylesheets/faalis/variables.css.scss +1 -1
- data/app/controllers/faalis/#api_controller.rb# +144 -0
- data/app/controllers/faalis/api/v1/#conversations_controller.rb# +120 -0
- data/app/controllers/faalis/api/v1/workflows_controller.rb +18 -0
- data/app/controllers/faalis/api_controller.rb +3 -3
- data/app/controllers/faalis/application_controller.rb +0 -1
- data/app/models/faalis/workflow.rb +4 -0
- data/app/views/angularjs_templates/auth/groups/new.html +47 -25
- data/app/views/angularjs_templates/fields/relation/relation.html +9 -2
- data/app/views/devise/sessions/new.html.erb +52 -88
- data/app/views/faalis/api/v1/workflows/index.json.jbuilder +5 -0
- data/app/views/faalis/home/index.html.erb +14 -11
- data/app/views/layouts/faalis/application.html.erb +21 -30
- data/app/views/layouts/faalis/simple.html.erb +37 -0
- data/app/workflows/faalis/administration_workflow.rb +7 -0
- data/config/routes.rb +15 -13
- data/db/migrate/20140413180202_create_faalis_workflows.rb +9 -0
- data/db/seeds.rb +17 -13
- data/lib/faalis.rb +12 -10
- data/lib/faalis/engine.rb +9 -8
- data/lib/faalis/generators/concerns.rb +15 -13
- data/lib/faalis/generators/concerns/bulk.rb +2 -5
- data/lib/faalis/generators/concerns/fieldset.rb +48 -0
- data/lib/faalis/generators/concerns/resource_fields.rb +43 -45
- data/lib/faalis/generators/concerns/where.rb +46 -0
- data/lib/faalis/generators/dashboard_scaffold.rb +6 -5
- data/lib/faalis/version.rb +1 -1
- data/lib/faalis/workflows.rb +7 -0
- data/lib/faalis/workflows/base.rb +69 -0
- data/lib/faalis/workflows/discovery.rb +42 -0
- data/lib/generators/faalis/templates/js/list_view/new.html.erb +7 -5
- data/lib/tasks/sync.rake +10 -0
- data/spec/factories/faalis_workflows.rb +7 -0
- data/spec/models/faalis/workflow_spec.rb +7 -0
- metadata +36 -4
@@ -0,0 +1,37 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title><%= Faalis::Engine.site_title %></title>
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
6
|
+
<%= stylesheet_link_tag Faalis::I18n.direction(I18n.locale) + "/application", media: "all" %>
|
7
|
+
<%= javascript_include_tag :modernizr %>
|
8
|
+
<%= csrf_meta_tags %>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
|
12
|
+
<%= yield %>
|
13
|
+
|
14
|
+
<!-- Footer -->
|
15
|
+
|
16
|
+
<hr/>
|
17
|
+
<footer class="plain">
|
18
|
+
<div class="row">
|
19
|
+
<div class="large-6 columns">
|
20
|
+
<p>© Copyright no one at all. Go to town.</p>
|
21
|
+
</div>
|
22
|
+
<div class="large-6 columns">
|
23
|
+
<ul class="inline-list right">
|
24
|
+
<li><a href="#">Link 1</a></li>
|
25
|
+
<li><a href="#">Link 2</a></li>
|
26
|
+
<li><a href="#">Link 3</a></li>
|
27
|
+
<li><a href="#">Link 4</a></li>
|
28
|
+
</ul>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
</footer>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<%= javascript_include_tag "faalis/application" %>
|
36
|
+
</body>
|
37
|
+
</html>
|
data/config/routes.rb
CHANGED
@@ -1,48 +1,50 @@
|
|
1
1
|
Faalis::Engine.routes.draw do
|
2
|
-
get
|
2
|
+
get 'templates/*path' => 'dashboard#jstemplate'
|
3
3
|
|
4
4
|
# Authentications
|
5
5
|
devise_config = {
|
6
|
-
:class_name =>
|
6
|
+
:class_name => 'Faalis::User',
|
7
7
|
:module => :devise
|
8
8
|
}
|
9
9
|
|
10
10
|
# Add omniauth callback if there was any provider
|
11
11
|
unless Devise.omniauth_providers.empty?
|
12
12
|
devise_config[:controllers] = {
|
13
|
-
:omniauth_callbacks =>
|
13
|
+
:omniauth_callbacks => 'faalis/omniauth/callbacks',
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
17
17
|
devise_for :users, devise_config
|
18
18
|
|
19
19
|
|
20
|
-
scope
|
20
|
+
scope '(:locale)', :locale => Regexp.new(::I18n.available_locales.join('|')) do
|
21
21
|
scope Faalis::Engine.dashboard_namespace.to_sym do
|
22
|
-
get
|
23
|
-
get
|
22
|
+
get '' => 'dashboard#index', :as => 'dashboard'
|
23
|
+
get 'modules' => 'dashboard#modules'
|
24
24
|
end
|
25
25
|
|
26
26
|
|
27
27
|
# Root URL
|
28
|
-
root :to =>
|
28
|
+
root :to => 'home#index'
|
29
29
|
end
|
30
30
|
|
31
31
|
|
32
32
|
namespace :api, :defaults => {:format => :json} do
|
33
33
|
namespace :v1 do
|
34
|
-
get
|
35
|
-
get
|
34
|
+
get 'permissions', :to => 'permissions#index'
|
35
|
+
get 'permissions/user', :to => 'permissions#user_permissions'
|
36
36
|
resources :groups, :except => [:new]
|
37
37
|
resources :users, :except => [:new]
|
38
38
|
resource :profile, :except => [:new, :destroy]
|
39
|
-
|
39
|
+
|
40
|
+
get 'logs' => 'logs#index'
|
41
|
+
get 'workflows' => 'workflows#index'
|
40
42
|
|
41
43
|
resources :conversations, only: [:index, :show, :create, :destroy] do
|
42
44
|
collection do
|
43
|
-
get
|
44
|
-
post
|
45
|
-
post
|
45
|
+
get ':box/box' => 'conversations#index'
|
46
|
+
post 'trash' => 'conversations#trash'
|
47
|
+
post 'untrash' => 'conversations#untrash'
|
46
48
|
end
|
47
49
|
member do
|
48
50
|
post :reply
|
data/db/seeds.rb
CHANGED
@@ -2,16 +2,20 @@
|
|
2
2
|
|
3
3
|
ModelDiscovery::Engine.load_seed
|
4
4
|
|
5
|
-
Faalis::
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
Faalis::Workflows::Discovery.build_table_list
|
6
|
+
|
7
|
+
Faalis::Group.create({:name => 'Admin'})
|
8
|
+
|
9
|
+
Faalis::User.create({:email => 'admin@example.com',
|
10
|
+
:group_id => 1,
|
11
|
+
:password => '123123123',
|
12
|
+
:password_confirmation => '123123123'})
|
13
|
+
|
14
|
+
|
15
|
+
Faalis::Group.create({:name => 'Guest', :id => 2})
|
16
|
+
|
17
|
+
|
18
|
+
Faalis::User.create({:email => 'user@example.com',
|
19
|
+
:group_id => 2,
|
20
|
+
:password => '123123123',
|
21
|
+
:password_confirmation => '123123123'})
|
data/lib/faalis.rb
CHANGED
@@ -17,17 +17,19 @@
|
|
17
17
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
18
18
|
# -----------------------------------------------------------------------------
|
19
19
|
|
20
|
-
require
|
20
|
+
require 'devise'
|
21
21
|
|
22
|
+
# Faalis Module
|
22
23
|
module Faalis
|
23
24
|
end
|
24
25
|
|
25
|
-
require
|
26
|
-
require
|
27
|
-
require
|
28
|
-
require
|
29
|
-
require
|
30
|
-
require
|
31
|
-
require
|
32
|
-
require
|
33
|
-
require
|
26
|
+
require 'faalis/engine'
|
27
|
+
require 'faalis/permissions'
|
28
|
+
require 'faalis/dashboard'
|
29
|
+
require 'faalis/omniauth'
|
30
|
+
require 'faalis/active_record'
|
31
|
+
require 'faalis/i18n'
|
32
|
+
require 'faalis/plugins'
|
33
|
+
require 'faalis/generators/concerns'
|
34
|
+
require 'faalis/generators'
|
35
|
+
require 'faalis/workflows'
|
data/lib/faalis/engine.rb
CHANGED
@@ -18,12 +18,12 @@
|
|
18
18
|
# -----------------------------------------------------------------------------
|
19
19
|
require 'fast_gettext'
|
20
20
|
require 'modernizr-rails'
|
21
|
-
require "compass-rails"
|
21
|
+
#require "compass-rails"
|
22
22
|
#require 'zurb-foundation'
|
23
23
|
require 'foundation-rails'
|
24
24
|
require "font-awesome-rails"
|
25
|
-
require "devise"
|
26
|
-
require "warden"
|
25
|
+
#require "devise"
|
26
|
+
#require "warden"
|
27
27
|
require "cancan"
|
28
28
|
require "mailboxer"
|
29
29
|
require "model_discovery"
|
@@ -93,11 +93,11 @@ module Faalis
|
|
93
93
|
|
94
94
|
# Override devise layout
|
95
95
|
config.to_prepare do
|
96
|
-
Devise::SessionsController.layout
|
97
|
-
Devise::RegistrationsController.layout
|
98
|
-
Devise::ConfirmationsController.layout
|
99
|
-
Devise::UnlocksController.layout
|
100
|
-
Devise::PasswordsController.layout
|
96
|
+
Devise::SessionsController.layout 'faalis/simple'
|
97
|
+
Devise::RegistrationsController.layout 'faalis/simple'
|
98
|
+
Devise::ConfirmationsController.layout 'faalis/application'
|
99
|
+
Devise::UnlocksController.layout 'faalis/application'
|
100
|
+
Devise::PasswordsController.layout 'faalis/application'
|
101
101
|
end
|
102
102
|
#Devise.omniauth_path_prefix = ["/en", "/fa"]
|
103
103
|
|
@@ -126,5 +126,6 @@ module Faalis
|
|
126
126
|
mattr_accessor :dashboard_js_manifest
|
127
127
|
@@dashboard_js_manifest = "controlpanel/application.js"
|
128
128
|
|
129
|
+
config.autoload_paths << "app/workflows"
|
129
130
|
end
|
130
131
|
end
|
@@ -1,13 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
1
|
+
require 'faalis/generators/concerns/menu'
|
2
|
+
require 'faalis/generators/concerns/dependency'
|
3
|
+
require 'faalis/generators/concerns/bulk'
|
4
|
+
require 'faalis/generators/concerns/required'
|
5
|
+
require 'faalis/generators/concerns/parent'
|
6
|
+
require 'faalis/generators/concerns/resource_fields'
|
7
|
+
require 'faalis/generators/concerns/resource_name'
|
8
|
+
require 'faalis/generators/concerns/angular'
|
9
|
+
require 'faalis/generators/concerns/tabs'
|
10
|
+
require 'faalis/generators/concerns/model'
|
11
|
+
require 'faalis/generators/concerns/json_input'
|
12
|
+
require 'faalis/generators/concerns/allow_query_on'
|
13
|
+
require 'faalis/generators/concerns/render'
|
14
|
+
require 'faalis/generators/concerns/where'
|
15
|
+
require 'faalis/generators/concerns/fieldset'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module Faalis
|
4
|
+
module Generators
|
5
|
+
module Concerns
|
6
|
+
# Allow to categorize fields in some fieldset
|
7
|
+
module Fieldset
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
# Returns fields which is needed to be in bulk edit
|
12
|
+
def fieldset?
|
13
|
+
!fields_with_attribute("fieldset").empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
def fieldset_less_fields
|
17
|
+
fields = Set.new(raw_fields_data) - Set.new(fields_with_attribute("fieldset"))
|
18
|
+
puts ">>>>>>>>>>>((((((((((((( #{fields.to_a}"
|
19
|
+
fields.to_a
|
20
|
+
end
|
21
|
+
|
22
|
+
# TODO: fix this method to allow usage on tabbed views too
|
23
|
+
# Return fields categorized by fieldsets. Only for
|
24
|
+
# views without tabs
|
25
|
+
def fieldsets
|
26
|
+
fieldsets = {resource.underscore.pluralize.humanize => fieldset_less_fields}
|
27
|
+
fields = fields_with_attribute('fieldset')
|
28
|
+
fields.each do |f|
|
29
|
+
if fieldsets.include? f['fieldset']
|
30
|
+
fieldsets[f['fieldset']] << f
|
31
|
+
else
|
32
|
+
fieldsets[f['fieldset']] = [f]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Convert hashes to proper field structure to use in templates
|
37
|
+
fieldsets.each do |fieldset_name, fieldset_fields|
|
38
|
+
if fieldset_fields[0].is_a? Hash
|
39
|
+
fieldsets[fieldset_name] = fields(fieldset_fields)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
fieldsets
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require 'faalis/generators/fields/relation'
|
3
2
|
|
4
3
|
module Faalis
|
5
4
|
module Generators
|
@@ -32,29 +31,38 @@ module Faalis
|
|
32
31
|
# **required**: Field will be non optional.
|
33
32
|
module ResourceFields
|
34
33
|
|
35
|
-
|
36
34
|
private
|
35
|
+
|
37
36
|
# An array of fields like
|
38
37
|
# [name, type]
|
39
|
-
def fields
|
38
|
+
def fields(fields_source = resource_data['fields'])
|
40
39
|
fields = []
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
type = Relation.new(type, to, options)
|
50
|
-
end
|
40
|
+
relations = ['belongs_to', 'has_many']
|
41
|
+
|
42
|
+
if fields?
|
43
|
+
fields_source.each do |field|
|
44
|
+
name = field['name']
|
45
|
+
type = field['type']
|
46
|
+
to = field['to']
|
47
|
+
options = field['options'] || {}
|
51
48
|
|
49
|
+
type = Relation.new(type, to, options) if relations.include? type
|
52
50
|
fields << [name, type, to]
|
53
51
|
end
|
54
52
|
end
|
55
53
|
fields
|
56
54
|
end
|
57
55
|
|
56
|
+
# Return the value of `attr_name` of `field_name` in
|
57
|
+
# resource_data["fields"]
|
58
|
+
def attrs(field_name, attr_name)
|
59
|
+
if fields?
|
60
|
+
field = fields_with('name', field_name)[0]
|
61
|
+
return field[attr_name]
|
62
|
+
end
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
|
58
66
|
def fields_hash
|
59
67
|
Hash[fields]
|
60
68
|
end
|
@@ -66,76 +74,66 @@ module Faalis
|
|
66
74
|
# Return an string to use as a function parameters each
|
67
75
|
# field appears as symbol
|
68
76
|
def fields_as_params(relations = false)
|
69
|
-
|
77
|
+
# FIXME: cyclomatic complexity is to high
|
78
|
+
result = ''
|
70
79
|
field_num = 0
|
80
|
+
|
71
81
|
fields.each do |name, type|
|
72
82
|
if relations
|
73
|
-
if [
|
83
|
+
if ['belongs_to'].include? type
|
74
84
|
result += " :#{name}_id"
|
75
85
|
else
|
76
86
|
result += " :#{name}"
|
77
87
|
end
|
88
|
+
|
78
89
|
field_num += 1
|
79
|
-
if field_num < fields.length
|
80
|
-
result += ","
|
81
|
-
end
|
90
|
+
result += ',' if field_num < fields.length
|
82
91
|
|
83
92
|
else
|
84
|
-
unless [
|
93
|
+
unless ['belongs_to', 'has_many'].include? type
|
85
94
|
result += " :#{name}"
|
86
95
|
field_num += 1
|
87
|
-
if field_num < fields.length
|
88
|
-
result += ","
|
89
|
-
end
|
96
|
+
result += ',' if field_num < fields.length
|
90
97
|
end
|
91
98
|
end
|
92
|
-
|
93
99
|
end
|
94
100
|
|
95
101
|
if result
|
96
102
|
result = ",#{result}"
|
97
|
-
if result[-1] ==
|
98
|
-
result = result[0..-2]
|
99
|
-
end
|
103
|
+
result = result[0..-2] if result[-1] == ','
|
100
104
|
end
|
101
105
|
|
102
106
|
result
|
103
107
|
end
|
104
108
|
|
105
109
|
def raw_fields_data
|
106
|
-
|
107
|
-
return resource_data["fields"]
|
108
|
-
end
|
109
|
-
[]
|
110
|
+
resource_data['fields'] || []
|
110
111
|
end
|
111
112
|
|
112
113
|
def fields_with(attr, value)
|
113
114
|
raw_fields_data.select do |f|
|
114
|
-
|
115
115
|
if f.include? attr
|
116
|
-
|
117
|
-
if f[attr] == value
|
118
|
-
|
119
|
-
true
|
120
|
-
else
|
121
|
-
false
|
122
|
-
end
|
116
|
+
f[attr] == value ? true : false
|
123
117
|
else
|
124
118
|
false
|
125
119
|
end
|
120
|
+
end
|
121
|
+
end
|
126
122
|
|
123
|
+
def fields_with_attribute(attr)
|
124
|
+
field_list = raw_fields_data.select do |f|
|
125
|
+
f.include?(attr) ? true : false
|
127
126
|
end
|
127
|
+
field_list
|
128
128
|
end
|
129
129
|
|
130
130
|
def no_filter?
|
131
|
-
resource_data.include?(
|
131
|
+
resource_data.include?('no_filter') && resource_data['no_filter']
|
132
132
|
end
|
133
133
|
|
134
|
-
def
|
135
|
-
if resource_data.include?
|
136
|
-
unless resource_data[
|
137
|
-
return true
|
138
|
-
end
|
134
|
+
def fields?
|
135
|
+
if resource_data.include? 'fields'
|
136
|
+
return true unless resource_data['fields'].nil?
|
139
137
|
end
|
140
138
|
false
|
141
139
|
end
|