lms-api 1.21.0 → 1.24.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/canvas_api/builder.rb +59 -43
- data/lib/canvas_api/go_helpers.rb +608 -0
- data/lib/canvas_api/helpers.rb +24 -0
- data/lib/canvas_api/js_graphql_helpers.rb +8 -1
- data/lib/canvas_api/rb_graphql_helpers.rb +41 -31
- data/lib/canvas_api/render.rb +18 -2
- data/lib/canvas_api/templates/go_action.erb +241 -0
- data/lib/canvas_api/templates/go_struct.erb +44 -0
- data/lib/canvas_api/templates/rb_graphql_field.erb +2 -2
- data/lib/canvas_api/templates/rb_graphql_input_type.erb +2 -2
- data/lib/canvas_api/templates/rb_graphql_resolver.erb +1 -1
- data/lib/lms/canvas_urls.rb +165 -108
- data/lib/lms/course_ids_required.rb +24 -6
- data/lib/lms/version.rb +1 -1
- data/lib/tasks/canvas_api.rake +5 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60f916cc58245886a7eb557a5630951e126bc14231066e5908fc70e329c4733e
|
4
|
+
data.tar.gz: 223ba1598894697c5f15c8e1467a0118a00e867ec077ab28a1b09be27cf7c243
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0680840f0e5481d592103a5931c799ae7476eb337635661db8ceccf1517ea3c14fffca6393786bdc52c1d3c2225a555043f77dedbb94b8bcb66e46cf90b8e434'
|
7
|
+
data.tar.gz: 11093e447b976098ed043a33d5cc0d089d03de90b745d1668a61dc424870e11c2d05db6070f2dbaf67caa52c4cc031de9d230f9001591905243c8b3a8317e563
|
data/lib/canvas_api/builder.rb
CHANGED
@@ -13,7 +13,7 @@ module CanvasApi
|
|
13
13
|
# server_app_path: This is where all server side Javascript for accessing the Canvas API will be written.
|
14
14
|
# Currently, this is generating GraphQL for Javascript and Ruby
|
15
15
|
#
|
16
|
-
def self.build(project_root, client_app_path, server_app_path, elixir_app_path, rb_graphql_app_path)
|
16
|
+
def self.build(project_root, client_app_path, server_app_path, elixir_app_path, rb_graphql_app_path, go_app_path)
|
17
17
|
endpoint = "https://canvas.instructure.com/doc/api"
|
18
18
|
directory = HTTParty.get("#{endpoint}/api-docs.json")
|
19
19
|
|
@@ -32,20 +32,44 @@ module CanvasApi
|
|
32
32
|
nicknames = []
|
33
33
|
|
34
34
|
# Elixir has a default action that raises
|
35
|
-
lms_urls_ex << CanvasApi::Render.new("./templates/ex_default_action.erb", nil, nil, nil, nil, nil, nil, nil).render
|
35
|
+
lms_urls_ex << CanvasApi::Render.new("./templates/ex_default_action.erb", nil, nil, nil, nil, nil, nil, nil, "").render
|
36
36
|
|
37
37
|
directory["apis"].each do |api|
|
38
38
|
puts "Generating #{api['description']}"
|
39
|
-
|
39
|
+
api_path = api['path']
|
40
|
+
resource = HTTParty.get("#{endpoint}#{api_path}")
|
40
41
|
|
41
42
|
# HACK The canvas docs are missing one of the allowable value in modules
|
42
43
|
# TODO we might want to create a hacks class at some point to contain all these
|
43
|
-
if
|
44
|
+
if api_path == "/modules.json"
|
44
45
|
if !resource["models"]["CompletionRequirement"]["properties"]["type"]["allowableValues"]["values"].include?("must_mark_done")
|
45
46
|
resource["models"]["CompletionRequirement"]["properties"]["type"]["allowableValues"]["values"].push("must_mark_done")
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
50
|
+
models = []
|
51
|
+
resource["models"].map do |name, model|
|
52
|
+
models << name
|
53
|
+
|
54
|
+
if model["properties"] # Don't generate models without properties
|
55
|
+
models << CanvasApi::Render.new("./templates/js_graphql_model.erb", api, resource, nil, nil, nil, nil, model, api_path).render
|
56
|
+
end
|
57
|
+
|
58
|
+
# Generate one file for each Canvas graphql type
|
59
|
+
canvas_graphql_type_render = CanvasApi::Render.new("./templates/rb_graphql_type.erb", api, resource, nil, nil, nil, nil, model, api_path)
|
60
|
+
canvas_graphql_type_render.save("#{rb_graphql_app_path}/lib/lms_graphql/types/canvas/#{model['id'].underscore.singularize}.rb")
|
61
|
+
|
62
|
+
canvas_graphql_input_render = CanvasApi::Render.new("./templates/rb_graphql_input_type.erb", api, resource, nil, nil, nil, nil, model, api_path)
|
63
|
+
canvas_graphql_input_render.save("#{rb_graphql_app_path}/lib/lms_graphql/types/canvas/#{model['id'].underscore.singularize}_input.rb")
|
64
|
+
|
65
|
+
# Generate go structs
|
66
|
+
go_type_render = CanvasApi::Render.new("./templates/go_struct.erb", api, resource, nil, nil, nil, nil, model, api_path)
|
67
|
+
go_type_render.save("#{go_app_path}/models/#{model['id'].underscore}.go")
|
68
|
+
|
69
|
+
rb_forward_declarations << "class Canvas#{model['id'].singularize}Input < BaseInputObject;end"
|
70
|
+
rb_forward_declarations << "class Canvas#{model['id'].singularize} < BaseType;end"
|
71
|
+
end
|
72
|
+
|
49
73
|
constants = []
|
50
74
|
resource["apis"]&.each do |resource_api|
|
51
75
|
resource_api["operations"].each do |operation|
|
@@ -59,72 +83,64 @@ module CanvasApi
|
|
59
83
|
operation["nickname"] = nickname
|
60
84
|
|
61
85
|
parameters = filter_duplicate_parameters(operation["parameters"])
|
62
|
-
constants << CanvasApi::Render.new("./templates/constant.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
63
|
-
lms_urls_rb << CanvasApi::Render.new("./templates/rb_url.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
64
|
-
lms_urls_js << CanvasApi::Render.new("./templates/js_url.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
65
|
-
lms_urls_ex << CanvasApi::Render.new("./templates/ex_url.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
66
|
-
lms_urls_ex << CanvasApi::Render.new("./templates/ex_action.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
86
|
+
constants << CanvasApi::Render.new("./templates/constant.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
87
|
+
lms_urls_rb << CanvasApi::Render.new("./templates/rb_url.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
88
|
+
lms_urls_js << CanvasApi::Render.new("./templates/js_url.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
89
|
+
lms_urls_ex << CanvasApi::Render.new("./templates/ex_url.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
90
|
+
lms_urls_ex << CanvasApi::Render.new("./templates/ex_action.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
67
91
|
|
68
92
|
if parameters.detect{ |param| param["name"] == "course_id" && param["paramType"] == "path" }
|
69
|
-
course_ids_required_rb << CanvasApi::Render.new("./templates/course_id_required.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
93
|
+
course_ids_required_rb << CanvasApi::Render.new("./templates/course_id_required.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
94
|
+
end
|
95
|
+
|
96
|
+
begin
|
97
|
+
go_action_renderer = CanvasApi::Render.new("./templates/go_action.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path)
|
98
|
+
go_action_renderer.save("#{go_app_path}/requests/#{go_action_renderer.nickname}.go")
|
99
|
+
rescue => ex
|
100
|
+
byebug
|
101
|
+
puts ex
|
70
102
|
end
|
71
103
|
|
72
104
|
if operation["method"].casecmp("GET") == 0
|
73
|
-
js_graphql_queries << CanvasApi::Render.new("./templates/js_graphql_query.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
105
|
+
js_graphql_queries << CanvasApi::Render.new("./templates/js_graphql_query.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
74
106
|
|
75
107
|
# One file per Canvas graphql resolver
|
76
|
-
canvas_graphql_resolver_renderer = CanvasApi::Render.new("./templates/rb_graphql_resolver.erb", api, resource, resource_api, operation, parameters, nil, nil)
|
108
|
+
canvas_graphql_resolver_renderer = CanvasApi::Render.new("./templates/rb_graphql_resolver.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path)
|
77
109
|
canvas_graphql_resolver_renderer.save("#{rb_graphql_app_path}/lib/lms_graphql/resolvers/canvas/#{canvas_graphql_resolver_renderer.nickname}.rb")
|
78
|
-
rb_graphql_fields << CanvasApi::Render.new("./templates/rb_graphql_field.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
110
|
+
rb_graphql_fields << CanvasApi::Render.new("./templates/rb_graphql_field.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
79
111
|
else
|
80
|
-
js_graphql_mutations << CanvasApi::Render.new("./templates/js_graphql_mutation.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
112
|
+
js_graphql_mutations << CanvasApi::Render.new("./templates/js_graphql_mutation.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
81
113
|
|
82
|
-
rb_graphql_mutation_renderer = CanvasApi::Render.new("./templates/rb_graphql_mutation.erb", api, resource, resource_api, operation, parameters, nil, nil)
|
114
|
+
rb_graphql_mutation_renderer = CanvasApi::Render.new("./templates/rb_graphql_mutation.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path)
|
83
115
|
rb_graphql_mutation_renderer.save("#{rb_graphql_app_path}/lib/lms_graphql/mutations/canvas/#{rb_graphql_mutation_renderer.nickname}.rb")
|
84
|
-
rb_graphql_mutations << CanvasApi::Render.new("./templates/rb_graphql_mutation_include.erb", api, resource, resource_api, operation, parameters, nil, nil).render
|
116
|
+
rb_graphql_mutations << CanvasApi::Render.new("./templates/rb_graphql_mutation_include.erb", api, resource, resource_api, operation, parameters, nil, nil, api_path).render
|
85
117
|
end
|
86
118
|
|
87
119
|
end
|
88
120
|
end
|
89
121
|
|
90
|
-
resource["models"].map do |_name, model|
|
91
|
-
if model["properties"] # Don't generate models without properties
|
92
|
-
models << CanvasApi::Render.new("./templates/js_graphql_model.erb", api, resource, nil, nil, nil, nil, model).render
|
93
|
-
end
|
94
|
-
|
95
|
-
# Generate one file for each Canvas graphql type
|
96
|
-
canvas_graphql_type_render = CanvasApi::Render.new("./templates/rb_graphql_type.erb", api, resource, nil, nil, nil, nil, model)
|
97
|
-
canvas_graphql_type_render.save("#{rb_graphql_app_path}/lib/lms_graphql/types/canvas/#{model['id'].underscore.singularize}.rb")
|
98
|
-
|
99
|
-
canvas_graphql_input_render = CanvasApi::Render.new("./templates/rb_graphql_input_type.erb", api, resource, nil, nil, nil, nil, model)
|
100
|
-
canvas_graphql_input_render.save("#{rb_graphql_app_path}/lib/lms_graphql/types/canvas/#{model['id'].underscore.singularize}_input.rb")
|
101
|
-
|
102
|
-
rb_forward_declarations << "class Canvas#{model['id'].singularize}Input < BaseInputObject;end"
|
103
|
-
rb_forward_declarations << "class Canvas#{model['id'].singularize} < BaseType;end"
|
104
|
-
end
|
105
|
-
|
106
122
|
# Generate one file of constants for every LMS API
|
107
|
-
constants_renderer = CanvasApi::Render.new("./templates/constants.erb", api, resource, nil, nil, nil, constants, nil)
|
123
|
+
constants_renderer = CanvasApi::Render.new("./templates/constants.erb", api, resource, nil, nil, nil, constants, nil, api_path)
|
108
124
|
constants_renderer.save("#{client_app_path}/#{constants_renderer.name}.js")
|
109
125
|
end
|
110
126
|
|
111
|
-
CanvasApi::Render.new("./templates/rb_urls.erb", nil, nil, nil, nil, nil, lms_urls_rb, nil).save("#{project_root}/lib/lms/canvas_urls.rb")
|
112
|
-
CanvasApi::Render.new("./templates/js_urls.erb", nil, nil, nil, nil, nil, lms_urls_js, nil).save("#{server_app_path}/lib/canvas/urls.js")
|
127
|
+
CanvasApi::Render.new("./templates/rb_urls.erb", nil, nil, nil, nil, nil, lms_urls_rb, nil, "").save("#{project_root}/lib/lms/canvas_urls.rb")
|
128
|
+
CanvasApi::Render.new("./templates/js_urls.erb", nil, nil, nil, nil, nil, lms_urls_js, nil, "").save("#{server_app_path}/lib/canvas/urls.js")
|
113
129
|
|
114
130
|
# The elixir urls are sorted, to prevent linter errors
|
115
|
-
CanvasApi::Render.new("./templates/ex_urls.erb", nil, nil, nil, nil, nil, lms_urls_ex.sort, nil).save("#{elixir_app_path}/lib/canvas/actions.ex")
|
131
|
+
CanvasApi::Render.new("./templates/ex_urls.erb", nil, nil, nil, nil, nil, lms_urls_ex.sort, nil, "").save("#{elixir_app_path}/lib/canvas/actions.ex")
|
116
132
|
|
117
|
-
CanvasApi::Render.new("./templates/course_ids_required.erb", nil, nil, nil, nil, nil, course_ids_required_rb, nil).save("#{project_root}/lib/lms/course_ids_required.rb")
|
133
|
+
CanvasApi::Render.new("./templates/course_ids_required.erb", nil, nil, nil, nil, nil, course_ids_required_rb, nil, "").save("#{project_root}/lib/lms/course_ids_required.rb")
|
118
134
|
|
119
135
|
# GraphQL Javascript - still not complete
|
120
|
-
CanvasApi::Render.new("./templates/js_graphql_types.erb", nil, nil, nil, nil, nil, models.compact, nil).save("#{server_app_path}/lib/canvas/graphql_types.js")
|
121
|
-
CanvasApi::Render.new("./templates/js_graphql_queries.erb", nil, nil, nil, nil, nil, js_graphql_queries, nil).save("#{server_app_path}/lib/canvas/graphql_queries.js")
|
122
|
-
CanvasApi::Render.new("./templates/js_graphql_mutations.erb", nil, nil, nil, nil, nil, js_graphql_mutations, nil).save("#{server_app_path}/lib/canvas/graphql_mutations.js")
|
136
|
+
CanvasApi::Render.new("./templates/js_graphql_types.erb", nil, nil, nil, nil, nil, models.compact, nil, "").save("#{server_app_path}/lib/canvas/graphql_types.js")
|
137
|
+
CanvasApi::Render.new("./templates/js_graphql_queries.erb", nil, nil, nil, nil, nil, js_graphql_queries, nil, "").save("#{server_app_path}/lib/canvas/graphql_queries.js")
|
138
|
+
CanvasApi::Render.new("./templates/js_graphql_mutations.erb", nil, nil, nil, nil, nil, js_graphql_mutations, nil, "").save("#{server_app_path}/lib/canvas/graphql_mutations.js")
|
123
139
|
|
124
140
|
# GraphQL Ruby
|
125
|
-
CanvasApi::Render.new("./templates/rb_forward_declarations.erb", nil, nil, nil, nil, nil, rb_forward_declarations, nil).save("#{rb_graphql_app_path}/lib/lms_graphql/types/canvas_forward_declarations.rb")
|
126
|
-
CanvasApi::Render.new("./templates/rb_graphql_root_query.erb", nil, nil, nil, nil, nil, rb_graphql_fields, nil).save("#{rb_graphql_app_path}/lib/lms_graphql/types/canvas/query_type.rb")
|
127
|
-
CanvasApi::Render.new("./templates/rb_graphql_mutations.erb", nil, nil, nil, nil, nil, rb_graphql_mutations, nil).save("#{rb_graphql_app_path}/lib/lms_graphql/mutations/canvas/mutations.rb")
|
141
|
+
CanvasApi::Render.new("./templates/rb_forward_declarations.erb", nil, nil, nil, nil, nil, rb_forward_declarations, nil, "").save("#{rb_graphql_app_path}/lib/lms_graphql/types/canvas_forward_declarations.rb")
|
142
|
+
CanvasApi::Render.new("./templates/rb_graphql_root_query.erb", nil, nil, nil, nil, nil, rb_graphql_fields, nil, "").save("#{rb_graphql_app_path}/lib/lms_graphql/types/canvas/query_type.rb")
|
143
|
+
CanvasApi::Render.new("./templates/rb_graphql_mutations.erb", nil, nil, nil, nil, nil, rb_graphql_mutations, nil, "").save("#{rb_graphql_app_path}/lib/lms_graphql/mutations/canvas/mutations.rb")
|
128
144
|
end
|
129
145
|
|
130
146
|
def self.filter_duplicate_parameters(parameters)
|