bmc 1.3.2 → 1.3.5

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: 660ccd7de1adf652c91f76ddc091f158c1b844d1a5a2a1006ca801c91a54ab79
4
- data.tar.gz: 7786e6fd7de7161c0fbd9cb61b1f8200f9e48d65c59296cad7cde39234bb0bb0
3
+ metadata.gz: 9c240f97e32a79aa89f2d8bbf57797dda66cfb566d63063a498e97e4e051dfa4
4
+ data.tar.gz: 127af8319136aef6611037276a6d29564938d7109e9914711db36aaecf4fded4
5
5
  SHA512:
6
- metadata.gz: 714fafade0b2d5fcb2ab9689445c9e327075107ccd5397bdf218ad85108af4e05aa0dd484ff7d68d932d833ce29f3b68b6cf21b27913a61de3c9ee3f54f802d4
7
- data.tar.gz: 599dde15b80d1e30103de30e33e0070aa9c3023845d33303d464d6a2967a9c43b9abccd2a11d5a20de965879ee6d459905d3c2a6eac6b4b9773fdd3260aba65b
6
+ metadata.gz: bb20dae217a52ec5733b9d4e5e237099f455fc5003020d1c70d5e4de3aa09bf476e2d63b8cf31e2fd61110a490a010a669872bbef44e6da470caf4ee9e8703eb
7
+ data.tar.gz: da49b6d35eef688c3d6109df347de1d926cd48576c819849fff85db770b63f2f0dcaaed25276bf302bed1701747e61c11c0a02b92599b8fa9b053280f3d31b93
data/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## Next version
4
4
 
5
+ ## 1.3.5
6
+ - Add Sendinblue SMS strategy
7
+
8
+ ## v1.3.4
9
+ - Add `all` support to filters `ByKeyValue` and `ByKeyValues`
10
+
11
+ ## v1.3.3
12
+ - Add `only:` support to `hidden_inputs_for_get_form` helper
13
+
5
14
  ## v1.3.2
6
15
  - Add `bs_button_to` helper
7
16
 
@@ -7,6 +7,8 @@ class BMC::Filter::ByKeyValue
7
7
  end
8
8
 
9
9
  def apply(query, value)
10
+ return query if value == "all"
11
+
10
12
  value = true if value == "true"
11
13
  value = false if value == "false"
12
14
 
@@ -2,6 +2,9 @@ class BMC::Filter::ByKeyValues < BMC::Filter::ByKeyValue
2
2
  def apply(query, value)
3
3
  value = value.split if value.is_a?(String)
4
4
  value = value.select(&:present?)
5
+
6
+ return query if value == ["all"]
7
+
5
8
  column = column_for(query)
6
9
 
7
10
  if value.any?
@@ -5,17 +5,17 @@ module BMC::FormHelper
5
5
  # Does not work if display:none
6
6
  def form_hidden_submit
7
7
  css = "position:absolute;top:-9999px;left:-9999px;opacity:0;height:0;width:0;visibility: hidden"
8
- tag(:input, type: "submit", class: "hidden-submit", style: css)
8
+ tag.input(type: "submit", class: "hidden-submit", style: css)
9
9
  end
10
10
 
11
11
  def search_form(action: request.fullpath)
12
12
  render "bmc/search/form", action: action
13
13
  end
14
14
 
15
- def hidden_inputs_for_get_form(url, except: [])
16
- query_values = Addressable::URI.parse(url).query_values.to_h
17
- .with_indifferent_access
18
- .except(*except)
15
+ def hidden_inputs_for_get_form(url, except: nil, only: nil)
16
+ query_values = Addressable::URI.parse(url).query_values.to_h.with_indifferent_access
17
+ query_values.except!(*except) if except
18
+ query_values.select! { only.map(&:to_sym).include?(_1.to_sym) } if only
19
19
 
20
20
  return if query_values.empty?
21
21
 
@@ -8,7 +8,7 @@ class BMC::MiniModelSerializer::Serialize
8
8
 
9
9
  def call
10
10
  if object.is_a?(Hash)
11
- object.map { |k, v| [k.to_s, serialize(v)] }.to_h
11
+ object.to_h { |k, v| [k.to_s, serialize(v)] }
12
12
  elsif object.is_a?(Enumerable)
13
13
  object.map { |e| serialize(e) }
14
14
  elsif (serializer = "#{object.class}Serializer".safe_constantize)
@@ -4,7 +4,7 @@ class BMC::MiniModelSerializer::Serializer < BMC::MiniModelSerializer::Serialize
4
4
  end
5
5
 
6
6
  def call
7
- serialize attributes.map { |k| [k, send(k)] }.to_h
7
+ serialize(attributes.index_with { |k| send(k) })
8
8
  end
9
9
 
10
10
  private
@@ -11,9 +11,7 @@ class BMC::Serializers::XLSX < BMC::Serializers::Base
11
11
  end
12
12
 
13
13
  def render_file(file_path)
14
- File.open(file_path, "w+b") do |f|
15
- f.write(render_inline)
16
- end
14
+ File.binwrite(file_path, render_inline)
17
15
  end
18
16
 
19
17
  private
@@ -25,14 +23,14 @@ class BMC::Serializers::XLSX < BMC::Serializers::Base
25
23
  end
26
24
 
27
25
  def date_range_styles(row)
28
- row.each_index.select { row[_1].is_a?(Date) }.map do
29
- {range: {rows: :all, columns: _1}, styles: {format_code: "dd/mm/yyyy"}}
26
+ row.each_index.select { row[_1].is_a?(Date) }.map do |col|
27
+ {range: {rows: :all, columns: col}, styles: {format_code: "dd/mm/yyyy"}}
30
28
  end
31
29
  end
32
30
 
33
31
  def time_range_styles(row)
34
- row.each_index.select { row[_1].is_a?(Time) }.map do
35
- {range: {rows: :all, columns: _1}, styles: {format_code: "dd/mm/yyyy hh:mm:ss"}}
32
+ row.each_index.select { row[_1].is_a?(Time) }.map do |col|
33
+ {range: {rows: :all, columns: col}, styles: {format_code: "dd/mm/yyyy hh:mm:ss"}}
36
34
  end
37
35
  end
38
36
  end
@@ -0,0 +1,2 @@
1
+ class BMC::SMS::DeliveryError < StandardError
2
+ end
@@ -0,0 +1,41 @@
1
+ class BMC::SMS::Strategies::Sendinblue
2
+ URL = "https://api.sendinblue.com/v3/transactionalSMS/sms"
3
+
4
+ DeliveryError = Class.new(BMC::SMS::DeliveryError)
5
+
6
+ attr_reader :api_key
7
+
8
+ def initialize(api_key: ENV["SENDINBLUE_API_KEY"])
9
+ @api_key = api_key
10
+ end
11
+
12
+ def call(data)
13
+ response = HTTP.request(:post, URL, headers: request_headers, json: request_body(data))
14
+
15
+ unless response.code.to_s.start_with?("2")
16
+ raise DeliveryError, "Invalid response: #{response.code} / #{response.body}"
17
+ end
18
+
19
+ true
20
+ end
21
+
22
+ private
23
+
24
+ def request_headers
25
+ {
26
+ :content_type => "application/json",
27
+ :api_key => api_key,
28
+ }
29
+ end
30
+
31
+ def request_body(data)
32
+ from = data[:from] || BMC::SMS.default_from
33
+
34
+ {
35
+ :type => "transactional",
36
+ :sender => from,
37
+ :recipient => data[:to],
38
+ :content => data[:body],
39
+ }
40
+ end
41
+ end
@@ -17,7 +17,5 @@ module BMC::ActiveModelCustomErrorMessages
17
17
  end
18
18
  end
19
19
 
20
- if Module.const_defined?("ActiveModel::Error")
21
- ActiveModel::Error.prepend(ForError)
22
- end
20
+ ActiveModel::Error.prepend(ForError)
23
21
  end
data/lib/bmc/config.rb CHANGED
@@ -5,7 +5,7 @@ class << BMC
5
5
  @parent_controller ||= [
6
6
  "ApplicationController",
7
7
  "ActionController::Base",
8
- ].map(&:safe_constantize).compact.first
8
+ ].filter_map(&:safe_constantize).first
9
9
  end
10
10
 
11
11
  attr_writer :parent_job
@@ -14,7 +14,7 @@ class << BMC
14
14
  @parent_job ||= [
15
15
  "ApplicationJob",
16
16
  "ActiveJob::Base",
17
- ].map(&:safe_constantize).compact.first
17
+ ].filter_map(&:safe_constantize).first
18
18
  end
19
19
 
20
20
  attr_writer :parent_mailer
@@ -23,6 +23,6 @@ class << BMC
23
23
  @parent_mailer ||= [
24
24
  "ApplicationMailer",
25
25
  "ActionMailer::Base",
26
- ].map(&:safe_constantize).compact.first
26
+ ].filter_map(&:safe_constantize).first
27
27
  end
28
28
  end
@@ -1,6 +1,6 @@
1
1
  module BMC::FormBackUrl
2
2
  def back_url_tag
3
- tag(:input,
3
+ tag.input(
4
4
  :type => "hidden",
5
5
  :name => "back_url",
6
6
  :value => (params[:back_url].presence || request.referer),
data/lib/bmc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module BMC
2
- VERSION = "1.3.2"
2
+ VERSION = "1.3.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bmc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benoit MARTIN-CHAVE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-23 00:00:00.000000000 Z
11
+ date: 2022-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails-i18n
@@ -172,8 +172,10 @@ files:
172
172
  - app/sms/bmc/sms.rb
173
173
  - app/sms/bmc/sms/application_sms.rb
174
174
  - app/sms/bmc/sms/deliver_job.rb
175
+ - app/sms/bmc/sms/delivery_error.rb
175
176
  - app/sms/bmc/sms/message.rb
176
177
  - app/sms/bmc/sms/strategies/amazon.rb
178
+ - app/sms/bmc/sms/strategies/sendinblue.rb
177
179
  - app/sms/bmc/sms/strategies/test.rb
178
180
  - app/sorters/bmc/sorter.rb
179
181
  - app/views/bmc/search/_form.html.slim