fat_free_crm 0.21.0 → 0.22.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fat_free_crm might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/assets/config/fat_free_crm.js +3 -0
- data/app/assets/config/manifest.js +1 -3
- data/app/controllers/admin/field_groups_controller.rb +0 -2
- data/app/controllers/admin/tags_controller.rb +1 -1
- data/app/controllers/admin/users_controller.rb +1 -1
- data/app/controllers/application_controller.rb +11 -0
- data/app/controllers/comments_controller.rb +2 -0
- data/app/controllers/emails_controller.rb +2 -0
- data/app/controllers/entities/accounts_controller.rb +3 -1
- data/app/controllers/entities/campaigns_controller.rb +3 -1
- data/app/controllers/entities/contacts_controller.rb +3 -1
- data/app/controllers/entities/leads_controller.rb +4 -2
- data/app/controllers/entities/opportunities_controller.rb +3 -1
- data/app/controllers/entities_controller.rb +2 -0
- data/app/controllers/home_controller.rb +2 -0
- data/app/controllers/lists_controller.rb +2 -0
- data/app/controllers/tasks_controller.rb +3 -1
- data/app/controllers/users_controller.rb +2 -0
- data/app/models/fields/custom_field.rb +2 -2
- data/app/models/observers/entity_observer.rb +1 -1
- data/app/models/polymorphic/comment.rb +1 -1
- data/app/models/setting.rb +4 -5
- data/app/models/users/user.rb +1 -1
- data/bin/bundle +108 -2
- data/bin/rails +3 -3
- data/bin/rake +2 -2
- data/bin/setup +12 -15
- data/config/application.rb +9 -4
- data/config/boot.rb +3 -5
- data/config/cable.yml +10 -0
- data/config/database.yml +26 -0
- data/config/environment.rb +4 -3
- data/config/environments/development.rb +47 -14
- data/config/environments/production.rb +17 -15
- data/config/environments/test.rb +19 -9
- data/config/initializers/action_mailer.rb +1 -0
- data/config/initializers/content_security_policy.rb +21 -26
- data/config/initializers/custom_field_ransack_translations.rb +1 -0
- data/config/initializers/filter_parameter_logging.rb +6 -2
- data/config/initializers/inflections.rb +4 -4
- data/config/initializers/permissions_policy.rb +12 -0
- data/config/storage.yml +5 -5
- data/db/demo/field_groups.yml +2 -1
- data/db/migrate/20230526212613_convert_to_active_storage.rb +27 -11
- data/db/schema.rb +107 -105
- data/lib/fat_free_crm/callback.rb +2 -3
- data/lib/fat_free_crm/mail_processor/dropbox.rb +1 -1
- data/lib/fat_free_crm/version.rb +1 -1
- data/public/avatars/User/2/large_rails.png +0 -0
- data/public/avatars/User/2/medium_rails.png +0 -0
- data/public/avatars/User/2/original_rails.png +0 -0
- data/public/avatars/User/2/small_rails.png +0 -0
- data/public/avatars/User/2/thumb_rails.png +0 -0
- data/public/avatars/User/3/large_rails.png +0 -0
- data/public/avatars/User/3/medium_rails.png +0 -0
- data/public/avatars/User/3/original_rails.png +0 -0
- data/public/avatars/User/3/small_rails.png +0 -0
- data/public/avatars/User/3/thumb_rails.png +0 -0
- data/public/avatars/User/4/large_rails.png +0 -0
- data/public/avatars/User/4/medium_rails.png +0 -0
- data/public/avatars/User/4/original_rails.png +0 -0
- data/public/avatars/User/4/small_rails.png +0 -0
- data/public/avatars/User/4/thumb_rails.png +0 -0
- data/public/avatars/User/6/large_rails.png +0 -0
- data/public/avatars/User/6/medium_rails.png +0 -0
- data/public/avatars/User/6/original_rails.png +0 -0
- data/public/avatars/User/6/small_rails.png +0 -0
- data/public/avatars/User/6/thumb_rails.png +0 -0
- data/public/avatars/User/7/large_rails.png +0 -0
- data/public/avatars/User/7/medium_rails.png +0 -0
- data/public/avatars/User/7/original_rails.png +0 -0
- data/public/avatars/User/7/small_rails.png +0 -0
- data/public/avatars/User/7/thumb_rails.png +0 -0
- metadata +64 -16
- data/config/initializers/new_framework_defaults_6_0.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 325977901a3011b43c20379a5e03317660a3cd2b702e36ceb7aa255ec0f6ff17
|
4
|
+
data.tar.gz: 6badcc5bfcc41d304fe646a7ea07d1c4fce631b3a60efd08285752fe645e3572
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58f6a285322ca7ae834bbf2eeeaf0073a2c501f9dd71117b890c9d7a1403dd3b2e5f725e97d2b3814836f854595eb77f322e09a27a94202fb65ca7b28078cd47
|
7
|
+
data.tar.gz: 004b7dadb4c2c77e4863010b59a87dc89500142bc52fe0d90f81e71532d964b287f1bd97365bdd9460898249c0278e0ca389eba9edba1260c3410d0131302d0b
|
@@ -22,8 +22,6 @@ class Admin::FieldGroupsController < Admin::ApplicationController
|
|
22
22
|
def edit
|
23
23
|
@field_group = FieldGroup.find(params[:id])
|
24
24
|
|
25
|
-
@previous = FieldGroup.find_by_id(Regexp.last_match[1]) || Regexp.last_match[1].to_i if params[:previous].to_s =~ /(\d+)\z/
|
26
|
-
|
27
25
|
respond_with(@field_group)
|
28
26
|
end
|
29
27
|
|
@@ -28,7 +28,7 @@ class Admin::TagsController < Admin::ApplicationController
|
|
28
28
|
# GET /admin/tags/1/edit AJAX
|
29
29
|
#----------------------------------------------------------------------------
|
30
30
|
def edit
|
31
|
-
@previous = Tag.find_by_id(
|
31
|
+
@previous = Tag.find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
32
32
|
end
|
33
33
|
|
34
34
|
# POST /admin/tags
|
@@ -35,7 +35,7 @@ class Admin::UsersController < Admin::ApplicationController
|
|
35
35
|
# GET /admin/users/1/edit AJAX
|
36
36
|
#----------------------------------------------------------------------------
|
37
37
|
def edit
|
38
|
-
@previous = User.find_by_id(
|
38
|
+
@previous = User.find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
39
39
|
|
40
40
|
respond_with(@user)
|
41
41
|
end
|
@@ -268,4 +268,15 @@ class ApplicationController < ActionController::Base
|
|
268
268
|
raise "Unknown resource"
|
269
269
|
end
|
270
270
|
end
|
271
|
+
|
272
|
+
# In a number of places, we pass ?previous=(id) or ?previous=crm.find_form...
|
273
|
+
# This method centralises all of the places we can pass in a previous param
|
274
|
+
# and extracts an int ID, or nil
|
275
|
+
def detect_previous_id
|
276
|
+
return unless params[:previous]
|
277
|
+
return if params[:previous].start_with?("crm")
|
278
|
+
|
279
|
+
params[:previous].to_i
|
280
|
+
end
|
281
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_application_controller, self)
|
271
282
|
end
|
@@ -45,7 +45,7 @@ class AccountsController < EntitiesController
|
|
45
45
|
# GET /accounts/1/edit AJAX
|
46
46
|
#----------------------------------------------------------------------------
|
47
47
|
def edit
|
48
|
-
@previous = Account.my(current_user).find_by_id(
|
48
|
+
@previous = Account.my(current_user).find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
49
49
|
|
50
50
|
respond_with(@account)
|
51
51
|
end
|
@@ -160,4 +160,6 @@ class AccountsController < EntitiesController
|
|
160
160
|
@account_category_total[:all] = Account.my(current_user).count
|
161
161
|
@account_category_total[:other] = @account_category_total[:all] - categorized
|
162
162
|
end
|
163
|
+
|
164
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_accounts_controller, self)
|
163
165
|
end
|
@@ -84,7 +84,7 @@ class CampaignsController < EntitiesController
|
|
84
84
|
# GET /campaigns/1/edit AJAX
|
85
85
|
#----------------------------------------------------------------------------
|
86
86
|
def edit
|
87
|
-
@previous = Campaign.my(current_user).find_by_id(
|
87
|
+
@previous = Campaign.my(current_user).find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
88
88
|
|
89
89
|
respond_with(@campaign)
|
90
90
|
end
|
@@ -204,4 +204,6 @@ class CampaignsController < EntitiesController
|
|
204
204
|
end
|
205
205
|
@campaign_status_total[:other] += @campaign_status_total[:all]
|
206
206
|
end
|
207
|
+
|
208
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_campaigns_controller, self)
|
207
209
|
end
|
@@ -51,7 +51,7 @@ class ContactsController < EntitiesController
|
|
51
51
|
#----------------------------------------------------------------------------
|
52
52
|
def edit
|
53
53
|
@account = @contact.account || Account.new(user: current_user)
|
54
|
-
@previous = Contact.my(current_user).find_by_id(
|
54
|
+
@previous = Contact.my(current_user).find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
55
55
|
|
56
56
|
respond_with(@contact)
|
57
57
|
end
|
@@ -164,4 +164,6 @@ class ContactsController < EntitiesController
|
|
164
164
|
redirect_to contacts_path
|
165
165
|
end
|
166
166
|
end
|
167
|
+
|
168
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_contacts_controller, self)
|
167
169
|
end
|
@@ -52,7 +52,7 @@ class LeadsController < EntitiesController
|
|
52
52
|
def edit
|
53
53
|
get_campaigns
|
54
54
|
|
55
|
-
@previous = Lead.my(current_user).find_by_id(
|
55
|
+
@previous = Lead.my(current_user).find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
56
56
|
|
57
57
|
respond_with(@lead)
|
58
58
|
end
|
@@ -108,7 +108,7 @@ class LeadsController < EntitiesController
|
|
108
108
|
@accounts = Account.my(current_user).order('name')
|
109
109
|
@opportunity = Opportunity.new(user: current_user, access: "Lead", stage: "prospecting", campaign: @lead.campaign, source: @lead.source)
|
110
110
|
|
111
|
-
@previous = Lead.my(current_user).find_by_id(
|
111
|
+
@previous = Lead.my(current_user).find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
112
112
|
|
113
113
|
respond_with(@lead)
|
114
114
|
end
|
@@ -268,4 +268,6 @@ class LeadsController < EntitiesController
|
|
268
268
|
get_data_for_sidebar(:campaign)
|
269
269
|
end
|
270
270
|
end
|
271
|
+
|
272
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_leads_controller, self)
|
271
273
|
end
|
@@ -57,7 +57,7 @@ class OpportunitiesController < EntitiesController
|
|
57
57
|
@account = @opportunity.account || Account.new(user: current_user)
|
58
58
|
@accounts = Account.my(current_user).order('name')
|
59
59
|
|
60
|
-
@previous = Opportunity.my(current_user).find_by_id(
|
60
|
+
@previous = Opportunity.my(current_user).find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
61
61
|
|
62
62
|
respond_with(@opportunity)
|
63
63
|
end
|
@@ -227,4 +227,6 @@ class OpportunitiesController < EntitiesController
|
|
227
227
|
current_user.pref[:opportunities_sort_by] = Opportunity.sort_by_map[params[:sort_by]] if params[:sort_by]
|
228
228
|
session[:opportunities_filter] = params[:stage] if params[:stage]
|
229
229
|
end
|
230
|
+
|
231
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_opportunities_controller, self)
|
230
232
|
end
|
@@ -165,4 +165,6 @@ class HomeController < ApplicationController
|
|
165
165
|
%w[zero one two].index(words.first).send(words.last) if %w[one two].include?(words.first) && %w[hour day days week weeks month].include?(words.last)
|
166
166
|
end
|
167
167
|
end
|
168
|
+
|
169
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_home_controller, self)
|
168
170
|
end
|
@@ -58,7 +58,7 @@ class TasksController < ApplicationController
|
|
58
58
|
@category = Setting.unroll(:task_category)
|
59
59
|
@asset = @task.asset if @task.asset_id?
|
60
60
|
|
61
|
-
@previous = Task.tracked_by(current_user).find_by_id(
|
61
|
+
@previous = Task.tracked_by(current_user).find_by_id(detect_previous_id) || detect_previous_id if detect_previous_id
|
62
62
|
|
63
63
|
respond_with(@task)
|
64
64
|
end
|
@@ -224,4 +224,6 @@ class TasksController < ApplicationController
|
|
224
224
|
views = Task::ALLOWED_VIEWS
|
225
225
|
views.include?(view) ? view : views.first
|
226
226
|
end
|
227
|
+
|
228
|
+
ActiveSupport.run_load_hooks(:fat_free_crm_tasks_controller, self)
|
227
229
|
end
|
@@ -124,7 +124,7 @@ class CustomField < Field
|
|
124
124
|
#------------------------------------------------------------------------------
|
125
125
|
def add_column
|
126
126
|
self.name = generate_column_name if name.blank?
|
127
|
-
klass.connection.add_column(table_name, name, column_type, column_options)
|
127
|
+
klass.connection.add_column(table_name, name, column_type, **column_options)
|
128
128
|
klass.reset_column_information
|
129
129
|
klass.serialize_custom_fields!
|
130
130
|
end
|
@@ -142,7 +142,7 @@ class CustomField < Field
|
|
142
142
|
#------------------------------------------------------------------------------
|
143
143
|
def update_column
|
144
144
|
if errors.empty? && db_transition_safety(as_was) == :safe
|
145
|
-
klass.connection.change_column(table_name, name, column_type, column_options)
|
145
|
+
klass.connection.change_column(table_name, name, column_type, **column_options)
|
146
146
|
klass.reset_column_information
|
147
147
|
klass.serialize_custom_fields!
|
148
148
|
end
|
@@ -19,7 +19,7 @@ class EntityObserver < ActiveRecord::Observer
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def send_notification_to_assignee(item)
|
22
|
-
UserMailer.assigned_entity_notification(item, current_user).
|
22
|
+
UserMailer.assigned_entity_notification(item, current_user).deliver_later if item.assignee.present? && current_user.present? && can_send_email?
|
23
23
|
end
|
24
24
|
|
25
25
|
# Need to have a host set before email can be sent
|
@@ -54,7 +54,7 @@ class Comment < ActiveRecord::Base
|
|
54
54
|
def notify_subscribers
|
55
55
|
commentable.subscribed_users.reject { |user_id| user_id == user.id }.each do |subscriber_id|
|
56
56
|
if subscriber = User.find_by_id(subscriber_id)
|
57
|
-
SubscriptionMailer.comment_notification(subscriber, self).
|
57
|
+
SubscriptionMailer.comment_notification(subscriber, self).deliver_later
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
data/app/models/setting.rb
CHANGED
@@ -58,13 +58,11 @@ class Setting < ActiveRecord::Base
|
|
58
58
|
return cache[name] if cache.key?(name)
|
59
59
|
|
60
60
|
# Check database
|
61
|
-
if database_and_table_exists?
|
62
|
-
|
63
|
-
return cache[name] = setting.value unless setting.value.nil?
|
64
|
-
end
|
61
|
+
if database_and_table_exists? && (setting = find_by_name(name.to_s))&.value.present?
|
62
|
+
return cache[name] = setting.value
|
65
63
|
end
|
66
64
|
# Check YAML settings
|
67
|
-
|
65
|
+
cache[name] = yaml_settings[name] if yaml_settings.key?(name)
|
68
66
|
end
|
69
67
|
|
70
68
|
# Set setting value
|
@@ -73,6 +71,7 @@ class Setting < ActiveRecord::Base
|
|
73
71
|
raise ArgumentError, "name cannot be blank" if name.blank?
|
74
72
|
|
75
73
|
return nil unless database_and_table_exists?
|
74
|
+
|
76
75
|
setting = find_by_name(name.to_s) || new(name: name.to_s)
|
77
76
|
setting.value = value
|
78
77
|
setting.save
|
data/app/models/users/user.rb
CHANGED
@@ -61,7 +61,7 @@ class User < ActiveRecord::Base
|
|
61
61
|
has_many :opportunities
|
62
62
|
has_many :assigned_opportunities, class_name: 'Opportunity', foreign_key: 'assigned_to'
|
63
63
|
has_many :permissions, dependent: :destroy
|
64
|
-
has_many :preferences, dependent: :destroy
|
64
|
+
has_many :preferences, class_name: 'Preference', dependent: :destroy
|
65
65
|
has_many :lists
|
66
66
|
has_and_belongs_to_many :groups
|
67
67
|
|
data/bin/bundle
CHANGED
@@ -1,5 +1,111 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'bundle' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "rubygems"
|
12
|
+
|
13
|
+
m = Module.new do
|
14
|
+
module_function
|
15
|
+
|
16
|
+
def invoked_as_script?
|
17
|
+
File.expand_path($PROGRAM_NAME) == File.expand_path(__FILE__)
|
18
|
+
end
|
19
|
+
|
20
|
+
def env_var_version
|
21
|
+
ENV["BUNDLER_VERSION"]
|
22
|
+
end
|
23
|
+
|
24
|
+
def cli_arg_version
|
25
|
+
return unless invoked_as_script? # don't want to hijack other binstubs
|
26
|
+
return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
|
27
|
+
|
28
|
+
bundler_version = nil
|
29
|
+
update_index = nil
|
30
|
+
ARGV.each_with_index do |a, i|
|
31
|
+
bundler_version = a if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
|
32
|
+
next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
|
33
|
+
|
34
|
+
bundler_version = Regexp.last_match(1)
|
35
|
+
update_index = i
|
36
|
+
end
|
37
|
+
bundler_version
|
38
|
+
end
|
39
|
+
|
40
|
+
def gemfile
|
41
|
+
gemfile = ENV["BUNDLE_GEMFILE"]
|
42
|
+
return gemfile if gemfile && !gemfile.empty?
|
43
|
+
|
44
|
+
File.expand_path("../Gemfile", __dir__)
|
45
|
+
end
|
46
|
+
|
47
|
+
def lockfile
|
48
|
+
lockfile =
|
49
|
+
case File.basename(gemfile)
|
50
|
+
when "gems.rb" then gemfile.sub(/\.rb$/, ".locked")
|
51
|
+
else "#{gemfile}.lock"
|
52
|
+
end
|
53
|
+
File.expand_path(lockfile)
|
54
|
+
end
|
55
|
+
|
56
|
+
def lockfile_version
|
57
|
+
return unless File.file?(lockfile)
|
58
|
+
|
59
|
+
lockfile_contents = File.read(lockfile)
|
60
|
+
return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
|
61
|
+
|
62
|
+
Regexp.last_match(1)
|
63
|
+
end
|
64
|
+
|
65
|
+
def bundler_requirement
|
66
|
+
@bundler_requirement ||=
|
67
|
+
env_var_version ||
|
68
|
+
cli_arg_version ||
|
69
|
+
bundler_requirement_for(lockfile_version)
|
70
|
+
end
|
71
|
+
|
72
|
+
def bundler_requirement_for(version)
|
73
|
+
return "#{Gem::Requirement.default}.a" unless version
|
74
|
+
|
75
|
+
bundler_gem_version = Gem::Version.new(version)
|
76
|
+
|
77
|
+
bundler_gem_version.approximate_recommendation
|
78
|
+
end
|
79
|
+
|
80
|
+
def load_bundler!
|
81
|
+
ENV["BUNDLE_GEMFILE"] ||= gemfile
|
82
|
+
|
83
|
+
activate_bundler
|
84
|
+
end
|
85
|
+
|
86
|
+
def activate_bundler
|
87
|
+
gem_error = activation_error_handling do
|
88
|
+
gem "bundler", bundler_requirement
|
89
|
+
end
|
90
|
+
return if gem_error.nil?
|
91
|
+
|
92
|
+
require_error = activation_error_handling do
|
93
|
+
require "bundler/version"
|
94
|
+
end
|
95
|
+
return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
|
96
|
+
|
97
|
+
warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
|
98
|
+
exit 42
|
99
|
+
end
|
100
|
+
|
101
|
+
def activation_error_handling
|
102
|
+
yield
|
103
|
+
nil
|
104
|
+
rescue StandardError, LoadError => e
|
105
|
+
e
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
m.load_bundler!
|
110
|
+
|
111
|
+
load Gem.bin_path("bundler", "bundle") if m.invoked_as_script?
|
data/bin/rails
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
APP_PATH = File.expand_path(
|
5
|
-
require_relative
|
6
|
-
require
|
4
|
+
APP_PATH = File.expand_path("../config/application", __dir__)
|
5
|
+
require_relative "../config/boot"
|
6
|
+
require "rails/commands"
|
data/bin/rake
CHANGED
data/bin/setup
CHANGED
@@ -1,38 +1,35 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
4
|
+
require "fileutils"
|
5
5
|
|
6
6
|
# path to your application root.
|
7
|
-
APP_ROOT = File.expand_path(
|
7
|
+
APP_ROOT = File.expand_path("..", __dir__)
|
8
8
|
|
9
9
|
def system!(*args)
|
10
10
|
system(*args) || abort("\n== Command #{args} failed ==")
|
11
11
|
end
|
12
12
|
|
13
13
|
FileUtils.chdir APP_ROOT do
|
14
|
-
# This script is a way to
|
15
|
-
# This script is idempotent, so that you can run it at
|
14
|
+
# This script is a way to set up or update your development environment automatically.
|
15
|
+
# This script is idempotent, so that you can run it at any time and get an expectable outcome.
|
16
16
|
# Add necessary setup steps to this file.
|
17
17
|
|
18
|
-
puts
|
19
|
-
system!
|
20
|
-
system(
|
21
|
-
|
22
|
-
# Install JavaScript dependencies
|
23
|
-
# system('bin/yarn')
|
18
|
+
puts "== Installing dependencies =="
|
19
|
+
system! "gem install bundler --conservative"
|
20
|
+
system("bundle check") || system!("bundle install")
|
24
21
|
|
25
22
|
# puts "\n== Copying sample files =="
|
26
|
-
# unless File.exist?(
|
27
|
-
# FileUtils.cp
|
23
|
+
# unless File.exist?("config/database.yml")
|
24
|
+
# FileUtils.cp "config/database.yml.sample", "config/database.yml"
|
28
25
|
# end
|
29
26
|
|
30
27
|
puts "\n== Preparing database =="
|
31
|
-
system!
|
28
|
+
system! "bin/rails db:prepare"
|
32
29
|
|
33
30
|
puts "\n== Removing old logs and tempfiles =="
|
34
|
-
system!
|
31
|
+
system! "bin/rails log:clear tmp:clear"
|
35
32
|
|
36
33
|
puts "\n== Restarting application server =="
|
37
|
-
system!
|
34
|
+
system! "bin/rails restart"
|
38
35
|
end
|
data/config/application.rb
CHANGED
@@ -30,11 +30,15 @@ require 'fat_free_crm/gem_ext/rails/engine'
|
|
30
30
|
module FatFreeCRM
|
31
31
|
class Application < Rails::Application
|
32
32
|
# Initialize configuration defaults for originally generated Rails version.
|
33
|
-
config.load_defaults
|
33
|
+
config.load_defaults 7.0
|
34
34
|
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
35
|
+
# Configuration for the application, engines, and railties goes here.
|
36
|
+
#
|
37
|
+
# These settings can be overridden in specific environments using the files
|
38
|
+
# in config/environments, which are processed later.
|
39
|
+
#
|
40
|
+
# config.time_zone = "Central Time (US & Canada)"
|
41
|
+
# config.eager_load_paths << Rails.root.join("extras")
|
38
42
|
|
39
43
|
# Models are organized in sub-directories
|
40
44
|
config.autoload_paths += Dir[Rails.root.join("app/models/**")] +
|
@@ -78,6 +82,7 @@ module FatFreeCRM
|
|
78
82
|
config.active_record.use_yaml_unsafe_load = false
|
79
83
|
config.active_record.yaml_column_permitted_classes = [
|
80
84
|
::ActiveRecord::Type::Time::Value,
|
85
|
+
::ActiveSupport::HashWithIndifferentAccess, # for Field#settings serialization see app/models/fields/field.rb
|
81
86
|
::ActiveSupport::TimeWithZone,
|
82
87
|
::ActiveSupport::TimeZone,
|
83
88
|
::BigDecimal,
|
data/config/boot.rb
CHANGED
@@ -6,9 +6,7 @@
|
|
6
6
|
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
7
7
|
#------------------------------------------------------------------------------
|
8
8
|
|
9
|
-
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
|
9
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
11
10
|
|
12
|
-
require
|
13
|
-
|
14
|
-
require 'bootsnap/setup'
|
11
|
+
require "bundler/setup" # Set up gems listed in the Gemfile.
|
12
|
+
require "bootsnap/setup" # Speed up boot time by caching expensive operations.
|
data/config/cable.yml
ADDED
data/config/database.yml
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
---
|
2
|
+
development: &development
|
3
|
+
adapter: postgresql
|
4
|
+
database: fat_free_crm_development
|
5
|
+
username: postgres
|
6
|
+
password:
|
7
|
+
host: localhost
|
8
|
+
port: 5432
|
9
|
+
schema_search_path: public
|
10
|
+
min_messages: warning
|
11
|
+
|
12
|
+
# Warning: The database defined as "test" will be erased and
|
13
|
+
# re-generated from your development database when you run "rake".
|
14
|
+
# Do not set this db to the same as development or production.
|
15
|
+
test:
|
16
|
+
<<: *development
|
17
|
+
database: fat_free_crm_test
|
18
|
+
|
19
|
+
production:
|
20
|
+
<<: *development
|
21
|
+
database: fat_free_crm_production
|
22
|
+
|
23
|
+
staging:
|
24
|
+
<<: *development
|
25
|
+
database: fat_free_crm_staging
|
26
|
+
|
data/config/environment.rb
CHANGED
@@ -5,8 +5,9 @@
|
|
5
5
|
# Fat Free CRM is freely distributable under the terms of MIT license.
|
6
6
|
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
7
7
|
#------------------------------------------------------------------------------
|
8
|
-
# Load the rails application
|
9
|
-
require_relative 'application'
|
10
8
|
|
11
|
-
#
|
9
|
+
# Load the Rails application.
|
10
|
+
require_relative "application"
|
11
|
+
|
12
|
+
# Initialize the Rails application.
|
12
13
|
Rails.application.initialize!
|