repost 0.3.2 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c76a83fdffd2e5c0bccf54354a4e0a4992dc74e319141866c50c09abf7e1633d
4
- data.tar.gz: e2a54d182d2e81e4ba21e2617ba74c98aa25fe1fb3524ed19dc35b43e128a86c
3
+ metadata.gz: 78397f467abffbff9b3304044d2ed3b42180612329aa79b08b38ab39b5ae0556
4
+ data.tar.gz: 7c584b1fe71c7fc5fc853fc2d062b5902ab03876db04fe0cd14d6304672916bb
5
5
  SHA512:
6
- metadata.gz: 20f13dbf1823fed60b85eb7571d63a9ba3a15dbee0d3bb8908de84ebacb13f025a7af2dedf1ddf5bc570963aef6a61fc118dff6f0ef877a7cc9247c8cf367d71
7
- data.tar.gz: 88cb2230ff7e3fc75361924137e94462fd9812eb60408b9dbfecf8103fe99c111d0a02e158e967b1b69250e2b8e7c7d05472e259dfaf91262820ac13c24d4cb9
6
+ metadata.gz: cef261901f56c1914a56b5ea297d8f667d6bddef689b47f976e3585fd36311a42bb25ef8bd733fdaf92e126bc8d18df54c51401f89e7848b634f3dedbb1eea0e
7
+ data.tar.gz: 90050bab9e770eca67bc25f1acf3453e8d6d837e1eeacfeaae40f1ecafe2e04e65c8544449a3b8a1150818556ba9b6ec0226db20af0137feb20eb1fdf1163170
data/lib/repost/action.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Repost
2
2
  class Action
3
- def self.perform(*args)
4
- action = new(*args)
3
+ def self.perform(*args, **kw_args)
4
+ action = new(*args, **kw_args)
5
5
  action.perform
6
6
  end
7
7
  end
@@ -7,7 +7,10 @@ if defined?(Rails) && defined?(ActiveSupport)
7
7
  render html: Repost::Senpai.perform(
8
8
  url,
9
9
  params: params,
10
- options: options.merge({authenticity_token: authenticity_token}.compact)
10
+ options: options.merge({
11
+ authenticity_token: authenticity_token,
12
+ autosubmit_nonce: content_security_policy_nonce,
13
+ }.compact)
11
14
  ).html_safe
12
15
  end
13
16
 
data/lib/repost/senpai.rb CHANGED
@@ -12,6 +12,7 @@ module Repost
12
12
  @charset = options.fetch(:charset, DEFAULT_CHARSET)
13
13
  @form_id = options.fetch(:form_id, generated_form_id)
14
14
  @autosubmit = options.fetch(:autosubmit, true)
15
+ @autosubmit_nonce = options.fetch(:autosubmit_nonce, nil)
15
16
  @section_classes = options.dig(:decor, :section, :classes)
16
17
  @section_html = options.dig(:decor, :section, :html)
17
18
  @submit_classes = options.dig(:decor, :submit, :classes)
@@ -31,7 +32,7 @@ module Repost
31
32
 
32
33
  attr_reader :url, :params, :options, :method, :form_id, :autosubmit,
33
34
  :section_classes, :section_html, :submit_classes,
34
- :submit_text, :authenticity_token, :charset
35
+ :submit_text, :authenticity_token, :charset, :autosubmit_nonce
35
36
 
36
37
  def form_head
37
38
  "<form id='#{form_id}' action='#{url}' method='#{method}' accept-charset='#{charset}'>"
@@ -39,12 +40,27 @@ module Repost
39
40
 
40
41
  def form_body
41
42
  inputs = params.map do |key, value|
42
- "<input type='hidden' name='#{key}' value='#{value}'>"
43
+ form_input(key, value)
43
44
  end
44
45
  inputs.unshift(csrf_token) if authenticity_token
45
46
  inputs.join
46
47
  end
47
48
 
49
+ def form_input(key, value)
50
+ case value
51
+ when Hash
52
+ value.map do |inner_key, inner_value|
53
+ form_input("#{key}[#{inner_key}]", inner_value)
54
+ end.join
55
+ when Array
56
+ value.map do |inner_value|
57
+ form_input("#{key}[]", inner_value)
58
+ end.join
59
+ else
60
+ "<input type='hidden' name='#{key}' value=#{process_value(value)}>"
61
+ end
62
+ end
63
+
48
64
  def form_footer
49
65
  "</form>"
50
66
  end
@@ -71,9 +87,15 @@ module Repost
71
87
  end
72
88
 
73
89
  def auto_submit_script
74
- "<script>
90
+ nonce_attr = %Q( nonce="#{autosubmit_nonce}") if autosubmit_nonce
91
+ "<script#{nonce_attr}>
75
92
  document.getElementById('#{form_id}').submit();
76
93
  </script>"
77
94
  end
95
+
96
+ def process_value(value)
97
+ return value if value.is_a?(Integer)
98
+ '\'' + value.to_s + '\''
99
+ end
78
100
  end
79
101
  end
@@ -1,3 +1,3 @@
1
1
  module Repost
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repost
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - YaroslavO
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-03 00:00:00.000000000 Z
11
+ date: 2021-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler