staging 0.1

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.
Files changed (6) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/README.textile +37 -0
  4. data/Rakefile +56 -0
  5. data/lib/staging.rb +56 -0
  6. metadata +59 -0
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
@@ -0,0 +1,37 @@
1
+ h1. Staging Gem
2
+
3
+ Staging rack application purpose to protect you Rails application from anonymous and prying.
4
+
5
+ h1. Usage
6
+
7
+ h2. Examples
8
+
9
+ h3. In you Rails initilizer
10
+
11
+ <pre><code>config.middleware.use 'Rack::Staging',
12
+ :template_path => "#{RAILS_ROOT}/app/views/staging/index.html",
13
+ :auth_codes => [ 'Hfgo_JHg+47', 'dh_JHg_ra988', 'fd-m*nKJ_DE7'] # Basic setup</code></pre>
14
+
15
+ <pre><code>config.middleware.use 'Staging',
16
+ :session_key => :staging_auth, # Custom session key
17
+ :code_param => :staging_code", # Custom input name (<input name="staging_code" />), defult is :code
18
+ :template_path => "#{RAILS_ROOT}/app/views/staging/index.html",
19
+ :auth_codes => [ 'Hfgo_JHg+47', 'dh_JHg_ra988', 'fd-m*nKJ_DE7']</code></pre>
20
+
21
+ h3. In you staging template (“#{RAILS_ROOT}/app/views/staging/index.html”)
22
+
23
+ <pre><code><html>
24
+ <head>
25
+ <title>Staging application</title>
26
+ </head>
27
+ <body>
28
+ <h1>Please input staging code</h1>
29
+ <form action="/" method="post">
30
+ <input name="code" />
31
+ <input type="submit" />
32
+ </form>
33
+ </body>
34
+ </html></code></pre>
35
+
36
+ h3. … and now you are ready to protected staging!
37
+
@@ -0,0 +1,56 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "staging"
8
+ gem.summary = %Q{Protect you Rails application from anonymous and prying.}
9
+ gem.description = %Q{Staging rack application purpose to protect you Rails application from anonymous and prying.}
10
+ gem.email = "kossnocorp@gmail.com"
11
+ gem.homepage = "http://github.com/kossnocorp/staging"
12
+ gem.authors = ["Aleksandr Koss"]
13
+ gem.version = '0.1'
14
+
15
+ #gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
16
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
+ end
22
+
23
+ require 'rake/testtask'
24
+ Rake::TestTask.new(:test) do |test|
25
+ test.libs << 'lib' << 'test'
26
+ test.pattern = 'test/**/test_*.rb'
27
+ test.verbose = true
28
+ end
29
+
30
+ begin
31
+ require 'rcov/rcovtask'
32
+ Rcov::RcovTask.new do |test|
33
+ test.libs << 'test'
34
+ test.pattern = 'test/**/test_*.rb'
35
+ test.verbose = true
36
+ end
37
+ rescue LoadError
38
+ task :rcov do
39
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
40
+ end
41
+ end
42
+
43
+ task :test => :check_dependencies
44
+
45
+ task :default => :test
46
+
47
+ require 'rake/rdoctask'
48
+ Rake::RDocTask.new do |rdoc|
49
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
50
+
51
+ rdoc.rdoc_dir = 'rdoc'
52
+ rdoc.title = "staging #{version}"
53
+ rdoc.rdoc_files.include('README*')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
56
+
@@ -0,0 +1,56 @@
1
+ # Hi! I'am rack middleware!
2
+ # I was born for protect you staging application from anonymous and prying
3
+
4
+ # My author's name was Aleksandr Koss. Mail him at kossnocorp@gmail.com
5
+ # Nice to MIT you!
6
+
7
+ module Rack
8
+ class Staging
9
+ def initialize app, options = {}
10
+ @app = app
11
+ @options = {
12
+ :session_key => :staging_auth,
13
+ :code_param => :code
14
+ }.merge options
15
+ end
16
+
17
+ def call env
18
+ request = Rack::Request.new env
19
+
20
+ # Check code in session and return Rails call if is valid
21
+
22
+ return @app.call env if \
23
+ request.session[@options[:session_key]] != nil and
24
+ request.session[@options[:session_key]] != '' and
25
+ code_valid? request.session[@options[:session_key]]
26
+
27
+ # If post method check :code_param value
28
+
29
+ if request.post? and code_valid? request.params[@options[:code_param].to_s]
30
+ request.session[@options[:session_key]] =
31
+ request.params[@options[:code_param].to_s]
32
+
33
+ [301, {'Location' => '/'}, ''] # Redirect if code is valid
34
+ else
35
+ render_staging
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ # Render staging html file
42
+
43
+ def render_staging
44
+ [200, {'Content-Type' => 'text/html'}, [
45
+ ::File.open(@options[:template_path], 'rb').read
46
+ ]]
47
+ end
48
+
49
+ # Validate code
50
+
51
+ def code_valid? code
52
+ @options[:auth_codes].include? code
53
+ end
54
+ end
55
+ end
56
+
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: staging
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Aleksandr Koss
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-22 00:00:00 +06:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Staging rack application purpose to protect you Rails application from anonymous and prying.
17
+ email: kossnocorp@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.textile
24
+ files:
25
+ - .document
26
+ - .gitignore
27
+ - README.textile
28
+ - Rakefile
29
+ - lib/staging.rb
30
+ has_rdoc: true
31
+ homepage: http://github.com/kossnocorp/staging
32
+ licenses: []
33
+
34
+ post_install_message:
35
+ rdoc_options:
36
+ - --charset=UTF-8
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ requirements: []
52
+
53
+ rubyforge_project:
54
+ rubygems_version: 1.3.5
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: Protect you Rails application from anonymous and prying.
58
+ test_files: []
59
+