-
Notifications
You must be signed in to change notification settings - Fork 24
/
features_controller.rb
113 lines (95 loc) · 3.11 KB
/
features_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
require 'action_controller'
require 'arturo/feature_params_support'
# TODO: this doesn't do anything radically out of the ordinary.
# Are there Rails 3 patterns/mixins/methods I can use
# to clean it up a bit?
module Arturo
# Handles all Feature actions. Clients of the Arturo engine
# should redefine Arturo::FeaturesController#permitted? to
# return true only for users who are permitted to manage features.
class FeaturesController < ApplicationController
include Arturo::FeatureManagement
include Arturo::FeatureParamsSupport
unloadable
respond_to :html, :json, :xml
before_filter :require_permission
before_filter :load_feature, :only => [ :show, :edit, :update, :destroy ]
if Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 0
def arturo_engine
self
end
helper_method :arturo_engine
end
def index
@features = Arturo::Feature.all
respond_with @features
end
def update_all
updated_count = 0
errors = []
features_params.each do |id, attributes|
feature = Arturo::Feature.find_by_id(id)
if feature.blank?
errors << t('arturo.features.flash.no_such_feature', :id => id)
elsif feature.update_attributes(attributes)
updated_count += 1
else
errors << t('arturo.features.flash.error_updating', :id => id, :errors => feature.errors.full_messages.to_sentence)
end
end
if errors.any?
flash[:error] = errors
else
flash[:success] = t('arturo.features.flash.updated_many', :count => updated_count)
end
redirect_to arturo_engine.features_path
end
def show
respond_with @feature
end
def new
@feature = Arturo::Feature.new(feature_params)
respond_with @feature
end
def create
@feature = Arturo::Feature.new(feature_params)
if @feature.save
flash[:notice] = t('arturo.features.flash.created', :name => @feature.to_s)
redirect_to arturo_engine.features_path
else
flash[:alert] = t('arturo.features.flash.error_creating', :name => @feature.to_s)
render :action => 'new'
end
end
def edit
respond_with @feature
end
def update
if @feature.update_attributes(feature_params)
flash[:notice] = t('arturo.features.flash.updated', :name => @feature.to_s)
redirect_to arturo_engine.feature_path(@feature)
else
flash[:alert] = t('arturo.features.flash.error_updating', :name => @feature.to_s)
render :action => 'edit'
end
end
def destroy
if @feature.destroy
flash[:notice] = t('arturo.features.flash.removed', :name => @feature.to_s)
else
flash[:alert] = t('arturo.features.flash.error_removing', :name => @feature.to_s)
end
redirect_to arturo_engine.features_path
end
protected
def require_permission
unless may_manage_features?
render :action => 'forbidden', :status => 403
return false
end
end
def load_feature
@feature ||= Arturo::Feature.find(params[:id])
end
end
end