immosquare-extensions 0.1.24 → 0.1.26

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d4ded5cc647e8126d631f8ca563eef84565028fd6ce7a02b2c02cc7f8d6e5fa
4
- data.tar.gz: 1d6d1a14217c893831fc42d213bd501dc3e5395495ccf374c57ab548f6cfd7f2
3
+ metadata.gz: 0553e2e647c71c0afd72090399cbdc933659fde01e8daf8f7ff0a75fbfd8c333
4
+ data.tar.gz: 64e97c458e494e7c1651532c24dec6ba017b69d010190acd5bf27bb9f639a1c9
5
5
  SHA512:
6
- metadata.gz: 76e11581eeb74ed8b42f24f224b9784ba5421efd926061dcb5e5aa2e71aa0940a4caf4478624a07d63e76b06be1f7b7f53f586052c472b08eeaec0158d148c42
7
- data.tar.gz: 48b1920ad971819e4118cfa0d20dbd560cf1bad98394fa5ebb2277eb655ce9c8dcae8fe007b5065876a42b5dbb1616f32f196c1c886ec15d10a0ea7d0e2fb16a
6
+ metadata.gz: 263bc2dc0631004a0f0e20c7b24728833dd63d6ca1c280f6adf269e36c871c612c75173099e4afba2cc7cf335826e069d9be01c8277a8de59fd2664c41e95e7f
7
+ data.tar.gz: 626f8fab96fe0b7cbc1b394b43e8cd93bf626da03f436a6426e1eea460c660eff143cad2e3654cc00433ecf53724a2bdc49ab17f94e37056ef702c1ac9262fa7
@@ -0,0 +1,15 @@
1
+
2
+ module ImmosquareExtensions
3
+ module ApplicationRecord
4
+ ##============================================================##
5
+ ## On ajoute une méthode dig pour pouvoir accéder à des
6
+ ## attributs imbriqués sans avoir à vérifier si les objets
7
+ ## user.dig(:user_profile, :user_card_type, :slug)
8
+ ##============================================================##
9
+ def dig(*keys)
10
+ keys.reduce(self) do |obj, key|
11
+ obj.respond_to?(key) ? obj.send(key) : nil
12
+ end
13
+ end
14
+ end
15
+ end
@@ -3,9 +3,12 @@ require "rails"
3
3
  module ImmosquareExtensions
4
4
  class Railtie < Rails::Railtie
5
5
 
6
- initializer "immosquare_extensions.action_view" do
7
- ActiveSupport.on_load(:action_view) do
8
- include ImmosquareExtensions::PreviewMailerHelper
6
+ initializer "immosquare_extensions.active_record" do
7
+ ActiveSupport.on_load(:active_record) do
8
+ ##============================================================##
9
+ ## Pour ajouter des méthodes à ActiveRecord::Base
10
+ ##============================================================##
11
+ ActiveRecord::Base.include(ImmosquareExtensions::ApplicationRecord)
9
12
  end
10
13
  end
11
14
 
@@ -1,3 +1,3 @@
1
1
  module ImmosquareExtensions
2
- VERSION = "0.1.24".freeze
2
+ VERSION = "0.1.26".freeze
3
3
  end
@@ -1,9 +1,19 @@
1
+ ##============================================================##
2
+ ## Shared Methods (Need to be loaded first)
3
+ ##============================================================##
1
4
  require_relative "immosquare-extensions/shared_methods"
5
+
6
+ ##============================================================##
7
+ ## Extensions
8
+ ##============================================================##
9
+ require_relative "immosquare-extensions/application_record"
2
10
  require_relative "immosquare-extensions/array"
3
11
  require_relative "immosquare-extensions/file"
4
12
  require_relative "immosquare-extensions/hash"
5
13
  require_relative "immosquare-extensions/string"
6
- require_relative "immosquare-extensions/helpers/preview_mailer_helper"
14
+ ##============================================================##
15
+ ## Rails
16
+ ##============================================================##
7
17
  require_relative "immosquare-extensions/railtie" if defined?(Rails)
8
18
 
9
19
  module ImmosquareExtensions
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immosquare-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.24
4
+ version: 0.1.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - IMMO SQUARE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-20 00:00:00.000000000 Z
11
+ date: 2024-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: unicode_utils
@@ -35,10 +35,10 @@ extensions: []
35
35
  extra_rdoc_files: []
36
36
  files:
37
37
  - lib/immosquare-extensions.rb
38
+ - lib/immosquare-extensions/application_record.rb
38
39
  - lib/immosquare-extensions/array.rb
39
40
  - lib/immosquare-extensions/file.rb
40
41
  - lib/immosquare-extensions/hash.rb
41
- - lib/immosquare-extensions/helpers/preview_mailer_helper.rb
42
42
  - lib/immosquare-extensions/railtie.rb
43
43
  - lib/immosquare-extensions/shared_methods.rb
44
44
  - lib/immosquare-extensions/string.rb
@@ -1,207 +0,0 @@
1
- module ImmosquareExtensions
2
- module PreviewMailerHelper
3
- ##============================================================##
4
- ## Inspired by:
5
- ## https://github.com/rails/rails/blob/main/railties/lib/rails/templates/rails/mailers/email.html.erb
6
- ## -------------
7
- ## Here concact with "#{}" is not working, so used
8
- ## "data:application/octet-stream;charset=utf-8;base64,"+Base64.encode64(a.body.to_s)
9
- ##============================================================##
10
- def display_email_header_infos(email)
11
- ApplicationController.render(
12
- :layout => false,
13
- :locals => {
14
- :email => email,
15
- :formats => get_email_formats(email),
16
- :locales => I18n.available_locales.map do |locale|
17
- {
18
- :name => locale,
19
- :url => url_for(:mailer_locale => locale, :part => params[:part].presence),
20
- :css_class => (params[:mailer_locale].present? && params[:mailer_locale] == locale.to_s) || (params[:mailer_locale].blank? && I18n.locale == locale) ? "" : "text-body"
21
- }
22
- end
23
- },
24
- :inline => <<~HTML
25
- <header>
26
- <table>
27
- <% if email.respond_to?(:smtp_envelope_from) && Array(email.from) != Array(email.smtp_envelope_from) %>
28
- <tr>
29
- <th>SMTP-From:</th>
30
- <td><%= email.smtp_envelope_from %></td>
31
- </tr>
32
- <% end %>
33
-
34
- <% if email.respond_to?(:smtp_envelope_to) && email.to != email.smtp_envelope_to %>
35
- <tr>
36
- <th>SMTP-To:</th>
37
- <td><%= email.smtp_envelope_to %></td>
38
- </tr>
39
- <% end %>
40
-
41
- <tr>
42
- <th>From:</th>
43
- <td><%= email.header["from"] %></td>
44
- </tr>
45
-
46
- <% if email.reply_to %>
47
- <tr>
48
- <th>Reply-To:</th>
49
- <td><%= email.header["reply-to"] %></td>
50
- </tr>
51
- <% end %>
52
-
53
- <tr>
54
- <th>To:</th>
55
- <td><%= email.header["to"] %></td>
56
- </tr>
57
-
58
- <% if email.cc %>
59
- <tr>
60
- <th>CC:</th>
61
- <td><%= email.header["cc"] %></td>
62
- </tr>
63
- <% end %>
64
-
65
- <% if email.bcc %>
66
- <tr>
67
- <th>BCC:</th>
68
- <td><%= email.header["bcc"] %></td>
69
- </tr>
70
- <% end %>
71
-
72
- <tr>
73
- <th>Date:</th>
74
- <td><%= Time.current.rfc2822 %></td>
75
- </tr>
76
-
77
- <tr>
78
- <th>Subject:</th>
79
- <td><%= email.subject %></td>
80
- </tr>
81
-
82
- <tr>
83
- <th>Formats:</th>
84
- <td>
85
- <% formats.each do |format| %>
86
- <%= link_to(format[:name], format[:url], :class => "text-decoration-none hover-primary" + " " + format[:css_class]) %>
87
- <%= content_tag(:span, " | ") unless format == formats.last %>
88
- <% end %>
89
- </td>
90
- </tr>
91
-
92
- <% if locales.size > 1 %>
93
- <tr>
94
- <th>Locale:</th>
95
- <td>
96
- <% locales.each do |locale| %>
97
- <%= link_to(locale[:name], locale[:url], :class => "text-decoration-none hover-primary" + " " + locale[:css_class]) %>
98
- <%= content_tag(:span, " | ") unless locale == locales.last %>
99
- <% end %>
100
- </td>
101
- </tr>
102
- <% end %>
103
-
104
- <% if !(email.attachments.nil? || email.attachments.empty?) %>
105
- <tr>
106
- <th>Attachments:</th>
107
- <td>
108
- <% email.attachments.each do |a| %>
109
- <% filename = a.respond_to?(:original_filename) ? a.original_filename : a.filename %>
110
- <%= link_to filename, "data:application/octet-stream;charset=utf-8;base64,"+Base64.encode64(a.body.to_s), download: filename %>
111
- <% end %>
112
- </td>
113
- </tr>
114
- <% end %>
115
-
116
- <% if !(email.header_fields.nil? || email.header_fields.empty?) %>
117
- <tr>
118
- <th class="align-top">Headers:</th>
119
- <td>
120
- <details>
121
- <summary>Show all headers</summary>
122
- <table>
123
- <% email.header_fields.each do |field| %>
124
- <tr>
125
- <th><%= field.name %>:</th>
126
- <td><%= field.value %></td>
127
- </tr>
128
- <% end %>
129
- </table>
130
- </details>
131
- </td>
132
- </tr>
133
- <% end %>
134
- </table>
135
- </header>
136
- HTML
137
- )
138
- end
139
-
140
- def display_email_preview(email)
141
- begin
142
- formats = get_email_formats(email)
143
- part_format = formats.find {|f| f[:selected] }
144
- part_type = Mime::Type.lookup(part_format[:content_type])
145
-
146
- raise("No email part found for content type: #{part_format[:content_type]}") if !(part = find_part(email, part_type))
147
-
148
- body = part.respond_to?(:decoded) ? part.decoded : part
149
- part_format[:name] == "html" ? body.html_safe : simple_format(body)
150
- rescue StandardError => e
151
- "Error displaying email: #{e.message}"
152
- end
153
- end
154
-
155
- private
156
-
157
-
158
- ##============================================================##
159
- ## find_first_mime_type is a method from the Mail gem for module
160
- ## Mail Message
161
- ## ----------------
162
- ## https://github.com/mikel/mail/blob/master/lib/mail/message.rb#L1938
163
- ##============================================================##
164
- def find_preferred_part(email, *formats)
165
- formats.each do |format|
166
- if (part = email.find_first_mime_type(format))
167
- return part
168
- end
169
- end
170
-
171
- email if formats.any? {|f| email.mime_type == f }
172
- end
173
-
174
- ##============================================================##
175
- ## find_part use the find_first_mime_type method from the Mail
176
- ## gem for module Mail Message
177
- ##============================================================##
178
- def find_part(email, format)
179
- if (part = email.find_first_mime_type(format))
180
- part
181
- elsif email.mime_type == format
182
- email
183
- end
184
- end
185
-
186
- ##============================================================##
187
- ## Return email formats
188
- ##============================================================##
189
- def get_email_formats(email)
190
- part = find_preferred_part(email, Mime[:html], Mime[:text])
191
- formats = []
192
- formats =
193
- if email.html_part && email.text_part
194
- selected = params[:part].present? && params[:part] == "text" ? "text" : "html"
195
- [
196
- {:name => "html", :content_type => "text/html", :url => url_for(:part => "html", :mailer_locale => params[:mailer_locale].presence), :selected => selected == "html", :css_class => selected == "html" ? "" : "text-body"},
197
- {:name => "text", :content_type => "text/plain", :url => url_for(:part => "text", :mailer_locale => params[:mailer_locale].presence), :selected => selected == "text", :css_class => selected == "text" ? "" : "text-body"}
198
- ]
199
- elsif part
200
- data = part.content_type.split(";").first.split("/").last
201
- [
202
- {:name => data, :content_type => "text/#{data}", :url => url_for(:part => data, :mailer_locale => params[:mailer_locale].presence), :selected => true, :css_class => ""}
203
- ]
204
- end
205
- end
206
- end
207
- end