Merge pull request #477 from coopdevs/develop

Release v1.12.0
This commit is contained in:
Enrico Stano
2019-03-14 21:42:43 +01:00
committed by GitHub
16 changed files with 717 additions and 79 deletions

13
Gemfile
View File

@ -48,22 +48,23 @@ group :development do
gem 'airbrussh', require: false
gem 'localeapp', '2.1.1', require: false
gem 'letter_opener', '1.4.1'
gem 'dotenv-rails', '2.5.0'
gem 'dotenv-rails', '~> 2.7.1'
end
group :development, :test do
gem "rspec-rails", '~> 3.7.2'
gem "byebug"
end
group :test do
gem "rspec-rails", '~> 3.8.2'
gem "database_cleaner", '1.6.2'
gem 'shoulda-matchers', '~> 3.1.2'
gem 'fabrication'
gem 'faker'
gem 'capybara', '~> 2.7'
gem 'capybara-selenium', '~> 0.0.6'
gem 'chromedriver-helper', '~> 1.0'
gem 'faker', '~> 1.9'
gem 'capybara', '~> 3.13'
gem 'selenium-webdriver', '~> 3.141'
gem 'chromedriver-helper', '~> 2.1'
gem 'simplecov', '~> 0.16.1', require: false
end
group :production do

View File

@ -86,19 +86,17 @@ GEM
capistrano-rbenv (2.1.3)
capistrano (~> 3.1)
sshkit (~> 1.3)
capybara (2.18.0)
capybara (3.13.2)
addressable
mini_mime (>= 0.1.3)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (>= 2.0, < 4.0)
capybara-selenium (0.0.6)
capybara
selenium-webdriver
nokogiri (~> 1.8)
rack (>= 1.6.0)
rack-test (>= 0.6.3)
regexp_parser (~> 1.2)
xpath (~> 3.2)
childprocess (0.9.0)
ffi (~> 1.0, >= 1.0.11)
chromedriver-helper (1.2.0)
chromedriver-helper (2.1.0)
archive-zip (~> 0.10)
nokogiri (~> 1.8)
chronic (0.10.2)
@ -124,12 +122,13 @@ GEM
responders
warden (~> 1.2.3)
diff-lcs (1.3)
docile (1.3.1)
domain_name (0.5.20170223)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.5.0)
dotenv-rails (2.5.0)
dotenv (= 2.5.0)
railties (>= 3.2, < 6.0)
dotenv (2.7.1)
dotenv-rails (2.7.1)
dotenv (= 2.7.1)
railties (>= 3.2, < 6.1)
elasticsearch (1.0.8)
elasticsearch-api (= 1.0.7)
elasticsearch-transport (= 1.0.7)
@ -149,11 +148,11 @@ GEM
tzinfo
execjs (2.6.0)
fabrication (2.11.3)
faker (1.4.3)
i18n (~> 0.5)
faker (1.9.3)
i18n (>= 0.7)
faraday (0.9.1)
multipart-post (>= 1.2, < 3)
ffi (1.9.25)
ffi (1.10.0)
formtastic (3.1.5)
actionpack (>= 3.2.13)
formtastic_i18n (0.6.0)
@ -288,6 +287,7 @@ GEM
polyamorous (~> 1.3.2)
rdiscount (2.1.7.1)
redis (4.0.1)
regexp_parser (1.3.0)
responders (2.4.0)
actionpack (>= 4.2.0, < 5.3)
railties (>= 4.2.0, < 5.3)
@ -297,23 +297,23 @@ GEM
netrc (~> 0.8)
rollbar (2.8.3)
multi_json
rspec-core (3.7.1)
rspec-support (~> 3.7.0)
rspec-expectations (3.7.0)
rspec-core (3.8.0)
rspec-support (~> 3.8.0)
rspec-expectations (3.8.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.7.0)
rspec-mocks (3.7.0)
rspec-support (~> 3.8.0)
rspec-mocks (3.8.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.7.0)
rspec-rails (3.7.2)
rspec-support (~> 3.8.0)
rspec-rails (3.8.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 3.7.0)
rspec-expectations (~> 3.7.0)
rspec-mocks (~> 3.7.0)
rspec-support (~> 3.7.0)
rspec-support (3.7.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-support (~> 3.8.0)
rspec-support (3.8.0)
rubocop (0.52.1)
parallel (~> 1.10)
parser (>= 2.4.0.2, < 3.0)
@ -334,9 +334,9 @@ GEM
tilt (>= 1.1, < 3)
select2-rails (4.0.1)
thor (~> 0.14)
selenium-webdriver (3.11.0)
selenium-webdriver (3.141.0)
childprocess (~> 0.5)
rubyzip (~> 1.2)
rubyzip (~> 1.2, >= 1.2.2)
shoulda-matchers (3.1.2)
activesupport (>= 4.0.0)
sidekiq (5.1.3)
@ -350,6 +350,11 @@ GEM
simple_form (3.1.0)
actionpack (~> 4.0)
activemodel (~> 4.0)
simplecov (0.16.1)
docile (~> 1.1)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
skylight (2.0.1)
skylight-core (= 2.0.1)
skylight-core (2.0.1)
@ -390,7 +395,7 @@ GEM
sprockets-rails (>= 2.0, < 4.0)
whenever (0.9.4)
chronic (>= 0.6.3)
xpath (3.0.0)
xpath (3.2.0)
nokogiri (~> 1.8)
PLATFORMS
@ -406,18 +411,17 @@ DEPENDENCIES
capistrano (~> 3.1)
capistrano-rails (~> 1.1)
capistrano-rbenv (~> 2.1)
capybara (~> 2.7)
capybara-selenium (~> 0.0.6)
chromedriver-helper (~> 1.0)
capybara (~> 3.13)
chromedriver-helper (~> 2.1)
coffee-rails
dalli
database_cleaner (= 1.6.2)
devise (~> 4.5.0)
dotenv-rails (= 2.5.0)
dotenv-rails (~> 2.7.1)
elasticsearch-model
elasticsearch-rails
fabrication
faker
faker (~> 1.9)
has_scope
hstore_translate
http_accept_language (~> 2.1.1)
@ -434,15 +438,17 @@ DEPENDENCIES
rails_12factor (= 0.0.3)
rdiscount
rollbar (= 2.8.3)
rspec-rails (~> 3.7.2)
rspec-rails (~> 3.8.2)
rubocop (~> 0.52.1)
rufus-scheduler (~> 3.4.2)
sass-rails (~> 5.0.7)
select2-rails
selenium-webdriver (~> 3.141)
shoulda-matchers (~> 3.1.2)
sidekiq (= 5.1.3)
sidekiq-cron (= 0.6.3)
simple_form (>= 3.0.0)
simplecov (~> 0.16.1)
skylight
uglifier (= 2.7.2)
unicorn

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -10,7 +10,6 @@ class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
before_filter :set_locale
before_filter :set_current_organization
after_filter :store_location
rescue_from MissingTOSAcceptance, OutadedTOSAcceptance do
redirect_to terms_path
@ -21,7 +20,11 @@ class ApplicationController < ActionController::Base
helper_method :current_organization, :admin?, :superadmin?
protected
def switch_lang
redirect_to :back
end
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
@ -35,17 +38,6 @@ class ApplicationController < ActionController::Base
end
end
def store_location
# store last url - this is needed for post-login redirect to whatever the
# user last visited.
return unless request.get?
paths = ["/", "/users/sign_in", "/users/sign_up", "/users/password/new",
"/users/password/edit", "/users/confirmation", "/users/sign_out"]
if !paths.include?(request.path) && !request.xhr?
session[:previous_url] = request.fullpath
end
end
def after_sign_in_path_for(user)
if user.members.present?
users_path
@ -54,8 +46,6 @@ class ApplicationController < ActionController::Base
end
end
private
def check_for_terms_acceptance!
if user_signed_in?
accepted = current_user.terms_accepted_at

View File

@ -1,5 +0,0 @@
class GlobalController < ApplicationController
def switch_lang
redirect_to :back
end
end

View File

@ -0,0 +1,17 @@
module BrandLogoHelper
def render_brand_logo
return unless should_render_logo?
render 'application/brand_logo'
end
private
def should_render_logo?
return false unless current_user
current_organization&.id == branded_organization_id
end
def branded_organization_id
Rails.application.config.branded_organization_id
end
end

View File

@ -0,0 +1,3 @@
<div class="container" style="margin-bottom: 30px">
<%= image_tag("redeira.png", class: 'organization-brand-logo img-responsive center-block') %>
</div>

View File

@ -26,6 +26,7 @@
</div>
</div>
<%= render_brand_logo %>
<%= render 'application/footer' %>
<div class="back-overlay"></div>

View File

@ -20,7 +20,7 @@ module Timeoverflow
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
config.i18n.default_locale = :es
config.i18n.available_locales = [:es, :ca, :eu, :en, :'pt-BR']
config.i18n.available_locales = [:es, :ca, :eu, :gl, :en, :'pt-BR']
config.i18n.fallbacks = true
# Do not swallow errors in after_commit/after_rollback callbacks.

View File

@ -0,0 +1,7 @@
DEFAULT_BRANDED_ORG_ID = 246
Rails.application.config.branded_organization_id = nil
unless Rails.env.test?
Rails.application.config.branded_organization_id = (Redis.current.get('branded_organization_id') || DEFAULT_BRANDED_ORG_ID).to_i
end

557
config/locales/gl.yml Normal file
View File

@ -0,0 +1,557 @@
gl:
active_admin:
comments:
author_type: Tipo de autor/a
resource_type: Tipo de recurso
users:
organization: Banco de tempo
upload_csv: Ficheiro
upload_from_csv: Importar CSV
activerecord:
attributes:
account:
balance: Balance
organization: Organización
category:
created_at: Creado
name: Nome
name_translations: Nome (traducións)
parent: Categoría pai
updated_at: Actualizado
common:
created_at: Creado
updated_at: Actualizado
organization:
address: Dirección
city: Cidade
created_at: Creado
description: Descrición
email: Correo
name: Nome
neighborhood: Barrio
phone: Teléfono
public_opening_times: Horario de atención ao público
reg_number_seq: Número de secuencia de persoa usuaria
theme: Tema visual
updated_at: Actualizado
post:
category: Categoría
created_at: Creado
description: Descrición
end_on: Termina en
joinable: Poden unirse outros
permanent: Permanente
start_on: Comezar
tag_list: Etiquetas
title: Título
updated_at: Actualizado
transfer:
amount: Cantidade
created_at: Creado
hours: Horas
minutes: Minutos
post: Enviar
reason: Comentarios
source: Fonte
updated_at: Actualizacións
user:
admin: 'Persoa administradora da organización '
alt_phone: Teléfono alternativo
created_at: Creado
date_of_birth: Data de nacemento
description: Descrición
email: Correo electrónico
gender: Xénero
identity_document: Documento de identidade
last_sign_in_at: Último inicio de sesión
notifications: Recibir notificacións por correo electrónico
organization: Organización
phone: Teléfono
push_notifications: Recibir notificacións móbiles
registration_date: Data de rexistro
registration_number: Código de persoa usuaria
superadmin: Persoa dministradora do sistema
unconfirmed_email: Correo electrónico non confirmado
updated_at: Actualizado
username: Nome
errors:
models:
organization:
attributes:
web:
url_format_invalid: Formato de URL non válido
transfer:
attributes:
base:
same_account: Non se pode realizar unha transferencia á mesma conta
user:
attributes:
email:
invalid: Non válido
models:
category:
one: Categoría
other: Categorías
comment:
one: Comentario
other: Comentarios
inquiry:
one: Enquisa
other: Enquisas
offer:
one: Oferta
other: Ofertas
organization:
one: Banco de Tempo
other: Bancos de Tempo
post:
one: Publicación
other: Publicacións
transfer:
one: Transferencia
other: Transferencias
user:
one: Persoa usuaria
other: Persoas usuarias
application:
landing:
button: Entrar
slogan: Permite valorar o noso tempo
sub_slogan: Hai un banco de tempo preto de ti
login_form:
button: Entrar
email: 'Correo electrónico '
password: Contrasinal
remember_check: Lémbrame
menu:
sign_in: Acceder
sing_out: Saír
menus:
offers_by_tag_link:
tags: Etiquetas
navbar:
admin: Xestionar
administration: Administración
adminshort: Persona administradora
categories: Servizos
demographics: Datos demográficos
global_activity: Actividade global
inactive_users: Persoas suarias inactivas
inquiry_public_link: Consultas de enlace público
last_login: Último inicio de sesión
offer_public_link: Ofrece unha conexión pública
organizations: Organizacións
reports: Informes
sign_out: Saír
statistics: Estatísticas
statistics_all_transfers: Todas as transferencias
stats: Estatísticas
tags: Etiquetas
type_of_swaps: Tipo de transaccións
users: Persoas usuarias
without_offers: Sen ofertas
organization_list:
address: Enderezo
city: Cidade
description: Descrición
email: Correo electrónico
neighborhood: Barrio
not_member: Neste momento non pertence a ningún banco de tempo, para poder utilizar esta plataforma debes estar en contacto cun dos bancos que teñen a plataforma
phone: Teléfono
public_opening_times: Horario de funcionamento
time_bank: Banco de tempo
welcome: Benvidos/as a Timeoverflow %{user}.
terms_conditions: Condicións de servizo
tips:
entertag: Insira etiquetas separadas por comas
user_not_found: Persoa suaria non atopada
categories:
index:
add: Engadir servizo
all: Todo
global: Global
local: Local
tree: Principal
devise:
confirmations:
confirmed: A túa conta confirmouse con éxito.
confirmed_and_signed_in: A túa conta confirmouse con éxito. Agora iniciaches sesión.
new:
resend_instructions: Reenvía as instrucións de confirmación
resend_instructions_button: Reenviar
resend_instructions_description: Se cambiou o teu correo electrónico, debes realizar este paso para que o cambio sexa efectivo
send_instructions: Recibirás un correo electrónico con instrucións sobre como confirmar a túa conta en poucos minutos.
send_paranoid_instructions: Se o enderezo de correo electrónico existe na nosa base de datos, recibirás un correo electrónico con instrucións sobre como confirmar a túa conta en poucos minutos.
failure:
already_authenticated: Xa estás conectado/a.
inactive: A túa conta aínda non está activada.
invalid: Correo ou contrasinal non válidos.
invalid_token: Token de autenticación non válido.
locked: A túa conta está bloqueada.
not_found_in_database: Correo ou contrasinal non válidos.
timeout: A túa sesión caducou. Inicia sesión de novo para continuar.
unauthenticated: Necesitas iniciar sesión ou rexistrarte antes de continuar.
unconfirmed: Tes que confirmar a túa conta antes de continuar.
user:
last_attempt: Atención, tes un intento antes de que a túa conta estea bloqueada
mailer:
confirmation_instructions:
subject: Instrucións de confirmación
reset_password_instructions:
subject: Restablecer as instrucións do contrasinal
unlock_instructions:
subject: Instrucións de desbloqueo
omniauth_callbacks:
failure: Non puiden autenticarte de %{kind} porque "%{reason}".
success: Autenticado/a con éxito a partir da conta de %{kind}.
passwords:
edit:
change_password: Cambiar o meu contrasinal
confirm_password: Confirma o teu novo contrasinal
new_password: Novo contrasinal
passwords_not_match: Os contrasinais non coinciden
new:
forgot_question: Crea un novo contrasinal
forgot_question_description: Introduce o enderezo asociado coa túa conta e enviarémosche un correo electrónico coa ligazón para crear un novo contrasinal.
send_instructions: Enviar enlace
no_token: Non podes acceder a esta páxina sen proceder dun correo electrónico de restablecemento de contrasinal. Se provés dun correo electrónico de restablecemento de contrasinal, asegúrate de utilizar a URL completa proporcionada.
send_instructions: Recibirás un correo electrónico con instrucións sobre como restablecer o teu contrasinal en poucos minutos.
send_paranoid_instructions: Se o teu enderezo de correo electrónico existe na nosa base de datos, recibirás unha ligazón de recuperación de contrasinal no teu enderezo de correo electrónico en poucos minutos.
updated: O contrasinal cambiou correctamente. Agora iniciaches sesión.
updated_not_active: O contrasinal cambiou correctamente.
registrations:
destroyed: Adeus! Cancelouse correctamente a túa conta. Agardamos verte pronto.
edit:
cancel_account: Cancelar a conta.
current_password: Contrasinal actual
edit_user: Editar persoa usuaria
help_current_password: Axuda o contrasinal actual
help_password: Contrasinal de axuda
password: Contrasinal
password_confirmation: Confirmación por contrasinal
unhappy: Infeliz
update: Actualización
new:
password: Contrasinal
password_confirmation: Confirmación por contrasinal
sign_me_up: Rexístrate
sign_up: Incribirse
signed_up: Benvido/a! Rexistrácheste con éxito.
signed_up_but_inactive: Rexistrácheste con éxito. Non obstante, non podemos rexistrarte porque a túa conta aínda non está activada.
signed_up_but_locked: Rexistrácheste con éxito. Non obstante, non podemos rexistrarte porque a túa conta está bloqueada.
signed_up_but_unconfirmed: Enviouse a mensaxe cunha ligazón de confirmación ao teu enderezo de correo electrónico. Abre a ligazón para activar a túa conta.
update_needs_confirmation: Actualizaches a túa conta con éxito, pero necesitamos verificar o teu novo enderezo de correo electrónico. Comproba o teu correo electrónico e fai clic na ligazón de confirmación para confirmar a confirmación do teu novo enderezo de correo electrónico.
updated: Actualizaches a túa conta correctamente.
sessions:
new:
remember_me: Lémbrame
sign_in: Iniciar sesión
user:
signed_in: Registrado/a
signed_out: Pechou a sesión
shared:
links:
didnt_receive_confirmation_instructions: Reenviar correo de confirmación
didnt_receive_unlock_instructions: Recibir instrucións de desbloqueo
forgot_your_password: Non lembro o meu contrasinal
sign_in: Acceder
sign_in_with: Iniciar sesión con %{provider}
sign_up: Rexistrarse
unlocks:
new:
resend_instructions: Reenviar instrucións de desbloqueo
resend_instructions_button: Reenviar
resend_instructions_description: Se te rexistraches erroneamente máis de cinco veces tes que facer este paso para desbloquear a túa conta
send_instructions: Recibirás un correo electrónico con instrucións sobre como desbloquear a túa conta en poucos minutos.
send_paranoid_instructions: Se a túa conta existe, recibirás un correo electrónico con instrucións sobre como desbloqueala en poucos minutos.
unlocked: A túa conta foi desbloqueada con éxito. Inicia sesión para continuar.
errors:
internal_server_error:
description: Sentímolo, parece haber un erro con esta solicitude. Enviouse unha notificación de forma automática e resolverémolo o máis axiña posible.
title: Error interno do servidor
messages:
already_confirmed: Xa se confirmou, intenta iniciar sesión
confirmation_period_expired: Debe ser confirmado dentro de %{period}, solicite un novo
expired: Caducou, por favor solicita un novo
not_found: Non atopado
not_locked: Non estaba bloqueado
not_saved:
one: '1 erro prohibiuse que este %{resource} se gardase:'
other: "%{count} os erros prohibiron que este %{resource} se garde:"
not_found:
description: A páxina que estabas a buscar non existe. É posible que teñas mal escrita a dirección ou a páxina mudou.
title: Non atopado
global:
add_new: Crear novo
all: Todo
amount: Cantidade
announcements: Publicar
back: De volta
balance: 'Balance:'
cancel_membership: Borrado permanente
contact_details: Datos de contacto
date: Datos
delete: Eliminar
demote: Degradar a usuario/a normal
edit: Actualización
filter: Filtro
give_time: Transferencia de tempo
home: Inicio
information: Información
locales_header: cambiar o idioma
member_count: 'Número de persoas usuarias:'
more: Máis
movements: Transaccións
promote: Promover á persoa administradora
reason: Razón
required_field: "* Campo obrigatorio"
save: Gardar
search: Busca
show: Amosar
source_destination: Dende/ata
statistics: Estatísticas
table:
actions: Accións
inquiries:
edit:
submit: Cambiar consulta
index:
new_inquiry: Nova consulta
new:
submit: Crear consulta
layouts:
application:
about: Sobre TimeOverflow
edit_org: Actualización %{organization}
edit_profile: Actualiza o meu perfil
help: Axuda
login: Acceder
report:
report_title: INFORME
locales:
ar: Árabe
ca: Catalán
en: Inglés
es: Español
eu: Vasco
fr: Francés
gl: Galego
pt: Portugués
pt-BR: Portugués (Brasil)
mailers_globals:
footer:
text: "%{organization_name} de"
text_donation: A asociación ADBdT ofrece TimeOverflow gratuitamente aos bancos de tempo. Cunha doazón de %{href} podes axudar a manter e mellorar a plataforma.
text_donation_link: 1€ ao mes
offers:
edit:
submit: Cambiar oferta
index:
by_category: Por categoría
by_tag: Por etiqueta
filter: Filtrar
new_offer: Nova oferta
offered_by: Ofrecido por %{size} persoas
new:
submit: Crear oferta
show:
give_time_for: Transferencia de tempo para esta oferta
offered_by: Ofrecido por
organization_notifier:
recent_posts:
subject: Boletín informativo
text1: 'Últimas ofertas publicadas:'
text2: 'Publicacións máis recentes:'
organizations:
give_time:
give_time: Dele tempo
index:
member_count: Número de persoas usuarias
new:
new: Novo banco
show:
contact_information: Información de contacto
pages:
about:
app-mobile: Aplicación móbil
app-mobile-text: Está dispoñible a aplicación TimeOverflow para móbiles. <br /> Esta aplicación foi posible grazas á colaboración do municipio de Barcelona, o programa %{impulsem_link} (Barcelona Activa) 2017-2018
banner-button: Solicitar acceso a TimeOverflow
banner-subtitle: Contamos contigo para poñelo en marcha ou para facerche unha demostración
banner-title: Es ti un Banco de Tempo?
donate-link: Doe 1 € ao mes
donate-text: Para soportar moitas comunidades, a asociación ADBdT ofrece a plataforma TimeOverflow a todos os bancos de tempo. %{donate_link} para contribuír aos custos de mantemento e innovación.
donate-title: Participa cunha doazón
empower-adbdt: ADBdT
empower-adbdt-title: Asociación para o Desenvolvemento de Bancos de Tempo
empower-coopdevs: CoopDevs
empower-coopdevs-title: CoopDevs
empower-github: Github
empower-github-title: Github
empower-showmap: ver o mapa
empower-showmap-title: Bancos de Tempo
empower-text-1: TimeOveflow está especialmente deseñado para e por Bancos de Tempo que existen físicamente &mdash; %{showmap_link}, eo seu propósito é impulsalos grazas a Internet.
empower-text-2: Grazas ao traballo conxunto de %{coopdevs_link} e %{abdt_link}, hoxe podemos ofrecer o software TimeOverflow a todos os bancos de tempo que o queiran, abertos e gratuitos.
empower-text-3: O código fonte de TimeOverflow está dispoñible en base a unha licenza de código aberto e pode descargala en %{github_link}
empower-title: Empoderando os bancos de tempo
feature-group-1: Xestión de Banco de tempo con funcións de administración
feature-group-2: Rede social e banca en liña accesibles polas persoas membros
feature-text-1: Creación / eliminación / actualizacións das persoas membros do banco
feature-text-2: Publicación de ofertas e consultas
feature-text-3: Inclúe controis e xestión da contabilidade
feature-text-4: As persoas membros dun Banco de Tempo poden acceder ao sistema e conectarse con outras persoas membros
feature-text-5: Publicación de ofertas e consultas
feature-text-6: Pague horas a outras persoas membros
impulsem-link: Aumenta o que fas
subtitle: TimeOverflow é de código aberto, gratuíto e colaborativo
title: O software deseñado por e para
title2: Bancos de tempo
posts:
show:
info: Este %{type} pertence a %{organization}.
reports:
cat_with_users:
title: Servizos ofrecidos
download: Descarga
user_list:
title: Lista de persoas usuarias
shared:
movements:
delete_reason: Estás seguro/a de borrar este comentario?
movements: Movementos
post_form:
you_can_use: Podes usar
simple_form:
error_notification:
default_message: 'Revisa os problemas a continuación:'
'no': Non
options:
user:
gender:
female: Muller
male: Home
required:
mark: "*"
text: esixido
'yes': Si
statistics:
statistics_all_transfers:
date: Data
delete_reason: Estás seguro/a de borrar este comentario?
from: De
post: Publicar
quantity: Cantidade
reason: Razón
to: Para
transfers: Todas as transferencias
statistics_demographics:
by_ages: Por idades
by_gender: Por sexo
demographics: Datos demográficos
female: Muller
male: Home
num_people: "# de persoas"
unknown: Descoñecido
statistics_global_activity:
bank_activity: Actividade bancaria
end_date: final mm/aaaa
global_activity: Actividade global
ini_date: ini mm/aaaa
num_swaps: Transaccións
per_month: Por mes
show: Amosar
total_hours: Horas transferidas
users_reg: Persoas usuarias rexistradas
statistics_inactive_users:
days_without_swaps: Días sen transaccións
inactive_users: Persoas usuarias inactivas
last_movement: Última transacción
no_movements: Sen transaccións
statistics_last_login:
last_login: Último inicio de sesión
never_login: Nunca iniciou sesión
statistics_type_swaps:
type_of_swaps: Tipo de transaccións
without_category: Sen categoría
without_tags: Sen etiquetas
statistics_without_offers:
without_offers: Sen ofertas
stats:
min_balance:
title: Saldo mínimo das persoas usuarias
tags:
alpha_grouped_index:
maintitle: Etiquetas dispoñibles
terms:
accept: Aceptar
show:
accept: Aceptar
transfers:
computation:
hour:
one: "%{count} hora"
other: "%{count} horas"
joiner: e
minute:
one: "%{count} minuto"
other: "%{count} minutos"
new:
error_amount: O tempo debe ser superior a 0
users:
edit:
edit_user: Actualizar persoa usuaria
form:
notifications: Notificacións
give_time:
give_time: Dálle tempo
index:
actions: Accións
active_warning: Vas cambiar o estado da conta de usuario/a %{username}
active_warning_angular: Vas cambiar o estado da conta de usuario/a para {{username}}
cancel_warning: Vas borrar a conta do Banco de tempo para o usuario/a %{username}
cancel_warning_angular: Vas borrar a conta do Banco de tempo para o usuario/a {{username}}
create: Crea unha nova persoa usuaria
manage_warning: Vas cambiar privilexios para o usuario/a %{username}
manage_warning_angular: Vas cambiar privilexios para o usuario/a {{username}}
members: Persoas membros
user_created: O usuario/a %{uid} %{name} gardouse
member_card:
active_ago: Tempo activo %{time}
no_activity: Non hai actividade
new:
cancel: Cancelar
create_more_users_button: Crea e engade outra persoa usuaria
new_user: Nova persoa usuaria
user_created_add: A persoa usuaria %{uid} %{name} gardada, agora crea o seguinte
show:
account: Últimas transaccións
accounts: Contas
balance: 'Balance:'
categories: Servizos ofrecidos
change_your_image: Cambia a túa imaxe
created_at: 'Rexistrado/a:'
data: Datos da persoa usuaria
date: Data
deleted_user: A persoa usuaria xa non existe
from_to: De / Para
inactive: "(Inactivo/a)"
inactive_user: A persoa usuaria non está activa
phone:
one: Teléfono
other: Teléfonos
post: Publicar
quantity: Cantidade
reason: Razón
user_no: 'Usuario/a #:'
user_rows:
activate: Activar
active_warning: Vas cambiar o estado da conta de usuario/a para %{user}
cancel_warning: Vas borrar a conta do Banco de tempo para o usuario/a %{user}
deactivate: Desactivar
manage_warning: Vas cambiar privilexios para o usuario/a %{user}
views:
pagination:
first: Primeira
last: Última
next: Seguinte
previous: Anterior
truncate: Truncar

View File

@ -16,7 +16,7 @@ Rails.application.routes.draw do
ActiveAdmin.routes(self)
get "global/switch_lang", as: :switch_lang
get :switch_lang, to: 'application#switch_lang'
get "/pages/:page" => "pages#show", as: :page

View File

@ -0,0 +1,25 @@
require 'spec_helper'
RSpec.describe ApplicationController do
describe '#switch_lang' do
let(:original_locale) { I18n.locale }
before do
request.env["HTTP_REFERER"] = root_path
end
after do
I18n.locale = original_locale
end
it 'switches locale to passed language via params' do
new_locale = (I18n.available_locales - [original_locale]).sample
expect do
get :switch_lang, locale: new_locale
end.to change(I18n, :locale).from(original_locale).to(new_locale)
expect(response).to redirect_to(root_path)
end
end
end

View File

@ -0,0 +1,41 @@
require 'spec_helper'
RSpec.feature 'sign in' do
let(:user) do
user = Fabricate(
:user,
email: 'user@timeoverflow.org',
password: 'papapa22',
terms_accepted_at: 1.day.from_now
)
user.add_to_organization(organization)
user
end
let(:organization) { Fabricate(:organization) }
context 'with a branded org id' do
before do
allow(Rails.application.config).to receive(:branded_organization_id).and_return(organization.id)
sign_in_with(user.email, user.password)
end
it 'renders the logo' do
expect(page).to have_css('.organization-brand-logo')
end
end
context 'without a branded org id' do
before do
allow(Rails.application.config).to receive(:branded_organization_id).and_return(1234)
sign_in_with(user.email, user.password)
end
it 'does not render the logo' do
expect(page).to have_no_css('.organization-brand-logo')
end
end
end

View File

@ -31,8 +31,6 @@ RSpec.feature 'create offer' do
# TODO there are two i18n keys for getting "Crear oferta" copy ( one returns 'Crear oferta' and the other 'Crear Oferta' )
click_on I18n.t('offers.new.submit', model: I18n.t('activerecord.models.offer.one'))
page.save_screenshot('create-offer-yolo.png')
end
end
end

View File

@ -1,4 +1,6 @@
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'simplecov'
SimpleCov.start 'rails'
ENV["RAILS_ENV"] ||= 'test'
ENV["ADMINS"] = "admin@timeoverflow.org"
@ -8,30 +10,25 @@ require 'capybara/rails'
require 'capybara/rspec'
require 'database_cleaner'
require 'fabrication'
require 'chromedriver-helper'
require 'selenium/webdriver'
require 'faker'
require 'shoulda/matchers'
I18n.reload!
Capybara.register_driver :chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.server = :webrick
Capybara.register_driver :headless_chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: { args: %w(headless disable-gpu) }
browser_options = Selenium::WebDriver::Chrome::Options.new(
args: %w(headless disable-gpu no-sandbox)
)
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
desired_capabilities: capabilities
options: browser_options
)
end
Capybara.javascript_driver = :headless_chrome
Capybara.default_driver = :headless_chrome
Capybara.javascript_driver = Capybara.default_driver
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.