decidim-core 0.0.8.1 → 0.1.0

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/decidim_core_manifest.js +0 -1
  3. data/app/assets/javascripts/decidim/form_filter.component.js.es6 +12 -2
  4. data/app/assets/stylesheets/decidim/_decidim.scss +1 -2
  5. data/app/assets/stylesheets/decidim/extras/_embed.scss +21 -0
  6. data/app/assets/stylesheets/decidim/modules/_cards.scss +1 -1
  7. data/app/assets/stylesheets/decidim/modules/_icons.scss +1 -1
  8. data/app/commands/decidim/create_registration.rb +1 -1
  9. data/app/commands/decidim/invite_user.rb +7 -8
  10. data/app/controllers/concerns/decidim/filter_resource.rb +2 -3
  11. data/app/controllers/concerns/decidim/payload_info.rb +1 -1
  12. data/app/controllers/decidim/authorizations_controller.rb +0 -4
  13. data/app/controllers/decidim/pages_controller.rb +8 -11
  14. data/app/controllers/decidim/participatory_process_groups_controller.rb +1 -1
  15. data/app/controllers/decidim/participatory_process_widgets_controller.rb +4 -0
  16. data/app/controllers/decidim/widgets_controller.rb +7 -3
  17. data/app/forms/decidim/registration_form.rb +4 -4
  18. data/app/helpers/decidim/layout_helper.rb +1 -1
  19. data/app/helpers/decidim/map_helper.rb +21 -21
  20. data/app/helpers/decidim/resource_helper.rb +4 -4
  21. data/app/helpers/decidim/widget_urls_helper.rb +2 -2
  22. data/app/mailers/decidim/export_mailer.rb +29 -0
  23. data/app/middleware/decidim/current_organization.rb +1 -1
  24. data/app/models/decidim/feature.rb +5 -0
  25. data/app/models/decidim/organization.rb +1 -1
  26. data/app/models/decidim/participatory_process.rb +1 -1
  27. data/app/models/decidim/user.rb +1 -1
  28. data/app/presenters/decidim/home_stats_presenter.rb +74 -0
  29. data/app/queries/decidim/stats_users_count.rb +24 -0
  30. data/app/services/decidim/public_processes.rb +4 -2
  31. data/app/services/decidim/resource_search.rb +1 -1
  32. data/app/services/decidim/static_map_generator.rb +1 -3
  33. data/app/uploaders/decidim/image_uploader.rb +1 -1
  34. data/app/views/decidim/export_mailer/export.html.erb +1 -0
  35. data/app/views/decidim/participatory_process_widgets/show.html.erb +16 -27
  36. data/app/views/decidim/participatory_processes/show.html.erb +7 -7
  37. data/app/views/decidim/widgets/show.js.erb +27 -17
  38. data/app/views/layouts/decidim/widget.html.erb +55 -3
  39. data/app/views/pages/home/_statistics.html.erb +2 -10
  40. data/config/i18n-tasks.yml +1 -0
  41. data/config/initializers/devise.rb +11 -4
  42. data/config/locales/ca.yml +14 -3
  43. data/config/locales/en.yml +14 -3
  44. data/config/locales/es.yml +13 -2
  45. data/config/locales/eu.yml +0 -2
  46. data/config/locales/fi.yml +0 -2
  47. data/config/locales/fr.yml +386 -1
  48. data/config/locales/nl.yml +1 -3
  49. data/db/seeds.rb +1 -1
  50. data/lib/decidim/core.rb +10 -2
  51. data/lib/decidim/core/api/decidim_type.rb +4 -0
  52. data/lib/decidim/core/api/translated_field_type.rb +2 -2
  53. data/lib/decidim/core/engine.rb +13 -0
  54. data/lib/decidim/core/test/shared_examples/comments_examples.rb +16 -18
  55. data/lib/decidim/core/test/shared_examples/manage_moderations_examples.rb +2 -2
  56. data/lib/decidim/core/test/shared_examples/reports_examples.rb +9 -9
  57. data/lib/decidim/core/version.rb +1 -1
  58. data/lib/decidim/exporters.rb +9 -0
  59. data/lib/decidim/exporters/csv.rb +54 -0
  60. data/lib/decidim/exporters/export_data.rb +22 -0
  61. data/lib/decidim/exporters/exporter.rb +28 -0
  62. data/lib/decidim/exporters/json.rb +22 -0
  63. data/lib/decidim/feature_manifest.rb +18 -0
  64. data/lib/decidim/file_zipper.rb +28 -0
  65. data/lib/decidim/form_builder.rb +27 -14
  66. data/lib/decidim/has_reference.rb +1 -1
  67. data/lib/decidim/i18n_exceptions.rb +3 -2
  68. data/lib/decidim/query_extensions.rb +1 -1
  69. data/lib/decidim/reportable.rb +1 -1
  70. data/lib/decidim/resource_manifest.rb +0 -7
  71. data/lib/decidim/stats_registry.rb +110 -0
  72. data/vendor/assets/javascripts/form_datepicker.js.es6 +3 -1
  73. metadata +53 -29
  74. data/app/assets/stylesheets/decidim/widget.scss.erb +0 -25
@@ -4,7 +4,7 @@ module Decidim
4
4
  # installation we can find many organizations and each of them can start
5
5
  # their own participatory processes.
6
6
  class Organization < ApplicationRecord
7
- SOCIAL_HANDLERS = [:twitter, :facebook, :instagram, :youtube, :github]
7
+ SOCIAL_HANDLERS = [:twitter, :facebook, :instagram, :youtube, :github].freeze
8
8
 
9
9
  has_many :participatory_process_groups, foreign_key: "decidim_organization_id", class_name: Decidim::ParticipatoryProcessGroup, inverse_of: :organization
10
10
  has_many :participatory_processes, foreign_key: "decidim_organization_id", class_name: Decidim::ParticipatoryProcess, inverse_of: :organization
@@ -83,7 +83,7 @@ module Decidim
83
83
  end
84
84
 
85
85
  def hashtag
86
- attributes["hashtag"].to_s.gsub("#", "")
86
+ attributes["hashtag"].to_s.delete("#")
87
87
  end
88
88
  end
89
89
  end
@@ -9,7 +9,7 @@ module Decidim
9
9
  devise :invitable, :database_authenticatable, :registerable, :confirmable,
10
10
  :recoverable, :rememberable, :trackable, :decidim_validatable,
11
11
  :omniauthable, omniauth_providers: [:facebook, :twitter, :google_oauth2],
12
- request_keys: [:env], reset_password_keys: [:decidim_organization_id, :email]
12
+ request_keys: [:env], reset_password_keys: [:decidim_organization_id, :email]
13
13
 
14
14
  belongs_to :organization, foreign_key: "decidim_organization_id", class_name: Decidim::Organization
15
15
  has_many :authorizations, foreign_key: "decidim_user_id", class_name: Decidim::Authorization, inverse_of: :user
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # A presenter to render statistics in the homepage.
4
+ class HomeStatsPresenter < Rectify::Presenter
5
+ attribute :organization, Decidim::Organization
6
+
7
+ # Public: Render a collection of primary stats.
8
+ def highlighted
9
+ highlighted_stats = Decidim.stats.only([:users_count, :processes_count]).with_context(organization).map { |name, data| [name, data] }
10
+ highlighted_stats = highlighted_stats.concat(global_stats(priority: StatsRegistry::HIGH_PRIORITY))
11
+ highlighted_stats = highlighted_stats.concat(feature_stats(priority: StatsRegistry::HIGH_PRIORITY))
12
+ highlighted_stats = highlighted_stats.reject(&:empty?)
13
+
14
+ safe_join(
15
+ highlighted_stats.in_groups_of(2, false).map do |stats|
16
+ content_tag :div, class: "home-pam__highlight" do
17
+ safe_join(
18
+ stats.map do |name, data|
19
+ render_stats_data(name, data)
20
+ end
21
+ )
22
+ end
23
+ end
24
+ )
25
+ end
26
+
27
+ # Public: Render a collection of stats that are not primary.
28
+ def not_highlighted
29
+ not_highlighted_stats = global_stats(priority: StatsRegistry::MEDIUM_PRIORITY)
30
+ not_highlighted_stats = not_highlighted_stats.concat(feature_stats(priority: StatsRegistry::MEDIUM_PRIORITY))
31
+ not_highlighted_stats = not_highlighted_stats.reject(&:empty?)
32
+
33
+ safe_join(
34
+ not_highlighted_stats.in_groups_of(3, false).map do |stats|
35
+ content_tag :div, class: "home-pam__lowlight" do
36
+ safe_join(
37
+ stats.map do |name, data|
38
+ render_stats_data(name, data)
39
+ end
40
+ )
41
+ end
42
+ end
43
+ )
44
+ end
45
+
46
+ private
47
+
48
+ def global_stats(conditions)
49
+ Decidim.stats.except([:users_count, :processes_count])
50
+ .filter(conditions)
51
+ .with_context(published_features)
52
+ .map { |name, data| [name, data] }
53
+ end
54
+
55
+ def feature_stats(conditions)
56
+ Decidim.feature_manifests.map do |feature|
57
+ feature.stats.filter(conditions).with_context(published_features).map { |name, data| [name, data] }.flatten
58
+ end
59
+ end
60
+
61
+ def render_stats_data(name, data)
62
+ content_tag :div, "", class: "home-pam__data" do
63
+ safe_join([
64
+ content_tag(:h4, I18n.t(name, scope: "pages.home.statistics"), class: "home-pam__title"),
65
+ content_tag(:span, " #{data}", class: "home-pam__number #{name}")
66
+ ])
67
+ end
68
+ end
69
+
70
+ def published_features
71
+ @published_features ||= Feature.where(participatory_process: organization.participatory_processes.published)
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ # This query counts registered users from a collection of organizations
4
+ # in an optional interval of time.
5
+ class StatsUsersCount < Rectify::Query
6
+ def self.for(organization, start_at = nil, end_at = nil)
7
+ new(organization, start_at, end_at).query
8
+ end
9
+
10
+ def initialize(organization, start_at = nil, end_at = nil)
11
+ @organization = organization
12
+ @start_at = start_at
13
+ @end_at = end_at
14
+ end
15
+
16
+ def query
17
+ users = Decidim::User.where(organization: @organization)
18
+ users = users.where("created_at >= ?", @start_at) if @start_at.present?
19
+ users = users.where("created_at <= ?", @end_at) if @end_at.present?
20
+ users = users.where.not(confirmed_at: nil)
21
+ users.count
22
+ end
23
+ end
24
+ end
@@ -3,7 +3,6 @@ module Decidim
3
3
  # This service is in charge of gathering the ParticipatoryProcess and
4
4
  # ParticipatoryProcessGroup that are public and should be displayed together.
5
5
  class PublicProcesses
6
-
7
6
  # Initializes the PublicProcesses
8
7
  #
9
8
  # organization - The current organization
@@ -32,7 +31,10 @@ module Decidim
32
31
  attr_reader :organization
33
32
 
34
33
  def ordered_processes
35
- @sorted_processes ||= Decidim::ParticipatoryProcess.where(organization: organization).order("promoted DESC").includes(:active_step).order("decidim_participatory_process_steps.end_date ASC")
34
+ @sorted_processes ||= Decidim::ParticipatoryProcess.where(organization: organization)
35
+ .order("promoted DESC")
36
+ .includes(:active_step)
37
+ .order("decidim_participatory_process_steps.end_date ASC")
36
38
  end
37
39
 
38
40
  def participatory_process_groups
@@ -40,7 +40,7 @@ module Decidim
40
40
  # `Decidim::OrganizationScopesHelper`, to render the collection needed for the
41
41
  # `collection_check_boxes` form method.
42
42
  def search_scope_id
43
- clean_scope_ids = [scope_id].flatten.map{ |id| id == "global" ? nil : id }
43
+ clean_scope_ids = [scope_id].flatten.map { |id| id == "global" ? nil : id }
44
44
  query.where(decidim_scope_id: clean_scope_ids)
45
45
  end
46
46
 
@@ -35,11 +35,9 @@ module Decidim
35
35
  app_code: Decidim.geocoder.fetch(:here_app_code)
36
36
  }
37
37
 
38
- uri = URI.parse(Decidim.geocoder.fetch(:static_map_url)).tap do |uri|
38
+ URI.parse(Decidim.geocoder.fetch(:static_map_url)).tap do |uri|
39
39
  uri.query = URI.encode_www_form params
40
40
  end
41
-
42
- uri
43
41
  end
44
42
 
45
43
  def organization
@@ -27,7 +27,7 @@ module Decidim
27
27
 
28
28
  def validate_size
29
29
  manipulate! do |image|
30
- validation_error!(I18n.t("carrierwave.errors.image_too_big")) if image.size > 10.megabytes
30
+ validation_error!(I18n.t("carrierwave.errors.image_too_big")) if image.size > Decidim.maximum_attachment_size
31
31
  image
32
32
  end
33
33
  end
@@ -0,0 +1 @@
1
+ <%= t(".ready") %>
@@ -1,28 +1,17 @@
1
- <div class="column">
2
- <article class="card card--process">
3
- <%= link_to participatory_process_path(model), class: "card__link" do %>
4
- <div class="card__image-top"
5
- style="background-image:url(<%= model.hero_image.url %>)"></div>
1
+ <% content_for(:header, "false") %>
2
+ <% content_for(:title, translated_attribute(model.title)) %>
3
+ <p class="card__desc"><%== html_truncate(translated_attribute(model.short_description), length: 630, separator: '...') %></p>
4
+ <% content_for(:footer) do %>
5
+ <div class="card__support">
6
+ <% if model.active_step %>
7
+ <span class="card--process__small">
8
+ <%= t(".active_step", scope: "layouts") %>
9
+ <strong><%= translated_attribute model.active_step.title %></strong>
10
+ </span>
6
11
  <% end %>
7
- <div class="card__content">
8
- <%= link_to participatory_process_path(model), class: "card__link" do %>
9
- <h4 class="card__title"><%= translated_attribute model.title %></h4>
10
- <% end %>
11
- <p class="card__desc"><%== html_truncate(translated_attribute(model.short_description), length: 630, separator: '...') %></p>
12
- </div>
13
- <div class="card__footer">
14
- <div class="card__support">
15
- <% if model.active_step %>
16
- <span class="card--process__small">
17
- <%= t(".active_step", scope: "layouts") %>
18
- <strong><%= translated_attribute model.active_step.title %></strong>
19
- </span>
20
- <% end %>
21
- <span class="card--process__small"></span>
22
- <%= link_to participatory_process_path(model), class: "card__button button small" do %>
23
- <%= t(".take_part", scope: "layouts") %>
24
- <% end %>
25
- </div>
26
- </div>
27
- </article>
28
- </div>
12
+ <span class="card--process__small"></span>
13
+ <%= link_to participatory_process_path(model), class: "card__button button small" do %>
14
+ <%= t(".take_part", scope: "layouts") %>
15
+ <% end %>
16
+ </div>
17
+ <% end %>
@@ -20,49 +20,49 @@
20
20
  <div class="card extra definition-data">
21
21
  <% if translated_attribute(current_participatory_process.meta_scope).present? %>
22
22
  <div class="definition-data__item scope">
23
- <span class="definition-data__title"><%= t(".scope") =%></span>
23
+ <span class="definition-data__title"><%= t(".scope") %></span>
24
24
  <%== translated_attribute(current_participatory_process.meta_scope) %>
25
25
  </div>
26
26
  <% end %>
27
27
 
28
28
  <% if current_participatory_process.end_date.present? %>
29
29
  <div class="definition-data__item end-date">
30
- <span class="definition-data__title"><%= t(".end_date")=%></span>
30
+ <span class="definition-data__title"><%= t(".end_date") %></span>
31
31
  <%== l(current_participatory_process.end_date, format: :long) %>
32
32
  </div>
33
33
  <% end %>
34
34
 
35
35
  <% if translated_attribute(current_participatory_process.developer_group).present? %>
36
36
  <div class="definition-data__item developer-group">
37
- <span class="definition-data__title"><%= t(".developer_group") =%></span>
37
+ <span class="definition-data__title"><%= t(".developer_group") %></span>
38
38
  <%== translated_attribute(current_participatory_process.developer_group) %>
39
39
  </div>
40
40
  <% end %>
41
41
 
42
42
  <% if translated_attribute(current_participatory_process.local_area).present? %>
43
43
  <div class="definition-data__item local_area">
44
- <span class="definition-data__title"><%= t(".local_area") =%></span>
44
+ <span class="definition-data__title"><%= t(".local_area") %></span>
45
45
  <%== translated_attribute(current_participatory_process.local_area) %>
46
46
  </div>
47
47
  <% end %>
48
48
 
49
49
  <% if translated_attribute(current_participatory_process.target).present? %>
50
50
  <div class="definition-data__item target">
51
- <span class="definition-data__title"><%= t(".target") =%></span>
51
+ <span class="definition-data__title"><%= t(".target") %></span>
52
52
  <%== translated_attribute(current_participatory_process.target) %>
53
53
  </div>
54
54
  <% end %>
55
55
 
56
56
  <% if translated_attribute(current_participatory_process.participatory_scope).present? %>
57
57
  <div class="definition-data__item participatory_scope">
58
- <span class="definition-data__title"><%= t(".participatory_scope") =%></span>
58
+ <span class="definition-data__title"><%= t(".participatory_scope") %></span>
59
59
  <%== translated_attribute(current_participatory_process.participatory_scope) %>
60
60
  </div>
61
61
  <% end %>
62
62
 
63
63
  <% if translated_attribute(current_participatory_process.participatory_structure).present? %>
64
64
  <div class="definition-data__item participatory_structure">
65
- <span class="definition-data__title"><%= t(".participatory_structure") =%></span>
65
+ <span class="definition-data__title"><%= t(".participatory_structure") %></span>
66
66
  <%== translated_attribute(current_participatory_process.participatory_structure) %>
67
67
  </div>
68
68
  <% end %>
@@ -1,22 +1,32 @@
1
1
  /* eslint-disable no-var, prefer-template */
2
- var iframe = document.createElement('iframe');
2
+ (function () {
3
+ var iframe = document.createElement('iframe');
4
+ var scripts = document.getElementsByTagName('script');
5
+ var me = null;
3
6
 
4
- iframe.src = "<%= iframe_url %>";
5
- iframe.frameBorder = "0"
6
- iframe.scrolling = "no";
7
- iframe.style.visibility = 'hidden';
8
- iframe.style.height = "10px";
9
- iframe.onload = function () {
10
- iframe.contentWindow.postMessage({ type: "GET_HEIGHT" }, "*");
11
- }
7
+ if (document.currentScript) {
8
+ me = document.currentScript;
9
+ } else {
10
+ me = scripts[scripts.length - 1];
11
+ }
12
+
13
+ iframe.src = "<%= iframe_url %>";
14
+ iframe.frameBorder = "0"
15
+ iframe.scrolling = "no";
16
+ iframe.style.visibility = 'hidden';
17
+ iframe.style.height = "10px";
18
+ iframe.onload = function () {
19
+ iframe.contentWindow.postMessage({ type: "GET_HEIGHT" }, "*");
20
+ }
12
21
 
13
- document.body.appendChild(iframe);
22
+ me.insertAdjacentElement('afterend', iframe);
14
23
 
15
- window.addEventListener("message", function (event) {
16
- var height = event.data.height;
24
+ window.addEventListener("message", function (event) {
25
+ var height = event.data.height;
17
26
 
18
- if (event.data.type === "SET_HEIGHT") {
19
- iframe.style.height = height + "px";
20
- iframe.style.visibility = 'visible';
21
- }
22
- });
27
+ if (event.data.type === "SET_HEIGHT") {
28
+ iframe.style.height = height + "px";
29
+ iframe.style.visibility = 'visible';
30
+ }
31
+ });
32
+ }());
@@ -3,15 +3,67 @@
3
3
  <head>
4
4
  <title><%= decidim_page_title %></title>
5
5
  <%= csrf_meta_tags %>
6
- <%= stylesheet_link_tag 'decidim/widget' %>
6
+ <%= stylesheet_link_tag 'application' %>
7
7
  <%= javascript_include_tag 'application' %>
8
8
  </head>
9
9
 
10
- <body>
11
- <%= yield %>
10
+ <body class="widget">
11
+ <% if content_for(:header) == "false" %>
12
+ <% elsif content_for?(:header) %>
13
+ <%= content_for(:header) %>
14
+ <% else %>
15
+ <div class="participatory-process">
16
+ <%= link_to translated_attribute(current_participatory_process.title), decidim.participatory_process_path(current_participatory_process), target: "_blank" %>
17
+ </div>
18
+ <% end %>
19
+ <div class="row collapse">
20
+ <div class="column">
21
+
22
+ <article class="card">
23
+ <% if current_participatory_process.banner_image %>
24
+ <div class="card__image-top" style="background-image: url(<%= current_participatory_process.banner_image.url %>)"></div>
25
+ <% end %>
26
+
27
+ <div class="card__content">
28
+ <div class="card__header">
29
+ <%= link_to model do%>
30
+ <h5 class="card__title"><%= content_for(:title) %></h5>
31
+ <% end %>
32
+ <% if model.try(:author) %>
33
+ <div class="card__author author-data author-data--small">
34
+ <div class="author-data__main">
35
+ <div class="author author--inline">
36
+ <span class="author__avatar author__avatar--small">
37
+ <%= image_tag model.author_avatar_url %>
38
+ </span>
39
+ <span class="author__name"><%= model.author_name %></span>
40
+ <%= l model.created_at, format: "%d/%m/%Y" %>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ <% end %>
45
+ </div>
46
+ <%= yield %>
47
+ </div>
48
+ <div class="card__footer">
49
+ <% if content_for?(:footer) %>
50
+ <%= content_for(:footer) %>
51
+ <% else %>
52
+ <div class="card__support">
53
+ <div class="card__support__data"></div>
54
+ <%= link_to model, class: "card__button button small", target: "_blank" do %>
55
+ <%= t('.see_more') %>
56
+ <% end %>
57
+ </div>
58
+ <% end %>
59
+ </div>
60
+ </article>
61
+ </div>
62
+ </div>
12
63
  <div class="organization">
13
64
  <%= render partial: "layouts/decidim/logo", locals: { organization: current_organization } %>
14
65
  </div>
66
+
15
67
  <%= javascript_include_tag 'decidim/widget' %>
16
68
  </body>
17
69
  </html>
@@ -6,16 +6,8 @@
6
6
  <div class="row">
7
7
  <div class="columns small-centered mediumlarge-10 large-8">
8
8
  <div class="home-pam">
9
- <div class="home-pam__highlight">
10
- <div class="home-pam__data">
11
- <h4 class="home-pam__title"><%= t(".users") %></h4>
12
- <span class="home-pam__number users-count"><%= users.count %></span>
13
- </div>
14
- <div class="home-pam__data">
15
- <h4 class="home-pam__title"><%= t(".processes") %></h4>
16
- <span class="home-pam__number processes-count"><%= participatory_processes.count %></span>
17
- </div>
18
- </div>
9
+ <%= stats.highlighted %>
10
+ <%= stats.not_highlighted %>
19
11
  </div>
20
12
  </div>
21
13
  </div>
@@ -104,6 +104,7 @@ ignore_unused:
104
104
  - invisible_captcha.*
105
105
  - decidim.participatory_processes.scopes.global
106
106
  - decidim.participatory_processes.participatory_process_groups.none
107
+ - pages.home.statistics.*
107
108
  # - 'activerecord.attributes.*'
108
109
  # - '{devise,kaminari,will_paginate}.*'
109
110
  # - 'simple_form.{yes,no}'
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:disable Metrics/BlockLength
3
2
  # Use this hook to configure devise mailer, warden hooks and so forth.
4
3
  # Many of these configuration options can be set straight in your model.
5
4
 
@@ -301,13 +300,21 @@ Devise.setup do |config|
301
300
  # Add a new OmniAuth provider. Check the wiki for more information on setting
302
301
  # up on your models and hooks.
303
302
  if Rails.application.secrets.dig(:omniauth, "facebook").present?
304
- config.omniauth :facebook, Rails.application.secrets.omniauth["facebook"]["app_id"], Rails.application.secrets.omniauth["facebook"]["app_secret"], scope: :email, info_fields: "name,email,verified"
303
+ config.omniauth :facebook,
304
+ Rails.application.secrets.omniauth["facebook"]["app_id"],
305
+ Rails.application.secrets.omniauth["facebook"]["app_secret"],
306
+ scope: :email,
307
+ info_fields: "name,email,verified"
305
308
  end
306
309
  if Rails.application.secrets.dig(:omniauth, "twitter").present?
307
- config.omniauth :twitter, Rails.application.secrets.omniauth["twitter"]["api_key"], Rails.application.secrets.omniauth["twitter"]["api_secret"]
310
+ config.omniauth :twitter,
311
+ Rails.application.secrets.omniauth["twitter"]["api_key"],
312
+ Rails.application.secrets.omniauth["twitter"]["api_secret"]
308
313
  end
309
314
  if Rails.application.secrets.dig(:omniauth, "google_oauth2").present?
310
- config.omniauth :google_oauth2, Rails.application.secrets.omniauth["google_oauth2"]["client_id"], Rails.application.secrets.omniauth["google_oauth2"]["client_secret"]
315
+ config.omniauth :google_oauth2,
316
+ Rails.application.secrets.omniauth["google_oauth2"]["client_id"],
317
+ Rails.application.secrets.omniauth["google_oauth2"]["client_secret"]
311
318
  end
312
319
 
313
320
  # ==> Warden configuration