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.
- checksums.yaml +4 -4
- data/app/controllers/decidim/api/documentation_controller.rb +21 -0
- data/app/packs/entrypoints/decidim_api_docs.js +1 -26
- data/app/packs/entrypoints/decidim_api_docs.scss +1318 -0
- data/app/views/decidim/api/documentation/graphql_docs_template.html.erb +7 -0
- data/app/views/decidim/api/documentation/show.html.erb +2 -11
- data/app/views/decidim/api/graphiql/show.html.erb +3 -1
- data/app/views/layouts/decidim/api/documentation.html.erb +1 -4
- data/config/routes.rb +1 -0
- data/lib/decidim/api/schema.rb +3 -3
- data/lib/decidim/api/test/component_context.rb +2 -2
- data/lib/decidim/api/test/shared_examples/statistics_examples.rb +33 -0
- data/lib/decidim/api/test.rb +3 -0
- data/lib/decidim/api/version.rb +1 -1
- data/lib/decidim/api.rb +17 -0
- data/lib/tasks/decidim_api_docs.rake +34 -0
- metadata +25 -28
- data/app/helpers/decidim/api/application_helper.rb +0 -24
- data/app/packs/stylesheets/decidim/api/docs.scss +0 -61
@@ -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
|
-
|
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
|
-
<%=
|
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
|
data/lib/decidim/api/schema.rb
CHANGED
@@ -7,9 +7,9 @@ module Decidim
|
|
7
7
|
mutation(MutationType)
|
8
8
|
query(QueryType)
|
9
9
|
|
10
|
-
default_max_page_size
|
11
|
-
max_depth
|
12
|
-
max_complexity
|
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
|
data/lib/decidim/api/version.rb
CHANGED
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.
|
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-
|
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:
|
36
|
+
name: graphql-docs
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
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:
|
48
|
+
version: 2.1.0
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: rack-cors
|
51
51
|
requirement: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
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: '
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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/
|
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: '
|
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:
|
185
|
+
version: 1.3.1
|
189
186
|
requirements: []
|
190
|
-
rubygems_version: 3.
|
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
|
-
}
|