safety_cone 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50edbf10878fc56a14539cd41c4b70e879735b77
4
- data.tar.gz: a57be06d86eb4e58aff4887ff32070e1f8541545
3
+ metadata.gz: b1a84c4f47818100346deb5406a5e31349fbe369
4
+ data.tar.gz: 1300636c1ce0920c16f9ecb14e727e373fc0fcaf
5
5
  SHA512:
6
- metadata.gz: d106b281c7e3b23fd901b065aa11e7872b54e37908e72619a43d4912706bb016ea7760539982014482cf2d9297661918264941bca45ca90ecc4314438c9fb76f
7
- data.tar.gz: 7398e5766be675c6bd19b9622731ae61cebc00211e478aaa6d9ec39156836a5a118b6b191f1e9308abc237cf0946928ce2594337bac0962607d5b4aa45fbafcc
6
+ metadata.gz: 391806f295ceb89632b0f65bf3b82be0a0230993c2a0fdf579176d4efd2265c9f3d9dcf352bc2dddefe22c8eb43f11b4333172486b204ae592fd7184609e76ee
7
+ data.tar.gz: 72411e11648c4774b0579870172235acd163db7d3cfbf740ffecb3e0dce14fb33b4ed20c428d24ebfddbde70da4af4ad2b79c75085bdfa7bc2ae8e7b980a86da
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
- # SafetyConeMountable
2
- Short description and motivation.
1
+ ![safety cone logo](https://raw.githubusercontent.com/boost/safety_cone/master/app/assets/images/safety_cone/logo.png)
2
+ # SafetyCone [![Gem Version](https://badge.fury.io/rb/safety_cone.svg)](https://badge.fury.io/rb/safety_cone)
3
3
 
4
- ## Usage
5
- How to use my plugin.
4
+ Safety Cone is a Rails gem that allows you to temporarily add warnings or block requests to specific pages through a simple interface. It's intended use case is primarily for maintenance.
6
5
 
7
6
  ## Installation
8
7
  Add this line to your application's Gemfile:
@@ -16,10 +15,115 @@ And then execute:
16
15
  $ bundle
17
16
  ```
18
17
 
19
- Or install it yourself as:
20
- ```bash
21
- $ gem install safety_cone
18
+ ## Usage
19
+
20
+ Create a safety_cone.rb file in config/initializers. The routes that needs to be managed can be added to this config file.
21
+
22
+ ```
23
+ $redis = Redis::Namespace.new("app_name", :redis => Redis.new)
24
+
25
+ SafetyCone.configure do |config|
26
+ # Redis connection for safety_cone
27
+ config.redis = $redis
28
+
29
+ # Http auth username and password for Safety Cone admin page
30
+ config.auth = { username: 'admin', password: 'admin-password' }
31
+
32
+ # To allow Safety Cone to manage a single controller action
33
+ config.add(
34
+ controller: :registrations,
35
+ action: :new,
36
+ name: 'User Registration'
37
+ )
38
+
39
+ # To allow Safety Cone to manage all POST requests
40
+ config.add(
41
+ method: 'POST',
42
+ name: 'All POST requests'
43
+ )
44
+ end
45
+ ```
46
+
47
+ In routes add
48
+
49
+ ```
50
+ mount SafetyCone::Engine, :at => '/safety_cone'
51
+ ```
52
+
53
+ In ApplicationController
54
+
22
55
  ```
56
+ class ApplicationController < ActionController::Base
57
+ protect_from_forgery
58
+
59
+ # Add this line
60
+ include SafetyCone::Filter
61
+ end
62
+ ```
63
+
64
+ In View
65
+
66
+ ```html
67
+ <div class="container">
68
+ <% if safetycone_notice %>
69
+ <div class="notice"><%= safetycone_notice %></div>
70
+ <% end %>
71
+
72
+ <% if safetycone_alert %>
73
+ <div class="alert"><%= safetycone_alert %></div>
74
+ <% end %>
75
+ </div>
76
+ ```
77
+
78
+ Now you should be able to go to http://localhost:3000/safety_cone and manage your routes.
79
+
80
+ ## For version 0.1.0 users
81
+
82
+ This earlier version is not a mountable engine and it does not provide an admin interface. The configuration is as follows:
83
+
84
+ ```
85
+ SafetyCone.configure do |config|
86
+ # disables Safety Cone. By default this value is true
87
+ config.enabled = false
88
+
89
+ # This config will block all POST requests and display this message.
90
+ config.add(
91
+ method: :POST,
92
+ message: 'We are unable to write any data to database now.',
93
+ type: :block
94
+ )
95
+
96
+ # This is a controller action specific warning. But with no measures to prevent this action
97
+ config.add(
98
+ controller: :users,
99
+ action: :new,
100
+ message: 'We are unable to register any user now. Please try after sometime.'
101
+ type: :notice
102
+ )
103
+
104
+ # This is a controller action specific block. This config will let the application
105
+ # to raise an alert message and block the request from hitting the controller action.
106
+ config.add(
107
+ controller: 'users',
108
+ action: 'create',
109
+ message: 'We are unable to register any user now. Please try after sometime.',
110
+ type: :block
111
+ )
112
+
113
+ # This is a controller action specific block with a redirect configured.
114
+ config.add(
115
+ controller: 'users',
116
+ action: 'create',
117
+ message: 'We are unable to register any user now. Please try after sometime.',
118
+ type: :block,
119
+ redirect: '/page/more_info'
120
+ )
121
+
122
+ # For :block flash message is an alert
123
+ # For :notice flash message is a notice
124
+ end
125
+ ```
126
+
23
127
 
24
128
  ## Contributing
25
129
  Contribution directions go here.
@@ -3,7 +3,7 @@ module SafetyCone
3
3
  def status(key)
4
4
  cone = Cone.new(key, {})
5
5
  cone.fetch
6
- cone.measure
6
+ cone.type
7
7
  end
8
8
  end
9
9
  end
@@ -1,7 +1,7 @@
1
1
  module SafetyCone
2
2
  class Cone
3
3
  attr_accessor :name, :controller, :action,
4
- :method, :message, :measure,
4
+ :method, :message, :type,
5
5
  :key, :redis
6
6
 
7
7
  def initialize(key, params)
@@ -11,12 +11,12 @@ module SafetyCone
11
11
  @method = params[:action]
12
12
  @method = params[:method]
13
13
  @message = params[:message]
14
- @measure = params[:measure] || 'disabled'
14
+ @type = params[:type] || 'disabled'
15
15
  @redis = SafetyCone.redis
16
16
  end
17
17
 
18
18
  def save
19
- data = { message: @message, measure: @measure }.to_json
19
+ data = { message: @message, type: @type }.to_json
20
20
  @redis.set(redis_key, data)
21
21
  end
22
22
 
@@ -26,7 +26,7 @@ module SafetyCone
26
26
  if stored_data
27
27
  data = JSON.parse(stored_data)
28
28
  @message = data['message']
29
- @measure = data['measure']
29
+ @type = data['type']
30
30
  end
31
31
  end
32
32
 
@@ -11,14 +11,14 @@
11
11
  </div>
12
12
 
13
13
  <div class="input-field col s12">
14
- <%= form.radio_button :measure, 'notice' %>
15
- <%= form.label :measure_notice, 'Notice' %>
14
+ <%= form.radio_button :type, 'notice' %>
15
+ <%= form.label :type_notice, 'Notice' %>
16
16
 
17
- <%= form.radio_button :measure, 'block' %>
18
- <%= form.label :measure_block, 'Block' %>
17
+ <%= form.radio_button :type, 'block' %>
18
+ <%= form.label :type_block, 'Block' %>
19
19
 
20
- <%= form.radio_button :measure, 'disabled' %>
21
- <%= form.label :measure_disabled, 'Disable this Cone' %>
20
+ <%= form.radio_button :type, 'disabled' %>
21
+ <%= form.label :type_disabled, 'Disable this Cone' %>
22
22
  </div>
23
23
 
24
24
  <div class="input-field col s12">
@@ -1,10 +1,7 @@
1
1
  module SafetyCone
2
2
  # Module for configuring safety measures
3
3
  module Configuration
4
- VALID_OPTION_KEYS = [
5
- :method, :controller,
6
- :action, :name
7
- ].freeze
4
+ VALID_OPTION_KEYS = %i[method controller action name].freeze
8
5
 
9
6
  attr_accessor :cones, :options, :redis, :auth
10
7
 
@@ -32,7 +29,7 @@ module SafetyCone
32
29
  # Configuration method for Rails initializer
33
30
  def configure
34
31
  self.cones = {}
35
- self.auth = { username: nil, password: nil}
32
+ self.auth = { username: nil, password: nil }
36
33
 
37
34
  yield self
38
35
  end
@@ -12,12 +12,18 @@ module SafetyCone
12
12
  # based on the configuration.
13
13
  def safety_cone_filter
14
14
  if cone = fetch_cone
15
- flash.clear
16
- flash[notice_type(cone.measure)] = cone.message
17
- redirect_to safety_redirect if cone.measure == 'block'
15
+ if cone.type == 'notice'
16
+ flash.now["safetycone_#{notice_type(cone.type)}"] = cone.message
17
+ else
18
+ flash["safetycone_#{notice_type(cone.type)}"] = cone.message
19
+ end
20
+
21
+ redirect_to safety_redirect if cone.type == 'block'
18
22
  end
19
23
  end
20
24
 
25
+ private
26
+
21
27
  # Fetches a configuration based on current request
22
28
  def fetch_cone
23
29
  cones = SafetyCone.cones
@@ -32,18 +38,18 @@ module SafetyCone
32
38
 
33
39
  cone = Cone.new(key, cone)
34
40
  cone.fetch
35
-
36
- %w(notice block).include?(cone.measure) ? cone : false
41
+
42
+ %w[notice block].include?(cone.type) ? cone : false
37
43
  end
38
44
 
39
45
  # Method to redirect a request
40
46
  def safety_redirect
41
- request.env['HTTP_REFERER']
47
+ request.env['HTTP_REFERER'] || root_path
42
48
  end
43
49
 
44
50
  # Returns type of notice
45
- def notice_type(measure)
46
- measure == 'notice' ? 'notice' : 'alert'
51
+ def notice_type(type)
52
+ type == 'notice' ? 'notice' : 'alert'
47
53
  end
48
54
 
49
55
  # Returns the current request action as a symbol
@@ -1,3 +1,3 @@
1
1
  module SafetyCone
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'.freeze
3
3
  end
@@ -0,0 +1,15 @@
1
+ module SafetyCone
2
+ # Module for Filtering requests and raise notices
3
+ # and take measures
4
+ module Helper
5
+ def safetycone_notice
6
+ flash[:safetycone_notice]
7
+ end
8
+
9
+ def safetycone_alert
10
+ flash[:safetycone_alert]
11
+ end
12
+ end
13
+ end
14
+
15
+ ActionView::Base.send :include, SafetyCone::Helper
data/lib/safety_cone.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'safety_cone/engine'
2
2
  require 'safety_cone/configuration'
3
3
  require 'safety_cone/filter'
4
+ require 'safety_cone/view_helper'
4
5
 
5
6
  module SafetyCone
6
7
  extend Configuration
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safety_cone
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edwin Rozario
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-05-19 00:00:00.000000000 Z
12
+ date: 2017-10-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "<="
19
19
  - !ruby/object:Gem::Version
20
- version: 5.0.2
20
+ version: '5.1'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "<="
26
26
  - !ruby/object:Gem::Version
27
- version: 5.0.2
27
+ version: '5.1'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: redis
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -203,7 +203,7 @@ files:
203
203
  - lib/safety_cone/engine.rb
204
204
  - lib/safety_cone/filter.rb
205
205
  - lib/safety_cone/version.rb
206
- - lib/tasks/safety_cone_tasks.rake
206
+ - lib/safety_cone/view_helper.rb
207
207
  homepage: https://github.com/boost/safety_cone
208
208
  licenses:
209
209
  - MIT
@@ -224,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
224
  version: '0'
225
225
  requirements: []
226
226
  rubyforge_project:
227
- rubygems_version: 2.5.1
227
+ rubygems_version: 2.6.11
228
228
  signing_key:
229
229
  specification_version: 4
230
230
  summary: Blocks or warns requests as cofigured by the admin
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :safety_cone do
3
- # # Task goes here
4
- # end