flipper-ui 0.22.1 → 0.22.2

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: a619370e297b8fc379c57c8394cdfc798120ebfd9d4d091bc1902f3d9a2183be
4
- data.tar.gz: a36c5d0a79836aec62188c04f5954a506d737e110a135028b3fc7d9d889a2579
3
+ metadata.gz: b17af1c2cd05d9026a457941c46e7c497460e4289bd8446b90d2f0342e53f34c
4
+ data.tar.gz: 4adae31beca41aebaae69c9c3a0efe51bb024d0acc54eadf3982ddfff4a16748
5
5
  SHA512:
6
- metadata.gz: b02d0683b248297b59e6013f816a6f09bbde28889e38201e0f41c89d29118f06f16061749d55041a786daf81d2d67da8e88885033c4819233794dbd55df3ea8d
7
- data.tar.gz: 425e485bc419c1ae45554298df69a2d6cfdb4d2169fa2b0dc1b3e5e32009e5bafd27372796ab8a1bf3ac68dbc2d1be6a2474cbd7855b1d245fd61c8940e1cb81
6
+ metadata.gz: a8e0d113cb89d77c9e8cd0ec83d8deb7a26f3f6e00452aa81ab6a308843dfe45e069b0e1303374ece24e4a5bd79718958e160249db9195ea22249bab2df66a5d
7
+ data.tar.gz: cc5f6567f690c2bd48b762083046b19e868f4885384885667f20d808cd09f0533df5d3df5239e4a21cc649babbe231e494af984b5c1261b4ef9358b68581784a
@@ -25,19 +25,22 @@ module Flipper
25
25
  def post
26
26
  feature = flipper[feature_name]
27
27
  value = params['value'].to_s.strip
28
+ values = value.split(UI.configuration.actors_separator).map(&:strip).uniq
28
29
 
29
- if Util.blank?(value)
30
+ if values.empty?
30
31
  error = "#{value.inspect} is not a valid actor value."
31
32
  redirect_to("/features/#{feature.key}/actors?error=#{error}")
32
33
  end
33
34
 
34
- actor = Flipper::Actor.new(value)
35
+ values.each do |value|
36
+ actor = Flipper::Actor.new(value)
35
37
 
36
- case params['operation']
37
- when 'enable'
38
- feature.enable_actor actor
39
- when 'disable'
40
- feature.disable_actor actor
38
+ case params['operation']
39
+ when 'enable'
40
+ feature.enable_actor actor
41
+ when 'disable'
42
+ feature.disable_actor actor
43
+ end
41
44
  end
42
45
 
43
46
  redirect_to("/features/#{feature.key}")
@@ -44,6 +44,11 @@ module Flipper
44
44
  # Default false. Only works when using descriptions.
45
45
  attr_accessor :show_feature_description_in_list
46
46
 
47
+ # Public: What should be used to denote you are trying to add multiple
48
+ # actors at once (instead of just a single actor).
49
+ # Default is comma ",".
50
+ attr_accessor :actors_separator
51
+
47
52
  VALID_BANNER_CLASS_VALUES = %w(
48
53
  danger
49
54
  dark
@@ -68,6 +73,7 @@ module Flipper
68
73
  @add_actor_placeholder = "a flipper id"
69
74
  @descriptions_source = DEFAULT_DESCRIPTIONS_SOURCE
70
75
  @show_feature_description_in_list = false
76
+ @actors_separator = ','
71
77
  end
72
78
 
73
79
  def using_descriptions?
@@ -8,7 +8,7 @@
8
8
  <h4 class="card-header">Enable Actor for <%= @feature.key %></h4>
9
9
  <div class="card-body">
10
10
  <p>
11
- Turn on this feature for an individual actor.
11
+ Turn on this feature for actors.
12
12
  </p>
13
13
  <form action="<%= script_name %>/features/<%= @feature.key %>/actors" method="post" class="form-inline">
14
14
  <%== csrf_input_tag %>
@@ -130,8 +130,8 @@
130
130
  <%== csrf_input_tag %>
131
131
  <input type="hidden" name="operation" value="disable">
132
132
  <input type="hidden" name="value" value="<%= item %>">
133
- <button type="submit" value="Disable" class="btn btn-link btn-sm text-danger" data-toggle="tooltip" title="Disable <%= item %>" data-placement="left">
134
- <span class="octicon octicon-trashcan"></span>
133
+ <button type="submit" value="Disable" class="btn btn-outline-danger" data-toggle="tooltip" title="Disable <%= item %>" data-placement="left">
134
+ Remove
135
135
  </button>
136
136
  </form>
137
137
  </div>
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = '0.22.1'.freeze
2
+ VERSION = '0.22.2'.freeze
3
3
  end
@@ -45,6 +45,7 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
45
45
  describe 'POST /features/:feature/actors' do
46
46
  context 'enabling an actor' do
47
47
  let(:value) { 'User;6' }
48
+ let(:multi_value) { 'User;5, User;7, User;9, User;12' }
48
49
 
49
50
  before do
50
51
  post 'features/search/actors',
@@ -53,7 +54,18 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
53
54
  end
54
55
 
55
56
  it 'adds item to members' do
56
- expect(flipper[:search].actors_value).to include('User;6')
57
+ expect(flipper[:search].actors_value).to include(value)
58
+ end
59
+
60
+ it 'adds item to multiple members' do
61
+ post 'features/search/actors',
62
+ { 'value' => multi_value, 'operation' => 'enable', 'authenticity_token' => token },
63
+ 'rack.session' => session
64
+
65
+ expect(flipper[:search].actors_value).to include('User;5')
66
+ expect(flipper[:search].actors_value).to include('User;7')
67
+ expect(flipper[:search].actors_value).to include('User;9')
68
+ expect(flipper[:search].actors_value).to include('User;12')
57
69
  end
58
70
 
59
71
  it 'redirects back to feature' do
@@ -80,10 +92,22 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
80
92
 
81
93
  context 'value contains whitespace' do
82
94
  let(:value) { ' User;6 ' }
95
+ let(:multi_value) { ' User;5 , User;7 , User;9 , User;12 ' }
83
96
 
84
97
  it 'adds item without whitespace' do
85
98
  expect(flipper[:search].actors_value).to include('User;6')
86
99
  end
100
+
101
+ it 'adds item to multi members without whitespace' do
102
+ post 'features/search/actors',
103
+ { 'value' => multi_value, 'operation' => 'enable', 'authenticity_token' => token },
104
+ 'rack.session' => session
105
+
106
+ expect(flipper[:search].actors_value).to include('User;5')
107
+ expect(flipper[:search].actors_value).to include('User;7')
108
+ expect(flipper[:search].actors_value).to include('User;9')
109
+ expect(flipper[:search].actors_value).to include('User;12')
110
+ end
87
111
  end
88
112
 
89
113
  context 'for an invalid actor value' do
@@ -109,16 +133,29 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
109
133
 
110
134
  context 'disabling an actor' do
111
135
  let(:value) { 'User;6' }
136
+ let(:multi_value) { 'User;5, User;7, User;9, User;12' }
112
137
 
113
138
  before do
114
- flipper[:search].enable_actor Flipper::Actor.new('User;6')
139
+ flipper[:search].enable_actor Flipper::Actor.new(value)
115
140
  post 'features/search/actors',
116
141
  { 'value' => value, 'operation' => 'disable', 'authenticity_token' => token },
117
142
  'rack.session' => session
118
143
  end
119
144
 
120
145
  it 'removes item from members' do
121
- expect(flipper[:search].actors_value).not_to include('User;6')
146
+ expect(flipper[:search].actors_value).not_to include(value)
147
+ end
148
+
149
+ it 'removes item from multi members' do
150
+ multi_value.split(',').map(&:strip).each do |value|
151
+ flipper[:search].enable_actor Flipper::Actor.new(value)
152
+ end
153
+
154
+ post 'features/search/actors',
155
+ { 'value' => multi_value, 'operation' => 'disable', 'authenticity_token' => token },
156
+ 'rack.session' => session
157
+
158
+ expect(flipper[:search].actors_value).not_to eq(Set.new(multi_value.split(',').map(&:strip)))
122
159
  end
123
160
 
124
161
  it 'redirects back to feature' do
@@ -128,10 +165,21 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
128
165
 
129
166
  context 'value contains whitespace' do
130
167
  let(:value) { ' User;6 ' }
168
+ let(:multi_value) { ' User;5 , User;7 , User;9 , User;12 ' }
131
169
 
132
170
  it 'removes item without whitespace' do
133
171
  expect(flipper[:search].actors_value).not_to include('User;6')
134
172
  end
173
+
174
+ it 'removes item without whitespace' do
175
+ multi_value.split(',').map(&:strip).each do |value|
176
+ flipper[:search].enable_actor Flipper::Actor.new(value)
177
+ end
178
+ post 'features/search/actors',
179
+ { 'value' => multi_value, 'operation' => 'disable', 'authenticity_token' => token },
180
+ 'rack.session' => session
181
+ expect(flipper[:search].actors_value).not_to eq(Set.new(multi_value.split(',').map(&:strip)))
182
+ end
135
183
  end
136
184
  end
137
185
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.1
4
+ version: 0.22.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-23 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -56,14 +56,14 @@ dependencies:
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: 0.22.1
59
+ version: 0.22.2
60
60
  type: :runtime
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: 0.22.1
66
+ version: 0.22.2
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: erubi
69
69
  requirement: !ruby/object:Gem::Requirement