decidim-api 0.27.5 → 0.28.0.rc4
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/queries_controller.rb +3 -3
- data/app/packs/entrypoints/decidim_api_docs.scss +312 -312
- data/app/packs/entrypoints/decidim_api_graphiql.js +3 -0
- data/app/packs/entrypoints/decidim_api_graphiql.scss +1 -3
- data/app/views/decidim/api/documentation/graphql_docs_template.html.erb +1 -1
- data/docs/usage.md +41 -43
- data/lib/decidim/api/engine.rb +2 -2
- data/lib/decidim/api/test/type_context.rb +4 -4
- data/lib/decidim/api/version.rb +1 -1
- data/lib/tasks/decidim_api_docs.rake +1 -1
- metadata +44 -26
- data/config/environment.rb +0 -3
@@ -1,6 +1,9 @@
|
|
1
1
|
/* eslint-disable require-jsdoc */
|
2
2
|
|
3
3
|
import "entrypoints/decidim_api_graphiql.scss";
|
4
|
+
// Styles from node_modules/graphiql/graphiql.css
|
5
|
+
// It needs to be done in JS because postcss-import does not find files in node_modules/
|
6
|
+
import "graphiql/graphiql.css"
|
4
7
|
|
5
8
|
import React from "react";
|
6
9
|
import ReactDOM from "react-dom";
|
data/docs/usage.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
<!-- markdownlint-disable-file link-fragments -->
|
2
|
+
|
1
3
|
## About the GraphQL API
|
2
4
|
|
3
5
|
[Decidim](https://github.com/decidim/decidim) comes with an API that follows the [GraphQL](https://graphql.org/) specification. It has a comprehensive coverage of all the public content that can be found on the website.
|
@@ -16,7 +18,7 @@ The GraphQL format is a JSON formatted text that is specified in a query. Respon
|
|
16
18
|
|
17
19
|
For instance, you can check the version of a Decidim installation by using `curl` in the terminal:
|
18
20
|
|
19
|
-
```
|
21
|
+
```bash
|
20
22
|
curl -sSH "Content-Type: application/json" \
|
21
23
|
-d '{"query": "{ decidim { version } }"}' \
|
22
24
|
https://www.decidim.barcelona/api/
|
@@ -26,7 +28,7 @@ Note that `Content-Type` needs to be specified.
|
|
26
28
|
|
27
29
|
The query can also be used in GraphiQL, in that case you can skip the `"query"` text:
|
28
30
|
|
29
|
-
```
|
31
|
+
```graphql
|
30
32
|
{
|
31
33
|
decidim {
|
32
34
|
version
|
@@ -66,7 +68,7 @@ Each "Type" is just a pre-defined structure with fields, or just an Scalar (Stri
|
|
66
68
|
|
67
69
|
For instance, to obtain *all the participatory processes in a Decidim installation published since January 2018* and order them by published date, we could execute the next query:
|
68
70
|
|
69
|
-
```
|
71
|
+
```graphql
|
70
72
|
{
|
71
73
|
participatoryProcesses(filter: {publishedSince: "2018-01-01"}, order: {publishedAt: "asc"}) {
|
72
74
|
slug
|
@@ -79,7 +81,7 @@ For instance, to obtain *all the participatory processes in a Decidim installati
|
|
79
81
|
|
80
82
|
Response should look like:
|
81
83
|
|
82
|
-
```
|
84
|
+
```json
|
83
85
|
{
|
84
86
|
"data": {
|
85
87
|
"participatoryProcesses": [
|
@@ -106,10 +108,10 @@ In the former query, each keyword represents a type, the words `publishedSince`,
|
|
106
108
|
|
107
109
|
The other keywords however, are objects representing certain entities:
|
108
110
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
111
|
+
* `participatoryProcesses` is a type that represents a collection of participatory spaces. It accepts arguments (`filter` and `order`), which are other object types as well. `slug` and `title` are the fields of the participatory process we are interested in, there are "Types" too.
|
112
|
+
* `filter` is a [ParticipatoryProcessFilter](#ParticipatoryProcessFilter)\* input type, it has several properties that allows us to refine our search. One of them is the `publishedSince` property with the initial date from which to list entries.
|
113
|
+
* `order` is a [ParticipatoryProcessSort](#ParticipatoryProcessSort) type, works the same way as the filter but with the goal of ordering the results.
|
114
|
+
* `title` is a [TranslatedField](#TranslatedField) type, which allows us to deal with multi-language fields.
|
113
115
|
|
114
116
|
Finally, note that the returned object is an array, each item of which is a representation of the object we requested.
|
115
117
|
|
@@ -117,20 +119,20 @@ Finally, note that the returned object is an array, each item of which is a repr
|
|
117
119
|
>
|
118
120
|
> There are two types of objects to filter and ordering collections in Decidim, they all work in a similar fashion. The type involved in filtering always have the suffix "Filter", for ordering it has the suffix "Sort".
|
119
121
|
>
|
120
|
-
> The types used to filter participatory spaces are: [ParticipatoryProcessFilter](#ParticipatoryProcessFilter), [AssemblyFilter](#AssemblyFilter),
|
122
|
+
> The types used to filter participatory spaces are: [ParticipatoryProcessFilter](#ParticipatoryProcessFilter), [AssemblyFilter](#AssemblyFilter), and so on.
|
121
123
|
>
|
122
124
|
> Other collections (or connections) may have their own filters (i.e. [ComponentFilter](#ComponentFilter)).
|
123
125
|
>
|
124
126
|
> Each filter has its own properties, you should check any object in particular for details. The way they work with multi-languages fields, however, is the same:
|
125
127
|
>
|
126
|
-
>
|
128
|
+
> We can say we have some searchable object with a multi-language field called *title*, and we have a filter that allows us to search through this field. How should it work? Should we look up content for every language in the field? or should we stick to a specific language?
|
127
129
|
>
|
128
|
-
> In our case, we
|
130
|
+
> In our case, we have decided to search only one particular language of a multi-language field but we let you choose which language to search.
|
129
131
|
> If no language is specified, the configured as default in the organization will be used. The keyword to specify the language is `locale`, and it should be provided in the 2 letters ISO 639-1 format (en = English, es = Spanish, ...).
|
130
132
|
>
|
131
133
|
> Example (this is not a real Decidim query):
|
132
134
|
>
|
133
|
-
> ```
|
135
|
+
> ```graphql
|
134
136
|
> some_collection(filter: { locale: "en", title: "ideas"}) {
|
135
137
|
> id
|
136
138
|
> }
|
@@ -142,7 +144,7 @@ Finally, note that the returned object is an array, each item of which is a repr
|
|
142
144
|
>
|
143
145
|
> Example of ordering alphabetically by the title content in French language:
|
144
146
|
>
|
145
|
-
> ```
|
147
|
+
> ```graphql
|
146
148
|
> some_collection(order: { locale: "en", title: "asc"}) {
|
147
149
|
> id
|
148
150
|
> }
|
@@ -154,13 +156,13 @@ Finally, note that the returned object is an array, each item of which is a repr
|
|
154
156
|
|
155
157
|
Decidim has 2 main types of objects through which content is provided. These are Participatory Spaces and Components.
|
156
158
|
|
157
|
-
A participatory space is the first level, currently there are 5 officially supported: *Participatory Processes*, *Assemblies*, *
|
159
|
+
A participatory space is the first level, currently there are 5 officially supported: *Participatory Processes*, *Assemblies*, *Conferences* and *Initiatives*. For each participatory process there will correspond a collection type and a "single item" type.
|
158
160
|
|
159
|
-
The previous example uses the collection type for participatory processes. You can try `assemblies`, `conferences`,
|
161
|
+
The previous example uses the collection type for participatory processes. You can try `assemblies`, `conferences`, or `initiatives` for the others. Note that each collection can implement their own filter and order types with different properties.
|
160
162
|
|
161
163
|
As an example for a single item query, you can run:
|
162
164
|
|
163
|
-
```
|
165
|
+
```graphql
|
164
166
|
{
|
165
167
|
participatoryProcess(slug: "consectetur-at") {
|
166
168
|
slug
|
@@ -173,7 +175,7 @@ As an example for a single item query, you can run:
|
|
173
175
|
|
174
176
|
And the response will be:
|
175
177
|
|
176
|
-
```
|
178
|
+
```json
|
177
179
|
{
|
178
180
|
"data": {
|
179
181
|
"participatoryProcess": {
|
@@ -186,7 +188,7 @@ And the response will be:
|
|
186
188
|
}
|
187
189
|
```
|
188
190
|
|
189
|
-
#### What
|
191
|
+
#### What is different?
|
190
192
|
|
191
193
|
First, note that we are querying, in singular, the type `participatoryProcess`, with a different parameter, `slug`\*, (a String). We can use the `id` instead if we know it.
|
192
194
|
|
@@ -206,7 +208,7 @@ Every participatory space may (and should) have some components. There are 9 off
|
|
206
208
|
|
207
209
|
If you know the `id`\* of a specific component you can obtain it by querying it directly:
|
208
210
|
|
209
|
-
```
|
211
|
+
```graphql
|
210
212
|
{
|
211
213
|
component(id:2) {
|
212
214
|
id
|
@@ -224,7 +226,7 @@ If you know the `id`\* of a specific component you can obtain it by querying it
|
|
224
226
|
|
225
227
|
Response:
|
226
228
|
|
227
|
-
```
|
229
|
+
```json
|
228
230
|
{
|
229
231
|
"data": {
|
230
232
|
"component": {
|
@@ -250,13 +252,13 @@ The process is analogue as what has been explained in the case of searching for
|
|
250
252
|
>
|
251
253
|
> In this case, 3257.
|
252
254
|
|
253
|
-
|
255
|
+
##### What about component's collections?
|
254
256
|
|
255
257
|
Glad you asked, component's collections cannot be retrieved directly, the are available *in the context* of a participatory space.
|
256
258
|
|
257
259
|
For instance, we can query all the components in an particular Assembly as follows:
|
258
260
|
|
259
|
-
```
|
261
|
+
```graphql
|
260
262
|
{
|
261
263
|
assembly(id: 3) {
|
262
264
|
components {
|
@@ -272,7 +274,7 @@ For instance, we can query all the components in an particular Assembly as follo
|
|
272
274
|
|
273
275
|
The response will be similar to:
|
274
276
|
|
275
|
-
```
|
277
|
+
```json
|
276
278
|
{
|
277
279
|
"data": {
|
278
280
|
"assembly": {
|
@@ -313,7 +315,7 @@ The response will be similar to:
|
|
313
315
|
|
314
316
|
We can also apply some filters by using the [ComponentFilter](#ComponentFilter) type. In the next query we would like to *find all the components with geolocation enabled in the assembly with id=2*:
|
315
317
|
|
316
|
-
```
|
318
|
+
```graphql
|
317
319
|
{
|
318
320
|
assembly(id: 2) {
|
319
321
|
components(filter: {withGeolocationEnabled: true}) {
|
@@ -329,7 +331,7 @@ We can also apply some filters by using the [ComponentFilter](#ComponentFilter)
|
|
329
331
|
|
330
332
|
The response:
|
331
333
|
|
332
|
-
```
|
334
|
+
```json
|
333
335
|
{
|
334
336
|
"data": {
|
335
337
|
"assembly": {
|
@@ -357,14 +359,13 @@ For instance, components in a participatory space are polymorphic, while the con
|
|
357
359
|
|
358
360
|
Another example are the case of linked resources, these are properties that may link objects of different nature between components or participatory spaces.
|
359
361
|
|
360
|
-
In a very simplified way (to know more please refer to the official guide), GraphQL polymorphism is handled through the operator `... on`. You
|
362
|
+
In a very simplified way (to know more please refer to the official guide), GraphQL polymorphism is handled through the operator `... on`. You will know when a field is polymorphic because the property `__typename`, which tells you the type of that particular object, will change accordingly.
|
361
363
|
|
362
|
-
In the previous examples we
|
364
|
+
In the previous examples we have queried for this property:
|
363
365
|
|
364
366
|
Response fragment:
|
365
367
|
|
366
|
-
```
|
367
|
-
...
|
368
|
+
```json
|
368
369
|
"components": [
|
369
370
|
{
|
370
371
|
"id": "38",
|
@@ -373,12 +374,11 @@ Response fragment:
|
|
373
374
|
},
|
374
375
|
"__typename": "Meetings"
|
375
376
|
}
|
376
|
-
...
|
377
377
|
```
|
378
378
|
|
379
379
|
So, if we want to access the rest of the properties in a polymorphic object, we should do it through the `... on` operator as follows:
|
380
380
|
|
381
|
-
```
|
381
|
+
```graphql
|
382
382
|
{
|
383
383
|
assembly(id: 2) {
|
384
384
|
components {
|
@@ -393,7 +393,7 @@ So, if we want to access the rest of the properties in a polymorphic object, we
|
|
393
393
|
|
394
394
|
Consider this query:
|
395
395
|
|
396
|
-
```
|
396
|
+
```graphql
|
397
397
|
{
|
398
398
|
assembly(id: 3) {
|
399
399
|
components(filter: {type: "Proposals"}) {
|
@@ -420,7 +420,7 @@ Consider this query:
|
|
420
420
|
|
421
421
|
The response:
|
422
422
|
|
423
|
-
```
|
423
|
+
```json
|
424
424
|
{
|
425
425
|
"data": {
|
426
426
|
"assembly": {
|
@@ -491,9 +491,9 @@ The response:
|
|
491
491
|
}
|
492
492
|
```
|
493
493
|
|
494
|
-
#### What
|
494
|
+
#### What is going on?
|
495
495
|
|
496
|
-
Until the `... on Proposals` line, there
|
496
|
+
Until the `... on Proposals` line, there is nothing new. We are requesting the *Assembly* participatory space identified by the `id=3`, then listing all its components with the type "Proposals". All the components share the *id* and *name* properties, so we can just add them at the query.
|
497
497
|
|
498
498
|
After that, we want content specific from the *Proposals* type. In order to do that we must tell the server that the content we will request shall only be executed if the types matches *Proposals*. We do that by wrapping the rest of the query in the `... on Proposals` clause.
|
499
499
|
|
@@ -501,14 +501,14 @@ The next line is just a property of the type *Proposals* which is a type of coll
|
|
501
501
|
|
502
502
|
Typically, a connection is used to paginate long results, for this purpose the results are not directly available but encapsulated inside the list *edges* in several *node* results. Also there are more arguments available in order to navigate between pages. This are the arguments:
|
503
503
|
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
504
|
+
* `first`: Returns the first *n* elements from the list
|
505
|
+
* `after`: Returns the elements in the list that come after the specified *cursor*
|
506
|
+
* `last`: Returns the last *n* elements from the list
|
507
|
+
* `before`: Returns the elements in the list that come before the specified *cursor*
|
508
508
|
|
509
509
|
Example:
|
510
510
|
|
511
|
-
```
|
511
|
+
```graphql
|
512
512
|
{
|
513
513
|
assembly(id: 3) {
|
514
514
|
components(filter: {type: "Proposals"}) {
|
@@ -541,7 +541,7 @@ Example:
|
|
541
541
|
|
542
542
|
Being the response:
|
543
543
|
|
544
|
-
```
|
544
|
+
```json
|
545
545
|
{
|
546
546
|
"data": {
|
547
547
|
"assembly": {
|
@@ -592,5 +592,3 @@ As you can see, a part from the *edges* list, you can access to the object *page
|
|
592
592
|
For more info on how connections work, you can check the official guide:
|
593
593
|
|
594
594
|
https://graphql.org/learn/pagination/
|
595
|
-
|
596
|
-
|
data/lib/decidim/api/engine.rb
CHANGED
@@ -23,7 +23,7 @@ module Decidim
|
|
23
23
|
class Engine < ::Rails::Engine
|
24
24
|
isolate_namespace Decidim::Api
|
25
25
|
|
26
|
-
initializer "
|
26
|
+
initializer "decidim_api.middleware" do |app|
|
27
27
|
app.config.middleware.insert_before 0, Rack::Cors do
|
28
28
|
allow do
|
29
29
|
origins "*"
|
@@ -32,7 +32,7 @@ module Decidim
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
initializer "
|
35
|
+
initializer "decidim_api.graphiql" do
|
36
36
|
Decidim::GraphiQL::Rails.config.tap do |config|
|
37
37
|
config.query_params = true
|
38
38
|
config.initial_query = File.read(
|
@@ -23,12 +23,12 @@ shared_context "with a graphql class type" do
|
|
23
23
|
def execute_query(query, variables)
|
24
24
|
result = schema.execute(
|
25
25
|
query,
|
26
|
-
root_value
|
26
|
+
root_value:,
|
27
27
|
context: {
|
28
|
-
current_organization
|
29
|
-
current_user:
|
28
|
+
current_organization:,
|
29
|
+
current_user:
|
30
30
|
},
|
31
|
-
variables:
|
31
|
+
variables:
|
32
32
|
)
|
33
33
|
|
34
34
|
raise StandardError, result["errors"].map { |e| e["message"] }.join(", ") if result["errors"]
|
data/lib/decidim/api/version.rb
CHANGED
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.28.0.rc4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josep Jaume Rey Peroy
|
@@ -10,42 +10,56 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-12-
|
13
|
+
date: 2023-12-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: commonmarker
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
- - "
|
21
|
+
version: 0.23.0
|
22
|
+
- - ">="
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version:
|
24
|
+
version: 0.23.9
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
28
|
requirements:
|
29
29
|
- - "~>"
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version:
|
32
|
-
- - "
|
31
|
+
version: 0.23.0
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.23.9
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: graphql
|
37
|
+
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 2.0.0
|
42
|
+
type: :runtime
|
43
|
+
prerelease: false
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
33
47
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
48
|
+
version: 2.0.0
|
35
49
|
- !ruby/object:Gem::Dependency
|
36
50
|
name: graphql-docs
|
37
51
|
requirement: !ruby/object:Gem::Requirement
|
38
52
|
requirements:
|
39
53
|
- - "~>"
|
40
54
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
55
|
+
version: 3.0.1
|
42
56
|
type: :runtime
|
43
57
|
prerelease: false
|
44
58
|
version_requirements: !ruby/object:Gem::Requirement
|
45
59
|
requirements:
|
46
60
|
- - "~>"
|
47
61
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
62
|
+
version: 3.0.1
|
49
63
|
- !ruby/object:Gem::Dependency
|
50
64
|
name: rack-cors
|
51
65
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,56 +80,56 @@ dependencies:
|
|
66
80
|
requirements:
|
67
81
|
- - '='
|
68
82
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.
|
83
|
+
version: 0.28.0.rc4
|
70
84
|
type: :development
|
71
85
|
prerelease: false
|
72
86
|
version_requirements: !ruby/object:Gem::Requirement
|
73
87
|
requirements:
|
74
88
|
- - '='
|
75
89
|
- !ruby/object:Gem::Version
|
76
|
-
version: 0.
|
90
|
+
version: 0.28.0.rc4
|
77
91
|
- !ruby/object:Gem::Dependency
|
78
92
|
name: decidim-core
|
79
93
|
requirement: !ruby/object:Gem::Requirement
|
80
94
|
requirements:
|
81
95
|
- - '='
|
82
96
|
- !ruby/object:Gem::Version
|
83
|
-
version: 0.
|
97
|
+
version: 0.28.0.rc4
|
84
98
|
type: :development
|
85
99
|
prerelease: false
|
86
100
|
version_requirements: !ruby/object:Gem::Requirement
|
87
101
|
requirements:
|
88
102
|
- - '='
|
89
103
|
- !ruby/object:Gem::Version
|
90
|
-
version: 0.
|
104
|
+
version: 0.28.0.rc4
|
91
105
|
- !ruby/object:Gem::Dependency
|
92
106
|
name: decidim-dev
|
93
107
|
requirement: !ruby/object:Gem::Requirement
|
94
108
|
requirements:
|
95
109
|
- - '='
|
96
110
|
- !ruby/object:Gem::Version
|
97
|
-
version: 0.
|
111
|
+
version: 0.28.0.rc4
|
98
112
|
type: :development
|
99
113
|
prerelease: false
|
100
114
|
version_requirements: !ruby/object:Gem::Requirement
|
101
115
|
requirements:
|
102
116
|
- - '='
|
103
117
|
- !ruby/object:Gem::Version
|
104
|
-
version: 0.
|
118
|
+
version: 0.28.0.rc4
|
105
119
|
- !ruby/object:Gem::Dependency
|
106
120
|
name: decidim-participatory_processes
|
107
121
|
requirement: !ruby/object:Gem::Requirement
|
108
122
|
requirements:
|
109
123
|
- - '='
|
110
124
|
- !ruby/object:Gem::Version
|
111
|
-
version: 0.
|
125
|
+
version: 0.28.0.rc4
|
112
126
|
type: :development
|
113
127
|
prerelease: false
|
114
128
|
version_requirements: !ruby/object:Gem::Requirement
|
115
129
|
requirements:
|
116
130
|
- - '='
|
117
131
|
- !ruby/object:Gem::Version
|
118
|
-
version: 0.
|
132
|
+
version: 0.28.0.rc4
|
119
133
|
description: API engine for decidim
|
120
134
|
email:
|
121
135
|
- josepjaume@gmail.com
|
@@ -140,7 +154,6 @@ files:
|
|
140
154
|
- app/views/decidim/api/graphiql/show.html.erb
|
141
155
|
- app/views/layouts/decidim/api/documentation.html.erb
|
142
156
|
- config/assets.rb
|
143
|
-
- config/environment.rb
|
144
157
|
- config/routes.rb
|
145
158
|
- docs/usage.md
|
146
159
|
- lib/decidim/api.rb
|
@@ -166,10 +179,15 @@ files:
|
|
166
179
|
- lib/decidim/api/types/base_union.rb
|
167
180
|
- lib/decidim/api/version.rb
|
168
181
|
- lib/tasks/decidim_api_docs.rake
|
169
|
-
homepage: https://
|
182
|
+
homepage: https://decidim.org
|
170
183
|
licenses:
|
171
184
|
- AGPL-3.0
|
172
|
-
metadata:
|
185
|
+
metadata:
|
186
|
+
bug_tracker_uri: https://github.com/decidim/decidim/issues
|
187
|
+
documentation_uri: https://docs.decidim.org/
|
188
|
+
funding_uri: https://opencollective.com/decidim
|
189
|
+
homepage_uri: https://decidim.org
|
190
|
+
source_code_uri: https://github.com/decidim/decidim
|
173
191
|
post_install_message:
|
174
192
|
rdoc_options: []
|
175
193
|
require_paths:
|
@@ -178,14 +196,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
178
196
|
requirements:
|
179
197
|
- - ">="
|
180
198
|
- !ruby/object:Gem::Version
|
181
|
-
version: '3.
|
199
|
+
version: '3.1'
|
182
200
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
201
|
requirements:
|
184
|
-
- - "
|
202
|
+
- - ">"
|
185
203
|
- !ruby/object:Gem::Version
|
186
|
-
version:
|
204
|
+
version: 1.3.1
|
187
205
|
requirements: []
|
188
|
-
rubygems_version: 3.4.
|
206
|
+
rubygems_version: 3.4.20
|
189
207
|
signing_key:
|
190
208
|
specification_version: 4
|
191
209
|
summary: Decidim API module
|
data/config/environment.rb
DELETED