run-cl 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'Run'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task :default => :test
@@ -0,0 +1,3 @@
1
+ 'es-CL':
2
+ run:
3
+ invalid: Invalid
@@ -0,0 +1,3 @@
1
+ 'es-CL':
2
+ run:
3
+ invalid: No es válido
@@ -0,0 +1,6 @@
1
+ require 'run-cl/run'
2
+ require 'run-cl/run_validator'
3
+ require 'run-cl/version'
4
+
5
+ module RunCl
6
+ end
@@ -0,0 +1,86 @@
1
+ # module RunCl
2
+ module Run
3
+ extend self
4
+
5
+ # Formatea un run
6
+ def self.format run
7
+ pos = 0
8
+ run.reverse
9
+ reverse = ""
10
+ run.reverse.gsub("-", "").gsub(".", "").split('').each_with_index do |c, index|
11
+ reverse += c
12
+ if index == 0
13
+ reverse += '-'
14
+ elsif (pos == 3)
15
+ reverse += "."
16
+ pos = 0
17
+ end
18
+ pos += 1
19
+ end
20
+ reverse.reverse
21
+ end
22
+
23
+ # Quita el formato de un run
24
+ def self.remove_format run
25
+ run.gsub("-", "").gsub(".", "")
26
+ end
27
+
28
+ # Generar un run valido segun reglas chilenas y que ademas es unico para el modelo entregado
29
+ def self.for model, attribute, randomize=true
30
+ model_class = model.to_s.camelize.constantize
31
+
32
+ valid_rut = randomize ? Run.generate : '111111111'
33
+ while model_class.where(attribute.to_sym => valid_rut).any? do valid_rut = Run.generate end
34
+ valid_rut
35
+ end
36
+
37
+ # Generar un run valido segun reglas chilenas
38
+ def self.generate seed = nil
39
+ run = (rand * 20000000).round + 5000000 unless seed.presence
40
+
41
+ suma = 0
42
+ mul = 2
43
+ run.to_s.reverse.split('').each do |i|
44
+ suma = suma + i.to_i * mul
45
+ if mul == 7
46
+ mul = 2
47
+ else
48
+ mul += 1
49
+ end
50
+ end
51
+ res = suma % 11
52
+
53
+ if res == 1
54
+ return "#{run}k"
55
+ elsif res == 0
56
+ return "#{run}0"
57
+ else
58
+ return "#{run}#{11-res}"
59
+ end
60
+ end
61
+
62
+ # Revisa si el run y digito entregado es valido
63
+ def self.check_run run, digit
64
+ return false if run.empty?
65
+ return false if digit.empty?
66
+
67
+ factor = 2
68
+ suma = 0
69
+ i = run.length - 1
70
+
71
+ while i >= 0
72
+ factor = 2 if factor > 7
73
+ suma = suma + ( run[i] ).to_i * factor.to_i
74
+ factor += 1
75
+ i -= 1
76
+ end
77
+
78
+ dv = 11 - ( suma % 11 )
79
+ dv = 0 if dv == 11
80
+ dv = "k" if dv == 10
81
+
82
+ return true if dv.to_s == digit.downcase
83
+ false
84
+ end
85
+ end
86
+ # end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ # module RunCl
3
+ class RunValidator < ActiveModel::Validator
4
+ def validate record
5
+ if record.respond_to? :run
6
+ # record.errors[:run] << I18n.t('run.invalid') unless valid_run? record
7
+ record.errors[:run] << 'no es válido' unless valid_run? record
8
+ end
9
+ end
10
+
11
+ private
12
+
13
+ def valid_run? record
14
+ if run = record.run.presence
15
+ record.run = ( run = run.match(/^(\d+)[^\d*](\d+)[^\d*](\d+)[^\d*](\d|k)|(\d+)[^\d*](\d|k)|(\d+k)|(\d+)$/i).to_s ) =~ /\.|\-/ ? run.gsub!(/\.|\-/, '') : run
16
+ RunCl::Run.check_run record.run.chop, record.run.last
17
+ else
18
+ false
19
+ end
20
+ end
21
+ end
22
+ # end
@@ -0,0 +1,3 @@
1
+ module RunCl
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :run-cl do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class RunClTest < ActiveSupport::TestCase
4
+ test "truth" do
5
+ assert_kind_of Module, RunCl
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
15
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: run-cl
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - mespina
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.12
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.12
30
+ description: Formateador/Desformateador, Generador, Validador de Rut Chilenos
31
+ email:
32
+ - mespina.icc@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - config/locale/run-cl.en.yml
38
+ - config/locale/run-cl.es-CL.yml
39
+ - lib/run-cl/run.rb
40
+ - lib/run-cl/run_validator.rb
41
+ - lib/run-cl/version.rb
42
+ - lib/run-cl.rb
43
+ - lib/tasks/run_tasks.rake
44
+ - Rakefile
45
+ - test/run-cl_test.rb
46
+ - test/test_helper.rb
47
+ homepage: https://bitbucket.org/mespina/run
48
+ licenses: []
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 1.8.24
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: Rut Chilenos
71
+ test_files:
72
+ - test/run-cl_test.rb
73
+ - test/test_helper.rb