faalis 0.26.3 → 1.0.0.alpha0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +35 -6
  3. data/Rakefile +2 -25
  4. data/app/assets/javascripts/faalis/angular-manifest.js +8 -2
  5. data/app/assets/javascripts/faalis/application.js +0 -3
  6. data/app/assets/javascripts/faalis/dashboard/application.js.erb +0 -5
  7. data/app/assets/javascripts/faalis/dashboard/functions.js.erb +9 -0
  8. data/app/assets/javascripts/faalis/dashboard/init.js +1 -1
  9. data/app/assets/javascripts/faalis/dashboard/modules/auth/group.js +0 -6
  10. data/app/assets/javascripts/faalis/dashboard/modules/fields/fields.js +1 -1
  11. data/app/assets/javascripts/faalis/dashboard/modules/fields/image.js +115 -0
  12. data/app/assets/javascripts/faalis/dashboard/modules/fields/tag.js +76 -0
  13. data/app/assets/javascripts/faalis/dashboard/variables.js.erb +1 -1
  14. data/app/assets/locale/templates.pot +282 -0
  15. data/app/assets/stylesheets/faalis/dashboard/dashboard.css.scss +4 -0
  16. data/app/assets/stylesheets/faalis/dashboard/ltr/application.css +4 -4
  17. data/app/assets/stylesheets/faalis/dashboard/rtl/application.css +4 -4
  18. data/app/assets/stylesheets/faalis/dashboard/rtl/base.css.scss.erb +2 -2
  19. data/app/controllers/faalis/api/v1/permissions_controller.rb +8 -39
  20. data/app/controllers/faalis/api/v1/users_controller.rb +7 -7
  21. data/app/models/ability.rb +4 -6
  22. data/app/models/faalis/concerns/assignment.rb +2 -2
  23. data/app/models/faalis/group.rb +18 -4
  24. data/app/models/faalis/permission.rb +11 -2
  25. data/app/models/faalis/permissions/auth.rb +3 -2
  26. data/app/models/faalis/user.rb +27 -73
  27. data/app/models/faalis/user/auth_definitions.rb +94 -0
  28. data/app/models/faalis/user/mongoid_fields.rb +76 -0
  29. data/app/models/faalis/user/permission.rb +21 -0
  30. data/app/views/angularjs_templates/auth/groups/new.html +0 -20
  31. data/app/views/angularjs_templates/fields/image/image.html +1 -0
  32. data/app/views/angularjs_templates/fields/relation/relation.html +3 -1
  33. data/app/views/angularjs_templates/fields/tag/tag.html +1 -0
  34. data/app/views/angularjs_templates/nav.html.erb +0 -1
  35. data/app/views/faalis/api/v1/users/index.json.jbuilder +1 -1
  36. data/app/views/layouts/faalis/application.html.erb +2 -0
  37. data/app/views/layouts/faalis/dashboard.html.erb +1 -0
  38. data/app/views/layouts/faalis/simple.html.erb +1 -0
  39. data/config/initializers/devise.rb +0 -7
  40. data/db/migrate/20131013091000_devise_create_faalis_users.rb +3 -2
  41. data/db/migrate/20140613120923_add_users_groups_table.rb +8 -0
  42. data/db/migrate/20140617124019_faalis_groups_users.rb +4 -0
  43. data/db/seeds.rb +39 -11
  44. data/lib/faalis.rb +5 -4
  45. data/lib/faalis/concerns.rb +7 -0
  46. data/lib/faalis/concerns/authorizable.rb +76 -0
  47. data/lib/faalis/discovery.rb +8 -0
  48. data/lib/faalis/discovery/permissions.rb +51 -0
  49. data/lib/faalis/engine.rb +19 -5
  50. data/lib/faalis/extensions.rb +18 -0
  51. data/lib/faalis/extensions/base.rb +29 -0
  52. data/lib/faalis/fake_assets.rb +7 -0
  53. data/lib/faalis/generators/dashboard_scaffold.rb +23 -5
  54. data/lib/faalis/omniauth.rb +3 -0
  55. data/lib/faalis/orm.rb +29 -0
  56. data/lib/faalis/{active_record.rb → patches/models.rb} +1 -3
  57. data/lib/faalis/version.rb +1 -1
  58. data/lib/generators/faalis/install_generator.rb +7 -3
  59. data/lib/{faalis/plugins.rb → generators/faalis/js/install_i18n_generator.rb} +20 -17
  60. data/lib/generators/faalis/scaffold_generator.rb +139 -0
  61. data/lib/generators/faalis/templates/application.js +1 -1
  62. data/lib/generators/faalis/templates/i18n/Gruntfile.js.erb +30 -0
  63. data/lib/generators/faalis/templates/i18n/README +13 -0
  64. data/lib/generators/faalis/templates/i18n/fa.js +3 -0
  65. data/lib/generators/faalis/templates/js/list_view/README +1 -1
  66. data/lib/tasks/faalis_tasks.rake +26 -20
  67. data/lib/tasks/grunt/Gruntfile.js +7 -2
  68. data/spec/dummy/config/initializers/faalis.rb +40 -0
  69. metadata +134 -44
  70. data/app/assets/javascripts/faalis/dashboard/lib/angular-gettext.js +0 -202
  71. data/app/assets/javascripts/faalis/dashboard/lib/ng-grid.js +0 -3260
  72. data/app/assets/javascripts/faalis/dashboard/lib/ng-quick-date.js +0 -297
  73. data/app/assets/javascripts/faalis/dashboard/lib/restangular.js +0 -1066
  74. data/app/assets/javascripts/faalis/dashboard/lib/select2.js +0 -3255
  75. data/app/assets/javascripts/faalis/dashboard/lib/ui.select2.js +0 -217
  76. data/app/assets/stylesheets/faalis/dashboard/ng-grid.css.scss +0 -442
  77. data/app/assets/stylesheets/faalis/dashboard/ng-quick-date-default-theme.css.scss +0 -20
  78. data/app/assets/stylesheets/faalis/dashboard/ng-quick-date.css.scss +0 -19
  79. data/app/assets/stylesheets/faalis/dashboard/select2.css.scss.erb +0 -618
  80. data/app/controllers/faalis/api/v1/#conversations_controller.rb# +0 -120
  81. data/app/models/faalis/workflow.rb +0 -4
  82. data/db/migrate/20140413180202_create_faalis_workflows.rb +0 -9
  83. data/lib/faalis/permissions.rb +0 -72
  84. data/lib/faalis/workflows.rb +0 -7
  85. data/lib/faalis/workflows/base.rb +0 -70
  86. data/lib/faalis/workflows/discovery.rb +0 -42
  87. data/lib/generators/faalis/js_scaffold_generator.rb +0 -113
@@ -21,7 +21,6 @@ require 'modernizr-rails'
21
21
  require 'foundation-rails'
22
22
  require 'font-awesome-rails'
23
23
  require 'cancan'
24
- require 'mailboxer'
25
24
  require 'model_discovery'
26
25
  require 'angularjs-rails'
27
26
  require 'lodash-rails'
@@ -31,8 +30,9 @@ module Faalis
31
30
  class Engine < ::Rails::Engine
32
31
 
33
32
  isolate_namespace Faalis
34
- engine_name "faalis"
33
+ engine_name 'faalis'
35
34
 
35
+ # Map `api` to `API` in Rails autoload
36
36
  ActiveSupport::Inflector.inflections(:en) do |inflect|
37
37
  inflect.acronym 'API'
38
38
  end
@@ -64,14 +64,29 @@ module Faalis
64
64
  mattr_accessor :dashboard_namespace
65
65
  @@dashboard_namespace = :dashboard
66
66
 
67
+ # TODO: Use application level locales default
67
68
  # locales
68
69
  mattr_accessor :locales
69
70
  @@locales = ['en', 'fa']
70
71
 
72
+ # ==> ORM configuration
73
+ # Load and configure the ORM. Supports :active_record (default) and
74
+ # :mongoid (bson_ext recommended) by default. Other ORMs may be
75
+ # available as additional gems.
76
+ # ORM name to use. either 'active_record' or 'mongoid'
77
+ mattr_accessor :orm
78
+
79
+ def self.orm=(orm_name)
80
+ @@orm = orm_name
81
+ require "devise/orm/#{orm_name}"
82
+ #require 'mailboxer'
83
+ end
84
+
71
85
  def self.setup
72
86
  yield self
73
87
  end
74
88
 
89
+ # I18n Configuration
75
90
  I18n.enforce_available_locales = true
76
91
  I18n.locale = :en
77
92
  # Fast Gettext Configuration
@@ -100,7 +115,7 @@ module Faalis
100
115
  end
101
116
  #Devise.omniauth_path_prefix = ["/en", "/fa"]
102
117
 
103
-
118
+ # TODO: Write a complete doc about dashboard_modules
104
119
  # Dashboard configurations
105
120
  mattr_accessor :dashboard_modules
106
121
 
@@ -118,13 +133,12 @@ module Faalis
118
133
 
119
134
 
120
135
  def self.dashboard_modules=(value)
121
- @@dashboard_modules.merge!(value)
136
+ @@dashboard_modules.merge!(value)
122
137
  end
123
138
 
124
139
  # Dashboard default javascript manifest
125
140
  mattr_accessor :dashboard_js_manifest
126
141
  @@dashboard_js_manifest = "controlpanel/application.js"
127
142
 
128
- config.autoload_paths << "app/workflows"
129
143
  end
130
144
  end
@@ -0,0 +1,18 @@
1
+ module Faalis
2
+ # Extension module of Faalis which contains all the related
3
+ # stuff to a Faalis extension.
4
+ module Extension
5
+
6
+ @@extensions = {}
7
+
8
+ def self.extensions
9
+ @@extensions
10
+ end
11
+
12
+ def self.extensions=(value)
13
+ @@extensions = value
14
+ end
15
+ end
16
+ end
17
+
18
+ require 'faalis/extensions/base'
@@ -0,0 +1,29 @@
1
+ module Faalis
2
+ module Extension
3
+ # This module provide basic functionallity of a Faalis extension
4
+ # to a rails engine.
5
+ # It should be included in engine of all the Faalis extionsions
6
+ module Base
7
+
8
+ def included(base)
9
+ extend ClassMethods
10
+ end
11
+
12
+ class ClassMethods
13
+ def register_extension(name, klass)
14
+ # TODO: Replace this mechanism with more elegant one
15
+ # For example use [] method or someting
16
+ Faalis::Extension.extensions[name] = klass
17
+ end
18
+
19
+ # This method tells faalis that this extension will override
20
+ # the generators templates of faalis from `template_path` location
21
+ def override_generator_templates(template_path)
22
+ send(:define_singleton_method, 'generator_templates_path') do
23
+ template_path
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,7 @@
1
+ require 'rails-assets-angular-gettext'
2
+ require 'rails-assets-ng-grid'
3
+ require 'rails-assets-restangular'
4
+ require 'rails-assets-ngQuickDate'
5
+ require 'rails-assets-select2'
6
+ require 'rails-assets-angular-ui-select2'
7
+ require 'rails-assets-ng-flow'
@@ -5,7 +5,7 @@ module Faalis
5
5
  # easier. But you can drive your own generator normally of caurse
6
6
  class DashboardScaffold < Rails::Generators::Base
7
7
 
8
- include ActionView::Helpers::TextHelper
8
+ include ::ActionView::Helpers::TextHelper
9
9
  include Faalis::Generators::Concerns::JsonInput
10
10
  include Faalis::Generators::Concerns::ResourceName
11
11
  include Faalis::Generators::Concerns::ResourceFields
@@ -23,16 +23,34 @@ module Faalis
23
23
  include Faalis::Generators::Concerns::Fieldset
24
24
 
25
25
  # Do not install specs
26
- class_option :without_specs, :type => :boolean, :default => false, :desc => 'Do not install specs'
26
+ class_option :without_specs, type: :boolean, default: false, desc: 'Do not install specs'
27
27
 
28
28
  # Generate only spec files
29
- class_option :only_specs, :type => :boolean, :default => false, :desc => 'Generate only spec files'
29
+ class_option :only_specs, type: :boolean, default: false, desc: 'Generate only spec files'
30
30
 
31
31
  # Generate only controller
32
- class_option :only_controller, :type => :boolean, :default => false, :desc => 'Generate only controller'
32
+ class_option :only_controller, type: :boolean, default: false, desc: 'Generate only controller'
33
33
 
34
34
  # Don't show a filter box
35
- class_option :no_filter, :type => :boolean, :default => false, :desc => 'Don\'t view a filter box'
35
+ class_option :no_filter, type: :boolean, default: false, desc: 'Don\'t view a filter box'
36
+
37
+
38
+ private
39
+
40
+ # Overrided `source_paths` method. With this approach extensions
41
+ # can override generators templates. Cool ha ?
42
+ def source_paths
43
+ @source_paths = self.class.source_paths_for_search
44
+
45
+ paths = []
46
+ Faalis::Extension.extensions.each do |name, klass|
47
+ if klass.respond_to? :generator_templates_path.to_sym
48
+ paths << klass.generator_templates_path
49
+ end
50
+ end
51
+ paths += @source_paths
52
+ @source_paths = paths
53
+ end
36
54
 
37
55
 
38
56
  end
@@ -19,6 +19,9 @@
19
19
 
20
20
  module Faalis
21
21
  module Omniauth
22
+ # TODO: Autoload ? really ?
23
+ # Change it ASAP. Remember that callback should
24
+ # not included if host project does not have omniauth enabled
22
25
  autoload :Callbacks, "faalis/omniauth/callbacks"
23
26
  end
24
27
  end
@@ -0,0 +1,29 @@
1
+ module Faalis
2
+ # A very simple class which provide functionalities to work with
3
+ # current orm
4
+ class ORM
5
+
6
+ def self.active_record?
7
+ current == 'active_record'
8
+ end
9
+
10
+ def self.mongoid?
11
+ current == 'mongoid'
12
+ end
13
+
14
+ # current orm
15
+ def self.current
16
+ Faalis::Engine.orm.to_s
17
+ end
18
+
19
+ # This class method returns the base class of current ORM
20
+ # It will be used in models to specify which class to inherit
21
+ # from, based on current ORM
22
+ def self.proper_base_class
23
+ return ActiveRecord::Base if active_record?
24
+ return Object if mongoid?
25
+ Faalis::Engine.orm = 'active_record'
26
+ ActiveRecord::Base
27
+ end
28
+ end
29
+ end
@@ -1,9 +1,7 @@
1
1
  # Add inline permissions to any active record models. So we can use them
2
2
  # to authorize user access.
3
-
4
-
5
3
  module ActiveRecord
6
4
  class Base
7
- include Faalis::Permissions
5
+ include Faalis::Concerns::Authorizable
8
6
  end
9
7
  end
@@ -18,5 +18,5 @@
18
18
  # -----------------------------------------------------------------------------
19
19
 
20
20
  module Faalis
21
- VERSION = "0.26.3"
21
+ VERSION = '1.0.0.alpha0'
22
22
  end
@@ -26,9 +26,9 @@ module Faalis
26
26
  desc 'Copy all the necessary files to use Faalis'
27
27
  class_option :orm
28
28
 
29
- def install_mailboxer
30
- invoke 'mailboxer:install'
31
- end
29
+ #def install_mailboxer
30
+ # invoke 'mailboxer:install'
31
+ #end
32
32
 
33
33
  def install_model_discovery
34
34
  rake 'model_discovery_engine:install:migrations'
@@ -48,6 +48,10 @@ module Faalis
48
48
  empty_directory "#{angularjs_app_path}modules"
49
49
  end
50
50
 
51
+ def grunt_file
52
+ template 'i18n/Gruntfile.js.erb', 'lib/tasks/grunt/Gruntfile.js'
53
+ end
54
+
51
55
  def copy_scss_manifest
52
56
  directory 'stylesheets', 'app/assets/stylesheets'
53
57
  end
@@ -17,28 +17,31 @@
17
17
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
18
  # -----------------------------------------------------------------------------
19
19
 
20
-
21
20
  module Faalis
22
- class Plugins
21
+ module Generators
22
+ module Js
23
+ # Generator responsible for `install_i18n` generator
24
+ class InstallI18nGenerator < Rails::Generators::Base
25
+ source_root File.expand_path('../../templates/', __FILE__)
23
26
 
24
- @@plugins = {}
27
+ desc 'Copy all the necessary files to use Faalis client side i18n'
25
28
 
26
- def self.register(plugin_name, plugin_class)
27
- # TODO: Re-think this approach. Do we need to keep plugin classes too?
28
- if not @@plugins.include? plugin_name
29
- @@plugins[plugin_name] = plugin_class
30
- end
31
- end
29
+ def copy_init_files
30
+ template 'i18n/Gruntfile.js.erb', 'lib/tasks/grunt/Gruntfile.js'
31
+ copy_file 'i18n/fa.js', 'app/assets/javascripts/locale/'
32
+ end
32
33
 
33
- # Return name of all registered plugins
34
- def self.names
35
- @@plugins.keys
36
- end
34
+ def show_readme
35
+ readme 'i18n/README' if behavior == :invoke
36
+ end
37
37
 
38
- # Return the actual plugins hash
39
- def self.plugins
40
- @@plugins
41
- end
38
+ private
42
39
 
40
+ def angularjs_app_path
41
+ path = Faalis::Engine.dashboard_js_manifest.split('/')[0..-2].join('/')
42
+ "app/assets/javascripts/#{path}/"
43
+ end
44
+ end
45
+ end
43
46
  end
44
47
  end
@@ -0,0 +1,139 @@
1
+ # -----------------------------------------------------------------------------
2
+ # Faalis - Basic website skel engine
3
+ # Copyright (C) 2012-2014 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
+ # Generator Full Faalis scaffold with dashboard
23
+ class ScaffoldGenerator < Rails::Generators::Base
24
+ include Faalis::Generators::Concerns::RequireFields
25
+ include Faalis::Generators::Concerns::Parent
26
+ include Faalis::Generators::Concerns::JsonInput
27
+ include Faalis::Generators::Concerns::ResourceName
28
+ include Faalis::Generators::Concerns::ResourceFields
29
+
30
+ desc 'Create full faalis full scaffold'
31
+ # FIXME: These options should have :type and :desc or even default
32
+ # value
33
+ class_option :no_model
34
+ class_option :no_route
35
+ class_option :no_controller
36
+ class_option :no_migration
37
+ class_option :no_asset
38
+
39
+ # FIXME: Add method documents HERE
40
+ def create_scaffold
41
+ if options.empty?
42
+ # TODO: ....
43
+ end
44
+ create_model unless options[:no_model]
45
+ create_route unless options[:no_route]
46
+ create_controller unless options[:no_controller]
47
+ create_list_view
48
+ end
49
+
50
+ private
51
+
52
+ # Create a dedicated controller,
53
+ # It does not have any relation to Faalis
54
+ # TODO: Check for better way
55
+ def create_controller
56
+ #invoke "scaffold_controller", resource_data["name"]
57
+ if options[:no_asset]
58
+ `rails g scaffold_controller #{resource_data["name"]} --skip`
59
+ else
60
+ `rails g scaffold_controller #{resource_data["name"]}`
61
+ end
62
+ end
63
+
64
+ # Create route of the scaffold in config/routes.rb
65
+ def create_route
66
+ route "resources :#{resource_data["name"].pluralize}"
67
+ end
68
+
69
+ #Create model of the scaffold with belongs_to support
70
+ #It does not support has_many relation yet
71
+ def create_model
72
+ result = []
73
+ all_fields = []
74
+ relations = "\n"
75
+ fields.each do |name, type, to|
76
+
77
+ case type
78
+ when 'belongs_to'
79
+ type_ = 'integer'
80
+ if to.singularize != name
81
+ relations << "belongs_to :#{name.singularize},
82
+ :class_name => \"#{to.singularize.capitalize}\"\n"
83
+ else
84
+ relations << "belongs_to :#{to.singularize}\n"
85
+ end
86
+ name_ = "#{name.singularize}_id"
87
+ result << [name_, type_]
88
+
89
+ when 'text', 'integer', 'string', 'boolean', 'datetime'
90
+ result << [name, type]
91
+
92
+ when 'image'
93
+ generate "paperclicp #{resource_data['name']} #{name}"
94
+ relations << "has_attached_file :#{name}\n"
95
+ relations << "validates_attachment_content_type :image, :content_type => %w(image/jpeg image/jpg image/png),:less_than => 1.megabytes]\n"
96
+ when 'tag'
97
+ rake "rake acts_as_taggable_on_engine:install:migrations"
98
+ relations << "acts_as_taggable_on :#{name}\n"
99
+ result << [name, 'string']
100
+
101
+ when 'in'
102
+ result << [name, 'string']
103
+
104
+ when 'has_many'
105
+ relations << "has_and_belongs_to_many :#{to}\n"
106
+ say_status 'warn', "There is a many to many relation between #{resource_data['name']} to #{to}, You should create it manually in model files"
107
+
108
+ end
109
+
110
+ all_fields = result.collect do |x|
111
+ x.join(':')
112
+ end
113
+
114
+ end
115
+
116
+ if parent?
117
+ all_fields << ["#{resource_data["parents"]}_id", "integer"]
118
+ end
119
+
120
+ invoke('active_record:model', [resource_data['name'], *all_fields], {
121
+ migration: !options[:no_migration], timestamps: true
122
+ })
123
+ if File.exist?("app/models/#{resource_data["name"]}.rb")
124
+ inject_into_file "app/models/#{resource_data["name"]}.rb", after: 'Base' do
125
+ relations
126
+ end
127
+ else
128
+ puts "Could not find file app/models/#{resource_data["name"]}"
129
+ end
130
+ end
131
+
132
+ #Invoke Faalis list view generator
133
+ def create_list_view
134
+ invoke 'faalis:js:list_view', [jsonfile]
135
+
136
+ end
137
+ end
138
+ end
139
+ end