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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f5ede3eeafffbcd50df307c3e91c267ff651bce51a79837d1bbb385f4964d00
4
- data.tar.gz: 4b0b189c2d7f5755bdea8fb7e77ed227353f0a4207115c8d1aaa45867d78b0fb
3
+ metadata.gz: 60f916cc58245886a7eb557a5630951e126bc14231066e5908fc70e329c4733e
4
+ data.tar.gz: 223ba1598894697c5f15c8e1467a0118a00e867ec077ab28a1b09be27cf7c243
5
5
  SHA512:
6
- metadata.gz: 9b1f4da55b941bf5c474c4d9b3a0e26997c331a383803fcaeec686b1dd07280e64b63ec6fa8d4bdd430dec016c9488b541a39264d872b38f0f3bf3fa3f7d7279
7
- data.tar.gz: df0db832c3fe428126e8afed7e51834a219ba821e31e2bf30eba1a51bc133ed604e8b3a4d6f45dc232dedb548dbd4a8f5bfe0b762f778e5b726a5894abf9ab77
6
+ metadata.gz: '0680840f0e5481d592103a5931c799ae7476eb337635661db8ceccf1517ea3c14fffca6393786bdc52c1d3c2225a555043f77dedbb94b8bcb66e46cf90b8e434'
7
+ data.tar.gz: 11093e447b976098ed043a33d5cc0d089d03de90b745d1668a61dc424870e11c2d05db6070f2dbaf67caa52c4cc031de9d230f9001591905243c8b3a8317e563
@@ -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
- resource = HTTParty.get("#{endpoint}#{api['path']}")
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 api['path'] == "/modules.json"
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)