flame-flash 2.3.3 → 3.0.1.rc1

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
- SHA1:
3
- metadata.gz: 9f5d38ded2a6652b2a52e66b1106dc7ca1a9ef4a
4
- data.tar.gz: bf2f0f90d3197dc220be3ea4c79f0368398e6a1e
2
+ SHA256:
3
+ metadata.gz: 770daf991964e0a25952e4af521a31a2830dccd7ea1d363c4b19dca4bd61889e
4
+ data.tar.gz: 9b1bb4bcce4b6b9d67332e265b7b11ff03d5199320a194536c60ae591a42cc10
5
5
  SHA512:
6
- metadata.gz: 962a3d06b24372dff6c6e7e25c727048f67e3ddfbc1c8a90c74ca3dcea69e276f286d630052e0fc2b1046b3fa0bf7e47e12ca9146be963c78a1b4e0598ec5df6
7
- data.tar.gz: ecd21f4f4f8e9db3be37db04ebca8719b82a49c3a20b3afdb5872de8a42a31fc5bacf8ba60825e8044ad338bf4387179348cae940a0b78471950975adee6cbf1
6
+ metadata.gz: b9cc0dbd38c1de71cb1089342371cd8cf329b49e25d7bea25cf3b005ded22a783fd85b26aa5aa5d33214b5e7d798a9edfcc2c0bbea7c66eac8ced81fb567f516
7
+ data.tar.gz: 24d38202f36ac1c08d34d165e3e9f870f936aceb68cfdaf37e26a9a9c426baf297665d51305f505907f82c05587582217109fb5851d8f6746f6677aa2a3eedb2
data/CHANGELOG.md ADDED
@@ -0,0 +1,79 @@
1
+ # Changelog
2
+
3
+ ## master (unreleased)
4
+
5
+ ## 3.0.1.rc1 (2021-04-16)
6
+
7
+ * Support Flame 5
8
+ * Forward flashes on redirect
9
+ * Replace `Array` check with `Enumerable`
10
+ * Take flashes only from reserved keys (error, warning, notice) or `flash` key
11
+ Don't extract parameters for controller's path as flashes.
12
+ Reference: <http://guides.rubyonrails.org/action_controller_overview.html#the-flash>
13
+ * Change `FlashArray` to `FlashObject` with `now` and `next` as `FlashArray`
14
+ * Add `FlashArray#delete` method
15
+ * Fix calls of redefined `view` without parameters
16
+ * Make `execute` and methods below `protected`
17
+ * Make `FlashObject` private, test `Flame::Flash` better.
18
+ * Remove `flash.scope` method.
19
+ It was taken not from Rails, but from (abandoned) `sinatra-flash`.
20
+ But we can add it later in more correct way if somebody's needing!
21
+ * Fix requiring by `path` in `Gemfile`
22
+ * Drop Ruby 2.3 and 2.4 support (after Flame)
23
+ * Support Ruby 3.
24
+ * Add MIT license file
25
+ * Add tests, 100% coverage
26
+ * Fix RuboCop warnings, and RuboCop configuration file
27
+ With `rubocop-performance` and `rubocop-rspec`.
28
+ * Improve documentation of methods
29
+ * Add Cirrus CI
30
+ * Add `remark` CI task.
31
+ * Replace `rake` with `toys`.
32
+ * Update development dependencies.
33
+ * Add more meta-information to gem specs.
34
+ * Add "Development", "Contributing" and "License" sections to README.
35
+ * Add CHANGELOG file.
36
+ * Move gem version to a separate file (and constant).
37
+
38
+ ## 2.3.3 (2016-11-16)
39
+
40
+ * Flashes extracting fixed for `params` key
41
+ * Migrate from GitLab to GitHub
42
+
43
+ ## 2.3.2 (2016-08-09)
44
+
45
+ * Fixed `fix_messages_as_array` method
46
+
47
+ ## 2.3.1 (2016-03-11)
48
+
49
+ * Trying to fix messages as `Array`
50
+
51
+ ## 2.3.0 (2016-03-11)
52
+
53
+ * Capture `halt` method and take out flash-recording to private method
54
+ * Adding ability to add `Array` as many flashes
55
+
56
+ ## 2.2.0 (2016-02-11)
57
+
58
+ * Allowing assign array to `FlashArray`
59
+
60
+ ## 2.1.1 (2016-02-04)
61
+
62
+ * Support `String` redirects
63
+
64
+ ## 2.1.0 (2016-02-02)
65
+
66
+ * Add flash-options for redirect method of controller
67
+
68
+ ## 2.0.0 (2016-01-29)
69
+
70
+ * Support Flame 4.0
71
+
72
+ ## 1.0.1 (2015-12-10)
73
+
74
+ * Add `flame` as runtime dependency
75
+ * Update after-hook for Flame 3.3.4
76
+
77
+ ## 1.0.0 (2015-12-07)
78
+
79
+ * Initial release.
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2015 Alexander Popov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # Flame Flash
2
+
3
+ [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/AlexWayfer/flame-flash?style=flat-square)](https://cirrus-ci.com/github/AlexWayfer/flame-flash)
4
+ [![Codecov branch](https://img.shields.io/codecov/c/github/AlexWayfer/flame-flash/master.svg?style=flat-square)](https://codecov.io/gh/AlexWayfer/flame-flash)
5
+ [![Code Climate](https://img.shields.io/codeclimate/maintainability/AlexWayfer/flame-flash.svg?style=flat-square)](https://codeclimate.com/github/AlexWayfer/flame-flash)
6
+ ![Depfu](https://img.shields.io/depfu/AlexWayfer/flame-flash?style=flat-square)
7
+ [![Inline docs](https://inch-ci.org/github/AlexWayfer/flame-flash.svg?branch=master)](https://inch-ci.org/github/AlexWayfer/flame-flash)
8
+ [![license](https://img.shields.io/github/license/AlexWayfer/flame-flash.svg?style=flat-square)](https://github.com/AlexWayfer/flame-flash/blob/master/LICENSE.txt)
9
+ [![Gem](https://img.shields.io/gem/v/flame-flash.svg?style=flat-square)](https://rubygems.org/gems/flame-flash)
10
+
11
+ [Flashes](http://guides.rubyonrails.org/action_controller_overview.html#the-flash)
12
+ for [Flame](https://github.com/AlexWayfer/flame).
13
+
14
+ ## Usage
15
+
16
+ ```ruby
17
+ # Gemfile
18
+ gem 'flame-flash'
19
+
20
+ # config.ru
21
+ require 'flame-flash' # or `Bundler.require`
22
+
23
+ # _controller.rb
24
+ include Flame::Flash
25
+ ```
26
+
27
+ ```erb
28
+ <!-- layout.html.erb -->
29
+
30
+ <%
31
+ %i[error warning notice].each do |type|
32
+ flash[type].each do |text|
33
+ %>
34
+ <p class="flash <%= type %>">
35
+ <%= text %>
36
+ </p>
37
+ <%
38
+ end
39
+ end
40
+ %>
41
+ ```
42
+
43
+ ## Examples
44
+
45
+ ```ruby
46
+ class PostsController < Flame::Controller
47
+ def update
48
+ flash[:error] = "You don't have permissions"
49
+ redirect :show
50
+ end
51
+
52
+ def delete
53
+ redirect :show, notice: 'Deleted'
54
+ end
55
+
56
+ def move
57
+ redirect :index, flash: { success: 'Moved' }
58
+ end
59
+
60
+ def create
61
+ flash.now[:error] = 'Not enought permissions'
62
+ view :new
63
+ end
64
+ end
65
+ ```
66
+
67
+ ### Reserved keys
68
+
69
+ * `error`
70
+ * `warning`
71
+ * `notice`
72
+
73
+ ## Development
74
+
75
+ After checking out the repo, run `bundle install` to install dependencies.
76
+
77
+ Then, run `toys rspec` to run the tests.
78
+
79
+ To install this gem onto your local machine, run `toys gem install`.
80
+
81
+ To release a new version, run `toys gem release %version%`.
82
+ See how it works [here](https://github.com/AlexWayfer/gem_toys#release).
83
+
84
+ ## Contributing
85
+
86
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/AlexWayfer/flame-flash).
87
+
88
+ ## License
89
+
90
+ The gem is available as open source under the terms of the
91
+ [MIT License](https://opensource.org/licenses/MIT).
data/lib/flame/flash.rb CHANGED
@@ -1,8 +1,17 @@
1
- require_relative 'flash_array'
1
+ # frozen_string_literal: true
2
+
3
+ require 'gorilla_patch/deep_dup'
4
+ require 'gorilla_patch/slice'
5
+
6
+ require_relative 'flash/version'
7
+
8
+ require_relative 'flash/flash_object'
2
9
 
3
10
  module Flame
4
11
  # Module for Flame::Flash extension with helper methods and base class
5
12
  module Flash
13
+ protected
14
+
6
15
  ## After hook
7
16
  def execute(method)
8
17
  super
@@ -10,21 +19,32 @@ module Flame
10
19
  end
11
20
 
12
21
  ## Upgrade redirect method
22
+ ## TODO: write `@see`
13
23
  ## @example Redirect to show method of Articles controller with error
14
24
  ## redirect ArticlesController, :show, id: 2, error: 'Access required'
15
25
  def redirect(*args)
16
- if args.last.is_a? Hash
17
- if args[0].is_a? String
18
- flashes = args.pop
19
- else
20
- args[-1], flashes = extract_flashes(args)
21
- end
22
- flash.merge(flashes)
23
- end
24
- super
26
+ args, flashes = extract_flashes_for_redirect(args)
27
+ flash.merge flashes
28
+ flash.next.concat(flash.now) ## for multiple redirects
29
+ super(*args)
30
+ end
31
+
32
+ ## Upgrade view method
33
+ ## TODO: write `@see`
34
+ ## @example Render view with error
35
+ ## view :show, error: 'Access required'
36
+ def view(path = nil, options = {}, &block)
37
+ options, flashes = extract_flashes(options)
38
+ flash.now.merge flashes
39
+ super(
40
+ path || caller_locations(1, 1)[0].label.to_sym,
41
+ options,
42
+ &block
43
+ )
25
44
  end
26
45
 
27
- ## Capture halt method
46
+ ## Record flashes before halting
47
+ ## TODO: write `@see`
28
48
  def halt(*args)
29
49
  record_flashes
30
50
  super
@@ -33,21 +53,36 @@ module Flame
33
53
  private
34
54
 
35
55
  ## Main helper method
36
- def flash(key = nil)
37
- (
38
- @flash ||= FlashArray.new(
39
- (session ? session[:flash] : [])
40
- )
41
- ).scope(key)
56
+ def flash
57
+ @flash ||= FlashObject.new(
58
+ (session ? session[:flash] : [])
59
+ )
42
60
  end
43
61
 
62
+ RESERVED_FLASH_KEYS = %i[error warning notice].freeze
63
+
64
+ using GorillaPatch::DeepDup
65
+ using GorillaPatch::Slice
66
+
44
67
  ## Split Hash-argument to parameters and flashes
45
- def extract_flashes(args)
68
+ def extract_flashes(options)
69
+ options = options.deep_dup
70
+ flashes = options.delete(:flash) { {} }
71
+ ## Yeah, `RESERVED_FLASH_KEYS` will be deleted from `options`
72
+ ## and will not be passed into parent's `redirect` or `view`.
73
+ ## But I don't see a problem cause of it for now.
74
+ ## If you see - please, send a PR, or create an issue.
75
+ flashes.merge! options.slice_reverse!(*RESERVED_FLASH_KEYS)
76
+ [options, flashes]
77
+ end
78
+
79
+ def extract_flashes_for_redirect(args)
80
+ return [args, {}] unless args.last.is_a? Hash
81
+ return [args, args.pop] if args.first.is_a?(String)
82
+
46
83
  add_controller_class(args)
47
- parameters = args[0].instance_method(args[1]).parameters.map(&:last)
48
- args.last.partition do |key, _value|
49
- parameters.include?(key) || key == :params
50
- end.map(&:to_h)
84
+ options, flashes = extract_flashes(args.last)
85
+ [args[0..-2].push(options), flashes]
51
86
  end
52
87
 
53
88
  ## Move flash.next to session
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Flame
4
+ ## https://github.com/bbatsov/rubocop/issues/5831
5
+ module Flash
6
+ ## Just contains flashes
7
+ class FlashArray
8
+ ## Initialize Flash Array from regular Array
9
+ ## @param array [Array<Hash>] initial Array with raw data
10
+ def initialize(array = [])
11
+ @array = []
12
+ concat(array)
13
+ end
14
+
15
+ ## Go through internal Array
16
+ def each(&block)
17
+ @array.each(&block)
18
+ end
19
+
20
+ ## Write text by type
21
+ def push(type, text)
22
+ if text.is_a?(Enumerable)
23
+ text.each { |el| push(type, el) }
24
+ return
25
+ end
26
+ hash = { type: type, text: text }
27
+ @array.push(hash)
28
+ end
29
+
30
+ alias []= push
31
+
32
+ ## Delete text in type
33
+ def delete(type, text)
34
+ @array.delete(type: type, text: text)
35
+ end
36
+
37
+ ## Select values by text or type
38
+ def select(**options)
39
+ @array.select do |hash|
40
+ options.reject { |key, val| hash[key] == val || val.nil? }.empty?
41
+ end
42
+ end
43
+
44
+ ## Concat with other Array-like
45
+ def concat(array)
46
+ array.each do |hash|
47
+ push(hash[:type], hash[:text])
48
+ end
49
+ end
50
+
51
+ ## Merge with other Hash-like
52
+ def merge(hash)
53
+ hash.each { |type, text| self[type] = text }
54
+ end
55
+
56
+ ## Return internal Array
57
+ def to_a
58
+ @array
59
+ end
60
+ end
61
+
62
+ private_constant :FlashArray
63
+ end
64
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'flash_array'
4
+
5
+ module Flame
6
+ ## https://github.com/bbatsov/rubocop/issues/5831
7
+ module Flash
8
+ ## Contains info about current and next flashes
9
+ class FlashObject
10
+ attr_reader :now, :next
11
+
12
+ ## Initialize Flash Object with specific session
13
+ ## @param session [Rack::Session::Abstract::Persisted] Rack's session convertible to an Array
14
+ def initialize(session)
15
+ @now = FlashArray.new(session.to_a)
16
+ @next = FlashArray.new
17
+ end
18
+
19
+ ## Add entry with type and text
20
+ def []=(type, text)
21
+ self.next.push type, text
22
+ end
23
+
24
+ ## Get entries by type
25
+ def [](type = nil)
26
+ now.select(type: type).map { |hash| hash[:text] }
27
+ end
28
+
29
+ ## Mass adding to next
30
+ def merge(hash)
31
+ hash.each { |type, text| self[type] = text }
32
+ end
33
+ end
34
+
35
+ private_constant :FlashObject
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Flame
4
+ module Flash
5
+ VERSION = '3.0.1.rc1'
6
+ end
7
+ end
metadata CHANGED
@@ -1,50 +1,234 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flame-flash
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.3
4
+ version: 3.0.1.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Popov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-16 00:00:00.000000000 Z
11
+ date: 2021-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: flame
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0.rc6
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 5.0.0.rc6
30
+ - - "<"
18
31
  - !ruby/object:Gem::Version
19
- version: '4.6'
32
+ version: '6'
33
+ - !ruby/object:Gem::Dependency
34
+ name: gorilla_patch
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
20
37
  - - ">="
21
38
  - !ruby/object:Gem::Version
22
- version: 4.6.0
39
+ version: '1'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
23
43
  type: :runtime
24
44
  prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '1'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5'
53
+ - !ruby/object:Gem::Dependency
54
+ name: pry-byebug
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '3.9'
60
+ type: :development
61
+ prerelease: false
25
62
  version_requirements: !ruby/object:Gem::Requirement
26
63
  requirements:
27
64
  - - "~>"
28
65
  - !ruby/object:Gem::Version
29
- version: '4.6'
30
- - - ">="
66
+ version: '3.9'
67
+ - !ruby/object:Gem::Dependency
68
+ name: bundler
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '2.0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '2.0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: gem_toys
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: 0.8.0
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: 0.8.0
95
+ - !ruby/object:Gem::Dependency
96
+ name: toys
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 0.11.4
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: 0.11.4
109
+ - !ruby/object:Gem::Dependency
110
+ name: codecov
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
31
114
  - !ruby/object:Gem::Version
32
- version: 4.6.0
33
- description: Show messages (notifies, errors, warnings) in current or next routes
115
+ version: 0.5.0
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 0.5.0
123
+ - !ruby/object:Gem::Dependency
124
+ name: rack-test
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '1.0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: rspec
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '3.9'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '3.9'
151
+ - !ruby/object:Gem::Dependency
152
+ name: simplecov
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: 0.21.2
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: 0.21.2
165
+ - !ruby/object:Gem::Dependency
166
+ name: rubocop
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: '1.4'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - "~>"
177
+ - !ruby/object:Gem::Version
178
+ version: '1.4'
179
+ - !ruby/object:Gem::Dependency
180
+ name: rubocop-performance
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - "~>"
184
+ - !ruby/object:Gem::Version
185
+ version: '1.0'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '1.0'
193
+ - !ruby/object:Gem::Dependency
194
+ name: rubocop-rspec
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '2.0'
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - "~>"
205
+ - !ruby/object:Gem::Version
206
+ version: '2.0'
207
+ description: 'Show messages (notifies, errors, warnings) in current or next routes
34
208
  after redirect.
209
+
210
+ '
35
211
  email:
36
212
  - alex.wayfer@gmail.com
37
213
  executables: []
38
214
  extensions: []
39
215
  extra_rdoc_files: []
40
216
  files:
217
+ - CHANGELOG.md
218
+ - LICENSE.txt
219
+ - README.md
41
220
  - lib/flame/flash.rb
42
- - lib/flame/flash_array.rb
221
+ - lib/flame/flash/flash_array.rb
222
+ - lib/flame/flash/flash_object.rb
223
+ - lib/flame/flash/version.rb
43
224
  homepage: https://github.com/AlexWayfer/flame-flash
44
225
  licenses:
45
226
  - MIT
46
- metadata: {}
47
- post_install_message:
227
+ metadata:
228
+ source_code_uri: https://github.com/AlexWayfer/flame-flash
229
+ homepage_uri: https://github.com/AlexWayfer/flame-flash
230
+ changelog_uri: https://github.com/AlexWayfer/flame-flash/blob/master/CHANGELOG.md
231
+ post_install_message:
48
232
  rdoc_options: []
49
233
  require_paths:
50
234
  - lib
@@ -52,16 +236,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
52
236
  requirements:
53
237
  - - ">="
54
238
  - !ruby/object:Gem::Version
55
- version: '0'
239
+ version: '2.5'
240
+ - - "<"
241
+ - !ruby/object:Gem::Version
242
+ version: '4'
56
243
  required_rubygems_version: !ruby/object:Gem::Requirement
57
244
  requirements:
58
- - - ">="
245
+ - - ">"
59
246
  - !ruby/object:Gem::Version
60
- version: '0'
247
+ version: 1.3.1
61
248
  requirements: []
62
- rubyforge_project:
63
- rubygems_version: 2.5.1
64
- signing_key:
249
+ rubygems_version: 3.2.15
250
+ signing_key:
65
251
  specification_version: 4
66
252
  summary: Flash plugin for Flame-framework
67
253
  test_files: []
@@ -1,73 +0,0 @@
1
- module Flame
2
- module Flash
3
- # A subclass of Array that "remembers forward" by exactly one action.
4
- # Tastes just like the API of Rails's ActionController::Flash::FlashHash,
5
- # but with fewer calories.
6
- class FlashArray
7
- attr_reader :now, :next
8
-
9
- # Builds a new FlashHash. It takes the hash for this action's values
10
- # as an initialization variable.
11
- def initialize(session, parent = nil, scope = nil)
12
- @now = session || []
13
- fix_messages_as_array
14
- @next = []
15
- @parent = parent || self
16
- @scope = scope
17
- end
18
-
19
- def scope(scope = nil)
20
- # p 'scope', scope
21
- return self unless scope
22
- self.class.new(
23
- @now.select { |hash| condition(hash, scope: scope) },
24
- self,
25
- scope
26
- )
27
- end
28
-
29
- # We assign to the _next_ hash, but retrieve values
30
- # from the _now_ hash. Freaky, huh?
31
- def []=(type, text)
32
- return text.each { |el| self[type] = el } if text.is_a?(Array)
33
- hash = { type: type, text: text }
34
- # p @parent == self, @scope
35
- hash[:scope] = @scope if @parent != self
36
- # p hash
37
- @parent.next.push(hash)
38
- # p @parent.next
39
- end
40
-
41
- def [](type = nil)
42
- selected = @parent.now.select do |hash|
43
- condition(hash, type: type, scope: @scope)
44
- end
45
- # p 'flash[]', type, @scope, selected
46
- selected.map { |hash| hash[:text] }
47
- end
48
-
49
- def each(&block)
50
- @now.each(&block)
51
- end
52
-
53
- ## Mass adding to next
54
- def merge(hash)
55
- hash.each { |type, text| self[type] = text }
56
- end
57
-
58
- private
59
-
60
- def condition(hash, options = {}) # kind, section)
61
- options.reject { |key, val| hash[key] == val || val.nil? }.empty?
62
- end
63
-
64
- def fix_messages_as_array
65
- @now.each_with_index do |hash, ind|
66
- next unless hash[:text].is_a?(Array)
67
- hash = @now.delete(hash)
68
- @now.insert(ind, hash[:text].map { |text| hash.merge(text: text) })
69
- end
70
- end
71
- end
72
- end
73
- end