unpack brazilian-rails

This commit is contained in:
2013-07-14 11:09:25 -04:00
parent 7d287fe530
commit e563725dc5
131 changed files with 5496 additions and 0 deletions

View File

View File

@@ -0,0 +1,20 @@
Copyright (c) 2008 [name of plugin creator]
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1 @@
Aqui vai o readme

View File

@@ -0,0 +1,74 @@
# encoding: UTF-8
require "rubygems"
require "rake"
require "rake/testtask"
require "rdoc/task"
require "rake/packagetask"
require "rake/gempackagetask"
require File.join(File.dirname(__FILE__), "lib", "brdata", "version")
PKG_BUILD = ENV["PKG_BUILD"] ? "." + ENV["PKG_BUILD"] : ""
PKG_NAME = "brdata"
PKG_VERSION = BrData::VERSION::STRING + PKG_BUILD
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
desc "Default Task"
task :default => [ :test ]
# Run the unit tests
Rake::TestTask.new { |t|
t.libs << "test"
t.pattern = "test/*_test.rb"
t.verbose = true
t.warning = false
}
#Generate the RDoc documentation
Rake::RDocTask.new { |rdoc|
rdoc.rdoc_dir = "doc"
rdoc.title = "Brazilian Rails -- Data"
rdoc.options << "--line-numbers" << "--inline-source" << "-A cattr_accessor=object"
rdoc.options << "--charset" << "utf-8"
rdoc.template = "#{ENV["template"]}.rb" if ENV["template"]
rdoc.rdoc_files.include("README", "CHANGELOG")
rdoc.rdoc_files.include("lib/**/*")
}
# Create compressed packages
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = PKG_NAME
s.summary = "brdata é uma das gems que compoem o Brazilian Rails"
s.description = %q{brdata é uma das gems que compoem o Brazilian Rails}
s.version = PKG_VERSION
s.authors = ["Marcos Tapajós", "Celestino Gomes", "Andre Kupkosvki", "Vinícius Teles", "Felipe Barreto", "Rafael Walter", "Cassio Marques"]
s.email = %w"tapajos@gmail.com tinorj@gmail.com kupkovski@gmail.com vinicius.m.teles@gmail.com felipebarreto@gmail.com rafawalter@gmail.com cassiommc@gmail.com"
s.rubyforge_project = "brdata"
s.homepage = "http://www.improveit.com.br/software_livre/brazilian_rails"
s.add_dependency("actionpack", ">= 3.0.0")
s.add_dependency("activesupport", ">= 3.0.0")
s.add_development_dependency "rake"
s.add_development_dependency "mocha"
s.has_rdoc = true
s.requirements << "none"
s.require_path = "lib"
# s.autorequire = "brdata"
s.files = [ "Rakefile", "README", "CHANGELOG", "MIT-LICENSE" ]
s.files = s.files + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
s.files = s.files + Dir.glob( "test/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
end
Rake::GemPackageTask.new(spec) do |p|
p.gem_spec = spec
end
desc "Publish the release files to RubyForge."
task :release => [ :package ] do
`gem push pkg/#{PKG_FILE_NAME}.gem`
end

View File

@@ -0,0 +1,47 @@
# encoding: UTF-8
# Load the rails application
$:.unshift(File.dirname(__FILE__)) unless
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
require 'rubygems'
require 'action_controller'
require 'active_support'
require 'action_view'
%w(date_portuguese
time_portuguese
version
br_date_helper
feriado
feriado_parser
excecoes
).each {|req| require File.dirname(__FILE__) + "/brdata/#{req}"}
module BrData
end
old_verbose = $VERBOSE
$VERBOSE = nil
[Time, Date].each do |clazz|
eval "#{clazz}::MONTHNAMES = [nil] + %w(Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro)"
eval "#{clazz}::DAYNAMES = %w(Domingo Segunda-Feira Terça-Feira Quarta-Feira Quinta-Feira Sexta-Feira Sábado)"
eval "#{clazz}::ABBR_MONTHNAMES = [nil] + %w(Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez)"
eval "#{clazz}::ABBR_DAYNAMES = %w(Dom Seg Ter Qua Qui Sex Sáb)"
end
$VERBOSE = old_verbose
feriados, metodos = FeriadoParser.parser(File.dirname(__FILE__) + "/brdata/config")
# Verifica se existe arquivo de feriados na aplicação e carrega-os
FERIADOS_PATH = ""
FERIADOS_PATH = File.expand_path(File.split(APP_PATH)[0] + "/feriados", __FILE__) if defined?(APP_PATH)
if File.directory?(FERIADOS_PATH)
f, m = FeriadoParser.parser(FERIADOS_PATH)
feriados += f
metodos += m
end
Date::FERIADOS.clear
Date::FERIADOS_METODOS.clear
feriados.each { |f| Date::FERIADOS << f }
metodos.each { |m| Date::FERIADOS_METODOS << m }

View File

@@ -0,0 +1,34 @@
# encoding: UTF-8
module ActionView::Helpers::DateHelper
# Traduz o método distance_of_time_in_words para retornar esse valor em português
#
def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
from_time = from_time.to_time if from_time.respond_to?(:to_time)
to_time = to_time.to_time if to_time.respond_to?(:to_time)
distance_in_minutes = (((to_time - from_time).abs)/60).round
distance_in_seconds = ((to_time - from_time).abs).round
case distance_in_minutes
when 0..1
return (distance_in_minutes == 0) ? 'menos de um minuto' : '1 minuto' unless include_seconds
case distance_in_seconds
when 0..4 then 'menos de 5 segundos'
when 5..9 then 'menos de 10 segundos'
when 10..19 then 'menos de 20 segundos'
when 20..39 then 'meio minuto'
when 40..59 then 'menos de um minuto'
else '1 minuto'
end
when 2..44 then "#{distance_in_minutes} minutos"
when 45..89 then 'aproximadamente 1 hora'
when 90..1439 then "aproximadamente #{(distance_in_minutes.to_f / 60.0).round} horas"
when 1440..2879 then '1 dia'
when 2880..43199 then "#{(distance_in_minutes / 1440).round} dias"
when 43200..86399 then 'aproximadamente 1 mês'
when 86400..525959 then "#{(distance_in_minutes / 43200).round} meses"
when 525960..1051919 then 'aproximadamente 1 ano'
else "mais de #{(distance_in_minutes / 525960).round} anos"
end
end
end

View File

@@ -0,0 +1,24 @@
confraternizacao_mundial:
dia: 01
mes: 01
tiradentes:
dia: 21
mes: 04
trabalho:
dia: 01
mes: 05
independencia:
dia: 07
mes: 09
padroeira:
dia: 12
mes: 10
finados:
dia: 02
mes: 11
republica:
dia: 15
mes: 11
natal:
dia: 25
mes: 12

View File

@@ -0,0 +1,4 @@
pascoa:
metodo: pascoa
corpus_christi:
metodo: corpus_christi

View File

@@ -0,0 +1,50 @@
class String
# Cria a data no padrao brasileiro e permanece aceitando no formato tradicional.
#
# Exemplo:
# "27/09/2007".to_date
alias_method :_original_to_date, :to_date
def to_date
if /^(0[1-9]|[12]\d|3[01])\W(0[1-9]|1[012])\W(\d{4})$/ =~ self
::Date.new($3.to_i, $2.to_i, $1.to_i)
else
_original_to_date
end
end
end
class Date
# Retorna a data no padrao brasileiro
#
# Exemplo:
# data = Date.new(2007, 9, 27)
# data.to_s_br ==> "27/09/2007"
def to_s_br
strftime("%d/%m/%Y")
end
# Valida se uma string eh uma data valida
#
# Exemplo:
# Date.valid?('01/01/2007') ==> true
# Date.valid?('32/01/2007') ==> false
def self.valid?(date)
begin
date = date.to_date
Date.valid_civil?(date.year, date.month, date.day)
rescue
return false
end
true
end
end
class NilClass
def to_s_br
""
end
end

View File

@@ -0,0 +1,11 @@
# encoding: UTF-8
def cria_excecao(classe, mensagem)
eval "class #{classe}; def initialize; super('#{mensagem}'); end; end"
end
cria_excecao("FeriadoMesInvalidoError < ArgumentError", "O mês deve ser um número e estar entre 01 e 12")
cria_excecao("FeriadoDiaInvalidoError < ArgumentError", "O mês deve ser um número e estar entre 01 e 31")
cria_excecao("FeriadoParserDiretorioInvalidoError < ArgumentError", "Só é possivel fazer parser de um diretorio contendo os arquivos yml.")
cria_excecao("FeriadoParserDiretorioVazioError < ArgumentError", "Não existe nenhum yml no diretorio.")
cria_excecao("FeriadoParserMetodoInvalido < ArgumentError", "Quando for usado o parametro metodo não deve exitir dia nem mês.")

View File

@@ -0,0 +1,89 @@
# == Configuração dos Feriados
#
# Os feriados são configurados através de arquivos YML que deverão estar na pasta feriados dentro da pasta config da sua aplicação.
#
# Você pode ver exemplos desses YML dentro do diretório samples/feriado.
#
class Feriado
attr_accessor :dia
attr_accessor :mes
attr_accessor :nome
# Construtor um feriado.
#
# Exemplo:
# Feriado.new("nome", "01", "01")
def initialize(nome, dia, mes)
valida_dia(dia)
valida_mes(mes)
self.nome = nome
self.dia = dia.to_i
self.mes = mes.to_i
end
# Compara dois feriados. Dois feriados são iguais se acontecem na mesma data.
def ==(outro_feriado)
self.mes == outro_feriado.mes && self.dia == outro_feriado.dia
end
private
def valida_dia(dia)
raise FeriadoDiaInvalidoError unless (1..31).include?(dia.to_i)
end
def valida_mes(mes)
raise FeriadoMesInvalidoError unless (1..12).include?(mes.to_i)
end
end
class Date
FERIADOS = []
FERIADOS_METODOS = []
# Retorna a true se a data for um feriado
#
# Exemplo:
# data = Date.new(2007, 12, 25)
# data.feriado? ==> true
def feriado?
return true if FERIADOS.include?(Feriado.new("novo_feriado", self.day, self.month))
FERIADOS_METODOS.each do |metodo|
return true if self == send(metodo)
end
false
end
# Retorna a pascoa no ano da data atual
#
# Exemplo:
# data = Date.new(2007, 12, 25)
# data.pascoa ==> "2007-4-8"
def pascoa
g = self.year % 19
c = (self.year / 100).floor
h = (c - ( c / 4 ).floor - ((8 * c) / 25).floor + 19 * g + 15) % 30
i = h - (h / 28).floor * (1 - (h / 28).floor * (29 / (h + 1)).floor * ((21 - g) / 11).floor)
j = (self.year + (self.year/ 4).floor + i + 2 - c + (c / 4).floor) % 7
l = i - j
month = 3 + ((l + 40) / 44).floor
day = l + 28 - (31 * (month / 4 ).floor)
Date.parse("#{self.year}-#{month}-#{day}")
end
# Retorna a corpus_christi no ano da data atual
#
# Exemplo:
# data = Date.new(2007, 12, 25)
# data.corpus_christi ==> "2007-06-07"
def corpus_christi
Date.parse((pascoa.to_time + 60.days).to_date.to_s)
end
end

View File

@@ -0,0 +1,30 @@
require 'find'
require 'yaml'
class FeriadoParser
# Faz o parser do YML e retorna a coleção de feriados.
def self.parser(diretorio)
files = []
feriados = []
metodos = []
raise FeriadoParserDiretorioInvalidoError unless File.directory?(diretorio)
Find.find(diretorio) do |file|
files << file if file =~ /.*\.yml$/
end
raise FeriadoParserDiretorioVazioError if files.empty?
files.each do |file|
itens = YAML.load_file(file)
itens.each do |key, value|
if value["metodo"]
FeriadoParserMetodoInvalido if value["dia"] && value["mes"]
metodos << value["metodo"]
else
feriados << Feriado.new(key, value["dia"], value["mes"])
end
end
end
[feriados, metodos]
end
end

View File

@@ -0,0 +1,44 @@
class String
# Cria a data com horário no padrao brasileiro e permanece aceitando no formato tradicional.
#
# Exemplo:
# "27/09/2007 01:23".to_date
alias_method :_original_to_time, :to_time
def to_time
if /^(0?[1-9]|[12]\d|3[01])\W(0?[1-9]|1[012])\W(\d{4})(\W([01]?\d|2[0123])\W([0-5]?\d)\W?([0-5]\d)?)?$/ =~ self
::Time.mktime($3.to_i, $2.to_i, $1.to_i, $5.to_i, $6.to_i, $7.to_i)
else
_original_to_time
end
end
end
class Time
alias :strftime_nolocale :strftime
# Retorna a hora no padrao brasileiro
#
# Exemplo:
# hora = Time.new
# hora.to_s_br ==> "27/09/2007 13:54"
def to_s_br
self.strftime("%d/%m/%Y %H:%M")
end
# Formata a hora usando nomes de dias e meses em Portugues
# Exemplo:
# hora = Time.new
# hora.strftime("%B") ==> "Janeiro"
# http://forum.rubyonbr.org/forums/1/topics/261
def strftime(format)
format = format.dup
format.gsub!(/%a/, Date::ABBR_DAYNAMES[self.wday])
format.gsub!(/%A/, Date::DAYNAMES[self.wday])
format.gsub!(/%b/, Date::ABBR_MONTHNAMES[self.mon])
format.gsub!(/%B/, Date::MONTHNAMES[self.mon])
self.strftime_nolocale(format)
end
end

View File

@@ -0,0 +1,10 @@
module BrData
module VERSION #:nodoc:
MAJOR = 3
MINOR = 3
TINY = 0
STRING = "#{MAJOR}.#{MINOR}.#{TINY}"
end
end

View File

@@ -0,0 +1 @@
require File.dirname(__FILE__) + '/../lib/brdata'

View File

@@ -0,0 +1,18 @@
confraternizacao_mundial:
dia: 01
mes: 01
tiradentes:
dia: 21
mes: 04
trabalho:
dia: 01
mes: 05
independencia:
dia: 07
mes: 08
republica:
dia: 15
mes: 11
natal:
dia: 25
mes: 12

View File

@@ -0,0 +1,4 @@
pascoa:
metodo: pascoa
corpus_christi:
metodo: corpus_christi

View File

@@ -0,0 +1,29 @@
# encoding: UTF-8
require File.dirname(__FILE__) + '/test_helper'
require 'mocha'
class ActionViewTest < Test::Unit::TestCase
include ActionView::Helpers::DateHelper
def test_distance_of_time_in_words
assert_equal "menos de um minuto", distance_of_time_in_words("Sat Sep 08 22:51:58 -0300 2007".to_time, "Sat Sep 08 22:51:59 -0300 2007".to_time)
assert_equal "menos de 5 segundos", distance_of_time_in_words("Sat Sep 08 22:51:58 -0300 2007".to_time, "Sat Sep 08 22:51:59 -0300 2007".to_time, true)
assert_equal "menos de 10 segundos", distance_of_time_in_words("Sat Sep 08 22:51:50 -0300 2007".to_time, "Sat Sep 08 22:51:55 -0300 2007".to_time, true)
assert_equal "menos de 20 segundos", distance_of_time_in_words("Sat Sep 08 22:51:00 -0300 2007".to_time, "Sat Sep 08 22:51:10 -0300 2007".to_time, true)
assert_equal "meio minuto", distance_of_time_in_words("Sat Sep 08 22:51:00 -0300 2007".to_time, "Sat Sep 08 22:51:20 -0300 2007".to_time, true)
assert_equal "menos de um minuto", distance_of_time_in_words("Sat Sep 08 22:51:00 -0300 2007".to_time, "Sat Sep 08 22:51:40 -0300 2007".to_time, true)
assert_equal "1 minuto", distance_of_time_in_words("Sat Sep 08 22:51:00 -0300 2007".to_time, "Sat Sep 08 22:52:00 -0300 2007".to_time, true)
assert_equal "1 minuto", distance_of_time_in_words("Sat Sep 08 22:51:59 -0300 2007".to_time, "Sat Sep 08 22:52:59 -0300 2007".to_time)
assert_equal "2 minutos", distance_of_time_in_words("Sat Sep 08 22:51:59 -0300 2007".to_time, "Sat Sep 08 22:53:59 -0300 2007".to_time)
assert_equal "aproximadamente 1 hora", distance_of_time_in_words("Sat Sep 08 21:51:59 -0300 2007".to_time, "Sat Sep 08 22:51:59 -0300 2007".to_time)
assert_equal "aproximadamente 2 horas", distance_of_time_in_words("Sat Sep 08 20:51:59 -0300 2007".to_time, "Sat Sep 08 22:51:59 -0300 2007".to_time)
assert_equal "1 dia", distance_of_time_in_words("Sat Sep 07 20:51:59 -0300 2007".to_time, "Sat Sep 08 20:51:59 -0300 2007".to_time)
assert_equal "2 dias", distance_of_time_in_words("Sat Sep 06 20:51:59 -0300 2007".to_time, "Sat Sep 08 20:51:59 -0300 2007".to_time)
assert_equal "aproximadamente 1 mês", distance_of_time_in_words("Sat Oct 06 20:51:59 -0300 2007".to_time, "Sat Sep 06 20:51:59 -0300 2007".to_time)
assert_equal "2 meses", distance_of_time_in_words("Sat Nov 06 20:51:59 -0300 2007".to_time, "Sat Sep 06 20:51:59 -0300 2007".to_time)
assert_equal "12 meses", distance_of_time_in_words("Sat Nov 06 20:51:59 -0300 2006".to_time, "Sat Nov 06 20:51:59 -0300 2007".to_time)
assert_equal "aproximadamente 1 ano", distance_of_time_in_words("Sat Nov 06 20:51:59 -0300 2006".to_time, "Sat Dec 06 20:51:59 -0300 2007".to_time)
assert_equal "mais de 3 anos", distance_of_time_in_words("Sat Nov 06 20:51:59 -0300 2006".to_time, "Sat Dec 06 20:51:59 -0300 2009".to_time)
end
end

View File

@@ -0,0 +1,76 @@
# encoding: UTF-8
require File.dirname(__FILE__) + '/test_helper'
class DateTest < Test::Unit::TestCase
# to_date
def test_create_date_with_traditional_date_format
assert_equal "2007-01-02", "2007/01/02".to_date.to_s
end
def test_create_date_with_brazilian_date_format
assert_equal "2007-12-13", "13/12/2007".to_date.to_s
end
def test_create_date_with_other_brazilian_date_format
assert_equal "2007-02-01", "01-02-2007".to_date.to_s
end
#to_s
def test_date_to_s_with_traditional_format
assert_equal "2007-02-01", "01/02/2007".to_date.to_s
end
#to_s_br
def test_date_to_s_br
assert_equal "13/12/2007", "13/12/2007".to_date.to_s_br
end
#to_s_br when date is nil
def test_date_to_s_br_when_date_is_nil
assert_equal "", nil.to_s_br
end
#valid?
def test_valid_when_date_format_is_traditional_and_valid_format_and_valid_civil
assert Date.valid?("2007/01/02"), "Should be a valid date"
end
def test_valid_when_date_format_is_brazilian_and_valid_format_and_valid_civil
assert Date.valid?("13/12/2007"), "Should be a valid date"
end
if RUBY_VERSION < '1.9'
# IMPORTANTE: Date#parse se comporta de forma diferente no ruby 1.9,
# por isso esse teste não é executado no 1.9, ate que haja uma solução melhor
def test_valid_when_date_format_is_invalid
assert !Date.valid?("13/12/200A"), "Should be a invalid date"
end
end
def test_valid_when_date_format_is_brazilian_and_valid_format_and_invalid_civil
assert !Date.valid?("00/00/0000"), "Should be a invalid date"
end
def test_month_names
expected = [nil] + %w[Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro]
assert_equal expected, Date::MONTHNAMES
end
def test_days_names
assert_equal %w[Domingo Segunda-Feira Terça-Feira Quarta-Feira Quinta-Feira Sexta-Feira Sábado], Date::DAYNAMES
end
def test_abbr_monthnames
assert_equal [nil] + %w[Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez], Date::ABBR_MONTHNAMES
end
def test_abbr_daysnames
assert_equal %w[Dom Seg Ter Qua Qui Sex Sáb], Date::ABBR_DAYNAMES
end
def test_date_translation_with_strftime
assert_equal "Dezembro Dez Sexta-Feira Sex", Date.parse("2008-12-05").strftime("%B %b %A %a")
end
end

View File

@@ -0,0 +1,30 @@
require File.dirname(__FILE__) + '/test_helper'
class FeriadoParserTest < Test::Unit::TestCase
FERIADO_YML_PATH = File.expand_path(File.dirname(__FILE__) + '/../lib/brdata/config')
p FERIADO_YML_PATH
NATAL = Feriado.new("natal", 25, 12)
def test_feriados
feriados, metodos = FeriadoParser.parser(FERIADO_YML_PATH)
feriados.each {|feriado| assert_kind_of Feriado, feriado}
assert_equal NATAL, feriados.find {|f| f.nome == "natal"}
assert metodos.include?( "pascoa")
assert metodos.include?( "corpus_christi")
end
def test_feriados_quando_path_nao_eh_diretorio
assert_raise FeriadoParserDiretorioInvalidoError do
FeriadoParser.parser(File.dirname(__FILE__) + 'dinheiro_test.rb')
end
end
def test_feriados_quando_path_nao_contem_arquivos
assert_raise FeriadoParserDiretorioVazioError do
FeriadoParser.parser(File.dirname(__FILE__))
end
end
end

View File

@@ -0,0 +1,114 @@
# encoding: UTF-8
require File.dirname(__FILE__) + '/test_helper'
require 'rubygems'
require 'active_support/all'
class FeriadoTest < Test::Unit::TestCase
ATRIBUTOS = %w(dia mes nome)
# feriado
def test_feriado_quando_feriado
assert "25/12/2007".to_date.feriado?
end
def test_feriado_quando_nao_eh_feriado
assert !"01/12/2007".to_date.feriado?
end
def test_feriado_quando_feriado_eh_pascoa
assert "08/04/2007".to_date.feriado?
end
def test_feriado_quando_feriado_eh_corpus_christi
assert "07/06/2007".to_date.feriado?
end
# feriados nacionais
def test_confraternizacao_mundial
assert "01/01/2012".to_date.feriado?
end
def test_tiradentes
assert "21/04/2012".to_date.feriado?
end
def test_trabalho
assert "01/05/2012".to_date.feriado?
end
def test_independencia
assert "07/09/2012".to_date.feriado?
end
def test_finados
assert "02/11/2012".to_date.feriado?
end
def test_republica
assert "15/11/2012".to_date.feriado?
end
def test_natal
assert "25/12/2012".to_date.feriado?
end
def test_padroeira_brasil
assert "12/10/2012".to_date.feriado?
end
# pascoa
def test_pascoa
assert_equal "08/04/2007", "01/01/2007".to_date.pascoa.to_s_br
end
# corpus_christi
def test_corpus_christi
assert_equal "07/06/2007", "01/01/2007".to_date.corpus_christi.to_s_br
end
def test_attributes
feriado = Feriado.new("nome", "01", "01")
ATRIBUTOS.each do |atributo|
assert_respond_to feriado, "#{atributo}", "Deveria existir o método #{atributo}"
assert_respond_to feriado, "#{atributo}=", "Deveria existir o método #{atributo}="
end
end
def test_initialize
feriado = Feriado.new("nome", "01", "01")
assert feriado, "deveria ter criado um feriado"
assert_equal "nome", feriado.nome
assert_equal 1, feriado.dia
assert_equal 1, feriado.mes
end
def test_initialize_com_dia_invalido
['a', 0, -1, 32, '32', '-1', '0'].each do |invalid_day|
assert_raise FeriadoDiaInvalidoError do
Feriado.new("nome", invalid_day, "01")
raise "Deveria retornar FeriadoDiaInvalidoError para dia #{invalid_day}"
end
end
end
def test_initialize_com_mes_invalido
['a', '13', 13, -1, '-1', '0'].each do |invalid_month|
assert_raise FeriadoMesInvalidoError do
Feriado.new("nome", "01", invalid_month)
raise "Deveria retornar FeriadoMesInvalidoError para mês #{invalid_month}"
end
end
end
def test_igualdade
assert_equal Feriado.new("nome", "01", "01"), Feriado.new("nome2", "01", "01")
end
def test_igualdade_quando_nao_eh_igual
assert_not_equal Feriado.new("nome", "01", "01"), Feriado.new("nome2", "01", "02")
end
end

View File

@@ -0,0 +1,2 @@
require 'test/unit'
require File.dirname(__FILE__) + '/../lib/brdata'

View File

@@ -0,0 +1,59 @@
# encoding: UTF-8
require File.dirname(__FILE__) + '/test_helper'
class TimeTest < Test::Unit::TestCase
# to_time
def test_create_time_with_traditional_time_format
assert_equal "2007-01-02 01:23:00", "2007/01/02 01:23".to_time.to_s(:db)
end
def test_create_time_with_brazilian_time_format_without_time
assert_equal "2007-12-13 00:00:00", "13/12/2007".to_time.to_s(:db)
end
def test_create_time_with_brazilian_time_format_with_time
assert_equal "2007-12-13 01:23:00", "13/12/2007 01:23".to_time.to_s(:db)
end
def test_create_time_with_brazilian_time_format_with_time_with_single_number
assert_equal "2007-02-01 01:23:00", "1/2/2007 1:23".to_time.to_s(:db)
end
#to_s
def test_time_to_s_with_traditional_format
if RUBY_VERSION < '1.9'
assert_equal "Mon Sep 24 16:03:05 UTC 2007", "Mon Sep 24 16:03:05 UTC 2007".to_time.to_s
else
assert_equal "2007-09-24 16:03:05 UTC", "2007-09-24 16:03:05 UTC".to_time.to_s
end
end
#to_s_br
def test_time_to_s_br
assert_equal "24/09/2007 16:03", "Mon Sep 24 16:03:05 UTC 2007".to_time.to_s_br
end
def test_month_names
assert_equal [nil] + %w[Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro], Time::MONTHNAMES
end
def test_days_names
assert_equal %w[Domingo Segunda-Feira Terça-Feira Quarta-Feira Quinta-Feira Sexta-Feira Sábado],
Time::DAYNAMES
end
def test_abbr_monthnames
assert_equal [nil] + %w[Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez], Time::ABBR_MONTHNAMES
end
def test_abbr_daysnames
assert_equal %w[Dom Seg Ter Qua Qui Sex Sáb], Time::ABBR_DAYNAMES
end
def test_time_translation_with_strftime
assert_equal "Dezembro Dez Sexta-Feira Sex", Time.parse("2008-12-05").strftime("%B %b %A %a")
end
end