lms-api 1.22.0 → 1.23.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: 47d3a1847aecb4b33b70dadab24edd4bfe83a95fc9d42db7f515a143a1fdfce2
4
- data.tar.gz: 1e6b8ff341eb6342581dd41cda7b20dce374219e850a290506a9dc33e3441084
3
+ metadata.gz: 1d7810e8e657f6cc9bdd4cd8c451ce96d829bfa79fed75389b4af081b0609ccc
4
+ data.tar.gz: 353814c783f580c8bfc8a6371dcf00d7acb837f5c31a8640f20e6c71d98cc291
5
5
  SHA512:
6
- metadata.gz: 96f62c21d065f89ba511dc47691608801be3cb4bcc89f4ec4ff606cfaeef13f16aa23a02ed43b6a436e6582d5b966f90253a429a52312450f755d83f2342bf57
7
- data.tar.gz: eb63c82f31ee09ac66ce984eb3f7e89f9205bfd074464a5033a883cffb2b22c878d915a99c19927e69dbf57afaea5efbf168bc507671f6325bef0e8be2508e3b
6
+ metadata.gz: 22d3736b78f0f4ee915469ef96ac27ba8f667a672fb9aa5a277f8b464914b5829bee30612547981b313497ca4d25baf8ca864765176b7d3a3cc265b6e0a2def7
7
+ data.tar.gz: e2f54b89aedab87683f2811497ac360b7adde2fdfee27ca59d191911200cc46b3776a6774b1d7fb5a2cc71d730f25fe501395ecabdc5c4ca9c180dd2f6c3006f
@@ -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)