short_url_token_generator 0.1.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.
@@ -0,0 +1,44 @@
1
+ Short url token generator
2
+ =========================
3
+
4
+ Use to generate/decode tokens for urls
5
+
6
+ Install
7
+ -------
8
+
9
+ Just add this to your Gemfile:
10
+ `gem 'short_url_token_generator'` (not yet published in RubyGems.org)
11
+
12
+ And run your bundler:
13
+ `bundle install`
14
+
15
+ Usage
16
+ -----
17
+
18
+ pending
19
+
20
+ Example
21
+ -------
22
+
23
+ class Url < ActiveRecord::Base
24
+ before_create do
25
+ if self.token.nil? or self.token.empty?
26
+ self.token = generate_token Url.count(conditions: {:custom => false})
27
+ else
28
+ self.custom = true
29
+ end
30
+ end
31
+ private
32
+ def generate_token num
33
+ token = ShortUrlTokenGenerator::generate num
34
+ if Url.count(conditions: {:token => token}) > 0
35
+ token = generate_token num + 1
36
+ end
37
+ token
38
+ end
39
+ end
40
+
41
+ License
42
+ -------
43
+
44
+ Copyright (C) 2012 Josemar Davi Luedke <josemarluedke@gmail.com>, released under the MIT license.
@@ -0,0 +1,26 @@
1
+ module ShortUrlTokenGenerator
2
+ def self.generate num
3
+ token = ""
4
+ base_notation(num).split('-').each { |position| token += "#{mapping[position.to_i]}" }
5
+ token
6
+ end
7
+
8
+ def self.decode token
9
+ return -1 if token.length > 15
10
+ num = i = 0
11
+ token.chars.to_a.reverse_each do |t|
12
+ num += mapping.index(t) * mapping.length**i unless mapping.index(t).nil?
13
+ i += 1
14
+ end
15
+ num
16
+ end
17
+
18
+ def self.base_notation num, base = nil
19
+ base = mapping.length if base.nil?
20
+ num < base ? "#{num}" : "#{base_notation (num/base).floor, base}-#{num % base}"
21
+ end
22
+
23
+ def self.mapping
24
+ 'oJC8RZuYg2pTrAIkjWHN1nxQ3c4yVKP5X9LBbaisDdfqv6heU7zGFSOlEw0mMt'.chars.to_a
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "short_url_token_generator"
3
+ s.version = "0.1.0"
4
+ s.description = "Short url token generator, use to generate/decode tokens for urls"
5
+ s.summary = "Short url token generator"
6
+ s.author = "Josemar Davi Luedke"
7
+ s.email = "josemarluedke@gmail.com"
8
+ s.homepage = "https://github.com/josemarluedke/short_url_token_generator"
9
+ s.files = Dir["{lib/*.rb,README.md,spec/*.rb,*.gemspec}"]
10
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe ShortUrlTokenGenerator do
4
+
5
+ describe 'mapping' do
6
+ it "should be array" do
7
+ ShortUrlTokenGenerator::mapping.should be_instance_of(Array)
8
+ end
9
+ end
10
+
11
+ describe 'base notation' do
12
+ it 'should be return 10' do
13
+ ShortUrlTokenGenerator::base_notation(10).should eq "10"
14
+ end
15
+
16
+ it 'should be return 1-0' do
17
+ ShortUrlTokenGenerator::base_notation(62).should eq "1-0"
18
+ end
19
+
20
+ it 'should be return 1-1' do
21
+ ShortUrlTokenGenerator::base_notation(63).should eq "1-1"
22
+ end
23
+
24
+ it 'should be return 2-2' do
25
+ ShortUrlTokenGenerator::base_notation(26, 12).should eq "2-2"
26
+ end
27
+ end
28
+
29
+ describe 'generate' do
30
+ it "should be return the first character" do
31
+ ShortUrlTokenGenerator::generate(0).should eq ShortUrlTokenGenerator::mapping[0]
32
+ end
33
+
34
+ it "should be return the correct characters" do
35
+ ShortUrlTokenGenerator::generate(134).should eq "#{ShortUrlTokenGenerator::mapping[2]}#{ShortUrlTokenGenerator::mapping[10]}"
36
+ end
37
+ end
38
+
39
+ describe "decode" do
40
+ it 'should be return correct num of token' do
41
+ ShortUrlTokenGenerator::decode("#{ShortUrlTokenGenerator::mapping[2]}#{ShortUrlTokenGenerator::mapping[10]}").should eq 134
42
+ end
43
+
44
+ it 'should be return -1, because token is > 15' do
45
+ ShortUrlTokenGenerator::decode("oJC8RZuYg2pTrAIK").should eq -1
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,2 @@
1
+ require './lib/short_url_token_generator.rb'
2
+ require 'rspec'
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: short_url_token_generator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Josemar Davi Luedke
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-18 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Short url token generator, use to generate/decode tokens for urls
15
+ email: josemarluedke@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/short_url_token_generator.rb
21
+ - README.md
22
+ - spec/short_url_token_generator_spec.rb
23
+ - spec/spec_helper.rb
24
+ - short_url_token_generator.gemspec
25
+ homepage: https://github.com/josemarluedke/short_url_token_generator
26
+ licenses: []
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 1.8.10
46
+ signing_key:
47
+ specification_version: 3
48
+ summary: Short url token generator
49
+ test_files: []