barras_rails 1.3.1

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.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +22 -0
  3. data/app/assets/images/barras_rails/logo_uff_branco.svg +3 -0
  4. data/app/assets/javascripts/barras_rails/barras_rails.js +352 -0
  5. data/app/assets/stylesheets/barras_rails/barra_de_aplicacoes.css +143 -0
  6. data/app/assets/stylesheets/barras_rails/barra_do_governo.css +140 -0
  7. data/app/helpers/barras_rails/application_helper.rb +106 -0
  8. data/app/models/barra_aplicacoes.rb +31 -0
  9. data/app/models/url_api_nao_definida_error.rb +6 -0
  10. data/app/views/layouts/application.html.erb +14 -0
  11. data/app/views/layouts/barras_rails/_barra_aplicacoes.html.erb +27 -0
  12. data/app/views/layouts/barras_rails/_barra_governo.html.erb +18 -0
  13. data/config/routes.rb +2 -0
  14. data/lib/barras_rails/configuracao.rb +16 -0
  15. data/lib/barras_rails/engine.rb +12 -0
  16. data/lib/barras_rails/utilidades.rb +41 -0
  17. data/lib/barras_rails/version.rb +4 -0
  18. data/lib/barras_rails.rb +19 -0
  19. data/lib/generators/barras_rails/install_generator.rb +56 -0
  20. data/lib/generators/barras_rails/templates/barras_rails.rb +52 -0
  21. data/lib/generators/barras_rails/templates/logo_uff_branco.svg +3 -0
  22. data/lib/tasks/barras_tasks.rake +4 -0
  23. data/spec/dummy/README.rdoc +28 -0
  24. data/spec/dummy/Rakefile +6 -0
  25. data/spec/dummy/app/assets/javascripts/application.js +2 -0
  26. data/spec/dummy/app/assets/javascripts/jquery-2.1.4.min.js +4 -0
  27. data/spec/dummy/app/assets/stylesheets/application.css +5 -0
  28. data/spec/dummy/app/assets/stylesheets/reset.css +423 -0
  29. data/spec/dummy/app/controllers/application_controller.rb +11 -0
  30. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  31. data/spec/dummy/app/views/application/index.html.erb +1 -0
  32. data/spec/dummy/app/views/layouts/application.html.erb +19 -0
  33. data/spec/dummy/bin/bundle +3 -0
  34. data/spec/dummy/bin/rails +4 -0
  35. data/spec/dummy/bin/rake +4 -0
  36. data/spec/dummy/config/application.rb +34 -0
  37. data/spec/dummy/config/boot.rb +5 -0
  38. data/spec/dummy/config/database.yml +25 -0
  39. data/spec/dummy/config/environment.rb +5 -0
  40. data/spec/dummy/config/environments/development.rb +37 -0
  41. data/spec/dummy/config/environments/production.rb +78 -0
  42. data/spec/dummy/config/environments/test.rb +39 -0
  43. data/spec/dummy/config/initializers/assets.rb +8 -0
  44. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  45. data/spec/dummy/config/initializers/barras_uff.rb +31 -0
  46. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  47. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  48. data/spec/dummy/config/initializers/inflections.rb +16 -0
  49. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  50. data/spec/dummy/config/initializers/session_store.rb +3 -0
  51. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  52. data/spec/dummy/config/locales/en.yml +23 -0
  53. data/spec/dummy/config/routes.rb +5 -0
  54. data/spec/dummy/config/secrets.yml +22 -0
  55. data/spec/dummy/config.ru +4 -0
  56. data/spec/dummy/db/development.sqlite3 +0 -0
  57. data/spec/dummy/db/schema.rb +2596 -0
  58. data/spec/dummy/db/test.sqlite3 +0 -0
  59. data/spec/dummy/public/404.html +67 -0
  60. data/spec/dummy/public/422.html +67 -0
  61. data/spec/dummy/public/500.html +66 -0
  62. data/spec/dummy/public/favicon.ico +0 -0
  63. data/spec/helpers/application_helper_spec.rb +178 -0
  64. data/spec/lib/configuracao_spec.rb +21 -0
  65. data/spec/models/barra_aplicacoes_spec.rb +0 -0
  66. data/spec/rails_helper.rb +55 -0
  67. data/spec/spec_helper.rb +31 -0
  68. metadata +281 -0
@@ -0,0 +1,106 @@
1
+ module BarrasRails
2
+ # ApplicationHelper da gem que adicionar funcionalidades (métodos) ao helper
3
+ # da aplicação host.
4
+ module ApplicationHelper
5
+ # Inclui os métodos definidos em Utilidades
6
+ include BarrasRails::Utilidades
7
+
8
+ # Renderiza o partial da barra do governo
9
+ def barra_governo
10
+ render partial: 'layouts/barras_rails/barra_governo'
11
+ end
12
+
13
+ # Renderiza o partial da barra de aplicações
14
+ def barra_aplicacoes(iduff = nil)
15
+ @barra = {
16
+ limite_links: BarrasRails.configuracao.limite_links_visiveis,
17
+ aplicacoes: get_aplicacoes(iduff || iduff_do_usuario_corrente)
18
+ }
19
+ render partial: 'layouts/barras_rails/barra_aplicacoes'
20
+ end
21
+
22
+ # Renderiza ambas as barras
23
+ def barras_governo_e_aplicacoes(iduff = nil)
24
+ (barra_governo + barra_aplicacoes(iduff)).html_safe
25
+ end
26
+
27
+ # ======================================================================== #
28
+ # Os métodos abaixo são internos e não deveriam ser chamados diretamente #
29
+ # das views da aplicação que usa essa gem. #
30
+ # ======================================================================== #
31
+
32
+ # Retorna o conteúdo (codificado como uma string utf-8) de uma imagem
33
+ # vetorizada, do tipo svg.
34
+ def imagem_svg(name)
35
+ imagem = image_svg_from_assets(name)
36
+ (imagem || image_svg_from_manifest(name))
37
+ end
38
+
39
+ def get_aplicacoes(iduff)
40
+ BarraAplicacoes.carrega_aplicacoes(iduff)
41
+ end
42
+
43
+ # Retorna um único item da barra de aplicações. O item também inclui um
44
+ # separador vertical, mas este é colocado dinamicamente via javascript.
45
+ def item_barra_aplicacoes(path, label)
46
+ content_tag('li') do
47
+ link_to(label, path)
48
+ end
49
+ end
50
+
51
+ # Retorna true ou false se deve incluir um link de logar OU deslogar, de
52
+ # acordo com a situação de login do usuário atual.
53
+ def deve_incluir_link_login
54
+ inclui_login = BarrasRails.configuracao.incluir_link_de_login
55
+ inclui_sair = BarrasRails.configuracao.incluir_link_de_deslogar
56
+ (!usuario_logado? && inclui_login) || (usuario_logado? && inclui_sair)
57
+ end
58
+
59
+ def url_link_login
60
+ # Tenta retornar o path especificado na configuração da gem
61
+ path_login = BarrasRails.configuracao.path_login
62
+ return [root_url, path_login].join if path_login.present?
63
+
64
+ # Se o path_login não for especificado, usa o padrão do portal prod
65
+ BarraAplicacoes
66
+ .url_de_desenv_e_homolog('https://sistemas.uff.br/portal/login')
67
+ end
68
+
69
+ def link_de_logar
70
+ query_string = "?retorno=\"#{escapar_url(request.original_url)}\""
71
+ link_to('Entrar', url_link_login + query_string)
72
+ end
73
+
74
+ def link_de_login_ou_logout
75
+ if BarrasRails.configuracao.incluir_link_de_deslogar && usuario_logado?
76
+ BarraAplicacoes.url_de_desenv_e_homolog(link_de_deslogar).html_safe
77
+ elsif BarrasRails.configuracao.incluir_link_de_login
78
+ BarraAplicacoes.url_de_desenv_e_homolog(link_de_logar).html_safe
79
+ end
80
+ end
81
+
82
+ # Escapa uma URL para poder usá-la em uma query string
83
+ def escapar_url(url)
84
+ URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
85
+ end
86
+
87
+ def iduff_do_usuario_corrente
88
+ return unless self.respond_to?(:usuario_corrente) && usuario_corrente
89
+ usuario_corrente.iduff
90
+ end
91
+
92
+ def image_svg_from_assets(asset_name)
93
+ return unless Rails.application.assets
94
+ image_asset = Rails.application.assets.find_asset(asset_name)
95
+ return unless image_asset
96
+ raw(image_asset.source.force_encoding('UTF-8'))
97
+ end
98
+
99
+ def image_svg_from_manifest(asset_name)
100
+ path = Rails.application.assets_manifest.assets[asset_name]
101
+ return '' if path.blank?
102
+ path = File.join(Rails.application.assets_manifest.directory, path)
103
+ raw(File.binread(path).force_encoding('UTF-8'))
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,31 @@
1
+ require 'open-uri'
2
+
3
+ # Classe responsável por consumir a API BarrasUff e retornar a lista de
4
+ # aplicações que devem aparecer na barra de aplicações.
5
+ class BarraAplicacoes
6
+ def self.carrega_aplicacoes(iduff)
7
+ Rails.cache.fetch("#{iduff}/links_barras", expires_in: 1.hour) do
8
+ apps = JSON(open(url_api(iduff)).read)
9
+ apps.each { |app| app['url'] = url_de_desenv_e_homolog(app['url']) }
10
+ end
11
+ rescue
12
+ Rails.cache.delete("#{iduff}/links_barras")
13
+ nil
14
+ end
15
+
16
+ def self.url_api(iduff)
17
+ url_api_barras = BarrasRails.configuracao.url_api_barras
18
+ raise UrlApiNaoDefinidaError if url_api_barras.blank?
19
+ url_api_barras = url_de_desenv_e_homolog(url_api_barras)
20
+ "#{url_api_barras}?iduff=#{iduff}&token=#{BarrasRails.configuracao.token}"
21
+ end
22
+
23
+ # Troca uma url de um sistema da STI de "https://app.uff.br" para
24
+ # "https://homologacao.sti.uff.br", para funcionar em homolog. Os sistemas e
25
+ # sites que não foram desse domínio app.uff.br não serão afetados
26
+ def self.url_de_desenv_e_homolog(url)
27
+ return url if Rails.env == 'production'
28
+ return url unless url.match %r{https?://app\.uff\.br}
29
+ url.sub('app.uff.br', 'homologacao.sti.uff.br')
30
+ end
31
+ end
@@ -0,0 +1,6 @@
1
+ class UrlApiNaoDefinidaError < StandardError
2
+ def message
3
+ 'URL da API do BarrasRails não configurada. Por favor configure a URL em ' \
4
+ '"config/initializers/barras_rails.rb".'
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>BarrasUff</title>
5
+ <%= stylesheet_link_tag "barras_uff/application", media: "all" %>
6
+ <%= javascript_include_tag "barras_uff/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,27 @@
1
+ <div id="barra-aplicacoes" class="shadow"
2
+ data-limite-apps-visiveis="<%= @barra[:limite_links] %>">
3
+
4
+ <%= link_to root_path do %>
5
+ <%= imagem_svg('logo_uff_branco.svg') %>
6
+ <% end %>
7
+
8
+ <ul id="nav" class="dropdown dropdown-horizontal">
9
+ <% @barra[:aplicacoes].to_a.each do |link_app| %>
10
+ <%= item_barra_aplicacoes(link_app['url'], link_app['nome']) %>
11
+ <% end %>
12
+
13
+ <% if @barra[:aplicacoes].nil? %>
14
+ <%= item_barra_aplicacoes('#', 'Não foi possível carregar os links da Barra de Aplicações.') %>
15
+ <% end %>
16
+
17
+ <li id="outras-aplicacoes" class="dir">Outras Aplicações<small>▼</small>
18
+ <ul id="subNav"></ul>
19
+ </li>
20
+ </ul>
21
+
22
+ <% if deve_incluir_link_login %>
23
+ <div class="dados">
24
+ <%= link_de_login_ou_logout %>
25
+ </div>
26
+ <% end %>
27
+ </div>
@@ -0,0 +1,18 @@
1
+ <div id="barra-brasil" style="background:#7F7F7F; padding:0 0 0 10px;display:block;">
2
+ <ul id="menu-barra-temp" style="list-style:none;">
3
+ <li style="display:inline; float:left;padding-right:10px; margin-right:10px; border-right:1px solid #EDEDED">
4
+ <a href="http://brasil.gov.br" style="font-family:sans,sans-serif; text-decoration:none; color:white;">
5
+ Portal do Governo Brasileiro
6
+ </a>
7
+ </li>
8
+ <li>
9
+ <a style="font-family:sans,sans-serif; text-decoration:none; color:white;"
10
+ href="http://epwg.governoeletronico.gov.br/barra/atualize.html">
11
+ Atualize sua Barra de Governo
12
+ </a>
13
+ </li>
14
+ </ul>
15
+ </div>
16
+
17
+ <script defer="defer" src="//barra.brasil.gov.br/barra.js" type="text/javascript">
18
+ </script>
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ BarrasRails::Engine.routes.draw do
2
+ end
@@ -0,0 +1,16 @@
1
+ module BarrasRails
2
+ class Configuracao
3
+ attr_accessor :limite_links_visiveis, :incluir_link_de_deslogar, :token,
4
+ :incluir_link_de_login, :path_login, :url_api_barras
5
+
6
+ # Inicializa os valores default.
7
+ def initialize
8
+ @limite_links_visiveis = 0
9
+ @incluir_link_de_deslogar = true
10
+ @incluir_link_de_login = true
11
+ @path_login = nil
12
+ @url_api_barras = nil
13
+ @token = nil
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module BarrasRails
2
+ # Engine Rails da gem
3
+ class Engine < ::Rails::Engine
4
+ # Configura o RSpec e o FactoryGirl
5
+ config.generators do |g|
6
+ g.test_framework :rspec, fixture: false
7
+ g.fixture_replacement :factory_girl, dir: 'spec/factories'
8
+ g.assets false
9
+ g.helper false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,41 @@
1
+ # Módulo de extensão para o ApplicationHelper, com algumas funcionalidades a
2
+ # mais, basicamente alguns helpers genéricos para os sistemas Rails da STI.
3
+ #
4
+ # As funcionalidades definidas aqui não são necessárias ou diretamente
5
+ # relacionadas com as barras do governo/aplicação, mas serão utilizadas pela
6
+ # maioria dos sistemas Rails, então estão definidas aqui.
7
+ #
8
+ # Possível TO-DO: extrair essas e outras funcionalidades "core" para uma gem
9
+ # tipo "sti-core".
10
+ module BarrasRails
11
+ module Utilidades
12
+ # Gera o HTML que inclui o html5shiv nos browsers IE abaixo da versão 9.
13
+ # Sobre o html5shiv: https://github.com/afarkas/html5shiv
14
+ def html5shiv
15
+ # Utilizando a sintaxe HEREDOC. O gsub remove os espaços da identação.
16
+ # Fonte: http://rubyquicktips.com/post/4438542511/heredoc-and-indent
17
+ # HEREDOC: https://en.wikipedia.org/wiki/Here_document
18
+ return <<-END_SHIV.gsub(/^ {6}/, '').html_safe
19
+ <!-- Le HTML5 shiv, for IE6-8 support of HTML elements -->
20
+ <!--[if lt IE 9]>
21
+ <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"
22
+ type="text/javascript"></script>
23
+ <![endif]-->
24
+ END_SHIV
25
+ end
26
+
27
+ # Lê a data e hora do deploy de um arquivo no servidor. Se o Rails estiver
28
+ # em development, ou se o arquivo não existir, usa a hora atual.
29
+ # O retorno é uma string indicando a data e hora do último deploy. Essa
30
+ # informação é pega através de um arquivo chamado hora_deploy.txt qhe fica
31
+ # no root da aplicação. Para esse arquivo ser gerado, o Webistrano deve ser
32
+ # configurado para usar o recipe Hora Deploy
33
+ # (https://sistemas.uff.br/sti/deploy/recipes/46).
34
+ def hora_deploy(hora_default = Time.zone.now)
35
+ file_path = File.join(Rails.root, 'hora_deploy.txt')
36
+ hora = Time.zone.parse(File.read(file_path)) if File.exists?(file_path)
37
+ hora ||= hora_default
38
+ hora.strftime('Atualizado em: %d/%m/%Y - %H:%M:%S')
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,4 @@
1
+ # Guarda a versão atual da gem
2
+ module BarrasRails
3
+ VERSION = '1.3.1'
4
+ end
@@ -0,0 +1,19 @@
1
+ require 'barras_rails/engine'
2
+ require 'barras_rails/configuracao'
3
+ require 'barras_rails/utilidades'
4
+ require 'iduff-sso' # Necessário para renderizar o link_de_deslogar
5
+
6
+ # Módulo principal da gem
7
+ module BarrasRails
8
+ class << self
9
+ attr_writer :configuracao
10
+ end
11
+
12
+ def self.configuracao
13
+ @configuracao ||= Configuracao.new
14
+ end
15
+
16
+ def self.configurar
17
+ yield(configuracao)
18
+ end
19
+ end
@@ -0,0 +1,56 @@
1
+ # Generator para configurar a gem na aplicação host.
2
+ module BarrasRails
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ desc <<DESC
7
+ Descrição:
8
+ - Copia o arquivo de configuração da gem para a pasta dos initializers
9
+ - Configura os requires para os arquivos CSS e JS da gem
10
+ - Adiciona a chamada para gerar as barras em layouts/application.html.erb
11
+ DESC
12
+
13
+ def copy_install_file
14
+ copy_file('barras_rails.rb', 'config/initializers/barras_rails.rb')
15
+ end
16
+
17
+ def copy_logo_uff_branco
18
+ copy_file('logo_uff_branco.svg', 'app/assets/images/logo_uff_branco.svg')
19
+ end
20
+
21
+ def add_requires_to_css
22
+ return if file_not_found('app/assets/stylesheets/application.css', false)
23
+ inject_into_file 'app/assets/stylesheets/application.css',
24
+ ' *= require barras_rails/barra_de_aplicacoes',
25
+ after: %r{([\s]*\*= require [^\n]*\n)+}
26
+
27
+ inject_into_file 'app/assets/stylesheets/application.css',
28
+ ' *= require barras_rails/barra_do_governo',
29
+ after: %r{([\s]*\*= require [^\n]*\n)+}
30
+ end
31
+
32
+ def add_requires_to_javascript
33
+ return if file_not_found('app/assets/javascripts/application.js')
34
+ inject_into_file 'app/assets/javascripts/application.js',
35
+ '//= require barras_rails/barras_rails',
36
+ after: %r{(//= require [^\n]*\n)+}
37
+ end
38
+
39
+ def add_call_to_barras_to_app_html
40
+ return if file_not_found('app/views/layouts/application.html.erb')
41
+ inject_into_file 'app/views/layouts/application.html.erb',
42
+ '<%= barras_governo_e_aplicacoes %>', after: "<body>\n"
43
+ end
44
+
45
+ protected
46
+
47
+ def file_not_found(file, say_if_not_found = true)
48
+ unless File.exists?(file)
49
+ msg = "#{file} not found, configure manually"
50
+ shell.say_status('not found', msg, :red) if say_if_not_found
51
+ return true
52
+ end
53
+ false
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,52 @@
1
+ BarrasRails.configurar do |config|
2
+ # Arquivo de configuração da gem barras-rails.
3
+ #
4
+ # Este arquivo contém as configurações padrões para a gem barras-rails. Os
5
+ # valores exibidos aqui são os default.
6
+
7
+ # Indica um limite manual de links que aparecerão na barra de aplicações.
8
+ # Quando o número de aplicações da barra ultrapassar este limite, os links
9
+ # excedentes serão colocados no submenu de "Outras Aplicações".
10
+ # Essa separação para o submenu também ocorrerá quando a janela do browser do
11
+ # usuário não for grande o suficiente para acomodar todos os links. Nesse
12
+ # caso, os links irão para o submenu até a barra inteira caber em uma linha.
13
+ # Se não for necessário limitar o número de links visíveis, configure este
14
+ # valor para zero (0).
15
+ #
16
+ # config.limite_links_visiveis = 0
17
+
18
+ # Indica se a gem deve ou não incluir o link padrão de deslogar da gem
19
+ # Portal::Sso. Deve ser setado para false para aplicações que não usam o
20
+ # Portal para login.
21
+ #
22
+ # config.incluir_link_de_deslogar = true
23
+ #
24
+ # Indica se a gem deve ou não incluir o link padrão de logar apontando para o
25
+ # portal. Se for setado para true, esse link aparecerá no lugar do link de
26
+ # deslogar, quando o usuário não estiver logado no sistema.
27
+ #
28
+ # config.incluir_link_de_login = false
29
+ #
30
+ # Caso a configuração acima (incluir_link_de_logar) for marcada como true, o
31
+ # link padrão para login usado será o do portal, redirecionando depois para a
32
+ # página atual do usuário. Para trocar a URL padrão de login, use a
33
+ # configuração abaixo, 'path_login'. Essa configuração deve incluir apenas o
34
+ # path da URL (sem a parte do host), e com uma barra inicial.
35
+ # Ex: "/login"
36
+ #
37
+ # config.path_login = nil
38
+ #
39
+ # Configura a URL da API das Barras. Configuração obrigatória. Caso o ambiente
40
+ # não seja o de produção, a gem configurará automaticamente a url para usar
41
+ # a de homologação (substituindo sistemas.uff.br por homologacao.sti.uff.br).
42
+ #
43
+ config.url_api_barras = 'http://sistemas.uff.br/barras/links_por_iduff'
44
+ #
45
+ # O Token gerado pelo sistema Barras para sua aplicação. Esse token serve para
46
+ # identificar a aplicação que está pedindo a barra, para fins (futuramente) de
47
+ # métricas de uso e (atualmente) para não exibir o link da própria aplicação
48
+ # na barra. As instruções para enconrar esse token podem ser encontradas em:
49
+ # https://sistemas.uff.br/sti/git/cds/barras_uff/blob/master/README.md
50
+ #
51
+ # config.token = 'TOKEN_DA_SUA_APLICACAO'
52
+ end
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="410px" height="210px" viewBox="0 0 410 210">
2
+ <path fill="#ffffff" d="M237.962 71.2 l33.4643 0 0 -17.6 -0.1 0c-0.0767719 -12 -4.4 -23 -11.5 -31.5 -0 -0 -0 -0 -0 -0 -2 -2.4 -4.3 -4.7 -6.8 -6.7 -0 -0 -0 -0 -0 -0 -0.3 -0.3 -0.6 -0.5 -0.9 -0.7 -0 -0 -0 -0 -0 -0 -0.3 -0.2 -0.6 -0.5 -0.9 -0.7 -0 -0 -0 -0 -0 -0 -0.3 -0.2 -0.6 -0.5 -0.9 -0.7 0 -0 -0 -0 -0 -0 -0.3 -0.2 -0.6 -0.5 -1 -0.7 -0 -0 -0 -0 -0.1 -0 -1.6 -1.1 -3.3 -2.1 -5.1 -3 -0 -0 -0 -0 -0 -0 -0.7 -0.4 -1.4 -0.7 -2.1 -1 -0 -0 -0 -0 -0 -0 -0.4 -0.2 -0.7 -0.3 -1.1 -0.5 -0 -0 -0 -0 -0 -0 -0.3 -0.1 -0.7 -0.3 -1.1 -0.4 -0 -0 -0 -0 -0 -0 -0.3 -0.1 -0.5 -0.2 -0.8 -0.3 -0.1 -0 -0.2 -0.1 -0.3 -0.1 -0.2 -0.1 -0.5 -0.2 -0.7 -0.3 -0.1 -0.1 -0.3 -0.1 -0.4 -0.2 -0.2 -0.1 -0.3 -0.1 -0.5 -0.2 -0.2 -0.1 -0.5 -0.2 -0.7 -0.2 -0.1 -0 -0.2 -0 -0.2 -0.1 -0.3 -0.1 -0.6 -0.2 -0.9 -0.3 -0 0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.2 -1.1 -0.3 -0 -0 -0 -0 -0 -0 -0.2 -0 -0.4 -0.1 -0.5 -0.1 -0.2 -0.1 -0.5 -0.1 -0.7 -0.2 -0 0 -0 0 -0 0 -0.4 -0.1 -0.8 -0.2 -1.2 -0.3 -0 -0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.2 -1.2 -0.2 -0 -0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.1 -1.2 -0.2 -0 -0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.1 -1.2 -0.2 -0 -0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.1 -1.2 -0.1 -0 0 -0 -0 -0 -0 -0.4 -0 -0.8 -0.1 -1.2 -0.1 -0 0 -0 0 -0 -0 -0.4 -0 -0.8 -0.1 -1.3 -0.1 -0 0 -0 0 -0 0 -0.4 -0 -0.8 -0 -1.3 -0 -0 0 -0 0 -0 0 -0.4 -0 -0.9 -0 -1.3 -0 -27.5 0 -49.9 22.4 -49.9 49.9 0 0 0 0.4 0 0.389765l0.0295277 0 0 33.5 -50.5 0.2 -0 68.1 -0 0.00236221c-0.243308 8.9 -7.7 16.1 -16.6 16.1 -8.9 0 -16.3 -7.2 -16.5 -16.0654l-0.00708664 0 0 -0.5 0 -68.1 -27.9 0 0 -0 -54.9 0 0 33.6 49.6 0 0 35 -0 0.00708664c0 27.5 22.4 49.9 49.9 49.9 0.4 0 0.9 -0 1.3 -0 0 0 0 0 0 0 0.4 -0 0.8 -0 1.3 -0 0 0 0 -0 0 -0 0.4 -0 0.8 -0 1.3 -0.1 0 0 0 0 0 -0 0.4 -0 0.8 -0.1 1.2 -0.1 0 0 0 -0 0 -0 0.1 -0 0.2 -0 0.3 -0 0.3 -0 0.6 -0.1 0.9 -0.1 0.4 -0.1 0.8 -0.1 1.2 -0.2 0 -0 0 -0 0 -0 0.4 -0.1 0.8 -0.1 1.2 -0.2 0 0 0 -0 0 -0 0.2 -0 0.4 -0.1 0.7 -0.1 0.2 -0 0.4 -0.1 0.5 -0.1 0 -0 0 -0 0 -0 0.4 -0.1 0.8 -0.2 1.2 -0.3 0 -0 0 -0 0 -0 0.2 -0 0.4 -0.1 0.5 -0.1 0.2 -0.1 0.4 -0.1 0.7 -0.2 0.1 -0 0.3 -0.1 0.4 -0.1 0.3 -0.1 0.5 -0.1 0.8 -0.2 0.2 -0 0.3 -0.1 0.5 -0.1 0.2 -0.1 0.5 -0.1 0.7 -0.2 0.2 -0.1 0.5 -0.1 0.7 -0.2 0.2 -0.1 0.3 -0.1 0.5 -0.2 0.2 -0.1 0.4 -0.2 0.7 -0.2 0.2 -0.1 0.3 -0.1 0.5 -0.2 0.2 -0.1 0.5 -0.2 0.7 -0.3 0.1 -0.1 0.3 -0.1 0.4 -0.2 0.3 -0.1 0.5 -0.2 0.8 -0.3 0.1 -0 0.2 -0.1 0.3 -0.1 0.3 -0.1 0.5 -0.2 0.8 -0.3 0.1 -0 0.2 -0.1 0.3 -0.1 0.3 -0.1 0.5 -0.2 0.8 -0.4 0.1 -0 0.2 -0.1 0.3 -0.1 0.3 -0.1 0.5 -0.3 0.8 -0.4 0.1 -0 0.2 -0.1 0.3 -0.1 0.3 -0.1 0.6 -0.3 0.9 -0.5 0.1 -0 0.1 -0.1 0.2 -0.1 0.3 -0.2 0.6 -0.3 0.9 -0.5 0.1 -0 0.1 -0.1 0.2 -0.1 0.3 -0.2 0.6 -0.3 0.9 -0.5 0 -0 0.1 -0.1 0.1 -0.1 0.6 -0.4 1.3 -0.8 1.9 -1.2 0 -0 0.1 -0 0.1 -0.1 0.3 -0.2 0.6 -0.4 0.9 -0.6 0 -0 0 -0 0 -0 0.3 -0.2 0.6 -0.4 0.9 -0.6 0 -0 0.1 -0 0.1 -0.1 0.3 -0.2 0.5 -0.4 0.8 -0.6 0.1 -0 0.1 -0.1 0.2 -0.1 0.3 -0.2 0.5 -0.4 0.8 -0.6 0 -0 0.1 -0.1 0.1 -0.1 0.9 -0.8 1.8 -1.5 2.7 -2.4 0 -0 0 -0 0 -0 0.3 -0.3 0.6 -0.5 0.8 -0.8 0 -0 0 -0 0 -0 0.8 -0.8 1.6 -1.7 2.4 -2.6 0 -0 0 -0 0 -0 0.2 -0.3 0.5 -0.5 0.7 -0.8 0 -0 0.1 -0.1 0.1 -0.1 0.2 -0.3 0.5 -0.6 0.7 -0.9 0 -0 0 -0 0 -0 0.2 -0.3 0.4 -0.6 0.7 -0.9 0 -0 0 -0.1 0.1 -0.1 2.6 -3.5 4.8 -7.3 6.5 -11.5 0 -0 0 -0 0 -0 2.3 -5.6 3.8 -11.8 3.8 -18.1583l0.00354332 0 0 -35.3 16.8 0 0 83.3 33.2 0 0 -83.3 66.8 0 0 83 33.4 0 0 -83 100.1 0 0 -33.4 -100.1 0 0 -33.5363c-0.00118111 -0 -0 -0 -0 -0 0 -9.1 7.5 -16.6 16.6 -16.6 9.1 0 16.6 7.6 16.6 16.7 -0 0 0 -0 0 -0.0118111l0 16.8 33.4 0 0 -16.8 -0 0c0 -27.5 -22.4 -49.9 -49.9 -49.9 -0.4 0 -0.9 0 -1.3 0 -0 0 -0 0 -0 0 -0.4 0 -0.8 0 -1.3 0 -0 0 -0 0 -0 0 -0.4 0 -0.8 0 -1.2 0.1 -0 0 -0 0 -0 0 -0.4 0 -0.8 0.1 -1.2 0.1 -0 0 -0 0 -0 0 -0.4 0 -0.8 0.1 -1.2 0.1 -0 0 -0 0 -0 0 -0.4 0.1 -0.8 0.1 -1.2 0.2 -0 0 -0 0 -0 0 -0.2 0 -0.5 0.1 -0.7 0.1 -0.2 0 -0.4 0.1 -0.6 0.1 -0.1 0 -0.3 0.1 -0.4 0.1 -0.3 0.1 -0.5 0.1 -0.8 0.2 -0.1 0 -0.2 0 -0.3 0.1 -0.3 0.1 -0.6 0.1 -0.9 0.2 -0.1 0 -0.1 0 -0.2 0 -0.3 0.1 -0.7 0.2 -1 0.2 -0.1 0 -0.3 0.1 -0.4 0.1 -0.3 0.1 -0.6 0.1 -0.8 0.2 -0.1 0 -0.1 0 -0.2 0.1 -0.3 0.1 -0.6 0.2 -1 0.3 -0.3 0.1 -0.6 0.2 -0.8 0.3 -0.1 0 -0.2 0.1 -0.3 0.1 -0.3 0.1 -0.5 0.2 -0.8 0.3 -0.1 0 -0.3 0.1 -0.4 0.1 -0.2 0.1 -0.4 0.1 -0.6 0.2 -0.2 0.1 -0.4 0.1 -0.6 0.2 -0.2 0.1 -0.4 0.1 -0.5 0.2 -0.2 0.1 -0.4 0.2 -0.6 0.2 -0.2 0.1 -0.3 0.2 -0.5 0.2 -0.2 0.1 -0.4 0.2 -0.6 0.3 -0.1 0.1 -0.3 0.1 -0.4 0.2 -0.2 0.1 -0.5 0.2 -0.7 0.3 -0.2 0.1 -0.3 0.2 -0.5 0.2 -0.2 0.1 -0.4 0.2 -0.6 0.3 -0.2 0.1 -0.5 0.2 -0.7 0.4 -0.1 0.1 -0.3 0.1 -0.4 0.2 -0.2 0.1 -0.5 0.3 -0.7 0.4 -0.1 0.1 -0.2 0.1 -0.3 0.2 -0.3 0.2 -0.6 0.4 -0.9 0.5 -0 0 -0 0 -0.1 0 -0.3 0.2 -0.6 0.4 -1 0.6 -0 0 -0 0 -0.1 0 -0.3 0.2 -0.6 0.4 -1 0.6 -0 0 -0 0 -0 0 -0.3 0.2 -0.6 0.4 -0.9 0.6 -0 0 -0 0 -0 0 -0.3 0.2 -0.6 0.4 -0.9 0.6 -0 0 -0.1 0 -0.1 0.1 -0.3 0.2 -0.6 0.4 -0.9 0.6 -0 0 -0.1 0.1 -0.1 0.1 -0.3 0.2 -0.6 0.4 -0.8 0.7 -0 0 -0.1 0.1 -0.1 0.1 -1.2 1 -2.4 2 -3.5 3.1 -0 0 -0 0 -0 0 -1.1 1.1 -2.2 2.3 -3.2 3.5 -0 0 -0 0 -0 0 -0.2 0.3 -0.5 0.6 -0.7 0.9 -0 0 -0 0 -0 0 -0.2 0.3 -0.5 0.6 -0.7 0.9 -0 0 -0 0 -0 0 -0.2 0.3 -0.5 0.6 -0.7 0.9 -0 0 -0 0 -0 0 -0.2 0.3 -0.4 0.6 -0.7 0.9 -0 0 -0 0 -0 0 -0.2 0.3 -0.4 0.6 -0.6 0.9 -0 0 -0 0.1 -0.1 0.1 -1.7 2.6 -3.2 5.4 -4.4 8.4 -0 0 -0 0.1 -0.1 0.1 -0.1 0.3 -0.3 0.7 -0.4 1 -0 0 -0 0.1 -0 0.1 -0.1 0.4 -0.3 0.7 -0.4 1.1 -0 0 -0 0 -0 0 -0.1 0.4 -0.3 0.8 -0.4 1.1 -0 0 -0 0 -0 0 -0.1 0.4 -0.2 0.8 -0.3 1.1 -0 0 -0 0 -0 0 -0.1 0.4 -0.2 0.8 -0.3 1.2 0 0 -0 0 -0 0 -0.2 0.8 -0.4 1.6 -0.6 2.4 -0 0 -0 0 -0 0 -0.1 0.4 -0.2 0.8 -0.2 1.2 -0 0 -0 0 -0 0 -0.1 0.4 -0.1 0.8 -0.2 1.2 -0 0 -0 0 -0 0.1 -0.1 0.4 -0.1 0.7 -0.2 1.1 -0 0 -0 0.1 -0 0.1 -0.1 0.4 -0.1 0.8 -0.1 1.2 -0 0 -0 0 -0 0.1 -0 0.4 -0.1 0.7 -0.1 1.1 -0 0.1 -0 0.1 -0 0.2 -0 0.4 -0.1 0.8 -0.1 1.2 -0 0 -0 0 -0 0.1 -0 0.4 -0 0.8 -0.1 1.2 -0 0 -0 0 -0 0.1 -0 0.4 -0 0.8 -0 1.2 0 0 0 0 0 0.0271655l-0.160631 0 0 34.1 -66.8 0 -0 -33.7147c0 0 0 0 0 0 0 -9.1 7.6 -16.7 16.7 -16.7 9.1 0 16.6 7.4 16.6 16.6 0 0.2 -0 0.5 -0 0.726381l0 16.5603z"/>
3
+ </svg>
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :barras_uff do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,28 @@
1
+ == README
2
+
3
+ This README would normally document whatever steps are necessary to get the
4
+ application up and running.
5
+
6
+ Things you may want to cover:
7
+
8
+ * Ruby version
9
+
10
+ * System dependencies
11
+
12
+ * Configuration
13
+
14
+ * Database creation
15
+
16
+ * Database initialization
17
+
18
+ * How to run the test suite
19
+
20
+ * Services (job queues, cache servers, search engines, etc.)
21
+
22
+ * Deployment instructions
23
+
24
+ * ...
25
+
26
+
27
+ Please feel free to use a different markup language if you do not plan to run
28
+ <tt>rake doc:app</tt>.
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,2 @@
1
+ //= require jquery-2.1.4.min
2
+ //= require barras_uff/barras_uff