decidim-core 0.8.3 → 0.8.4

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
  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