effective_resources 1.8.16 → 1.8.21
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.
- checksums.yaml +4 -4
- data/app/controllers/concerns/effective/crud_controller.rb +4 -2
- data/app/controllers/concerns/effective/crud_controller/respond.rb +10 -1
- data/app/controllers/concerns/effective/flash_messages.rb +1 -1
- data/app/controllers/concerns/effective/wizard_controller/save.rb +1 -1
- data/app/helpers/effective_acts_as_email_form_helper.rb +32 -0
- data/app/models/concerns/acts_as_email_form.rb +74 -0
- data/app/models/concerns/effective_devise_user.rb +2 -0
- data/app/views/effective/acts_as_email_form/_fields.html.haml +33 -0
- data/lib/effective_resources.rb +18 -0
- data/lib/effective_resources/engine.rb +1 -0
- data/lib/effective_resources/version.rb +1 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aedd54df5d6ebf911041fedaa519ab1f8fde409e6bed5fd9374e6b9460ef2506
|
4
|
+
data.tar.gz: bd179f5ee32166042cd5e0f011b40e5738b7a7ec3abca222ce778c4ac69e20cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97a13796ce565f1b05891c1b92382eaaaa8677846d60add08dd23cdc2577b883bfc285b2b8f6b3d64fb39fff1fd3acd36143f476375d08bd1740f1d1003b62d3
|
7
|
+
data.tar.gz: af4e9d7d6332731e7d5f6d7c6a0e17ec0c0d07aecff8d000e41ac9446b27b013c60fd218dcca846d06bf1f15bc3463b694f6e61c5b8784e10eb8c2d1efeab35d
|
@@ -125,8 +125,10 @@ module Effective
|
|
125
125
|
end
|
126
126
|
|
127
127
|
def resource_layout
|
128
|
-
|
129
|
-
|
128
|
+
if defined?(Tenant)
|
129
|
+
namespace = controller_path.include?('admin/') ? 'admin' : 'application'
|
130
|
+
"#{Tenant.current}/#{namespace}"
|
131
|
+
end
|
130
132
|
end
|
131
133
|
|
132
134
|
def resource_params_method_name
|
@@ -15,7 +15,16 @@ module Effective
|
|
15
15
|
|
16
16
|
format.js do
|
17
17
|
flash[:success] ||= resource_flash(:success, resource, action)
|
18
|
-
|
18
|
+
|
19
|
+
if params[:_datatable_action]
|
20
|
+
redirect_to(resource_redirect_path(resource, action))
|
21
|
+
else
|
22
|
+
render(
|
23
|
+
(template_present?(action) ? action : :member_action),
|
24
|
+
locals: { action: action, remote_form_redirect: resource_redirect_path(resource, action)}
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
19
28
|
end
|
20
29
|
end
|
21
30
|
elsif template_present?(action)
|
@@ -41,7 +41,7 @@ module Effective
|
|
41
41
|
|
42
42
|
messages = resource.errors.map do |error|
|
43
43
|
attribute = error.respond_to?(:attribute) ? error.attribute : error
|
44
|
-
message = error.respond_to?(:
|
44
|
+
message = error.respond_to?(:attribute) ? error.message : resource.errors[attribute].to_sentence
|
45
45
|
|
46
46
|
if message[0] == message[0].upcase # If the error begins with a capital letter
|
47
47
|
message
|
@@ -9,7 +9,7 @@ module Effective
|
|
9
9
|
if save_resource(resource, action)
|
10
10
|
flash[:success] ||= options.delete(:success) || resource_flash(:success, resource, action)
|
11
11
|
|
12
|
-
@skip_to ||= next_step
|
12
|
+
@skip_to ||= resource.required_steps.find { |s| s == next_step } || resource.first_uncompleted_step
|
13
13
|
@redirect_to ||= resource_wizard_path(resource, @skip_to) if was_new_record
|
14
14
|
|
15
15
|
redirect_to(@redirect_to || wizard_path(@skip_to))
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EffectiveActsAsEmailFormHelper
|
4
|
+
|
5
|
+
def email_form_fields(form, action = nil, skip: true, to: nil, variables: nil, partial: nil)
|
6
|
+
raise('expected a form') unless form.respond_to?(:object)
|
7
|
+
|
8
|
+
resource = form.object
|
9
|
+
raise('expected an acts_as_email_form resource') unless resource.class.respond_to?(:acts_as_email_form?)
|
10
|
+
|
11
|
+
# Load the template.
|
12
|
+
email_template = if action.present? && resource.email_form_effective_email_templates?
|
13
|
+
Effective::EmailTemplate.where(template_name: action).first!
|
14
|
+
end
|
15
|
+
|
16
|
+
# These defaults are only used when there is no email_template
|
17
|
+
email_defaults = form.object.email_form_defaults(action) unless email_template.present?
|
18
|
+
|
19
|
+
locals = {
|
20
|
+
form: form,
|
21
|
+
email_to: to,
|
22
|
+
email_skip: skip,
|
23
|
+
email_action: (action || true),
|
24
|
+
email_defaults: email_defaults,
|
25
|
+
email_template: email_template,
|
26
|
+
email_variables: variables
|
27
|
+
}
|
28
|
+
|
29
|
+
render(partial: (partial || 'effective/acts_as_email_form/fields'), locals: locals)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# ActsAsEmailForm
|
2
|
+
# Adds an email_form_skip, email_form_from, email_form_subject, email_form_body attr_accessors
|
3
|
+
# And some helpful methods to render and validate a Email to Send form
|
4
|
+
# That should work with or without effective_email_templates to send an email on a model
|
5
|
+
|
6
|
+
module ActsAsEmailForm
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
module Base
|
10
|
+
def acts_as_email_form
|
11
|
+
include ::ActsAsEmailForm
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
included do
|
16
|
+
# Yes, we are submitting an email form
|
17
|
+
attr_accessor :email_form_action
|
18
|
+
|
19
|
+
# Skip sending the email entirely
|
20
|
+
attr_accessor :email_form_skip
|
21
|
+
|
22
|
+
# The email From / Subject / Body fields
|
23
|
+
attr_accessor :email_form_from
|
24
|
+
attr_accessor :email_form_subject
|
25
|
+
attr_accessor :email_form_body
|
26
|
+
|
27
|
+
effective_resource do
|
28
|
+
email_form_action :string, permitted: true
|
29
|
+
email_form_skip :boolean, permitted: true
|
30
|
+
|
31
|
+
email_form_from :string, permitted: true
|
32
|
+
email_form_subject :string, permitted: true
|
33
|
+
email_form_body :text, permitted: true
|
34
|
+
end
|
35
|
+
|
36
|
+
with_options(if: -> { email_form_action.present? && !email_form_skip? }) do
|
37
|
+
validates :email_form_from, presence: true
|
38
|
+
validates :email_form_subject, presence: true
|
39
|
+
validates :email_form_body, presence: true
|
40
|
+
|
41
|
+
validate(unless: -> { email_form_from.blank? }) do
|
42
|
+
self.errors.add(:email_form_from, 'must be a valid email address') unless email_form_from.include?('@')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
if defined?(EffectiveEmailTemplates)
|
47
|
+
validates :email_form_subject, liquid: true, if: -> { email_form_effective_email_templates? }
|
48
|
+
validates :email_form_body, liquid: true, if: -> { email_form_effective_email_templates? }
|
49
|
+
end
|
50
|
+
|
51
|
+
def email_form_params
|
52
|
+
{ from: email_form_from, subject: email_form_subject, body: email_form_body }.compact
|
53
|
+
end
|
54
|
+
|
55
|
+
def email_form_skip?
|
56
|
+
EffectiveResources.truthy?(email_form_skip)
|
57
|
+
end
|
58
|
+
|
59
|
+
def email_form_effective_email_templates?
|
60
|
+
!!defined?(EffectiveEmailTemplates)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Only considered when not using an effective email template
|
64
|
+
def email_form_defaults(action)
|
65
|
+
{ from: nil, subject: nil, body: nil }
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
module ClassMethods
|
71
|
+
def acts_as_email_form?; true; end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -65,6 +65,8 @@ module EffectiveDeviseUser
|
|
65
65
|
end
|
66
66
|
|
67
67
|
module ClassMethods
|
68
|
+
def effective_devise_user?; true; end
|
69
|
+
|
68
70
|
def permitted_sign_up_params # Should contain all fields as per views/users/_sign_up_fields
|
69
71
|
raise('please define a self.permitted_sign_up_params')
|
70
72
|
[:email, :password, :password_confirmation, :first_name, :last_name, :name, :login]
|
@@ -0,0 +1,33 @@
|
|
1
|
+
= form.hidden_field :email_form_action, value: email_action
|
2
|
+
|
3
|
+
- if email_skip
|
4
|
+
= form.check_box :email_form_skip, label: 'Do not send email'
|
5
|
+
|
6
|
+
= form.hide_if :email_form_skip, true do
|
7
|
+
- if email_to.present? && form.respond_to?(:static_field)
|
8
|
+
= form.static_field :email_form_to, label: 'To', value: (email_to.respond_to?(:email) ? email_to.email : email_to)
|
9
|
+
|
10
|
+
- if form.object.errors.present?
|
11
|
+
= form.text_field :email_form_from, label: 'From'
|
12
|
+
= form.text_field :email_form_subject, label: 'Subject'
|
13
|
+
= form.text_area :email_form_body, label: 'Body', rows: 10
|
14
|
+
|
15
|
+
- elsif email_template.present?
|
16
|
+
-# email_template is an Effective::EmailTemplate
|
17
|
+
= form.text_field :email_form_from, label: 'From', value: email_template.from
|
18
|
+
= form.text_field :email_form_subject, label: 'Subject', value: email_template.subject
|
19
|
+
= form.text_area :email_form_body, label: 'Body', value: email_template.body, rows: 10
|
20
|
+
|
21
|
+
- else
|
22
|
+
= form.text_field :email_form_from, label: 'From', value: (email_defaults[:from] || '')
|
23
|
+
= form.text_field :email_form_subject, label: 'Subject', value: (email_defaults[:subject] || '')
|
24
|
+
= form.text_area :email_form_body, label: 'Body', rows: 10, value: (email_defaults[:body] || '')
|
25
|
+
|
26
|
+
- if email_variables.present?
|
27
|
+
%p The available variables are:
|
28
|
+
|
29
|
+
%ul
|
30
|
+
- email_variables.each do |variable|
|
31
|
+
%li {{ #{variable} }}
|
32
|
+
|
33
|
+
%small.text-muted Only a developer can add additional variables
|
data/lib/effective_resources.rb
CHANGED
@@ -46,4 +46,22 @@ module EffectiveResources
|
|
46
46
|
(config.respond_to?(:active_job) && config.active_job.queue_adapter) ? :deliver_later : :deliver_now
|
47
47
|
end
|
48
48
|
|
49
|
+
def self.advance_date(date, business_days: 1, holidays: [:ca, :observed])
|
50
|
+
raise('business_days must be an integer <= 365') unless business_days.kind_of?(Integer) && business_days <= 365
|
51
|
+
|
52
|
+
business_days.times do
|
53
|
+
loop do
|
54
|
+
date = date + 1.day
|
55
|
+
break if business_day?(date, holidays: holidays)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
date
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.business_day?(date, holidays: [:ca, :observed])
|
63
|
+
require 'holidays' unless defined?(Holidays)
|
64
|
+
date.wday != 0 && date.wday != 6 && Holidays.on(date, *holidays).blank?
|
65
|
+
end
|
66
|
+
|
49
67
|
end
|
@@ -23,6 +23,7 @@ module EffectiveResources
|
|
23
23
|
initializer 'effective_resources.active_record' do |app|
|
24
24
|
ActiveSupport.on_load :active_record do
|
25
25
|
ActiveRecord::Base.extend(ActsAsArchived::Base)
|
26
|
+
ActiveRecord::Base.extend(ActsAsEmailForm::Base)
|
26
27
|
ActiveRecord::Base.extend(ActsAsTokened::Base)
|
27
28
|
ActiveRecord::Base.extend(ActsAsSlugged::Base)
|
28
29
|
ActiveRecord::Base.extend(ActsAsStatused::Base)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_resources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: holidays
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description: Make any controller an effective resource controller.
|
112
126
|
email:
|
113
127
|
- info@codeandeffect.com
|
@@ -133,10 +147,12 @@ files:
|
|
133
147
|
- app/controllers/concerns/effective/wizard_controller/before_actions.rb
|
134
148
|
- app/controllers/concerns/effective/wizard_controller/save.rb
|
135
149
|
- app/controllers/concerns/effective/wizard_controller/wicked_overrides.rb
|
150
|
+
- app/helpers/effective_acts_as_email_form_helper.rb
|
136
151
|
- app/helpers/effective_resources_helper.rb
|
137
152
|
- app/helpers/effective_resources_private_helper.rb
|
138
153
|
- app/helpers/effective_resources_wizard_helper.rb
|
139
154
|
- app/models/concerns/acts_as_archived.rb
|
155
|
+
- app/models/concerns/acts_as_email_form.rb
|
140
156
|
- app/models/concerns/acts_as_slugged.rb
|
141
157
|
- app/models/concerns/acts_as_statused.rb
|
142
158
|
- app/models/concerns/acts_as_tokened.rb
|
@@ -177,6 +193,7 @@ files:
|
|
177
193
|
- app/views/application/show.html.haml
|
178
194
|
- app/views/application/show.js.erb
|
179
195
|
- app/views/application/update.js.erb
|
196
|
+
- app/views/effective/acts_as_email_form/_fields.html.haml
|
180
197
|
- app/views/effective/resource/_actions.html.haml
|
181
198
|
- app/views/effective/resource/_actions_dropleft.html.haml
|
182
199
|
- app/views/effective/resource/_actions_glyphicons.html.haml
|