faalis 0.26.3 → 1.0.0.alpha0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +35 -6
- data/Rakefile +2 -25
- data/app/assets/javascripts/faalis/angular-manifest.js +8 -2
- data/app/assets/javascripts/faalis/application.js +0 -3
- data/app/assets/javascripts/faalis/dashboard/application.js.erb +0 -5
- data/app/assets/javascripts/faalis/dashboard/functions.js.erb +9 -0
- data/app/assets/javascripts/faalis/dashboard/init.js +1 -1
- data/app/assets/javascripts/faalis/dashboard/modules/auth/group.js +0 -6
- data/app/assets/javascripts/faalis/dashboard/modules/fields/fields.js +1 -1
- data/app/assets/javascripts/faalis/dashboard/modules/fields/image.js +115 -0
- data/app/assets/javascripts/faalis/dashboard/modules/fields/tag.js +76 -0
- data/app/assets/javascripts/faalis/dashboard/variables.js.erb +1 -1
- data/app/assets/locale/templates.pot +282 -0
- data/app/assets/stylesheets/faalis/dashboard/dashboard.css.scss +4 -0
- data/app/assets/stylesheets/faalis/dashboard/ltr/application.css +4 -4
- data/app/assets/stylesheets/faalis/dashboard/rtl/application.css +4 -4
- data/app/assets/stylesheets/faalis/dashboard/rtl/base.css.scss.erb +2 -2
- data/app/controllers/faalis/api/v1/permissions_controller.rb +8 -39
- data/app/controllers/faalis/api/v1/users_controller.rb +7 -7
- data/app/models/ability.rb +4 -6
- data/app/models/faalis/concerns/assignment.rb +2 -2
- data/app/models/faalis/group.rb +18 -4
- data/app/models/faalis/permission.rb +11 -2
- data/app/models/faalis/permissions/auth.rb +3 -2
- data/app/models/faalis/user.rb +27 -73
- data/app/models/faalis/user/auth_definitions.rb +94 -0
- data/app/models/faalis/user/mongoid_fields.rb +76 -0
- data/app/models/faalis/user/permission.rb +21 -0
- data/app/views/angularjs_templates/auth/groups/new.html +0 -20
- data/app/views/angularjs_templates/fields/image/image.html +1 -0
- data/app/views/angularjs_templates/fields/relation/relation.html +3 -1
- data/app/views/angularjs_templates/fields/tag/tag.html +1 -0
- data/app/views/angularjs_templates/nav.html.erb +0 -1
- data/app/views/faalis/api/v1/users/index.json.jbuilder +1 -1
- data/app/views/layouts/faalis/application.html.erb +2 -0
- data/app/views/layouts/faalis/dashboard.html.erb +1 -0
- data/app/views/layouts/faalis/simple.html.erb +1 -0
- data/config/initializers/devise.rb +0 -7
- data/db/migrate/20131013091000_devise_create_faalis_users.rb +3 -2
- data/db/migrate/20140613120923_add_users_groups_table.rb +8 -0
- data/db/migrate/20140617124019_faalis_groups_users.rb +4 -0
- data/db/seeds.rb +39 -11
- data/lib/faalis.rb +5 -4
- data/lib/faalis/concerns.rb +7 -0
- data/lib/faalis/concerns/authorizable.rb +76 -0
- data/lib/faalis/discovery.rb +8 -0
- data/lib/faalis/discovery/permissions.rb +51 -0
- data/lib/faalis/engine.rb +19 -5
- data/lib/faalis/extensions.rb +18 -0
- data/lib/faalis/extensions/base.rb +29 -0
- data/lib/faalis/fake_assets.rb +7 -0
- data/lib/faalis/generators/dashboard_scaffold.rb +23 -5
- data/lib/faalis/omniauth.rb +3 -0
- data/lib/faalis/orm.rb +29 -0
- data/lib/faalis/{active_record.rb → patches/models.rb} +1 -3
- data/lib/faalis/version.rb +1 -1
- data/lib/generators/faalis/install_generator.rb +7 -3
- data/lib/{faalis/plugins.rb → generators/faalis/js/install_i18n_generator.rb} +20 -17
- data/lib/generators/faalis/scaffold_generator.rb +139 -0
- data/lib/generators/faalis/templates/application.js +1 -1
- data/lib/generators/faalis/templates/i18n/Gruntfile.js.erb +30 -0
- data/lib/generators/faalis/templates/i18n/README +13 -0
- data/lib/generators/faalis/templates/i18n/fa.js +3 -0
- data/lib/generators/faalis/templates/js/list_view/README +1 -1
- data/lib/tasks/faalis_tasks.rake +26 -20
- data/lib/tasks/grunt/Gruntfile.js +7 -2
- data/spec/dummy/config/initializers/faalis.rb +40 -0
- metadata +134 -44
- data/app/assets/javascripts/faalis/dashboard/lib/angular-gettext.js +0 -202
- data/app/assets/javascripts/faalis/dashboard/lib/ng-grid.js +0 -3260
- data/app/assets/javascripts/faalis/dashboard/lib/ng-quick-date.js +0 -297
- data/app/assets/javascripts/faalis/dashboard/lib/restangular.js +0 -1066
- data/app/assets/javascripts/faalis/dashboard/lib/select2.js +0 -3255
- data/app/assets/javascripts/faalis/dashboard/lib/ui.select2.js +0 -217
- data/app/assets/stylesheets/faalis/dashboard/ng-grid.css.scss +0 -442
- data/app/assets/stylesheets/faalis/dashboard/ng-quick-date-default-theme.css.scss +0 -20
- data/app/assets/stylesheets/faalis/dashboard/ng-quick-date.css.scss +0 -19
- data/app/assets/stylesheets/faalis/dashboard/select2.css.scss.erb +0 -618
- data/app/controllers/faalis/api/v1/#conversations_controller.rb# +0 -120
- data/app/models/faalis/workflow.rb +0 -4
- data/db/migrate/20140413180202_create_faalis_workflows.rb +0 -9
- data/lib/faalis/permissions.rb +0 -72
- data/lib/faalis/workflows.rb +0 -7
- data/lib/faalis/workflows/base.rb +0 -70
- data/lib/faalis/workflows/discovery.rb +0 -42
- data/lib/generators/faalis/js_scaffold_generator.rb +0 -113
@@ -1,120 +0,0 @@
|
|
1
|
-
require_dependency 'faalis/application_controller'
|
2
|
-
|
3
|
-
module Faalis
|
4
|
-
class API::V1::ConversationsController < ::APIController
|
5
|
-
before_filter :authenticate_user!
|
6
|
-
helper_method :mailbox, :conversation
|
7
|
-
|
8
|
-
def create
|
9
|
-
#binding.pry
|
10
|
-
recipient_emails = message_params(:recipients).split(',')
|
11
|
-
recipients = User.where(email: recipient_emails).all
|
12
|
-
|
13
|
-
@conversation = current_user.
|
14
|
-
send_message(recipients, *message_params(:body, :subject)).conversation
|
15
|
-
|
16
|
-
respond_with(@conversation)
|
17
|
-
end
|
18
|
-
|
19
|
-
def reply
|
20
|
-
@conversation = current_user.reply_to_conversation(conversation, *message_params(:body, :subject))
|
21
|
-
respond_with(@conversation)
|
22
|
-
end
|
23
|
-
|
24
|
-
def trash
|
25
|
-
ids = params[:id].split(",")
|
26
|
-
ids.each do |id|
|
27
|
-
conversation = current_user.mailbox.conversations.find(params[:id])
|
28
|
-
conversation.move_to_trash(current_user)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def untrash
|
33
|
-
ids = params[:id].split(",")
|
34
|
-
ids.each do |id|
|
35
|
-
conversation = current_user.mailbox.conversations.find(params[:id])
|
36
|
-
conversation.untrash(current_user)
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
def destroy
|
42
|
-
ids = params[:id].split(",")
|
43
|
-
ids.each do |id|
|
44
|
-
conversation = current_user.mailbox.conversations.find(params[:id])
|
45
|
-
current_user.mark_as_deleted conversation
|
46
|
-
#conversation.mark_as_deleted(current_user)
|
47
|
-
end
|
48
|
-
respond_with
|
49
|
-
end
|
50
|
-
|
51
|
-
def index
|
52
|
-
if params[:box] == "inbox"
|
53
|
-
box = "inbox"
|
54
|
-
elsif params[:box] == "sentbox"
|
55
|
-
box = "sentbox"
|
56
|
-
elsif params[:box] == "trash"
|
57
|
-
box = "trash"
|
58
|
-
else
|
59
|
-
respond_to do |f|
|
60
|
-
f.any { head :not_found }
|
61
|
-
end
|
62
|
-
returng
|
63
|
-
end
|
64
|
-
# puts current_user.mailbox.sent.to_json
|
65
|
-
@mailbox ||= current_user.mailbox.send(box.to_sym)
|
66
|
-
respond_with @mailbox
|
67
|
-
end
|
68
|
-
|
69
|
-
|
70
|
-
def show
|
71
|
-
#def conversation
|
72
|
-
@conversations ||= current_user.mailbox.conversations.find(params[:id])
|
73
|
-
@current_user = current_user
|
74
|
-
# @conversation = {}
|
75
|
-
# conversations.each do |conversation|
|
76
|
-
# tmp = {
|
77
|
-
# :receipts => conversation.receipts,
|
78
|
-
# :body => conversation.messages.body,
|
79
|
-
# :is_read => conversation.is_read,
|
80
|
-
# :trashed => conversation.trashed,
|
81
|
-
# :deleted => conversation.deleted,
|
82
|
-
# :recipients => conversation.recipients
|
83
|
-
# }
|
84
|
-
#unless @conversation.include? conversation.id
|
85
|
-
# @conversation[conversation.id] = tmp
|
86
|
-
#end
|
87
|
-
#end
|
88
|
-
|
89
|
-
end
|
90
|
-
private
|
91
|
-
|
92
|
-
def mailbox
|
93
|
-
@mailbox ||= current_user.mailbox
|
94
|
-
end
|
95
|
-
|
96
|
-
|
97
|
-
def conversation
|
98
|
-
@conversation ||= mailbox.conversations.find(params[:id])
|
99
|
-
end
|
100
|
-
|
101
|
-
def conversation_params(*keys)
|
102
|
-
fetch_params(:conversation, *keys)
|
103
|
-
end
|
104
|
-
|
105
|
-
def message_params(*keys)
|
106
|
-
fetch_params(:message, *keys)
|
107
|
-
end
|
108
|
-
|
109
|
-
def fetch_params(key, *subkeys)
|
110
|
-
params[key].instance_eval do
|
111
|
-
case subkeys.size
|
112
|
-
when 0 then self
|
113
|
-
when 1 then
|
114
|
-
self[subkeys.first]
|
115
|
-
else subkeys.map{|k| self[k] }
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
data/lib/faalis/permissions.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
module Faalis
|
2
|
-
module Permissions
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
|
6
|
-
module ClassMethods
|
7
|
-
|
8
|
-
# Default permission hash
|
9
|
-
@@permissions = {
|
10
|
-
:read => nil,
|
11
|
-
:update => nil,
|
12
|
-
:create => nil,
|
13
|
-
:destroy => nil,
|
14
|
-
}
|
15
|
-
|
16
|
-
@@only_owner = false
|
17
|
-
|
18
|
-
# @return an array of strings representation of permissions
|
19
|
-
def permission_strings(model)
|
20
|
-
strings = []
|
21
|
-
model_name = model.to_s
|
22
|
-
humanize_name = ActiveModel::Name.new(model).human
|
23
|
-
if model.respond_to? :model_name
|
24
|
-
model_name = model.model_name
|
25
|
-
humanize_name = model_name.human
|
26
|
-
end
|
27
|
-
@@permissions.each do |key, value|
|
28
|
-
strings << {
|
29
|
-
:name => "#{key}|#{model_name}",
|
30
|
-
:string => _("can %s %s") % [_(key.to_s), humanize_name]
|
31
|
-
}
|
32
|
-
end
|
33
|
-
strings
|
34
|
-
end
|
35
|
-
|
36
|
-
def possible_permissions
|
37
|
-
@@permissions.keys
|
38
|
-
end
|
39
|
-
|
40
|
-
# Define permissions using this method
|
41
|
-
def permissions(*args)
|
42
|
-
|
43
|
-
args.each do |permission|
|
44
|
-
if permission.class == Symbol
|
45
|
-
if not @@permissions.include? permission
|
46
|
-
@@permission[permission] = nil
|
47
|
-
|
48
|
-
elsif permission.class == Hash
|
49
|
-
|
50
|
-
permission.each do |key, value|
|
51
|
-
@@permissions[key.to_sym] = value
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
# This force user to have access to resources which is his.
|
62
|
-
def only_his_objects
|
63
|
-
@@only_owner = true
|
64
|
-
end
|
65
|
-
|
66
|
-
def only_his_objects?
|
67
|
-
@@only_owner
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
data/lib/faalis/workflows.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
module Faalis
|
2
|
-
module Workflows
|
3
|
-
|
4
|
-
# Base class for all the workflows in a `Faalis application`
|
5
|
-
class Base
|
6
|
-
|
7
|
-
attr_reader :id
|
8
|
-
|
9
|
-
@@default_values = {:title => self.class.to_s.underscore,
|
10
|
-
:icon => nil,
|
11
|
-
:image => nil,
|
12
|
-
:permissions => []}
|
13
|
-
|
14
|
-
def initialize(model_instance)
|
15
|
-
@id = model_instance.id
|
16
|
-
end
|
17
|
-
|
18
|
-
# class method to set the title of current workflow
|
19
|
-
def self.title(name)
|
20
|
-
define_method :title do
|
21
|
-
name || self.to_s.underscore
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
# Set the current workflow icon if any
|
27
|
-
def self.icon(icon)
|
28
|
-
define_method :icon do
|
29
|
-
icon
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
def icon?
|
35
|
-
return true if defined? :icon
|
36
|
-
false
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
# Set the current workflow image if any
|
41
|
-
def self.image(image)
|
42
|
-
define_method :image do
|
43
|
-
image
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def image?
|
48
|
-
return true if defined? :image
|
49
|
-
false
|
50
|
-
end
|
51
|
-
|
52
|
-
# Use this class method to add any permission that is neeeded
|
53
|
-
# for this workflow to work
|
54
|
-
def self.permissions(*args)
|
55
|
-
define_method :permissions do
|
56
|
-
args || []
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def method_missing(m, *args, &block)
|
61
|
-
if @@default_values.include? m
|
62
|
-
@@default_values[m]
|
63
|
-
else
|
64
|
-
super
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module Faalis
|
2
|
-
module Workflows
|
3
|
-
# Discover all the workflows in current application in addition to
|
4
|
-
# gem files and add them to database for future reference.
|
5
|
-
class Discovery
|
6
|
-
# A class method to use in `seed.rb` to create all workflows in
|
7
|
-
# database
|
8
|
-
def self.build_table_list
|
9
|
-
# Get all gem by requiring them
|
10
|
-
all_gems = Bundler.require
|
11
|
-
|
12
|
-
# Discover all model files in gem files and load them
|
13
|
-
all_gems.each do |gem|
|
14
|
-
if gem.groups.include?(Rails.env.to_sym) || \
|
15
|
-
gem.groups.include?(:default)
|
16
|
-
|
17
|
-
puts "Gem name: #{gem.name}"
|
18
|
-
spec = Gem::Specification.find_by_name gem.name
|
19
|
-
discover spec.gem_dir
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Discover models in current rails app and load them
|
24
|
-
discover Rails.root
|
25
|
-
|
26
|
-
# Create a content type entry for all Models
|
27
|
-
Faalis::Workflows::Base.subclasses.each do |workflow|
|
28
|
-
Faalis::Workflow.find_or_create_by(name: workflow.to_s)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def self.discover(path)
|
35
|
-
Dir["#{path}/app/workflows/**/*.rb"].each do |workflow_file|
|
36
|
-
puts "File matched: #{workflow_file}"
|
37
|
-
load workflow_file
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,113 +0,0 @@
|
|
1
|
-
# -----------------------------------------------------------------------------
|
2
|
-
# Faalis - Basic website skel engine
|
3
|
-
# Copyright (C) 2012-2013 Yellowen
|
4
|
-
#
|
5
|
-
# This program is free software; you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation; either version 2 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU General Public License along
|
16
|
-
# with this program; if not, write to the Free Software Foundation, Inc.,
|
17
|
-
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
18
|
-
# -----------------------------------------------------------------------------
|
19
|
-
|
20
|
-
module Faalis
|
21
|
-
module Generators
|
22
|
-
# `js_scaffold` main class
|
23
|
-
class JsScaffoldGenerator < Faalis::Generators::DashboardScaffold
|
24
|
-
# We keep this class to keep backward compatiblity
|
25
|
-
puts "[DEPRECATED]: This generator will be removed soon, Use faalis:js:list_view instead."
|
26
|
-
# TODO: Remove this ater a while
|
27
|
-
|
28
|
-
|
29
|
-
# templates path
|
30
|
-
source_root File.expand_path('../templates', __FILE__)
|
31
|
-
|
32
|
-
# Field name to use as title of each object
|
33
|
-
class_option :title_field, :type => :string, :default => "name", :desc => "Field name to use as title of each object"
|
34
|
-
|
35
|
-
# Don't copy the new.html template
|
36
|
-
class_option :no_new_template, :type => :boolean, :default => false, :desc => "Don't copy the new.html template"
|
37
|
-
|
38
|
-
desc "Create a new resource for client side application"
|
39
|
-
def create_module
|
40
|
-
unless options[:only_controller]
|
41
|
-
unless options[:only_specs]
|
42
|
-
template "angularjs/module.js.erb", "#{angularjs_app_path}modules/#{resource_path}.js"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def create_template
|
48
|
-
unless options[:only_controller]
|
49
|
-
unless options[:only_specs]
|
50
|
-
template "angularjs/index.html.erb", "app/views/angularjs_templates/#{resource.underscore}/index.html"
|
51
|
-
unless options[:no_new_template]
|
52
|
-
template "angularjs/new.html.erb", "app/views/angularjs_templates/#{resource.underscore}/new.html"
|
53
|
-
end
|
54
|
-
template "angularjs/details.html.erb", "app/views/angularjs_templates/#{resource.underscore}/details.html"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
unless options[:only_specs]
|
59
|
-
template "views/index.json.jbuilder.erb", "app/views/api/v1/#{resource.pluralize.underscore}/index.json.jbuilder"
|
60
|
-
template "views/show.json.jbuilder.erb", "app/views/api/v1/#{resource.pluralize.underscore}/show.json.jbuilder"
|
61
|
-
template "views/create.json.jbuilder.erb", "app/views/api/v1/#{resource.pluralize.underscore}/create.json.jbuilder"
|
62
|
-
template "views/destroy.json.jbuilder.erb", "app/views/api/v1/#{resource.pluralize.underscore}/destroy.json.jbuilder"
|
63
|
-
template "views/update.json.jbuilder.erb", "app/views/api/v1/#{resource.pluralize.underscore}/update.json.jbuilder"
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def create_api
|
68
|
-
unless options[:only_specs]
|
69
|
-
template "api/controller.rb.erb", "app/controllers/api/v1/#{resource.pluralize.underscore}_controller.rb"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def create_specs
|
74
|
-
unless options[:without_specs]
|
75
|
-
template "features/api.feature", "features/#{resource.underscore}.api.feature"
|
76
|
-
template "features/api.step.rb", "features/step_definitions/#{resource.underscore}.rb"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def show_readme
|
81
|
-
readme "js_scaffold.README" if behavior == :invoke
|
82
|
-
end
|
83
|
-
|
84
|
-
# PRIVATES --------------------------------------------
|
85
|
-
private
|
86
|
-
|
87
|
-
def is_in_engine?
|
88
|
-
false
|
89
|
-
end
|
90
|
-
|
91
|
-
def random_json_data
|
92
|
-
data = {}
|
93
|
-
fields.each do |field, type|
|
94
|
-
case type
|
95
|
-
when "belongs_to"
|
96
|
-
data["#{field}_id"] = 1
|
97
|
-
when "integer"
|
98
|
-
data[field] = 1+ rand(1000)
|
99
|
-
else
|
100
|
-
data[field] = random_string
|
101
|
-
end
|
102
|
-
end
|
103
|
-
data.to_json.to_s
|
104
|
-
end
|
105
|
-
|
106
|
-
def random_string
|
107
|
-
o = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten
|
108
|
-
(0...50).map{ o[rand(o.length)] }.join
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|