flipper-ui 0.25.3 → 0.25.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/ui/read_only.ru +43 -0
- data/lib/flipper/ui/action.rb +12 -0
- data/lib/flipper/ui/actions/actors_gate.rb +2 -0
- data/lib/flipper/ui/actions/add_feature.rb +2 -0
- data/lib/flipper/ui/actions/boolean_gate.rb +2 -0
- data/lib/flipper/ui/actions/feature.rb +2 -0
- data/lib/flipper/ui/actions/features.rb +2 -0
- data/lib/flipper/ui/actions/groups_gate.rb +2 -0
- data/lib/flipper/ui/actions/percentage_of_actors_gate.rb +2 -0
- data/lib/flipper/ui/actions/percentage_of_time_gate.rb +2 -0
- data/lib/flipper/ui/configuration.rb +6 -0
- data/lib/flipper/ui/views/feature.erb +135 -108
- data/lib/flipper/ui/views/features.erb +3 -3
- data/lib/flipper/ui/views/read_only.erb +3 -0
- data/lib/flipper/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8387d32b596eda073c7289c8ce794fb8badbe43e5f235ef2032106cb9968089
|
4
|
+
data.tar.gz: c767b97195e28a665a483a63d310c216e09175866826c2e16e501488849b469d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bea51d75cc9e66dceb9287e50b0868a501355cacf54253031f017e307f2eeefe2b680b40e49a2d5d917a216a33daeecf03177f8330292742cf4ceb9dc6882e84
|
7
|
+
data.tar.gz: 29d04be79be90455fa4c9fd6c450b3cfddbcaf7f068a4d35d134c63b25811e87198bc273dd6525b78185363738759629a2ddcbd62dca504b2ad1b0b5631a3101
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# Usage:
|
3
|
+
# # if you want it to not reload and be really fast
|
4
|
+
# bin/rackup examples/ui/read_only.ru -p 9999
|
5
|
+
#
|
6
|
+
# # if you want reloading
|
7
|
+
# bin/shotgun examples/ui/read_only.ru -p 9999
|
8
|
+
#
|
9
|
+
# http://localhost:9999/
|
10
|
+
#
|
11
|
+
require 'bundler/setup'
|
12
|
+
require "flipper/ui"
|
13
|
+
require "flipper/adapters/pstore"
|
14
|
+
|
15
|
+
Flipper.register(:admins) { |actor|
|
16
|
+
actor.respond_to?(:admin?) && actor.admin?
|
17
|
+
}
|
18
|
+
|
19
|
+
Flipper.register(:early_access) { |actor|
|
20
|
+
actor.respond_to?(:early?) && actor.early?
|
21
|
+
}
|
22
|
+
|
23
|
+
Flipper::UI.configure do |config|
|
24
|
+
config.banner_text = 'Read only mode.'
|
25
|
+
config.banner_class = 'danger'
|
26
|
+
config.read_only = true
|
27
|
+
end
|
28
|
+
|
29
|
+
# You can uncomment these to get some default data:
|
30
|
+
# Flipper.enable(:search_performance_another_long_thing)
|
31
|
+
# Flipper.disable(:gauges_tracking)
|
32
|
+
# Flipper.disable(:unused)
|
33
|
+
# Flipper.enable_actor(:suits, Flipper::Actor.new('1'))
|
34
|
+
# Flipper.enable_actor(:suits, Flipper::Actor.new('6'))
|
35
|
+
# Flipper.enable_group(:secrets, :admins)
|
36
|
+
# Flipper.enable_group(:secrets, :early_access)
|
37
|
+
# Flipper.enable_percentage_of_time(:logging, 5)
|
38
|
+
# Flipper.enable_percentage_of_actors(:new_cache, 15)
|
39
|
+
# Flipper.add("a/b")
|
40
|
+
|
41
|
+
run Flipper::UI.app { |builder|
|
42
|
+
builder.use Rack::Session::Cookie, secret: "_super_secret"
|
43
|
+
}
|
data/lib/flipper/ui/action.rb
CHANGED
@@ -271,6 +271,18 @@ module Flipper
|
|
271
271
|
VALID_REQUEST_METHOD_NAMES.include?(request_method_name)
|
272
272
|
end
|
273
273
|
|
274
|
+
# Internal: Method to call when the UI is in read only mode and you want
|
275
|
+
# to inform people of that fact.
|
276
|
+
def read_only
|
277
|
+
status 403
|
278
|
+
|
279
|
+
breadcrumb 'Home', '/'
|
280
|
+
breadcrumb 'Features', '/features'
|
281
|
+
breadcrumb 'Noooooope'
|
282
|
+
|
283
|
+
halt view_response(:read_only)
|
284
|
+
end
|
285
|
+
|
274
286
|
def bootstrap_css
|
275
287
|
SOURCES[:bootstrap_css]
|
276
288
|
end
|
@@ -8,6 +8,11 @@ module Flipper
|
|
8
8
|
attr_accessor :banner_text,
|
9
9
|
:banner_class
|
10
10
|
|
11
|
+
# Public: Is the UI in read only mode or not. Default is false. This
|
12
|
+
# supersedes all other write-related options such as
|
13
|
+
# (feature_creation_enabled and feature_removal_enabled).
|
14
|
+
attr_accessor :read_only
|
15
|
+
|
11
16
|
# Public: If you set this, the UI will always have a first breadcrumb that
|
12
17
|
# says "App" which points to this href. The href can be a path (ie: "/")
|
13
18
|
# or full url ("https://app.example.com/").
|
@@ -79,6 +84,7 @@ module Flipper
|
|
79
84
|
@show_feature_description_in_list = false
|
80
85
|
@actors_separator = ','
|
81
86
|
@confirm_fully_enable = false
|
87
|
+
@read_only = false
|
82
88
|
end
|
83
89
|
|
84
90
|
def using_descriptions?
|
@@ -40,20 +40,22 @@
|
|
40
40
|
</strong>
|
41
41
|
</h6>
|
42
42
|
</div>
|
43
|
-
|
44
|
-
<
|
45
|
-
|
46
|
-
|
47
|
-
<
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
<
|
56
|
-
|
43
|
+
<% unless Flipper::UI.configuration.read_only %>
|
44
|
+
<div class="col col-auto toggle-block-when-off">
|
45
|
+
<button class="btn btn-outline-secondary js-toggle-trigger" data-toggle="collapse" data-target="#add-actor">Add an actor</button>
|
46
|
+
</div>
|
47
|
+
<div class="col toggle-block-when-on">
|
48
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/actors" method="post" class="form-inline">
|
49
|
+
<%== csrf_input_tag %>
|
50
|
+
<input type="hidden" name="operation" value="enable">
|
51
|
+
<input type="text" name="value" placeholder="<%= Flipper::UI.configuration.add_actor_placeholder %>" class="form-control form-control-sm mr-sm-2 mb-2 mb-sm-0">
|
52
|
+
<input type="submit" value="Add Actor" class="btn btn-sm btn-light">
|
53
|
+
</form>
|
54
|
+
</div>
|
55
|
+
<div class="col col-auto toggle-block-when-on">
|
56
|
+
<button type="button" class="btn btn-outline-secondary js-toggle-trigger">Cancel</button>
|
57
|
+
</div>
|
58
|
+
<% end %>
|
57
59
|
</div>
|
58
60
|
</div>
|
59
61
|
|
@@ -65,14 +67,16 @@
|
|
65
67
|
<h6 class="m-0"><%= item %></h6>
|
66
68
|
</div>
|
67
69
|
<div class="col col-auto">
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
70
|
+
<% unless Flipper::UI.configuration.read_only %>
|
71
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/actors" method="post">
|
72
|
+
<%== csrf_input_tag %>
|
73
|
+
<input type="hidden" name="operation" value="disable">
|
74
|
+
<input type="hidden" name="value" value="<%= item %>">
|
75
|
+
<button type="submit" value="Disable" class="btn btn-outline-danger" data-toggle="tooltip" title="Disable <%= item %>" data-placement="left">
|
76
|
+
Remove
|
77
|
+
</button>
|
78
|
+
</form>
|
79
|
+
<% end %>
|
76
80
|
</div>
|
77
81
|
</div>
|
78
82
|
</div>
|
@@ -92,29 +96,31 @@
|
|
92
96
|
</strong>
|
93
97
|
</h6>
|
94
98
|
</div>
|
95
|
-
|
96
|
-
<
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
<
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
<
|
117
|
-
|
99
|
+
<% unless Flipper::UI.configuration.read_only %>
|
100
|
+
<div class="col col-auto toggle-block-when-off">
|
101
|
+
<button class="btn btn-outline-secondary js-toggle-trigger" data-toggle="collapse" data-target="#add-actor">Add a group</button>
|
102
|
+
</div>
|
103
|
+
<div class="col collapse toggle-block-when-on">
|
104
|
+
<% if @feature.disabled_groups.empty? %>
|
105
|
+
All groups enabled.
|
106
|
+
<% else %>
|
107
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/groups" method="post" class="form-inline">
|
108
|
+
<%== csrf_input_tag %>
|
109
|
+
<input type="hidden" name="operation" value="enable">
|
110
|
+
<select name="value" class="form-control form-control-sm mr-sm-2 mb-2 mb-sm-0">
|
111
|
+
<option value="">Select a group...</option>
|
112
|
+
<% @feature.disabled_groups.each do |group| %>
|
113
|
+
<option value="<%= group.name %>"><%= group.name %></option>
|
114
|
+
<% end %>
|
115
|
+
</select>
|
116
|
+
<input type="submit" value="Add Group" class="btn btn-sm btn-light btn">
|
117
|
+
</form>
|
118
|
+
<% end %>
|
119
|
+
</div>
|
120
|
+
<div class="col col-auto toggle-block-when-on">
|
121
|
+
<button type="button" class="btn btn-outline-secondary js-toggle-trigger">Cancel</button>
|
122
|
+
</div>
|
123
|
+
<% end %>
|
118
124
|
</div>
|
119
125
|
</div>
|
120
126
|
|
@@ -126,14 +132,16 @@
|
|
126
132
|
<h6 class="m-0"><%= item %></h6>
|
127
133
|
</div>
|
128
134
|
<div class="col col-auto">
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
135
|
+
<% unless Flipper::UI.configuration.read_only %>
|
136
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/groups" method="post">
|
137
|
+
<%== csrf_input_tag %>
|
138
|
+
<input type="hidden" name="operation" value="disable">
|
139
|
+
<input type="hidden" name="value" value="<%= item %>">
|
140
|
+
<button type="submit" value="Disable" class="btn btn-outline-danger" data-toggle="tooltip" title="Disable <%= item %>" data-placement="left">
|
141
|
+
Remove
|
142
|
+
</button>
|
143
|
+
</form>
|
144
|
+
<% end %>
|
137
145
|
</div>
|
138
146
|
</div>
|
139
147
|
</div>
|
@@ -146,36 +154,40 @@
|
|
146
154
|
<div class="col col-mr-auto">
|
147
155
|
<h6 class="m-0"><strong class="<%= "text-muted" unless @feature.percentage_of_actors_value > 0 %>">Enabled for <%= @feature.percentage_of_actors_value %>% of actors</strong></h6>
|
148
156
|
</div>
|
149
|
-
|
150
|
-
<
|
151
|
-
|
152
|
-
|
153
|
-
<
|
154
|
-
|
157
|
+
<% unless Flipper::UI.configuration.read_only %>
|
158
|
+
<div class="col col-auto toggle-block-when-off">
|
159
|
+
<button class="btn btn-outline-secondary js-toggle-trigger">Edit</button>
|
160
|
+
</div>
|
161
|
+
<div class="col col-auto toggle-block-when-on">
|
162
|
+
<button class="btn btn-outline-secondary js-toggle-trigger">Hide</button>
|
163
|
+
</div>
|
164
|
+
<% end %>
|
155
165
|
</div>
|
156
166
|
</div>
|
157
167
|
|
158
|
-
|
159
|
-
<div class="
|
160
|
-
<div class="
|
161
|
-
<
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
<
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
168
|
+
<% unless Flipper::UI.configuration.read_only %>
|
169
|
+
<div class="card-body border-bottom toggle-block-when-on bg-lightest">
|
170
|
+
<div class="row">
|
171
|
+
<div class="col-12 col-md-6 mb-3 mb-md-0">
|
172
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_actors" method="post">
|
173
|
+
<%== csrf_input_tag %>
|
174
|
+
<div class="btn-group">
|
175
|
+
<% @percentages.each do |number| %>
|
176
|
+
<input type="submit" name="value" value="<%= number %>%" class="btn btn-light btn-sm" <% if number == @feature.percentage_of_actors_value %>disabled<% end %>>
|
177
|
+
<% end %>
|
178
|
+
</div>
|
179
|
+
</form>
|
180
|
+
</div>
|
181
|
+
<div class="col-12 col-md-6">
|
182
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_actors" method="post" class="form-inline">
|
183
|
+
<%== csrf_input_tag %>
|
184
|
+
<input type="text" name="value" <% if @feature.percentage_of_actors_value > 0 %>value="<%= @feature.percentage_of_actors_value %>"<% end %> placeholder="custom (26, 32, etc.)" class="form-control form-control-sm mr-sm-2 mb-2 mb-md-0">
|
185
|
+
<input type="submit" name="action" value="Save" class="btn btn-light btn-sm">
|
186
|
+
</form>
|
187
|
+
</div>
|
176
188
|
</div>
|
177
189
|
</div>
|
178
|
-
|
190
|
+
<% end %>
|
179
191
|
</div>
|
180
192
|
|
181
193
|
<%# % of Time %>
|
@@ -185,36 +197,40 @@
|
|
185
197
|
<div class="col col-mr-auto">
|
186
198
|
<h6 class="m-0"><strong class="<%= "text-muted" unless @feature.percentage_of_time_value > 0 %>">Enabled for <%= @feature.percentage_of_time_value %>% of time</strong></h6>
|
187
199
|
</div>
|
188
|
-
|
189
|
-
<
|
190
|
-
|
191
|
-
|
192
|
-
<
|
193
|
-
|
200
|
+
<% unless Flipper::UI.configuration.read_only %>
|
201
|
+
<div class="col col-auto toggle-block-when-off">
|
202
|
+
<button class="btn btn-outline-secondary js-toggle-trigger">Edit</button>
|
203
|
+
</div>
|
204
|
+
<div class="col col-auto toggle-block-when-on">
|
205
|
+
<button class="btn btn-outline-secondary js-toggle-trigger">Hide</button>
|
206
|
+
</div>
|
207
|
+
<% end %>
|
194
208
|
</div>
|
195
209
|
</div>
|
196
210
|
|
197
|
-
|
198
|
-
<div class="
|
199
|
-
<div class="
|
200
|
-
<
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
<
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
211
|
+
<% unless Flipper::UI.configuration.read_only %>
|
212
|
+
<div class="card-body border-bottom toggle-block-when-on bg-lightest">
|
213
|
+
<div class="row">
|
214
|
+
<div class="col-12 col-md-6 mb-3 mb-md-0">
|
215
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_time" method="post">
|
216
|
+
<%== csrf_input_tag %>
|
217
|
+
<div class="btn-group">
|
218
|
+
<% @percentages.each do |number| %>
|
219
|
+
<input type="submit" name="value" value="<%= number %>%" class="btn btn-light btn-sm" <% if number == @feature.percentage_of_time_value %>disabled<% end %>>
|
220
|
+
<% end %>
|
221
|
+
</div>
|
222
|
+
</form>
|
223
|
+
</div>
|
224
|
+
<div class="col-12 col-md-6">
|
225
|
+
<form action="<%= script_name %>/features/<%= @feature.key %>/percentage_of_time" method="post" class="form-inline">
|
226
|
+
<%== csrf_input_tag %>
|
227
|
+
<input type="text" name="value" <% if @feature.percentage_of_time_value > 0 %>value="<%= @feature.percentage_of_time_value %>"<% end %> placeholder="custom (26, 32, etc.)" class="form-control form-control-sm mr-sm-2 mb-2 mb-md-0">
|
228
|
+
<input type="submit" name="action" value="Save" class="btn btn-light btn-sm">
|
229
|
+
</form>
|
230
|
+
</div>
|
215
231
|
</div>
|
216
232
|
</div>
|
217
|
-
|
233
|
+
<% end %>
|
218
234
|
</div>
|
219
235
|
<% end %>
|
220
236
|
|
@@ -225,8 +241,14 @@
|
|
225
241
|
<div class="row">
|
226
242
|
<% unless @feature.boolean_value %>
|
227
243
|
<div class="col">
|
228
|
-
<button type="submit" name="action" value="Enable" <% if Flipper::UI.configuration.confirm_fully_enable %>id="enable_feature__button"<% end %> class="btn btn-outline-success btn-block"
|
229
|
-
<span class="d-block" data-toggle="tooltip"
|
244
|
+
<button type="submit" name="action" value="Enable" <% if Flipper::UI.configuration.confirm_fully_enable %>id="enable_feature__button"<% end %> class="btn btn-outline-success btn-block" <% if Flipper::UI.configuration.read_only %>disabled<% end %>>
|
245
|
+
<span class="d-block" data-toggle="tooltip"
|
246
|
+
<% if Flipper::UI.configuration.read_only %>
|
247
|
+
title="Fully enable is not allowed in read only mode."
|
248
|
+
<% else %>
|
249
|
+
title="Enable for everyone"
|
250
|
+
<% end %>
|
251
|
+
>
|
230
252
|
Fully Enable
|
231
253
|
</span>
|
232
254
|
</button>
|
@@ -235,8 +257,13 @@
|
|
235
257
|
|
236
258
|
<% unless @feature.off? %>
|
237
259
|
<div class="col">
|
238
|
-
<button type="submit" name="action" value="Disable" class="btn btn-outline-danger btn-block"
|
239
|
-
<span class="d-block" data-toggle="tooltip"
|
260
|
+
<button type="submit" name="action" value="Disable" class="btn btn-outline-danger btn-block" <% if Flipper::UI.configuration.read_only %>disabled<% end %>>
|
261
|
+
<span class="d-block" data-toggle="tooltip"
|
262
|
+
<% if Flipper::UI.configuration.read_only %>
|
263
|
+
title="Disable is not allowed in read only mode.">
|
264
|
+
<% else %>
|
265
|
+
title="Disable for everyone by clearing all percentages, groups and actors.">
|
266
|
+
<% end %>
|
240
267
|
Disable
|
241
268
|
</span>
|
242
269
|
</button>
|
@@ -249,7 +276,7 @@
|
|
249
276
|
</div>
|
250
277
|
</div>
|
251
278
|
|
252
|
-
<% if Flipper::UI.configuration.feature_removal_enabled %>
|
279
|
+
<% if !Flipper::UI.configuration.read_only && Flipper::UI.configuration.feature_removal_enabled %>
|
253
280
|
<div class="row">
|
254
281
|
<div class="col">
|
255
282
|
<div class="card border">
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<% if Flipper::UI.configuration.fun %>
|
4
4
|
<h4>But I've got a blank space baby...</h4>
|
5
5
|
<p>And I'll flip your features.</p>
|
6
|
-
<%- if Flipper::UI.configuration.feature_creation_enabled -%>
|
6
|
+
<%- if !Flipper::UI.configuration.read_only && Flipper::UI.configuration.feature_creation_enabled -%>
|
7
7
|
<p>
|
8
8
|
<a class="btn btn-primary btn-sm" href="<%= script_name %>/features/new">Add Feature</a>
|
9
9
|
</p>
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<% else %>
|
12
12
|
<h4>Getting Started</h4>
|
13
13
|
<p class="mb-1">You have not added any features to configure yet.</p>
|
14
|
-
<%- if Flipper::UI.configuration.feature_creation_enabled -%>
|
14
|
+
<%- if !Flipper::UI.configuration.read_only && Flipper::UI.configuration.feature_creation_enabled -%>
|
15
15
|
<p class="mt-2">
|
16
16
|
<a class="btn btn-primary btn-sm" href="<%= script_name %>/features/new">Add Feature</a>
|
17
17
|
</p>
|
@@ -26,7 +26,7 @@
|
|
26
26
|
<% else %>
|
27
27
|
<div class="card">
|
28
28
|
<div class="card-header">
|
29
|
-
<%- if Flipper::UI.configuration.feature_creation_enabled -%>
|
29
|
+
<%- if !Flipper::UI.configuration.read_only && Flipper::UI.configuration.feature_creation_enabled -%>
|
30
30
|
<div class="float-right">
|
31
31
|
<a class="btn btn-primary btn-sm" href="<%= script_name %>/features/new">Add Feature</a>
|
32
32
|
</div>
|
data/lib/flipper/version.rb
CHANGED
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.25.
|
4
|
+
version: 0.25.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-07 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.25.
|
59
|
+
version: 0.25.4
|
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.25.
|
66
|
+
version: 0.25.4
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: erubi
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,6 +107,7 @@ extra_rdoc_files: []
|
|
107
107
|
files:
|
108
108
|
- examples/ui/authorization.ru
|
109
109
|
- examples/ui/basic.ru
|
110
|
+
- examples/ui/read_only.ru
|
110
111
|
- flipper-ui.gemspec
|
111
112
|
- lib/flipper-ui.rb
|
112
113
|
- lib/flipper/ui.rb
|
@@ -141,6 +142,7 @@ files:
|
|
141
142
|
- lib/flipper/ui/views/feature_removal_disabled.erb
|
142
143
|
- lib/flipper/ui/views/features.erb
|
143
144
|
- lib/flipper/ui/views/layout.erb
|
145
|
+
- lib/flipper/ui/views/read_only.erb
|
144
146
|
- lib/flipper/version.rb
|
145
147
|
- spec/flipper/ui/action_spec.rb
|
146
148
|
- spec/flipper/ui/actions/actors_gate_spec.rb
|