decidim-core 0.8.3 → 0.8.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57b7690831d061951bff19709653676583f7ef7e
4
- data.tar.gz: 24e3aa8fbbc19862a9891cb7f501430e98a3ab4c
3
+ metadata.gz: 0ad061f43f8c514c854f0ea29035179e9f9010aa
4
+ data.tar.gz: 880adff366f398867619dd379122a0bb2704d153
5
5
  SHA512:
6
- metadata.gz: dfeedbe421c2b4a64b1e2870e9b5f51f8c981cc57c38b9aa26b0399ad8e0abebadb7fc5ad60c8ca4496dbf1f72433631b1abe4fc0ed9d0dc01f06feb8d3890f3
7
- data.tar.gz: 1c8fe1ffcef6c25e84c40e88c472303ffc026166716cceb766392296353aee3ecbb54e208c8413e2e16f64b98aa68a3a4059a5854d561449ad6e6f6f06067b5a
6
+ metadata.gz: 80b4ae4bfee8d712fcbc8ec4aacbc630e3e294b887cebd70fe716b435cf51904f47c1179a56e4f1a92d50f1944f8bf6947259bb78a416e7651853e637f032a11
7
+ data.tar.gz: 607fdd0f547ee9b38348fc2d0a752fcb1be3fbd431931f4e04b22b3447ac07dd03825482d9bf1689a470c3fb51153d069ce6f795b61e833ef95d74006636cc76
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # This module contains all the logic needed for a controller to render a participatory space
5
+ # public layout.
6
+ #
7
+ module ParticipatorySpaceContext
8
+ extend ActiveSupport::Concern
9
+
10
+ class_methods do
11
+ # Public: Called on a controller, it sets up all the surrounding methods to render a
12
+ # participatory space's template. It expects the method `current_participatory_space` to be
13
+ # defined, from which it will extract the participatory manifest.
14
+ #
15
+ # options - A hash used to modify the behavior of the layout. :only: - An array of actions on
16
+ # which the layout will be applied.
17
+ #
18
+ # Returns nothing.
19
+ def participatory_space_layout(options = {})
20
+ layout :layout, options
21
+ before_action :authorize_participatory_space, options
22
+ end
23
+ end
24
+
25
+ included do
26
+ include Decidim::NeedsOrganization
27
+
28
+ helper ParticipatorySpaceHelpers, IconHelper
29
+ helper_method :current_participatory_space
30
+ helper_method :current_participatory_space_manifest
31
+ helper_method :current_participatory_space_context
32
+
33
+ delegate :manifest, to: :current_participatory_space, prefix: true
34
+ end
35
+
36
+ private
37
+
38
+ def current_participatory_space_context
39
+ :public
40
+ end
41
+
42
+ def current_participatory_space
43
+ raise NotImplementedError
44
+ end
45
+
46
+ def authorize_participatory_space
47
+ authorize! :read, current_participatory_space
48
+ end
49
+
50
+ def ability_context
51
+ super.merge(
52
+ current_participatory_space: current_participatory_space,
53
+ )
54
+ end
55
+
56
+ def layout
57
+ current_participatory_space_manifest.context(current_participatory_space_context).layout
58
+ end
59
+ end
60
+ end
@@ -9,6 +9,9 @@ module Decidim
9
9
  include Settings
10
10
  include ActionAuthorization
11
11
 
12
+ include ParticipatorySpaceContext
13
+ participatory_space_layout
14
+
12
15
  helper Decidim::FiltersHelper
13
16
  helper Decidim::OrdersHelper
14
17
  helper Decidim::FeatureReferenceHelper
@@ -27,11 +30,13 @@ module Decidim
27
30
  skip_authorize_resource
28
31
 
29
32
  before_action do
30
- extend current_participatory_space.extension_module
31
-
32
33
  authorize! :read, current_feature
33
34
  end
34
35
 
36
+ def current_participatory_space
37
+ request.env["decidim.current_participatory_space"]
38
+ end
39
+
35
40
  def current_feature
36
41
  request.env["decidim.current_feature"]
37
42
  end
@@ -40,10 +45,6 @@ module Decidim
40
45
  @current_manifest ||= current_feature.manifest
41
46
  end
42
47
 
43
- def current_participatory_space
44
- current_feature.participatory_space
45
- end
46
-
47
48
  def ability_context
48
49
  super.merge(
49
50
  current_manifest: current_manifest,
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module ParticipatorySpaceHelpers
5
+ # Public: This method gets exposed on all controllers that have `ParticipatorySpaceContext`
6
+ # included as a module.
7
+ #
8
+ # Through this method, you can access helpers that are unique to a particular participatory
9
+ # space. These helpers are defined in the participatory space manifest, via the `context`
10
+ # helper.
11
+ #
12
+ # Example:
13
+ #
14
+ # # If you had a `ParticipatoryProcessHelper` with a `participatory_process_header` method
15
+ # participatory_process_helpers.participatory_process_header(current_participatory_space)
16
+ #
17
+ # Returns an Object that includes the Helpers as public methods.
18
+ def participatory_space_helpers
19
+ return @participatory_space_helpers if defined?(@participatory_space_helpers)
20
+
21
+ helper = current_participatory_space_manifest.context(current_participatory_space_context).helper
22
+
23
+ klass = Class.new(SimpleDelegator) do
24
+ include helper.constantize if helper
25
+ end
26
+
27
+ @participatory_space_helpers = klass.new(self)
28
+ end
29
+ end
30
+ end
data/config/routes.rb CHANGED
@@ -23,7 +23,7 @@ Decidim::Core::Engine.routes.draw do
23
23
  resource :locale, only: [:create]
24
24
 
25
25
  Decidim.participatory_space_manifests.each do |manifest|
26
- mount manifest.engine, at: "/", as: "decidim_#{manifest.name}"
26
+ mount manifest.context(:public).engine, at: "/", as: "decidim_#{manifest.name}"
27
27
  end
28
28
 
29
29
  mount Decidim::Verifications::Engine, at: "/", as: "decidim_verifications"
@@ -55,7 +55,7 @@ module Decidim
55
55
  end
56
56
 
57
57
  def current_participatory_process
58
- @current_participatory_process ||= @context[:current_participatory_process]
58
+ @current_participatory_process ||= @context[:current_participatory_space]
59
59
  end
60
60
  end
61
61
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-core version.
5
5
  module Core
6
6
  def self.version
7
- "0.8.3"
7
+ "0.8.4"
8
8
  end
9
9
  end
10
10
  end
@@ -42,10 +42,6 @@ module Decidim
42
42
  }
43
43
  end
44
44
 
45
- def extension_module
46
- "#{module_name}::#{demodulized_name}Context".constantize
47
- end
48
-
49
45
  def admin_extension_module
50
46
  "#{admin_module_name}::#{demodulized_name}Context".constantize
51
47
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # This class holds the configuration for a participatory space's context. A context consists of an
5
+ # engine, a layout and a set of helpers (usually used by the layout itself).
6
+ class ParticipatorySpaceContextManifest
7
+ include ActiveModel::Model
8
+ include Virtus.model
9
+
10
+ attribute :engine, Rails::Engine
11
+ attribute :helper
12
+ attribute :layout
13
+ end
14
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "decidim/settings_manifest"
4
+ require "decidim/participatory_space_context_manifest"
4
5
 
5
6
  module Decidim
6
7
  # This class handles all the logic associated to configuring a participatory
@@ -12,9 +13,6 @@ module Decidim
12
13
  include ActiveModel::Model
13
14
  include Virtus.model
14
15
 
15
- attribute :admin_engine, Rails::Engine
16
- attribute :engine, Rails::Engine
17
-
18
16
  attribute :name, Symbol
19
17
 
20
18
  # The ActiveRecord class name of the model we're exposing
@@ -30,6 +28,32 @@ module Decidim
30
28
 
31
29
  validates :name, presence: true
32
30
 
31
+ # A context used to set the layout and behavior of a participatory space. Full documentation can
32
+ # be found looking at the `ParticipatorySpaceContextManifest` class.
33
+ #
34
+ # Example:
35
+ #
36
+ # context(:public) do |context|
37
+ # context.layout "layouts/decidim/some_layout"
38
+ # end
39
+ #
40
+ # context(:public).layout
41
+ # # => "layouts/decidim/some_layout"
42
+ #
43
+ # Returns Nothing.
44
+ def context(name = :public, &block)
45
+ name = name.to_sym
46
+ @contexts ||= {}
47
+
48
+ if block
49
+ context = ParticipatorySpaceContextManifest.new
50
+ context.instance_eval(&block)
51
+ @contexts[name] = context
52
+ end
53
+
54
+ @contexts.fetch(name)
55
+ end
56
+
33
57
  # Public: A block that gets called when seeding for this feature takes place.
34
58
  #
35
59
  # Returns nothing.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-12-15 00:00:00.000000000 Z
13
+ date: 2018-01-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: active_link_to
@@ -508,28 +508,28 @@ dependencies:
508
508
  requirements:
509
509
  - - '='
510
510
  - !ruby/object:Gem::Version
511
- version: 0.8.3
511
+ version: 0.8.4
512
512
  type: :runtime
513
513
  prerelease: false
514
514
  version_requirements: !ruby/object:Gem::Requirement
515
515
  requirements:
516
516
  - - '='
517
517
  - !ruby/object:Gem::Version
518
- version: 0.8.3
518
+ version: 0.8.4
519
519
  - !ruby/object:Gem::Dependency
520
520
  name: decidim-dev
521
521
  requirement: !ruby/object:Gem::Requirement
522
522
  requirements:
523
523
  - - '='
524
524
  - !ruby/object:Gem::Version
525
- version: 0.8.3
525
+ version: 0.8.4
526
526
  type: :development
527
527
  prerelease: false
528
528
  version_requirements: !ruby/object:Gem::Requirement
529
529
  requirements:
530
530
  - - '='
531
531
  - !ruby/object:Gem::Version
532
- version: 0.8.3
532
+ version: 0.8.4
533
533
  description: Adds core features so other engines can hook into the framework.
534
534
  email:
535
535
  - josepjaume@gmail.com
@@ -679,6 +679,7 @@ files:
679
679
  - app/controllers/concerns/decidim/needs_authorization.rb
680
680
  - app/controllers/concerns/decidim/needs_organization.rb
681
681
  - app/controllers/concerns/decidim/paginable.rb
682
+ - app/controllers/concerns/decidim/participatory_space_context.rb
682
683
  - app/controllers/concerns/decidim/payload_info.rb
683
684
  - app/controllers/concerns/decidim/settings.rb
684
685
  - app/controllers/concerns/decidim/user_profile.rb
@@ -741,6 +742,7 @@ files:
741
742
  - app/helpers/decidim/omniauth_helper.rb
742
743
  - app/helpers/decidim/orders_helper.rb
743
744
  - app/helpers/decidim/paginate_helper.rb
745
+ - app/helpers/decidim/participatory_space_helpers.rb
744
746
  - app/helpers/decidim/replace_buttons_helper.rb
745
747
  - app/helpers/decidim/resource_helper.rb
746
748
  - app/helpers/decidim/sanitize_helper.rb
@@ -1100,6 +1102,7 @@ files:
1100
1102
  - lib/decidim/messaging.rb
1101
1103
  - lib/decidim/page_finder.rb
1102
1104
  - lib/decidim/participable.rb
1105
+ - lib/decidim/participatory_space_context_manifest.rb
1103
1106
  - lib/decidim/participatory_space_manifest.rb
1104
1107
  - lib/decidim/publicable.rb
1105
1108
  - lib/decidim/query_extensions.rb