redirect_code_generator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c8d40e38556846c2530c58303c51369dc731fd33
4
+ data.tar.gz: 8cf75b5d12d87525ebf9e0a94cadc26381d060bd
5
+ SHA512:
6
+ metadata.gz: ec79fdc6c0fea74be355f293491a890902459dc0649f13264d251ef15fbf567e77ea0b45fd33df66cf5f339c42f5554f7fe8a8af74fc89843c78aa764af51889
7
+ data.tar.gz: 7667527be387eb74f9c00d8a441d3c113afbbef034775ccbbd8453b324ed26704796a34ea216c889e0153a2ddb0603fe5d7e2dfe7d7d57bff0605d7bdeea5903
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.4
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.0.0
5
+ before_install: gem install bundler -v 1.13.6
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in redirect_code_generator.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) tsmsogn
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # RedirectCodeGenerator
2
+
3
+ RedirectCodeGenerator creates Apache redirect code
4
+
5
+ [![Build Status](https://travis-ci.org/tsmsogn/redirect_code_generator.svg?branch=master)](https://travis-ci.org/tsmsogn/redirect_code_generator)
6
+
7
+ ## Usage
8
+
9
+ ```
10
+ $ ./create_apache_redirect_code /old_dir /new_dir
11
+ # 301 /old_dir -> /new_dir
12
+ <IfModule mod_rewrite.c>
13
+ RewriteEngine On
14
+ RewriteRule ^/old_dir$ /new_dir? [R=301,L]
15
+ </IfModule>
16
+ ```
17
+
18
+ ## Options
19
+
20
+ ```
21
+ $ ./create_apache_redirect_code -h
22
+ Usage: create_apache_redirect_code [options]
23
+ --[no-]permanent Use permanent redirect (default: permanent)
24
+ --[no-]escape Escape any characters (default: escape)
25
+ -v, --version Print version
26
+ ```
27
+
28
+ ## Todo
29
+
30
+ - Nginx
31
+
32
+ ## Contributing
33
+
34
+ Bug reports and pull requests are welcome on GitHub at https://github.com/tsmsogn/redirect_code_generator.
35
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "redirect_code_generator"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # create_apache_redirect_code [old] [new]
4
+ #
5
+
6
+ require 'optparse'
7
+ require 'redirect_code_generator'
8
+ require 'redirect_code_generator/version'
9
+ permanent = true
10
+ escape = true
11
+ print_version = false
12
+
13
+ opt = OptionParser.new
14
+ opt.on('--[no-]permanent', 'Use permanent redirect (default: permanent)') { |_| permanent = _ }
15
+ opt.on('--[no-]escape', 'Escape any characters (default: escape)') { |_| escape = _ }
16
+ opt.on('-v', '--version', 'Print version') { |_| print_version = true }
17
+
18
+ args = opt.parse(ARGV)
19
+
20
+ if print_version
21
+ puts "create_apache_redirect_code #{RedirectCodeGenerator::VERSION}"
22
+ exit 0
23
+ end
24
+
25
+ old = args.shift
26
+ new = args.shift
27
+ if old.nil? || new.nil?
28
+ puts "Usage: create_apache_redirect_code [old] [new] -options"
29
+ exit 1
30
+ end
31
+
32
+ puts RedirectCodeGenerator.create_apache_redirect_code(old, new, permanent, escape)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+
3
+ current_dir=`dirname $0`
4
+ cd ${current_dir}
5
+
6
+ ruby -I ./lib ./bin/create_apache_redirect_code $@
@@ -0,0 +1,9 @@
1
+ require "redirect_code_generator/generator/apache"
2
+ require "redirect_code_generator/version"
3
+
4
+ module RedirectCodeGenerator
5
+ def self.create_apache_redirect_code(old, new, permanent = true, escape = true)
6
+ generator = Generator::Apache.new(old, new, permanent, escape)
7
+ generator.create_redirect_code
8
+ end
9
+ end
@@ -0,0 +1,24 @@
1
+ require "erb"
2
+ require "redirect_code_generator/erb_templates"
3
+
4
+ module RedirectCodeGenerator
5
+ class ERBFactory
6
+ def initialize(template)
7
+ @template = template
8
+ end
9
+
10
+ def get_instance
11
+ template = get_erb_template(@template)
12
+ ERB.new(template, nil, '<>', '_redirect_code')
13
+ end
14
+
15
+ private
16
+
17
+ def get_erb_template(template)
18
+ case template
19
+ when 'apache'
20
+ ERBTemplates::APACHE
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ module RedirectCodeGenerator
2
+ module ERBTemplates
3
+
4
+ APACHE = <<CODE
5
+ # <%= permanent? ? 301 : 302 %> <%= old %> -> <%= new %>
6
+ <IfModule mod_rewrite.c>
7
+ RewriteEngine On
8
+ <% if default_port? && uri.scheme %>
9
+ RewriteCond %{HTTPS} <% if uri.scheme == 'https'%>on<% else %>off<% end %>
10
+ <% end %>
11
+ <% if uri.host %>
12
+ RewriteCond %{HTTP_HOST} ^<%= escape? ? escape(uri.host) : uri.host %>$
13
+ <% end %>
14
+ <% if !default_port? && uri.scheme %>
15
+ RewriteCond %{SERVER_PORT} <%= uri.port %>
16
+ <% end %>
17
+ <% if uri.query %>
18
+ <% uri.query.split('&').each do |param| %>
19
+ RewriteCond %{QUERY_STRING} (^|&)<%= param %>($|&)
20
+ <% end %>
21
+ <% end %>
22
+ RewriteRule ^<%= escape? ? escape(uri.path) : uri.path %>$ <%= new %>? [R=<%= permanent? ? 301 : 302 %>,L]
23
+ </IfModule>
24
+ CODE
25
+
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ require "redirect_code_generator/generator/generator"
2
+
3
+ module RedirectCodeGenerator
4
+ module Generator
5
+ class Apache < Generator
6
+ attr_reader :old, :new
7
+
8
+ def initialize(old, new, permanent = true, escape = true)
9
+ @old, @new, @permanent, @escape = old, new, permanent, escape
10
+ end
11
+
12
+ def create_redirect_code
13
+ erb = ERBFactory.new('apache').get_instance
14
+ erb.result(binding)
15
+ end
16
+
17
+ def uri
18
+ @uri ||= URI.parse(@old)
19
+ end
20
+
21
+ def permanent?
22
+ @permanent
23
+ end
24
+
25
+ def escape?
26
+ @escape
27
+ end
28
+
29
+ def default_port?
30
+ if uri.scheme == 'http' && uri.port == 80
31
+ true
32
+ elsif uri.scheme == 'https' && uri.port == 443
33
+ true
34
+ else
35
+ false
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ require "uri"
2
+ require "redirect_code_generator/erb_factory"
3
+ require "redirect_code_generator/sanitizer"
4
+
5
+ module RedirectCodeGenerator
6
+ module Generator
7
+ class Generator
8
+ include Sanitizer
9
+
10
+ def initialize(options = {})
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ require "redirect_code_generator/generator/apache"
2
+
3
+ module RedirectCodeGenerator
4
+ class GeneratorFactory
5
+ def self.new(klass, options = {})
6
+ return create_instance(klass, options) if klass
7
+ raise ArgumentError, 'must provide klass to be instantiated'
8
+ end
9
+
10
+ # Passes configuration options to instantiated class
11
+ def self.create_instance(klass, options)
12
+ constant = RedirectCodeGenerator
13
+ constant = constant.const_get 'Generator'
14
+ constant = constant.const_get klass
15
+ constant.new options
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module RedirectCodeGenerator
2
+ module Sanitizer
3
+ def escape(str)
4
+ Regexp.escape(str)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module RedirectCodeGenerator
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'redirect_code_generator/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "redirect_code_generator"
8
+ spec.version = RedirectCodeGenerator::VERSION
9
+ spec.licenses = ["MIT"]
10
+ spec.authors = ["tsmsogn"]
11
+ spec.email = ["tsmsogn@gmail.com"]
12
+
13
+ spec.summary = %q{Generate redirect code}
14
+ spec.description = %q{Generate redirect code}
15
+ spec.homepage = "https://github.com/tsmsogn/redirect_code_generator"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.bindir = "exe"
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.13"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rspec", "~> 3.0"
27
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redirect_code_generator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - tsmsogn
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-11-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ description: Generate redirect code
56
+ email:
57
+ - tsmsogn@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".ruby-version"
65
+ - ".travis.yml"
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/console
71
+ - bin/create_apache_redirect_code
72
+ - bin/setup
73
+ - create_apache_redirect_code
74
+ - lib/redirect_code_generator.rb
75
+ - lib/redirect_code_generator/erb_factory.rb
76
+ - lib/redirect_code_generator/erb_templates.rb
77
+ - lib/redirect_code_generator/generator/apache.rb
78
+ - lib/redirect_code_generator/generator/generator.rb
79
+ - lib/redirect_code_generator/generator_factory.rb
80
+ - lib/redirect_code_generator/sanitizer.rb
81
+ - lib/redirect_code_generator/version.rb
82
+ - redirect_code_generator.gemspec
83
+ homepage: https://github.com/tsmsogn/redirect_code_generator
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.4.5.1
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Generate redirect code
107
+ test_files: []