run_cl 1.0.20 → 1.0.21

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # RunCl
2
2
 
3
- TODO: Write a gem description
3
+ Generator, Validator, Formatter/deformatter, for Chilean RUN (Rol Único Nacional)
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,65 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ At your model:
22
+
23
+ include RunCl::ActAsRun
24
+ has_run_cl :rut
25
+
26
+ Where 'rut' is the name of the column that stores the RUN.
27
+
28
+ If you are using factorygirl put this in your factory:
29
+
30
+ FactoryGirl.define do
31
+ factory :user do
32
+ rut Run.for(:user, :rut)
33
+ ....
34
+ end
35
+ end
36
+
37
+ Where 'rut' is the name of the column that stores the RUN.
38
+
39
+
40
+ If you want to check a rut:
41
+
42
+ Run.valid? '11.111.111-1'
43
+ ====>> true
44
+
45
+ Run.valid? '100000000'
46
+ ====>> false
47
+
48
+ Example of valid formats are:
49
+
50
+ 11.111.111-1
51
+ 11111111-1
52
+ 111111111
53
+
54
+ 13.601.658-k
55
+ 13601658-k
56
+ 13601658k
57
+
58
+ 13.601.658-K
59
+ 13601658-K
60
+ 13601658K
61
+
62
+ If you need to generate a valid RUN:
63
+
64
+ Run.generate
65
+
66
+
67
+ If you need to format a RUN:
68
+
69
+ Run.format('111111111')
70
+ ====>> 11.111.111-1
71
+
72
+ If you need to remove a RUN format:
73
+
74
+ Run.remove_format('11.111.111-1')
75
+ ====>> 111111111
76
+
77
+ ## Assumptions
78
+
79
+ You are saving the RUN as a text
22
80
 
23
81
  ## Contributing
24
82
 
data/lib/run_cl.rb CHANGED
@@ -1,7 +1,34 @@
1
1
  require 'run_cl/version'
2
2
  require 'run_cl/run'
3
3
  require 'run_cl/run_validator'
4
+ require 'run_cl/uniq_run_validator'
4
5
 
5
6
 
6
7
  module RunCl
8
+
9
+ module ActAsRun
10
+ extend ActiveSupport::Concern
11
+
12
+ module InstanceMethods
13
+ end
14
+
15
+ module ClassMethods
16
+ include InstanceMethods
17
+ def has_run_cl(name, options = {})
18
+ if not options[:run].presence or options[:run]
19
+ validates name, run: true
20
+ end
21
+
22
+ if not options[:uniq_run].presence or options[:uniq_run]
23
+ validates name, uniq_run: true
24
+ end
25
+
26
+ before_save "make_#{name}_format!"
27
+
28
+ define_method "make_#{name}_format!" do
29
+ self.send("#{name}=", Rut.remove_format(self.send("#{name}")) )
30
+ end
31
+ end
32
+ end
33
+ end
7
34
  end
data/lib/run_cl/run.rb CHANGED
@@ -28,17 +28,19 @@ module Run
28
28
  def self.for model, attribute, randomize=true
29
29
  valid_rut = randomize ? self.generate : '111111111'
30
30
 
31
- if ActiveRecord::Base.connection.table_exists? model.to_s
32
- model_class = model.to_s.camelize.constantize
31
+ model_class = model.to_s.camelize.constantize
32
+ if model_class.respond_to?(:table_name) && ActiveRecord::Base.connection.table_exists?(model_class.table_name)
33
33
  while model_class.where(attribute.to_sym => valid_rut).any? do valid_rut = self.generate end
34
+ else
35
+ puts "not ActiveRecord::Base.connection.table_exists? model.to_s"
34
36
  end
35
37
 
36
38
  valid_rut
37
39
  end
38
40
 
39
41
  # Generar un run valido segun reglas chilenas
40
- def self.generate seed = nil
41
- run = (rand * 20000000).round + 5000000 unless seed.presence
42
+ def self.generate
43
+ run = (rand * 20000000).round + 5000000
42
44
 
43
45
  suma = 0
44
46
  mul = 2
@@ -62,7 +64,7 @@ module Run
62
64
  end
63
65
 
64
66
  # Revisa si el run entregado es valido, el run debe incluir el digito verificador
65
- def valid_run? run
67
+ def valid? run
66
68
  if run
67
69
  run_copy = run.clone
68
70
  run_copy = run_copy.match(/^(\d+)\.{1}\d{3}\.{1}\d{3}-{1}(\d|k|K)$|^(\d+)\d{6}\-{1}(\d|k|K)|^(\d+)\d{6}(\d|k|K)$/i).to_s
@@ -3,11 +3,11 @@
3
3
  class RunValidator < ActiveModel::Validator
4
4
  def validate record
5
5
  options[:attributes].each do |attribute|
6
- record.errors[attribute.to_sym] << 'no es válido' unless Run.valid_run? record.send(attribute)
6
+ record.errors[attribute.to_sym] << 'no es válido!!!' unless Run.valid? record.send(attribute)
7
7
  end
8
8
  end
9
9
 
10
10
  private
11
- # record.errors[attribute.to_sym] << I18n.t('run.invalid') unless Run.valid_run? record.send(attribute)
11
+ # record.errors[attribute.to_sym] << I18n.t('run.invalid') unless Run.valid? record.send(attribute)
12
12
 
13
13
  end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ class UniqRunValidator < ActiveModel::Validator
4
+ def validate record
5
+ options[:attributes].each do |attribute|
6
+ run = Run.remove_format record.send(attribute)
7
+ record.errors[attribute.to_sym] << 'ya está en uso!!!' if record.class.where(attribute => run).any?
8
+ end
9
+ end
10
+
11
+ private
12
+ # record.errors[attribute.to_sym] << I18n.t('run.in_use') unless Run.valid? record.send(attribute)
13
+ end
@@ -1,3 +1,3 @@
1
1
  module RunCl
2
- VERSION = "1.0.20"
2
+ VERSION = "1.0.21"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: run_cl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.20
4
+ version: 1.0.21
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-20 00:00:00.000000000 Z
12
+ date: 2013-03-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Formateador/Desformateador, Generador, Validador de Rut Chilenos
15
15
  email:
@@ -26,6 +26,7 @@ files:
26
26
  - lib/run_cl.rb
27
27
  - lib/run_cl/run.rb
28
28
  - lib/run_cl/run_validator.rb
29
+ - lib/run_cl/uniq_run_validator.rb
29
30
  - lib/run_cl/version.rb
30
31
  - run_cl.gemspec
31
32
  homepage: https://bitbucket.org/mespina/run