decidim-api 0.26.0 → 0.27.0.rc1

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.
@@ -0,0 +1,7 @@
1
+ <div class="content"><%= contents %></div>
2
+ <div id="sidebar"><%= include.("sidebar.html") %></div>
3
+
4
+ <!-- mobile only -->
5
+ <div id="mobile-header">
6
+ <a class="menu-button" onclick="document.body.classList.toggle('sidebar-open')">☰</a>
7
+ </div>
@@ -1,5 +1,4 @@
1
-
2
- <div class="intro">
1
+ <div class="content">
3
2
  <div class="version">Decidim <%= Decidim.version %></div>
4
3
 
5
4
  <h1><%= current_organization.name %> API documentation</h1>
@@ -8,12 +7,4 @@
8
7
  <% end %>
9
8
  </div>
10
9
 
11
- <div class="info">
12
- <%= render_doc("usage") %>
13
- </div>
14
-
15
- <div id="documentation"></div>
16
-
17
- <script>
18
- window.renderDocumentation("<%= root_path %>");
19
- </script>
10
+ <%= static_api_docs_content %>
@@ -3,13 +3,14 @@
3
3
  <head>
4
4
  <title><%= Decidim::GraphiQL::Rails.config.title || "Decidim API" %></title>
5
5
  <%= stylesheet_pack_tag("decidim_api_graphiql") %>
6
- <%= javascript_pack_tag("decidim_api_graphiql", defer: false) %>
7
6
  </head>
8
7
  <body>
9
8
  <div id="graphiql-container">
10
9
  Loading...
11
10
  </div>
12
11
 
12
+ <%= javascript_pack_tag "decidim_api_graphiql", defer: false %>
13
+
13
14
  <%
14
15
  js_configs = {
15
16
  graphql_endpoint: graphql_endpoint_path,
@@ -17,6 +18,7 @@
17
18
  request_headers: JSON.pretty_generate(Decidim::GraphiQL::Rails.config.resolve_headers(self))
18
19
  }
19
20
  %>
21
+
20
22
  <script>
21
23
  window.Decidim.config.set(<%== js_configs.to_json %>);
22
24
  </script>
@@ -1,10 +1,7 @@
1
1
  <html>
2
2
  <head>
3
3
  <title><%= current_organization.name %> - API Documentation</title>
4
- <%= javascript_pack_tag "decidim_api_docs", defer: false %>
5
- <%= stylesheet_pack_tag "decidim_api_docs" %>
6
- <style>
7
- </style>
4
+ <%= stylesheet_pack_tag("decidim_api_docs") %>
8
5
  </head>
9
6
  <body>
10
7
  <%= yield %>
data/config/routes.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  Decidim::Api::Engine.routes.draw do
4
4
  get "/graphiql", to: "graphiql#show", graphql_path: "/api", as: :graphiql
5
5
  get "/docs", to: "documentation#show", as: :documentation
6
+ get "/docs/*path", to: "documentation#show"
6
7
  get "/", to: redirect("/api/docs")
7
8
  post "/" => "queries#create", as: :root
8
9
  end
@@ -7,9 +7,9 @@ module Decidim
7
7
  mutation(MutationType)
8
8
  query(QueryType)
9
9
 
10
- default_max_page_size 50
11
- max_depth 15
12
- max_complexity 300
10
+ default_max_page_size Decidim::Api.schema_max_per_page
11
+ max_depth Decidim::Api.schema_max_depth
12
+ max_complexity Decidim::Api.schema_max_complexity
13
13
 
14
14
  orphan_types(Api.orphan_types)
15
15
  end
@@ -12,8 +12,8 @@ shared_context "with a graphql decidim component" do
12
12
  let(:participatory_process) { create :participatory_process, organization: current_organization }
13
13
  let(:category) { create(:category, participatory_space: participatory_process) }
14
14
 
15
- let(:component_type) {}
16
- let(:component_fragment) {}
15
+ let(:component_type) { nil }
16
+ let(:component_fragment) { nil }
17
17
 
18
18
  let(:participatory_process_query) do
19
19
  %(
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ shared_examples "implements stats type" do
6
+ context "when the space implements stats" do
7
+ let(:expected_data) do
8
+ {
9
+ "stats" => [
10
+ { "name" => "dummies_count_high", "value" => 0 },
11
+ { "name" => "pages_count", "value" => 0 },
12
+ { "name" => "proposals_count", "value" => 0 },
13
+ { "name" => "meetings_count", "value" => 0 },
14
+ { "name" => "budgets_count", "value" => 0 },
15
+ { "name" => "surveys_count", "value" => 0 },
16
+ { "name" => "results_count", "value" => 0 },
17
+ { "name" => "debates_count", "value" => 0 },
18
+ { "name" => "sortitions_count", "value" => 0 },
19
+ { "name" => "posts_count", "value" => 0 },
20
+ { "name" => "elections_count", "value" => 0 }
21
+ ]
22
+ }
23
+ end
24
+
25
+ it "executes sucessfully" do
26
+ expect { response }.not_to raise_error
27
+ end
28
+
29
+ it "returns the correct response" do
30
+ expect(stats_response).to match_array(expected_data["stats"])
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/api/test/shared_examples/statistics_examples"
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-api version.
5
5
  module Api
6
6
  def self.version
7
- "0.26.0"
7
+ "0.27.0.rc1"
8
8
  end
9
9
  end
10
10
  end
data/lib/decidim/api.rb CHANGED
@@ -7,6 +7,23 @@ module Decidim
7
7
  # This module holds all business logic related to exposing a Public API for
8
8
  # decidim.
9
9
  module Api
10
+ include ActiveSupport::Configurable
11
+
12
+ # defines the schema max_per_page to configure GraphQL pagination
13
+ config_accessor :schema_max_per_page do
14
+ 50
15
+ end
16
+
17
+ # defines the schema max_complexity to configure GraphQL query complexity
18
+ config_accessor :schema_max_complexity do
19
+ 5000
20
+ end
21
+
22
+ # defines the schema max_depth to configure GraphQL query max_depth
23
+ config_accessor :schema_max_depth do
24
+ 15
25
+ end
26
+
10
27
  # This declares all the types an interface or union can resolve to. This needs
11
28
  # to be done in order to be able to have them found. This is a shortcoming of
12
29
  # graphql-ruby and the way it deals with loading types, in combination with
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "graphql-docs"
4
+
5
+ namespace :decidim_api do
6
+ desc "Generates the API docs files"
7
+ task generate_docs: :environment do
8
+ output_dir = clear_previous_docs
9
+
10
+ GraphQLDocs.build(
11
+ schema: Decidim::Api::Schema,
12
+ output_dir: output_dir,
13
+ base_url: "/api/docs",
14
+ landing_pages: {
15
+ index: File.expand_path("../../docs/usage.md", __dir__)
16
+ },
17
+ templates: {
18
+ default: File.expand_path("../../app/views/decidim/api/documentation/graphql_docs_template.html.erb", __dir__)
19
+ }
20
+ )
21
+
22
+ clear_cache_folder
23
+ end
24
+
25
+ def clear_previous_docs
26
+ output_dir = Rails.application.root.join("app", "views", "static", "api", "docs")
27
+ FileUtils.rm_rf(output_dir)
28
+ output_dir
29
+ end
30
+
31
+ def clear_cache_folder
32
+ FileUtils.rm_rf(Rails.application.root.join(".sass-cache"))
33
+ end
34
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.0
4
+ version: 0.27.0.rc1
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: 2022-02-22 00:00:00.000000000 Z
13
+ date: 2022-06-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: graphql
@@ -33,95 +33,89 @@ dependencies:
33
33
  - !ruby/object:Gem::Version
34
34
  version: '1.13'
35
35
  - !ruby/object:Gem::Dependency
36
- name: rack-cors
36
+ name: graphql-docs
37
37
  requirement: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '1.0'
41
+ version: 2.1.0
42
42
  type: :runtime
43
43
  prerelease: false
44
44
  version_requirements: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '1.0'
48
+ version: 2.1.0
49
49
  - !ruby/object:Gem::Dependency
50
- name: redcarpet
50
+ name: rack-cors
51
51
  requirement: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '3.5'
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- version: 3.5.1
55
+ version: '1.0'
59
56
  type: :runtime
60
57
  prerelease: false
61
58
  version_requirements: !ruby/object:Gem::Requirement
62
59
  requirements:
63
60
  - - "~>"
64
61
  - !ruby/object:Gem::Version
65
- version: '3.5'
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 3.5.1
62
+ version: '1.0'
69
63
  - !ruby/object:Gem::Dependency
70
64
  name: decidim-comments
71
65
  requirement: !ruby/object:Gem::Requirement
72
66
  requirements:
73
67
  - - '='
74
68
  - !ruby/object:Gem::Version
75
- version: 0.26.0
69
+ version: 0.27.0.rc1
76
70
  type: :development
77
71
  prerelease: false
78
72
  version_requirements: !ruby/object:Gem::Requirement
79
73
  requirements:
80
74
  - - '='
81
75
  - !ruby/object:Gem::Version
82
- version: 0.26.0
76
+ version: 0.27.0.rc1
83
77
  - !ruby/object:Gem::Dependency
84
78
  name: decidim-core
85
79
  requirement: !ruby/object:Gem::Requirement
86
80
  requirements:
87
81
  - - '='
88
82
  - !ruby/object:Gem::Version
89
- version: 0.26.0
83
+ version: 0.27.0.rc1
90
84
  type: :development
91
85
  prerelease: false
92
86
  version_requirements: !ruby/object:Gem::Requirement
93
87
  requirements:
94
88
  - - '='
95
89
  - !ruby/object:Gem::Version
96
- version: 0.26.0
90
+ version: 0.27.0.rc1
97
91
  - !ruby/object:Gem::Dependency
98
92
  name: decidim-dev
99
93
  requirement: !ruby/object:Gem::Requirement
100
94
  requirements:
101
95
  - - '='
102
96
  - !ruby/object:Gem::Version
103
- version: 0.26.0
97
+ version: 0.27.0.rc1
104
98
  type: :development
105
99
  prerelease: false
106
100
  version_requirements: !ruby/object:Gem::Requirement
107
101
  requirements:
108
102
  - - '='
109
103
  - !ruby/object:Gem::Version
110
- version: 0.26.0
104
+ version: 0.27.0.rc1
111
105
  - !ruby/object:Gem::Dependency
112
106
  name: decidim-participatory_processes
113
107
  requirement: !ruby/object:Gem::Requirement
114
108
  requirements:
115
109
  - - '='
116
110
  - !ruby/object:Gem::Version
117
- version: 0.26.0
111
+ version: 0.27.0.rc1
118
112
  type: :development
119
113
  prerelease: false
120
114
  version_requirements: !ruby/object:Gem::Requirement
121
115
  requirements:
122
116
  - - '='
123
117
  - !ruby/object:Gem::Version
124
- version: 0.26.0
118
+ version: 0.27.0.rc1
125
119
  description: API engine for decidim
126
120
  email:
127
121
  - josepjaume@gmail.com
@@ -137,11 +131,11 @@ files:
137
131
  - app/controllers/decidim/api/documentation_controller.rb
138
132
  - app/controllers/decidim/api/graphiql_controller.rb
139
133
  - app/controllers/decidim/api/queries_controller.rb
140
- - app/helpers/decidim/api/application_helper.rb
141
134
  - app/packs/entrypoints/decidim_api_docs.js
135
+ - app/packs/entrypoints/decidim_api_docs.scss
142
136
  - app/packs/entrypoints/decidim_api_graphiql.js
143
137
  - app/packs/entrypoints/decidim_api_graphiql.scss
144
- - app/packs/stylesheets/decidim/api/docs.scss
138
+ - app/views/decidim/api/documentation/graphql_docs_template.html.erb
145
139
  - app/views/decidim/api/documentation/show.html.erb
146
140
  - app/views/decidim/api/graphiql/show.html.erb
147
141
  - app/views/layouts/decidim/api/documentation.html.erb
@@ -155,7 +149,9 @@ files:
155
149
  - lib/decidim/api/mutation_type.rb
156
150
  - lib/decidim/api/query_type.rb
157
151
  - lib/decidim/api/schema.rb
152
+ - lib/decidim/api/test.rb
158
153
  - lib/decidim/api/test/component_context.rb
154
+ - lib/decidim/api/test/shared_examples/statistics_examples.rb
159
155
  - lib/decidim/api/test/type_context.rb
160
156
  - lib/decidim/api/types.rb
161
157
  - lib/decidim/api/types/base_argument.rb
@@ -168,6 +164,7 @@ files:
168
164
  - lib/decidim/api/types/base_scalar.rb
169
165
  - lib/decidim/api/types/base_union.rb
170
166
  - lib/decidim/api/version.rb
167
+ - lib/tasks/decidim_api_docs.rake
171
168
  homepage: https://github.com/decidim/decidim
172
169
  licenses:
173
170
  - AGPL-3.0
@@ -180,14 +177,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
177
  requirements:
181
178
  - - ">="
182
179
  - !ruby/object:Gem::Version
183
- version: '2.7'
180
+ version: '3.0'
184
181
  required_rubygems_version: !ruby/object:Gem::Requirement
185
182
  requirements:
186
- - - ">="
183
+ - - ">"
187
184
  - !ruby/object:Gem::Version
188
- version: '0'
185
+ version: 1.3.1
189
186
  requirements: []
190
- rubygems_version: 3.1.6
187
+ rubygems_version: 3.2.22
191
188
  signing_key:
192
189
  specification_version: 4
193
190
  summary: Decidim API module
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "redcarpet"
4
-
5
- module Decidim
6
- module Api
7
- # Custom helpers, scoped to the api engine.
8
- #
9
- module ApplicationHelper
10
- def render_doc(file)
11
- md_render File.read(File.join(File.dirname(__FILE__), "../../../../docs", "#{file}.md"))
12
- end
13
-
14
- def md_render(text)
15
- text = Redcarpet::Markdown.new(markdown, autolink: true, tables: true, fenced_code_blocks: true).render(text)
16
- text.html_safe
17
- end
18
-
19
- def markdown
20
- @markdown ||= Redcarpet::Render::HTML.new
21
- end
22
- end
23
- end
24
- end
@@ -1,61 +0,0 @@
1
- body{
2
- max-width: 1200px;
3
- }
4
-
5
- .intro,
6
- .info{
7
- margin-left: 270px;
8
- color: #333;
9
- }
10
-
11
- .info{
12
- li{
13
- margin-bottom: 1rem;
14
- }
15
-
16
- h3{
17
- margin-top: 2em;
18
- }
19
- }
20
-
21
- .version{
22
- display: inline-block;
23
- font-size: .8rem;
24
- margin-right: 1rem;
25
- padding: 3px 7px;
26
- background: #f33;
27
- border-radius: 10px;
28
- margin-top: 5px;
29
- color: white;
30
- }
31
-
32
- @media only screen and (max-width: 767px){
33
- .intro,
34
- .info{
35
- margin: 10px;
36
- }
37
- }
38
-
39
- code{
40
- font-size: .8em;
41
- background: #ddd;
42
- padding: .1em;
43
- }
44
-
45
- pre{
46
- padding: .5rem;
47
- background: #f0f0f0;
48
- border: 1px solid #e8e8e8;
49
-
50
- code{
51
- background: none;
52
- }
53
- }
54
-
55
- blockquote{
56
- border-left: 3px solid burlywood;
57
- padding: .1em 0 .1em 1rem;
58
- margin: 1rem 0;
59
- background: #f9f7f5;
60
- width: 100%;
61
- }