arturo 2.1.0 → 2.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 +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +1 -1
- data/app/controllers/arturo/features_controller.rb +7 -9
- data/config/locales/en.yml +1 -1
- data/config/routes.rb +3 -12
- data/lib/arturo.rb +1 -1
- data/lib/arturo/controller_filters.rb +3 -2
- data/lib/arturo/feature.rb +1 -1
- data/lib/arturo/feature_caching.rb +15 -13
- data/lib/arturo/feature_params_support.rb +5 -4
- metadata +26 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e9f81e2563e07812dc7a9b810dab0962f595d1e
|
4
|
+
data.tar.gz: df8febe2d13852e7ac498e6cf62ce3b7b9ac2223
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 130abc91076a6b2733c0e16e8f883a1244ac5ad860608eb6aa01f05eda9fc5c7e67e0cc704972e94c1f8714e6f93cd1513236072701ac30b14a0dcdf4183ca28
|
7
|
+
data.tar.gz: 635ddae0758b15185767ad4094f5d91f44828bb6cde56b8f85289f9ba52aebb72af04c89f74b7da126cd7b0f48390d139e501244f32c017e9dac59fc623a888d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
## v2.2.0
|
2
|
+
|
3
|
+
Bug fix: making a feature-update request that fails strict params checks now returns a sensible error instead of throwing an exception
|
4
|
+
|
5
|
+
Improvement: better failed-to-update error messages
|
6
|
+
|
7
|
+
Support Matrix changes: add Rails 5.0, drop Rails 3.2, add Ruby 2.1.7, add Ruby 2.2.3, drop Ruby 1.9.3
|
8
|
+
|
9
|
+
## v2.1.0
|
10
|
+
|
11
|
+
Bug fix: `Arturo::SpecialHandling` always compares symbols as strings
|
12
|
+
|
13
|
+
Improvmement: Rails 4.2 compatibility
|
14
|
+
|
15
|
+
Improvement: relax minitest version constraints
|
16
|
+
|
17
|
+
Improvement: add `set_feature!` method to complement `enable_feature!`and `disable_feature!`
|
18
|
+
|
1
19
|
## v2.0.0
|
2
20
|
|
3
21
|
Bug fix: add missing require to initializer.
|
data/README.md
CHANGED
@@ -219,7 +219,7 @@ does not have the `:hold_book` feature.
|
|
219
219
|
end
|
220
220
|
|
221
221
|
`require_feature` accepts as a second argument a `Hash` that it passes on
|
222
|
-
to `
|
222
|
+
to `before_action`, so you can use `:only` and `:except` to specify exactly
|
223
223
|
which actions are filtered.
|
224
224
|
|
225
225
|
If you want to customize the page that is rendered on 403 Forbidden
|
@@ -15,14 +15,13 @@ module Arturo
|
|
15
15
|
|
16
16
|
unloadable
|
17
17
|
respond_to :html, :json, :xml
|
18
|
-
before_filter :require_permission
|
19
|
-
before_filter :load_feature, :only => [ :show, :edit, :update, :destroy ]
|
20
18
|
|
21
|
-
if
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
19
|
+
if respond_to?(:before_action)
|
20
|
+
before_action :require_permission
|
21
|
+
before_action :load_feature, :only => [ :show, :edit, :update, :destroy ]
|
22
|
+
else
|
23
|
+
before_filter :require_permission
|
24
|
+
before_filter :load_feature, :only => [ :show, :edit, :update, :destroy ]
|
26
25
|
end
|
27
26
|
|
28
27
|
def index
|
@@ -80,7 +79,7 @@ module Arturo
|
|
80
79
|
flash[:notice] = t('arturo.features.flash.updated', :name => @feature.to_s)
|
81
80
|
redirect_to arturo_engine.feature_path(@feature)
|
82
81
|
else
|
83
|
-
flash[:alert] = t('arturo.features.flash.error_updating', :name => @feature.
|
82
|
+
flash[:alert] = t('arturo.features.flash.error_updating', :name => @feature.name, :errors => @feature.errors.full_messages.join("\n"))
|
84
83
|
render :action => 'edit'
|
85
84
|
end
|
86
85
|
end
|
@@ -110,4 +109,3 @@ module Arturo
|
|
110
109
|
end
|
111
110
|
|
112
111
|
end
|
113
|
-
|
data/config/locales/en.yml
CHANGED
@@ -35,7 +35,7 @@ en:
|
|
35
35
|
created: "Created %{name}"
|
36
36
|
error_creating: "Sorry, there was an error creating the feature."
|
37
37
|
updated: "Updated %{name}"
|
38
|
-
error_updating: "Could not update
|
38
|
+
error_updating: "Could not update %{name}: %{errors}."
|
39
39
|
removed: "Removed %{name}"
|
40
40
|
error_removing: "Sorry, there was an error removing %{name}"
|
41
41
|
no_such_feature:
|
data/config/routes.rb
CHANGED
@@ -1,13 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
resources :features, :controller => "arturo/features"
|
5
|
-
put 'features', :to => 'arturo/features#update_all', :as => 'features'
|
6
|
-
end
|
7
|
-
end
|
8
|
-
else
|
9
|
-
Arturo::Engine.routes.draw do
|
10
|
-
resources :features, :controller => 'arturo/features'
|
11
|
-
put 'features', :to => 'arturo/features#update_all', :as => 'features_update_all'
|
12
|
-
end
|
1
|
+
Arturo::Engine.routes.draw do
|
2
|
+
resources :features, :controller => 'arturo/features'
|
3
|
+
put 'features', :to => 'arturo/features#update_all', :as => 'features_update_all'
|
13
4
|
end
|
data/lib/arturo.rb
CHANGED
@@ -4,7 +4,7 @@ module Arturo
|
|
4
4
|
require 'arturo/feature_availability'
|
5
5
|
require 'arturo/feature_management'
|
6
6
|
require 'arturo/feature_caching'
|
7
|
-
require 'arturo/engine' if defined?(Rails) && Rails::VERSION::MAJOR >= 3
|
7
|
+
require 'arturo/engine' if defined?(Rails::VERSION::MAJOR) && Rails::VERSION::MAJOR >= 3
|
8
8
|
|
9
9
|
class << self
|
10
10
|
# Quick check for whether a feature is enabled for a recipient.
|
@@ -13,13 +13,14 @@ module Arturo
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def on_feature_disabled(feature_name)
|
16
|
-
render :text => 'Forbidden', :status => 403
|
16
|
+
render (Rails::VERSION::MAJOR < 5 ? :text : :plain) => 'Forbidden', :status => 403
|
17
17
|
end
|
18
18
|
|
19
19
|
module ClassMethods
|
20
20
|
|
21
21
|
def require_feature(name, options = {})
|
22
|
-
|
22
|
+
method = respond_to?(:before_action) ? :before_action : :before_filter
|
23
|
+
send(method, options) do |controller|
|
23
24
|
unless controller.feature_enabled?(name)
|
24
25
|
controller.on_feature_disabled(name)
|
25
26
|
end
|
data/lib/arturo/feature.rb
CHANGED
@@ -18,9 +18,23 @@ module Arturo
|
|
18
18
|
# to use a shared cache like Memcached.
|
19
19
|
module FeatureCaching
|
20
20
|
|
21
|
+
module PrependMethods
|
22
|
+
# Wraps Arturo::Feature.to_feature with in-memory caching.
|
23
|
+
def to_feature(feature_or_symbol)
|
24
|
+
if !caches_features?
|
25
|
+
super
|
26
|
+
elsif feature_or_symbol.kind_of?(Arturo::Feature)
|
27
|
+
feature_or_symbol
|
28
|
+
else
|
29
|
+
symbol = feature_or_symbol.to_sym
|
30
|
+
feature_caching_strategy.fetch(feature_cache, symbol) { super(symbol) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
21
35
|
def self.extended(base)
|
22
36
|
class << base
|
23
|
-
|
37
|
+
prepend PrependMethods
|
24
38
|
attr_accessor :cache_ttl, :feature_cache, :feature_caching_strategy
|
25
39
|
end
|
26
40
|
base.send(:after_save) do |f|
|
@@ -35,18 +49,6 @@ module Arturo
|
|
35
49
|
self.cache_ttl.to_i > 0
|
36
50
|
end
|
37
51
|
|
38
|
-
# Wraps Arturo::Feature.to_feature with in-memory caching.
|
39
|
-
def to_feature_with_caching(feature_or_symbol)
|
40
|
-
if !caches_features?
|
41
|
-
to_feature_without_caching(feature_or_symbol)
|
42
|
-
elsif feature_or_symbol.kind_of?(Arturo::Feature)
|
43
|
-
feature_or_symbol
|
44
|
-
else
|
45
|
-
symbol = feature_or_symbol.to_sym
|
46
|
-
feature_caching_strategy.fetch(feature_cache, symbol) { to_feature_without_caching(symbol) }
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
52
|
def warm_cache!
|
51
53
|
warn "Deprecated, no longer necessary!"
|
52
54
|
end
|
@@ -18,14 +18,16 @@ module Arturo
|
|
18
18
|
PERMITTED_ATTRIBUTES = [ :symbol, :deployment_percentage ]
|
19
19
|
|
20
20
|
def feature_params
|
21
|
-
|
21
|
+
if feature = params[:feature]
|
22
|
+
feature.permit(PERMITTED_ATTRIBUTES)
|
23
|
+
end
|
22
24
|
end
|
23
25
|
|
24
26
|
def features_params
|
25
|
-
permitted = PERMITTED_ATTRIBUTES
|
26
27
|
features = params[:features]
|
27
28
|
features.each do |id, attributes|
|
28
|
-
|
29
|
+
attributes = attributes.to_unsafe_h if attributes.respond_to?(:to_unsafe_h)
|
30
|
+
features[id] = ActionController::Parameters.new(attributes).permit(*PERMITTED_ATTRIBUTES)
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -35,4 +37,3 @@ module Arturo
|
|
35
37
|
end
|
36
38
|
|
37
39
|
end
|
38
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arturo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James A. Rosen
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
11
|
- gem-public_cert.pem
|
12
|
-
date:
|
12
|
+
date: 2016-01-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: '3.2'
|
21
21
|
- - <
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '5.
|
23
|
+
version: '5.1'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
version: '3.2'
|
31
31
|
- - <
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5.
|
33
|
+
version: '5.1'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rails
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version: '3.2'
|
41
41
|
- - <
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '5.
|
43
|
+
version: '5.1'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
46
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
version: '3.2'
|
51
51
|
- - <
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '5.
|
53
|
+
version: '5.1'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
55
|
name: mocha
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -195,6 +195,24 @@ executables: []
|
|
195
195
|
extensions: []
|
196
196
|
extra_rdoc_files: []
|
197
197
|
files:
|
198
|
+
- CHANGELOG.md
|
199
|
+
- LICENSE
|
200
|
+
- README.md
|
201
|
+
- app/assets/images/colon.png
|
202
|
+
- app/assets/javascripts/arturo.js
|
203
|
+
- app/assets/stylesheets/arturo.css
|
204
|
+
- app/controllers/arturo/features_controller.rb
|
205
|
+
- app/helpers/arturo/features_helper.rb
|
206
|
+
- app/views/arturo/features/_feature.html.erb
|
207
|
+
- app/views/arturo/features/_form.html.erb
|
208
|
+
- app/views/arturo/features/edit.html.erb
|
209
|
+
- app/views/arturo/features/forbidden.html.erb
|
210
|
+
- app/views/arturo/features/index.html.erb
|
211
|
+
- app/views/arturo/features/new.html.erb
|
212
|
+
- app/views/arturo/features/show.html.erb
|
213
|
+
- config/locales/en.yml
|
214
|
+
- config/routes.rb
|
215
|
+
- lib/arturo.rb
|
198
216
|
- lib/arturo/controller_filters.rb
|
199
217
|
- lib/arturo/engine.rb
|
200
218
|
- lib/arturo/feature.rb
|
@@ -207,7 +225,6 @@ files:
|
|
207
225
|
- lib/arturo/no_such_feature.rb
|
208
226
|
- lib/arturo/special_handling.rb
|
209
227
|
- lib/arturo/test_support.rb
|
210
|
-
- lib/arturo.rb
|
211
228
|
- lib/generators/arturo/assets_generator.rb
|
212
229
|
- lib/generators/arturo/initializer_generator.rb
|
213
230
|
- lib/generators/arturo/migration_generator.rb
|
@@ -215,23 +232,6 @@ files:
|
|
215
232
|
- lib/generators/arturo/templates/arturo_customizations.css
|
216
233
|
- lib/generators/arturo/templates/initializer.rb
|
217
234
|
- lib/generators/arturo/templates/migration.rb
|
218
|
-
- app/assets/images/colon.png
|
219
|
-
- app/assets/javascripts/arturo.js
|
220
|
-
- app/assets/stylesheets/arturo.css
|
221
|
-
- app/controllers/arturo/features_controller.rb
|
222
|
-
- app/helpers/arturo/features_helper.rb
|
223
|
-
- app/views/arturo/features/_feature.html.erb
|
224
|
-
- app/views/arturo/features/_form.html.erb
|
225
|
-
- app/views/arturo/features/edit.html.erb
|
226
|
-
- app/views/arturo/features/forbidden.html.erb
|
227
|
-
- app/views/arturo/features/index.html.erb
|
228
|
-
- app/views/arturo/features/new.html.erb
|
229
|
-
- app/views/arturo/features/show.html.erb
|
230
|
-
- config/locales/en.yml
|
231
|
-
- config/routes.rb
|
232
|
-
- README.md
|
233
|
-
- CHANGELOG.md
|
234
|
-
- LICENSE
|
235
235
|
homepage: http://github.com/jamesarosen/arturo
|
236
236
|
licenses:
|
237
237
|
- APLv2
|
@@ -245,7 +245,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
245
245
|
requirements:
|
246
246
|
- - '>='
|
247
247
|
- !ruby/object:Gem::Version
|
248
|
-
version: '0'
|
248
|
+
version: '2.0'
|
249
249
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
250
250
|
requirements:
|
251
251
|
- - '>='
|
@@ -253,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
253
253
|
version: '0'
|
254
254
|
requirements: []
|
255
255
|
rubyforge_project:
|
256
|
-
rubygems_version: 2.
|
256
|
+
rubygems_version: 2.5.1
|
257
257
|
signing_key:
|
258
258
|
specification_version: 2
|
259
259
|
summary: Feature sliders, wrapped up in an engine
|