maquina 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31ab94ae292dc94ebccc7ad33cd520b29a8bd945620f4d698239a6fec7a686a3
4
- data.tar.gz: ee06ac7e22a088a2386cf3ca2d6f83aa3d4cff47102c22efaa495b464ac2cf97
3
+ metadata.gz: f491a32a98067b380165fc5998e1f62f9eb40e68a5fdd0afcdd71c2614e0ccf5
4
+ data.tar.gz: 1696eea4780235d2d8a4d5ec007761efe3cf2484b92f7a25d342755dac726ee1
5
5
  SHA512:
6
- metadata.gz: 53eb9e8dee812c60f8c33c770dc8c0a6ad4543f55d29be3c3aa2613f166578392bab79b446e119e135f6a90f846d85ef84d39b23a820ae6cd80e3bcdf00939e7
7
- data.tar.gz: c62d7bec012895f8feca619c6c753e97e4cf27d4fcb3e1f58e79f1d14d403efd55ec4257fdda5d7f70cadc80b8c6acfef84f136fa3b93d902b1f56a5f6e2cb0e
6
+ metadata.gz: 3d54612c668ff636cc13f5fc5bf614a05f94b9bfe99e77eac2957007cf3c9773adf5cc161215e2c0b11b6e0209866dd2a3a6b37f393af5be2d080ea7c40ce428
7
+ data.tar.gz: 74f3bea13f2dbb72ecdb92318276cfe24cb3b3cb6696710ed7a8569f37c2f51cea8cdf6b33e6795ada7a9f889f98a1938c69d956015f97696cfbe062027c1f77
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- maquina (0.2.5)
4
+ maquina (0.3.0)
5
5
  action_policy (~> 0.6.3)
6
6
  bcrypt (~> 3.1.7)
7
7
  importmap-rails (~> 1.2.0)
@@ -14,6 +14,10 @@ module Maquina
14
14
  redirect_to maquina.new_sessions_path if !signed_in?
15
15
  end
16
16
 
17
+ def authenticate
18
+ load_session if Maquina::Current.active_session.blank?
19
+ end
20
+
17
21
  def signed_in?
18
22
  load_session if Maquina::Current.active_session.blank?
19
23
 
@@ -22,6 +22,7 @@ module Maquina
22
22
  class_attribute :form_attributes, instance_writer: false
23
23
  class_attribute :show_attributes, instance_writer: false
24
24
  class_attribute :policy_class, instance_writer: false
25
+ class_attribute :show_link, instance_writer: false
25
26
 
26
27
  attr_reader :resource, :collection
27
28
 
@@ -137,17 +138,18 @@ module Maquina
137
138
  end
138
139
 
139
140
  helper_method :resource_class, :policy_class, :resource, :list_attributes, :form_attributes, :collection,
140
- :collection_path, :resource_path, :new_resource_path, :edit_resource_path, :submit_path
141
+ :collection_path, :resource_path, :new_resource_path, :edit_resource_path, :submit_path, :show_link
141
142
  end
142
143
 
143
144
  class_methods do
144
- def resourceful(resource_class: nil, namespace: nil, find_by_param: :id, only: [], except: [], list_attributes: [], form_attributes: [], show_attributes: [], policy_class: nil)
145
+ def resourceful(resource_class: nil, namespace: nil, find_by_param: :id, only: [], except: [], list_attributes: [], form_attributes: [], show_attributes: [], policy_class: nil, show_link: nil)
145
146
  self.resource_class = resource_class || controller_path.classify.safe_constantize
146
147
  self.find_by_param = find_by_param || :id
147
148
  self.list_attributes = Array(list_attributes).compact
148
149
  self.form_attributes = Array(form_attributes).compact
149
150
  self.show_attributes = Array(show_attributes).compact
150
151
  self.policy_class = policy_class
152
+ self.show_link = show_link
151
153
  self.namespace = namespace
152
154
 
153
155
  valid_rest_actions = {
@@ -17,11 +17,11 @@ module Maquina
17
17
  def profile_menu_options
18
18
  if Maquina::Current.signed_in?
19
19
  {
20
- signout: {method: :delete, path: sessions_path}
20
+ signout: {method: :delete, path: maquina.sessions_path}
21
21
  }
22
22
  else
23
23
  {
24
- signin: new_sessions_path
24
+ signin: maquina.new_sessions_path
25
25
  }
26
26
  end
27
27
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Maquina
4
+ module OrganizationScoped
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ belongs_to :organization, class_name: "Maquina::Organization", foreign_key: :maquina_organization_id
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Maquina
4
+ module UserScoped
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ belongs_to :user, class_name: "Maquina::User", foreign_key: :maquina_user_id
9
+ end
10
+ end
11
+ end
@@ -43,5 +43,10 @@ module Maquina
43
43
  def admin?
44
44
  (Maquina::Current.membership.present? && Maquina::Current.membership.admin?)
45
45
  end
46
+
47
+ relation_scope do |scope|
48
+ Rails.logger.warn("This policy scope at #{self} is not scoping by User or Organization")
49
+ scope
50
+ end
46
51
  end
47
52
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Maquina
4
+ module Application
5
+ module Components
6
+ class DateComponent < ComponentBase
7
+ def template
8
+ div(**control_html) do
9
+ @form.label attribute_name, class: "label #{label_css_class}"
10
+ div(class: "mt-1") do
11
+ css_class = {
12
+ class: input_html.delete(:class) || ""
13
+ }
14
+ @form.date_select attribute_name, input_html, css_class
15
+ help_template
16
+ error_template
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Maquina
4
+ module Application
5
+ module Components
6
+ class TextAreaComponent < ComponentBase
7
+ def template
8
+ div(**control_html) do
9
+ @form.label attribute_name, class: "label #{label_css_class}"
10
+ div(class: "mt-1") do
11
+ @form.text_area attribute_name, **input_html
12
+ help_template
13
+ error_template
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -69,6 +69,12 @@ module Maquina
69
69
  render Maquina::Application::Components::ActionTextComponent.new(resource: @resource, form: form, options: attribute_values)
70
70
  when :select
71
71
  render Maquina::Application::Components::SelectComponent.new(resource: @resource, form: form, options: attribute_values)
72
+ when :date
73
+ render Maquina::Application::Components::DateComponent.new(resource: @resource, form: form, options: attribute_values)
74
+ when :text_area
75
+ render Maquina::Application::Components::TextAreaComponent.new(resource: @resource, form: form, options: attribute_values)
76
+ when :input
77
+ render Maquina::Application::Components::InputComponent.new(resource: @resource, form: form, options: attribute_values)
72
78
  else
73
79
  render Maquina::Application::Components::InputComponent.new(resource: @resource, form: form, options: attribute_values)
74
80
  end
@@ -5,7 +5,7 @@ module Maquina
5
5
  class IndexTable < Phlex::HTML
6
6
  include ApplicationView
7
7
 
8
- delegate :humanized_money_with_symbol, :edit_resource_path, to: :helpers
8
+ delegate :humanized_money_with_symbol, :edit_resource_path, :resource_path, to: :helpers
9
9
 
10
10
  def initialize(collection: nil, pagination: nil, list_attributes: nil)
11
11
  @collection = collection
@@ -69,7 +69,7 @@ module Maquina
69
69
 
70
70
  tr do
71
71
  @list_attributes.each_with_index do |attribute, index|
72
- td(class: (index == 0) ? first_css : base_css, scope: "col") { attribute_value(item, attribute) }
72
+ td(class: (index == 0) ? first_css : base_css, scope: "col") { attribute_to_link(item, attribute, attribute_value(item, attribute)) }
73
73
  end
74
74
  td(class: "relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-6", scope: "col") do
75
75
  a(href: edit_resource_path(item), class: "text-skin-accented hover:text-skin-accented-hover") { t("index.edit") } if policy_class.blank? || allowed_to?(:edit?, item, with: policy_class)
@@ -116,6 +116,12 @@ module Maquina
116
116
  value
117
117
  end
118
118
  end
119
+
120
+ def attribute_to_link(item, attribute, value)
121
+ return value if show_link.nil? || show_link != attribute
122
+
123
+ link_to(value, resource_path(item), class: "link", data: {"turbo-frame": "_top"})
124
+ end
119
125
  end
120
126
  end
121
127
  end
@@ -5,7 +5,7 @@ module Maquina
5
5
  include Maquina::Engine.routes.url_helpers
6
6
  include Phlex::Rails::Helpers::T
7
7
 
8
- delegate :resource_class, :l, :default_url_options, :policy_class, :allowed_to?, to: :helpers
8
+ delegate :resource_class, :l, :default_url_options, :policy_class, :show_link, :allowed_to?, to: :helpers
9
9
 
10
10
  # TODO: Revisit this later
11
11
  def image_tag(source, options = {})
@@ -0,0 +1,44 @@
1
+ es:
2
+ flash:
3
+ create:
4
+ notice:
5
+ title: Se creó con éxito
6
+ description: Tú registro fue creado
7
+ alert:
8
+ title: No se pudo crear
9
+ description: Revisa los mensajes del formulario para resolver el problema
10
+
11
+ update:
12
+ notice:
13
+ title: Se actualizó con éxito
14
+ description: Tú registros fue actualizado
15
+ alert:
16
+ title: No se pudo actualizar
17
+ description: Revisa los mensajes del formulario para resolver el problema
18
+
19
+ destroy:
20
+ notice:
21
+ title: Se eliminó con éxito
22
+ description: Tú registro fue eliminado
23
+ alert:
24
+ title: No se puedo eliminar
25
+ description: Revisa los mensajes del formulario para resolver el problema
26
+
27
+ maquina/invitation:
28
+ create:
29
+ notice:
30
+ title: Invitación enviada
31
+ description: La inivitación para %{email} expira en 3 días
32
+
33
+ sessions:
34
+ create:
35
+ notice:
36
+ title: Bievenido a la sesión
37
+ description: Tu sesión ha iniciado
38
+ alert:
39
+ title: No fue posible iniciar la sesión
40
+ description: El correo electrónico o la contraseña son inválidos
41
+ destroy:
42
+ notice:
43
+ title: Sesión terminada
44
+ description: Para continuar debes iniciar sesión
@@ -0,0 +1,58 @@
1
+ es:
2
+ new:
3
+ maquina/plan:
4
+ title: Configura el plan para los clientes
5
+ maquina/invitation:
6
+ title: Invitar a un usuario a colaborar
7
+ description: El usuario va a recibir la invitación para unirse a colaborar vía correo electrónico.
8
+
9
+ form:
10
+ sessions:
11
+ email: Correo electrónico
12
+ password: Contraseña
13
+ forgot_password: Olvidé mi contraseña
14
+ submit: Iniciar sesión
15
+
16
+ accept_invitations:
17
+ submit: Aceptar invitación
18
+
19
+ placeholder:
20
+ sessions:
21
+ email: user@mail.com
22
+ password: Contraseña actual
23
+
24
+ maquina/plan:
25
+ name: Plan básico
26
+
27
+ maquina/invitation:
28
+ email: Correo electrónico del usuario
29
+
30
+ help:
31
+ maquina/plan:
32
+ name: Nombre del plan
33
+ trial: Número de días de prueba
34
+ price: Precio del plan
35
+ free: Indica si el plan es gratuito
36
+ active: Activar plan para clientes
37
+
38
+ helpers:
39
+ cancel: Cancelar
40
+ submit:
41
+ maquina/plan:
42
+ create: Crear %{model}
43
+ update: Actualizar %{model}
44
+
45
+ maquina/invitation:
46
+ create: Enviar invitación
47
+
48
+ maxlength:
49
+ default: 30
50
+
51
+ maquina/plan:
52
+ name: 60
53
+ trial: 3
54
+ price: 9
55
+
56
+ sessions:
57
+ email: 60
58
+ password: 60
@@ -0,0 +1,38 @@
1
+ es:
2
+ activerecord:
3
+ models:
4
+ maquina/plan:
5
+ one: Plan
6
+ other: Planes
7
+ maquina/user:
8
+ one: Usuario
9
+ other: Usuarios
10
+ maquina/invitation:
11
+ one: Invitación
12
+ other: Invitaciones
13
+
14
+ attributes:
15
+ maquina/plan:
16
+ name: Nombre
17
+ trial: Prueba
18
+ price: Precio
19
+ free: Gratuito
20
+ active: Activo
21
+ maquina/user:
22
+ email: Correo electrónico
23
+ blocked_at: Bloqueado desde
24
+ created_at: Creado el
25
+ maquina/invitation:
26
+ email: Correo electrónico
27
+
28
+ errors:
29
+ models:
30
+ maquina/active_session:
31
+ attributes:
32
+ user:
33
+ blocked: cuenta bloqueada
34
+ maquina/invitation:
35
+ attributes:
36
+ email:
37
+ blank: se necesita el correo electrónico a enviar invitación
38
+ invalid: invitación ya aceptada
@@ -0,0 +1,7 @@
1
+ es:
2
+ routes:
3
+ plans: planes
4
+ users: usuarios
5
+ invitations: invitaciones
6
+ accept_invitation: aceptar_invitacion
7
+ sessions: sesiones
@@ -0,0 +1,44 @@
1
+ es:
2
+ application_name: maquina
3
+ yes_value: "Sí"
4
+ no_value: "No"
5
+
6
+ index:
7
+ add_new: Nuevo %{model}
8
+ no_items: No hay %{model} registrados
9
+ edit: Modificar
10
+
11
+ maquina/plan:
12
+ description: Listado de planes.
13
+ maquina/user:
14
+ add_new: Invitar %{model}
15
+ description: Listado de usuarios.
16
+
17
+ pagination:
18
+ next: Siguiente
19
+ previous: Previo
20
+ information: Mostrando %{count} registro(s). Desde %{from} hasta %{to}.
21
+
22
+ menu:
23
+ main:
24
+ plans: Planes
25
+ users: Usuarios
26
+ profile:
27
+ signout: Cerrar sesión
28
+ signin: Iniciar sesión
29
+
30
+ search:
31
+ search: Buscar
32
+
33
+ maquina:
34
+ sessions:
35
+ new:
36
+ title: Iniciar sesión a tu cuenta
37
+ or: O
38
+ trial: iniciar tu prueba
39
+
40
+ accept_invitations:
41
+ new:
42
+ title: Aceptar invitación
43
+ description: Aquí puedes aceptar la inivitación para colaborar con %{org}
44
+ expired: La invitación es inválida, expiró, o ya fue aceptada. Si crees que esto es incorrecto, por favor contacta a la persona que envió la invitación y solicita una nueva invitación.
@@ -1,3 +1,3 @@
1
1
  module Maquina
2
- VERSION = "0.2.5"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maquina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Alberto Chávez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-06 00:00:00.000000000 Z
11
+ date: 2023-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -345,8 +345,10 @@ files:
345
345
  - app/models/concerns/maquina/authenticate_by.rb
346
346
  - app/models/concerns/maquina/blockeable.rb
347
347
  - app/models/concerns/maquina/multifactor.rb
348
+ - app/models/concerns/maquina/organization_scoped.rb
348
349
  - app/models/concerns/maquina/retain_passwords.rb
349
350
  - app/models/concerns/maquina/searchable.rb
351
+ - app/models/concerns/maquina/user_scoped.rb
350
352
  - app/models/maquina/active_session.rb
351
353
  - app/models/maquina/application_record.rb
352
354
  - app/models/maquina/current.rb
@@ -372,9 +374,11 @@ files:
372
374
  - app/views/maquina/application/components/action_text_component.rb
373
375
  - app/views/maquina/application/components/checkbox_component.rb
374
376
  - app/views/maquina/application/components/component_base.rb
377
+ - app/views/maquina/application/components/date_component.rb
375
378
  - app/views/maquina/application/components/file_component.rb
376
379
  - app/views/maquina/application/components/input_component.rb
377
380
  - app/views/maquina/application/components/select_component.rb
381
+ - app/views/maquina/application/components/text_area_component.rb
378
382
  - app/views/maquina/application/create.turbo_stream.erb
379
383
  - app/views/maquina/application/edit.html.erb
380
384
  - app/views/maquina/application/edit.rb
@@ -413,11 +417,16 @@ files:
413
417
  - config/initializers/money.rb
414
418
  - config/initializers/pagy.rb
415
419
  - config/locales/flash.en.yml
420
+ - config/locales/flash.es.yml
416
421
  - config/locales/forms.en.yml
422
+ - config/locales/forms.es.yml
417
423
  - config/locales/mailers.en.yml
418
424
  - config/locales/models.en.yml
425
+ - config/locales/models.es.yml
419
426
  - config/locales/routes.en.yml
427
+ - config/locales/routes.es.yml
420
428
  - config/locales/views.en.yml
429
+ - config/locales/views.es.yml
421
430
  - config/routes.rb
422
431
  - db/migrate/20221109010726_create_maquina_plans.rb
423
432
  - db/migrate/20221113000409_create_maquina_users.rb