respond_for_helper 1.1.3 → 1.2.0

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: d1ba35f685da02129cb708b854de5702c29007c378964f6b619ea223d25a77a6
4
- data.tar.gz: 39ff8c2905ee45781517b90cc67c0cbb1e779d51bdceaf6b8e4683a2211fe748
3
+ metadata.gz: 9fd3094966984698be9e2a6dee739ac76fe42e610c8073831d5ae31e6a3df84c
4
+ data.tar.gz: 92883a30c2c987214cdd876cc1eb506df21731f6ef3231df14c5e93c86c4df45
5
5
  SHA512:
6
- metadata.gz: 91070c0e93a7b25f8d483f2ab24e9a3ab1a56fa14faec724fc3c5573db60e06291b91793a4de1ef262e88b56f08642d3c1e45b35eb9a14afcfb1ab636ca9454a
7
- data.tar.gz: df2dfbd5b64dc5f6e9f10a0aff0aae2d074e8373596a02bd77f806c729b82f9d978c1b21a8c5497653fc7858d753b545ae33bcf96a8516392a790e770de888af
6
+ metadata.gz: 6808c53b8b8897ef912ac647e021964242f0b54e1cffbd176cf5679b2e61436015ed8f7f581a0962c1d8f4d5c2c9e06a492e0c9f100222076e486a2743918f74
7
+ data.tar.gz: e0fcdafe477eb29958a0ca29b46b8e463820828da1daacf3d69b2bf8441c60a4a4fb369d55436e7cdaa46dc6c57a8e7599835489b3f8eeeb14bcf1e6df548ef1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.2.0
4
+
5
+ * Add options for custom flash message.
6
+ * Respect original flash message.
7
+
3
8
  ## 1.1.3
4
9
 
5
10
  * Set flash message before render or redirect.
data/README.md CHANGED
@@ -54,18 +54,25 @@ respond_for @item, html: true, json: true, any: false
54
54
 
55
55
  ```ruby
56
56
  # Specify redirect location when succeeded.
57
- # The value should be one of string, symbol (action name) or proc.
57
+ # The value should be one of symbol (action name), string or proc.
58
+ respond_for @item, location: :index
58
59
  respond_for @item, location: url_for(@item)
60
+ respond_for @item, location: -> { url_for(@item) }
59
61
 
60
62
  # Specify template when failed.
61
63
  # The value should be one of symbol (action name) or proc.
62
64
  respond_for @item, failure_template: :some_template
65
+ respond_for @item, failure_template: -> { :some_template }
63
66
 
64
- # Specify notice message when succeeded.
67
+ # Specify notice message when succeeded by symbol, string or proc.
68
+ respond_for @item, notice: :notice
65
69
  respond_for @item, notice: 'Create was succceeded'
70
+ respond_for @item, notice: -> { 'Create was succceeded' }
66
71
 
67
- # Specify alert message when failed.
72
+ # Specify alert message when failed by symbol, string or proc.
73
+ respond_for @item, alert: :alert
68
74
  respond_for @item, alert: 'Create was failed'
75
+ respond_for @item, alert: -> { 'Create was failed' }
69
76
  ```
70
77
 
71
78
  `respond_for` also supports block like `respond_to`:
@@ -4,12 +4,13 @@ module RespondForHelper
4
4
  class Behaviour
5
5
  TYPES = [:render, :redirect, :head]
6
6
 
7
- attr_accessor :type, :target, :flash, :options
7
+ attr_accessor :type, :target, :flash, :flash_message, :options
8
8
 
9
9
  def initialize(attrs)
10
10
  @type = attrs.delete(:type)
11
11
  @target = attrs.delete(:target)
12
12
  @flash = attrs.delete(:flash)
13
+ @flash_message = attrs.delete(:flash_message)
13
14
  @options = attrs
14
15
  end
15
16
 
@@ -46,6 +47,7 @@ module RespondForHelper
46
47
 
47
48
  if @format == :html
48
49
  merge_html_options(behaviour)
50
+ merge_flash_options(behaviour)
49
51
  end
50
52
 
51
53
  behaviour
@@ -110,6 +112,12 @@ module RespondForHelper
110
112
  end
111
113
  end
112
114
 
115
+ def merge_flash_options(behaviour)
116
+ if @options[behaviour.flash]
117
+ behaviour.flash_message = @options[behaviour.flash]
118
+ end
119
+ end
120
+
113
121
  def change_to_render(behaviour)
114
122
  behaviour.type = :render
115
123
  behaviour.options[:status] = @result == :success ? :ok : :unprocessable_entity
@@ -1,47 +1,47 @@
1
- # frozen_string_literal: true
2
-
3
- module RespondForHelper
4
- module Flashes
5
- class Base
6
- def initialize(type, options = {})
7
- @type = type
8
- @options = options
9
- end
10
-
11
- def call
12
- I18n.t("respond_for.format", **translations.merge(message: message))
13
- end
14
-
15
- private
16
-
17
- def translations
18
- format_keys.each_with_object({}) do |key, map|
19
- map[key] = if @options[key]
20
- I18n.t("respond_for.#{key}", value: @options[key], default: '')
21
- else
22
- ''
23
- end
24
- end
25
- end
26
-
27
- def format_keys
28
- I18n.t("respond_for.format").scan(/\%\{(\w+)\}/).flatten.map(&:to_sym)
29
- end
30
-
31
- def message
32
- @options[@type] || I18n.t(i18n_path, default: i18n_extra_paths)
33
- end
34
-
35
- def i18n_path
36
- "respond_for.message.#{@options[:controller_path]}.#{@options[:action_name]}.#{@type}"
37
- end
38
-
39
- def i18n_extra_paths
40
- [ :"respond_for.message.defaults.#{@options[:action_name]}.#{@type}",
41
- :"respond_for.message.#{@options[:controller_path]}.default.#{@type}",
42
- :"respond_for.message.defaults.default.#{@type}",
43
- '' ]
44
- end
45
- end
46
- end
47
- end
1
+ # frozen_string_literal: true
2
+
3
+ module RespondForHelper
4
+ module Flashes
5
+ class Base
6
+ def initialize(type, options = {})
7
+ @type = type
8
+ @options = options
9
+ end
10
+
11
+ def call
12
+ I18n.t("respond_for.format", **translations.merge(message: message))
13
+ end
14
+
15
+ private
16
+
17
+ def translations
18
+ format_keys.each_with_object({}) do |key, map|
19
+ map[key] = if @options[key]
20
+ I18n.t("respond_for.#{key}", value: @options[key], default: '')
21
+ else
22
+ ''
23
+ end
24
+ end
25
+ end
26
+
27
+ def format_keys
28
+ I18n.t("respond_for.format").scan(/\%\{(\w+)\}/).flatten.map(&:to_sym)
29
+ end
30
+
31
+ def message
32
+ @options[@type] || I18n.t(i18n_path, default: i18n_extra_paths)
33
+ end
34
+
35
+ def i18n_path
36
+ "respond_for.message.#{@options[:controller_path]}.#{@options[:action_name]}.#{@type}"
37
+ end
38
+
39
+ def i18n_extra_paths
40
+ [ :"respond_for.message.defaults.#{@options[:action_name]}.#{@type}",
41
+ :"respond_for.message.#{@options[:controller_path]}.default.#{@type}",
42
+ :"respond_for.message.defaults.default.#{@type}",
43
+ '' ]
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,61 +1,61 @@
1
- # frozen_string_literal: true
2
-
3
- module RespondForHelper
4
- module Formats
5
- class Base
6
- class_attribute :format
7
-
8
- attr_reader :controller, :item, :format, :result, :behaviour
9
- delegate :request, :render, :head, :redirect_to, :flash, :url_for, :action_name, to: :controller
10
-
11
- def initialize(controller, item, success, options)
12
- @controller = controller
13
- @item = item
14
- @result = success ? :success : :failure
15
- @options = options
16
-
17
- @format = self.class.format.to_sym
18
- @behaviour = Behaviours.new(@controller, @format, @result, @options).call
19
- end
20
-
21
- def call
22
- if respond_to?("_#{action_name}", true)
23
- send("_#{action_name}")
24
- else
25
- perform
26
- end
27
- end
28
-
29
- private
30
-
31
- def perform
32
- end
33
-
34
- def succeeded?
35
- @result == :success
36
- end
37
-
38
- def resolve_target(target)
39
- if target.respond_to?(:call)
40
- @controller.instance_exec(&target)
41
- elsif target.is_a?(Symbol)
42
- if respond_to?(target)
43
- send(target)
44
- elsif @behaviour.redirect?
45
- resolve_url(target)
46
- else
47
- target
48
- end
49
- else
50
- target
51
- end
52
- end
53
-
54
- def resolve_url(target)
55
- url_for(action: target)
56
- rescue ActionController::UrlGenerationError
57
- url_for(action: target, id: @item)
58
- end
59
- end
60
- end
61
- end
1
+ # frozen_string_literal: true
2
+
3
+ module RespondForHelper
4
+ module Formats
5
+ class Base
6
+ class_attribute :format
7
+
8
+ attr_reader :controller, :item, :format, :result, :behaviour
9
+ delegate :request, :render, :head, :redirect_to, :flash, :url_for, :action_name, to: :controller
10
+
11
+ def initialize(controller, item, success, options)
12
+ @controller = controller
13
+ @item = item
14
+ @result = success ? :success : :failure
15
+ @options = options
16
+
17
+ @format = self.class.format.to_sym
18
+ @behaviour = Behaviours.new(@controller, @format, @result, @options).call
19
+ end
20
+
21
+ def call
22
+ if respond_to?("_#{action_name}", true)
23
+ send("_#{action_name}")
24
+ else
25
+ perform
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def perform
32
+ end
33
+
34
+ def succeeded?
35
+ @result == :success
36
+ end
37
+
38
+ def resolve_target(target)
39
+ if target.respond_to?(:call)
40
+ @controller.instance_exec(&target)
41
+ elsif target.is_a?(Symbol)
42
+ if respond_to?(target)
43
+ send(target)
44
+ elsif @behaviour.redirect?
45
+ resolve_url(target)
46
+ else
47
+ target
48
+ end
49
+ else
50
+ target
51
+ end
52
+ end
53
+
54
+ def resolve_url(target)
55
+ url_for(action: target)
56
+ rescue ActionController::UrlGenerationError
57
+ url_for(action: target, id: @item)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,44 +1,55 @@
1
- # frozen_string_literal: true
2
-
3
- module RespondForHelper
4
- module Formats
5
- class Html < Base
6
- self.format = :html
7
-
8
- private
9
-
10
- def perform
11
- if @behaviour.flash? && !request.xhr?
12
- perform_flash
13
- end
14
-
15
- if @behaviour.render?
16
- perform_render
17
- elsif @behaviour.redirect?
18
- perform_redirect
19
- end
20
- end
21
-
22
- def perform_render
23
- render resolve_target(@behaviour.target), @behaviour.options
24
- end
25
-
26
- def perform_redirect
27
- redirect_to resolve_target(@behaviour.target), @behaviour.options
28
- end
29
-
30
- def perform_flash
31
- key = @behaviour.flash
32
- flash_content[key] = @controller.respond_for_message(key, @options)
33
- end
34
-
35
- def flash_content
36
- if @behaviour.render?
37
- flash.now
38
- elsif @behaviour.redirect?
39
- flash
40
- end
41
- end
42
- end
43
- end
44
- end
1
+ # frozen_string_literal: true
2
+
3
+ module RespondForHelper
4
+ module Formats
5
+ class Html < Base
6
+ self.format = :html
7
+
8
+ private
9
+
10
+ def perform
11
+ if @behaviour.flash? && !request.xhr?
12
+ perform_flash
13
+ end
14
+
15
+ if @behaviour.render?
16
+ perform_render
17
+ elsif @behaviour.redirect?
18
+ perform_redirect
19
+ end
20
+ end
21
+
22
+ def perform_render
23
+ render resolve_target(@behaviour.target), @behaviour.options
24
+ end
25
+
26
+ def perform_redirect
27
+ redirect_to resolve_target(@behaviour.target), @behaviour.options
28
+ end
29
+
30
+ def perform_flash
31
+ flash_content[@behaviour.flash] ||= flash_message
32
+ end
33
+
34
+ def flash_message
35
+ if @behaviour.flash_message.is_a?(Proc)
36
+ @controller.instance_exec(&@behaviour.flash_message)
37
+ elsif @behaviour.flash_message.is_a?(Symbol)
38
+ @controller.respond_for_message(@behaviour.flash_message, @options)
39
+ elsif @behaviour.flash_message.is_a?(String)
40
+ @behaviour.flash_message
41
+ else
42
+ @controller.respond_for_message(@behaviour.flash, @options)
43
+ end
44
+ end
45
+
46
+ def flash_content
47
+ if @behaviour.render?
48
+ flash.now
49
+ elsif @behaviour.redirect?
50
+ flash
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,31 +1,31 @@
1
- # frozen_string_literal: true
2
-
3
- module RespondForHelper
4
- module Formats
5
- class Json < Base
6
- self.format = :json
7
-
8
- def item_errors
9
- @item.errors
10
- end
11
-
12
- private
13
-
14
- def perform
15
- if @behaviour.render?
16
- perform_render
17
- elsif @behaviour.head?
18
- perform_head
19
- end
20
- end
21
-
22
- def perform_render
23
- render @behaviour.options.merge(json: resolve_target(@behaviour.target))
24
- end
25
-
26
- def perform_head
27
- head resolve_target(@behaviour.target), @behaviour.options
28
- end
29
- end
30
- end
31
- end
1
+ # frozen_string_literal: true
2
+
3
+ module RespondForHelper
4
+ module Formats
5
+ class Json < Base
6
+ self.format = :json
7
+
8
+ def item_errors
9
+ @item.errors
10
+ end
11
+
12
+ private
13
+
14
+ def perform
15
+ if @behaviour.render?
16
+ perform_render
17
+ elsif @behaviour.head?
18
+ perform_head
19
+ end
20
+ end
21
+
22
+ def perform_render
23
+ render @behaviour.options.merge(json: resolve_target(@behaviour.target))
24
+ end
25
+
26
+ def perform_head
27
+ head resolve_target(@behaviour.target), @behaviour.options
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RespondForHelper
4
- VERSION = '1.1.3'
4
+ VERSION = '1.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: respond_for_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshikazu Kaneta
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-17 00:00:00.000000000 Z
11
+ date: 2024-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails