plurall 0.1.0

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.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.env.sample +14 -0
  3. data/.gitignore +12 -0
  4. data/CHANGELOG.md +3 -0
  5. data/CODE_OF_CONDUCT.md +84 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +65 -0
  9. data/Rakefile +12 -0
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/lib/plurall/administrators.rb +185 -0
  13. data/lib/plurall/api/administrators_query.rb +49 -0
  14. data/lib/plurall/api/attendants_query.rb +49 -0
  15. data/lib/plurall/api/classes_query.rb +60 -0
  16. data/lib/plurall/api/client.rb +5 -0
  17. data/lib/plurall/api/coordinators_query.rb +53 -0
  18. data/lib/plurall/api/directors_query.rb +49 -0
  19. data/lib/plurall/api/http.rb +9 -0
  20. data/lib/plurall/api/managers_query.rb +53 -0
  21. data/lib/plurall/api/person_query.rb +30 -0
  22. data/lib/plurall/api/schema.rb +5 -0
  23. data/lib/plurall/api/schools_query.rb +67 -0
  24. data/lib/plurall/api/student_classes_query.rb +71 -0
  25. data/lib/plurall/api/students_query.rb +83 -0
  26. data/lib/plurall/api/teachers_query.rb +75 -0
  27. data/lib/plurall/api.rb +139 -0
  28. data/lib/plurall/attendants.rb +185 -0
  29. data/lib/plurall/classes.rb +185 -0
  30. data/lib/plurall/configuration.rb +41 -0
  31. data/lib/plurall/coordinators.rb +185 -0
  32. data/lib/plurall/directors.rb +185 -0
  33. data/lib/plurall/errors.rb +11 -0
  34. data/lib/plurall/managers.rb +185 -0
  35. data/lib/plurall/schools.rb +169 -0
  36. data/lib/plurall/student_classes.rb +197 -0
  37. data/lib/plurall/students.rb +185 -0
  38. data/lib/plurall/teachers.rb +185 -0
  39. data/lib/plurall/version.rb +6 -0
  40. data/lib/plurall.rb +273 -0
  41. data/plurall.gemspec +45 -0
  42. data/schema/friendly.json +14653 -0
  43. data/schema/graphql.json +11907 -0
  44. data/sig/plurall.rbs +4 -0
  45. metadata +269 -0
@@ -0,0 +1,185 @@
1
+ module Plurall
2
+ ##
3
+ # Public: A list of school directors that supports pagination.
4
+ #
5
+ # Examples
6
+ #
7
+ # Plurall.directors(school_id: 123456).each do |director|
8
+ # puts director.name
9
+ # end
10
+ #
11
+ class Directors
12
+ include Enumerable
13
+
14
+ # Internal: Returns the GraphQL API response as a GraphQL::Client::Response.
15
+ attr_reader :response
16
+
17
+ ##
18
+ # Internal: Create a new object from a GraphQL API response.
19
+ #
20
+ # response - The GraphQL API response as a GraphQL::Client::Response.
21
+ #
22
+ def initialize response
23
+ @response = response
24
+ end
25
+
26
+ ##
27
+ # Public: Returns the number of directors as an Integer.
28
+ def total_count
29
+ school_node.directors.total_count
30
+ end
31
+
32
+ ##
33
+ # Public: Returns the list of directors as a Hash.
34
+ def data
35
+ response.data.to_h
36
+ end
37
+
38
+ ##
39
+ # Public: Returns the school id for list of directors as a String.
40
+ def school_id
41
+ school_node.id
42
+ end
43
+
44
+ ##
45
+ # Public: Iterates the list of directors.
46
+ #
47
+ # Examples
48
+ #
49
+ # Plurall.directors(school_id: 123456).each do |director|
50
+ # puts director.name
51
+ # end
52
+ #
53
+ # Yields a director object to the block.
54
+ #
55
+ # Returns an Enumerator when no block argument is given, or nothing when when a block argument is given.
56
+ #
57
+ def each &block
58
+ return enum_for :each unless block
59
+
60
+ school_node.directors.edges.lazy.map(&:node).each(&block)
61
+ end
62
+
63
+ ##
64
+ # Public: Iterates all directors.
65
+ #
66
+ # Several API calls may be made to retrieve all by repeatedly calling #next until #next? returns `false`.
67
+ #
68
+ # Examples
69
+ #
70
+ # Plurall.directors(school_id: 123456).all do |director|
71
+ # puts director.name
72
+ # end
73
+ #
74
+ # Yields a director object to the block.
75
+ #
76
+ # Returns an Enumerator when no block argument is given, or nothing when when a block argument is given.
77
+ #
78
+ def all &block
79
+ return enum_for :all unless block
80
+
81
+ page = self
82
+ loop do
83
+ page.each(&block)
84
+ page = page.next
85
+ break if page.nil?
86
+ end
87
+ end
88
+
89
+ ##
90
+ # Public: Whether there are more directors available.
91
+ #
92
+ # Examples
93
+ #
94
+ # directors = Plurall.directors school_id: 123456
95
+ # directors.next?
96
+ #
97
+ # Returns true or false.
98
+ #
99
+ def next?
100
+ directors_page_info.has_next_page
101
+ end
102
+
103
+ ##
104
+ # Internal: The next cursor used for pagination.
105
+ #
106
+ # Returns the next cursor as a String, or nil.
107
+ #
108
+ def next_cursor
109
+ return nil unless next?
110
+
111
+ directors_page_info.end_cursor
112
+ end
113
+
114
+ ##
115
+ # Public: Retrieve the next page of directors.
116
+ #
117
+ # Returns the next page as Plurall::Directors, or nil.
118
+ #
119
+ def next
120
+ return nil unless next?
121
+
122
+ next_response = Plurall::Api.directors school_id: school_id, after: next_cursor
123
+ self.class.new next_response
124
+ end
125
+
126
+ ##
127
+ # Public: Whether there are previous directors available.
128
+ #
129
+ # Examples
130
+ #
131
+ # directors = Plurall.directors school_id: 123456
132
+ # directors.prev?
133
+ #
134
+ # Returns true or false.
135
+ #
136
+ def prev?
137
+ directors_page_info.has_previous_page
138
+ end
139
+
140
+ ##
141
+ # Internal: The previous cursor used for pagination.
142
+ #
143
+ # Returns the previous cursor as a String, or nil.
144
+ #
145
+ def prev_cursor
146
+ return nil unless prev?
147
+
148
+ directors_page_info.start_cursor
149
+ end
150
+
151
+ ##
152
+ # Public: Retrieve the previous page of directors.
153
+ #
154
+ # Examples
155
+ #
156
+ # directors = Plurall.directors school_id: 123456
157
+ # prev_directors = directors.prev
158
+ #
159
+ # Returns the previous page as Plurall::Directors, or nil.
160
+ #
161
+ def prev
162
+ return nil unless prev?
163
+
164
+ prev_response = Plurall::Api.directors school_id: school_id, before: prev_cursor
165
+ self.class.new prev_response
166
+ end
167
+
168
+ ##
169
+ # Internal: Returns a string representation of the list.
170
+ #
171
+ def inspect
172
+ "#<#{self.class.name}:0x#{(object_id * 2).to_s(16).rjust(16, "0")} directors:#{total_count}>"
173
+ end
174
+
175
+ private
176
+
177
+ def school_node
178
+ response.data.schools.first.edges.first.node
179
+ end
180
+
181
+ def directors_page_info
182
+ school_node.directors.page_info
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,11 @@
1
+ module Plurall
2
+ ##
3
+ # Public: The main error for the library.
4
+ #
5
+ class Error < StandardError; end
6
+
7
+ ##
8
+ # Public: Raised when the authorization token has expired.
9
+ #
10
+ class TokenExpiredError < Error; end
11
+ end
@@ -0,0 +1,185 @@
1
+ module Plurall
2
+ ##
3
+ # Public: A list of school managers that supports pagination.
4
+ #
5
+ # Examples
6
+ #
7
+ # Plurall.managers(school_id: 123456).each do |manager|
8
+ # puts manager.name
9
+ # end
10
+ #
11
+ class Managers
12
+ include Enumerable
13
+
14
+ # Internal: Returns the GraphQL API response as a GraphQL::Client::Response.
15
+ attr_reader :response
16
+
17
+ ##
18
+ # Internal: Create a new object from a GraphQL API response.
19
+ #
20
+ # response - The GraphQL API response as a GraphQL::Client::Response.
21
+ #
22
+ def initialize response
23
+ @response = response
24
+ end
25
+
26
+ ##
27
+ # Public: Returns the number of managers as an Integer.
28
+ def total_count
29
+ school_node.managers.total_count
30
+ end
31
+
32
+ ##
33
+ # Public: Returns the list of managers as a Hash.
34
+ def data
35
+ response.data.to_h
36
+ end
37
+
38
+ ##
39
+ # Public: Returns the school id for list of managers as a String.
40
+ def school_id
41
+ school_node.id
42
+ end
43
+
44
+ ##
45
+ # Public: Iterates the list of managers.
46
+ #
47
+ # Examples
48
+ #
49
+ # Plurall.managers(school_id: 123456).each do |manager|
50
+ # puts manager.name
51
+ # end
52
+ #
53
+ # Yields a manager object to the block.
54
+ #
55
+ # Returns an Enumerator when no block argument is given, or nothing when when a block argument is given.
56
+ #
57
+ def each &block
58
+ return enum_for :each unless block
59
+
60
+ school_node.managers.edges.lazy.map(&:node).each(&block)
61
+ end
62
+
63
+ ##
64
+ # Public: Iterates all managers.
65
+ #
66
+ # Several API calls may be made to retrieve all by repeatedly calling #next until #next? returns `false`.
67
+ #
68
+ # Examples
69
+ #
70
+ # Plurall.managers(school_id: 123456).all do |manager|
71
+ # puts manager.name
72
+ # end
73
+ #
74
+ # Yields a manager object to the block.
75
+ #
76
+ # Returns an Enumerator when no block argument is given, or nothing when when a block argument is given.
77
+ #
78
+ def all &block
79
+ return enum_for :all unless block
80
+
81
+ page = self
82
+ loop do
83
+ page.each(&block)
84
+ page = page.next
85
+ break if page.nil?
86
+ end
87
+ end
88
+
89
+ ##
90
+ # Public: Whether there are more managers available.
91
+ #
92
+ # Examples
93
+ #
94
+ # managers = Plurall.managers school_id: 123456
95
+ # managers.next?
96
+ #
97
+ # Returns true or false.
98
+ #
99
+ def next?
100
+ managers_page_info.has_next_page
101
+ end
102
+
103
+ ##
104
+ # Internal: The next cursor used for pagination.
105
+ #
106
+ # Returns the next cursor as a String, or nil.
107
+ #
108
+ def next_cursor
109
+ return nil unless next?
110
+
111
+ managers_page_info.end_cursor
112
+ end
113
+
114
+ ##
115
+ # Public: Retrieve the next page of managers.
116
+ #
117
+ # Returns the next page as Plurall::Managers, or nil.
118
+ #
119
+ def next
120
+ return nil unless next?
121
+
122
+ next_response = Plurall::Api.managers school_id: school_id, after: next_cursor
123
+ self.class.new next_response
124
+ end
125
+
126
+ ##
127
+ # Public: Whether there are previous managers available.
128
+ #
129
+ # Examples
130
+ #
131
+ # managers = Plurall.managers school_id: 123456
132
+ # managers.prev?
133
+ #
134
+ # Returns true or false.
135
+ #
136
+ def prev?
137
+ managers_page_info.has_previous_page
138
+ end
139
+
140
+ ##
141
+ # Internal: The previous cursor used for pagination.
142
+ #
143
+ # Returns the previous cursor as a String, or nil.
144
+ #
145
+ def prev_cursor
146
+ return nil unless prev?
147
+
148
+ managers_page_info.start_cursor
149
+ end
150
+
151
+ ##
152
+ # Public: Retrieve the previous page of managers.
153
+ #
154
+ # Examples
155
+ #
156
+ # managers = Plurall.managers school_id: 123456
157
+ # prev_managers = managers.prev
158
+ #
159
+ # Returns the previous page as Plurall::Managers, or nil.
160
+ #
161
+ def prev
162
+ return nil unless prev?
163
+
164
+ prev_response = Plurall::Api.managers school_id: school_id, before: prev_cursor
165
+ self.class.new prev_response
166
+ end
167
+
168
+ ##
169
+ # Internal: Returns a string representation of the list.
170
+ #
171
+ def inspect
172
+ "#<#{self.class.name}:0x#{(object_id * 2).to_s(16).rjust(16, "0")} managers:#{total_count}>"
173
+ end
174
+
175
+ private
176
+
177
+ def school_node
178
+ response.data.schools.first.edges.first.node
179
+ end
180
+
181
+ def managers_page_info
182
+ school_node.managers.page_info
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,169 @@
1
+ module Plurall
2
+ ##
3
+ # Public: A list of schools that supports pagination.
4
+ #
5
+ # Examples
6
+ #
7
+ # Plurall.schools.each do |school|
8
+ # puts school.legal_name
9
+ # end
10
+ #
11
+ class Schools
12
+ include Enumerable
13
+
14
+ # Internal: Returns the GraphQL API response as a GraphQL::Client::Response.
15
+ attr_reader :response
16
+
17
+ ##
18
+ # Internal: Create a new object from a GraphQL API response.
19
+ #
20
+ # response - The GraphQL API response as a GraphQL::Client::Response.
21
+ #
22
+ def initialize response
23
+ @response = response
24
+ end
25
+
26
+ ##
27
+ # Public: Returns the number of schools as an Integer.
28
+ def total_count
29
+ response.data.schools.first.total_count
30
+ end
31
+
32
+ ##
33
+ # Public: Returns the list of schools as a Hash.
34
+ def data
35
+ response.data.to_h
36
+ end
37
+
38
+ ##
39
+ # Public: Iterates the list of schools.
40
+ #
41
+ # Examples
42
+ #
43
+ # Plurall.schools.each do |school|
44
+ # puts school.legal_name
45
+ # end
46
+ #
47
+ # Yields a school object to the block.
48
+ #
49
+ # Returns an Enumerator when no block argument is given, or nothing when when a block argument is given.
50
+ #
51
+ def each &block
52
+ return enum_for :each unless block
53
+
54
+ response.data.schools.first.edges.lazy.map(&:node).each(&block)
55
+ end
56
+
57
+ ##
58
+ # Public: Iterates all schools.
59
+ #
60
+ # Several API calls may be made to retrieve all by repeatedly calling #next until #next? returns `false`.
61
+ #
62
+ # Examples
63
+ #
64
+ # Plurall.schools.all do |school|
65
+ # puts school.legal_name
66
+ # end
67
+ #
68
+ # Yields a school object to the block.
69
+ #
70
+ # Returns an Enumerator when no block argument is given, or nothing when when a block argument is given.
71
+ #
72
+ def all &block
73
+ return enum_for :all unless block
74
+
75
+ page = self
76
+ loop do
77
+ page.each(&block)
78
+ page = page.next
79
+ break if page.nil?
80
+ end
81
+ end
82
+
83
+ ##
84
+ # Public: Whether there are more schools available.
85
+ #
86
+ # Examples
87
+ #
88
+ # schools = Plurall.schools school_id: 123456
89
+ # schools.next?
90
+ #
91
+ # Returns true or false.
92
+ #
93
+ def next?
94
+ response.data.schools.first.page_info.has_next_page
95
+ end
96
+
97
+ ##
98
+ # Internal: The next cursor used for pagination.
99
+ #
100
+ # Returns the next cursor as a String, or nil.
101
+ #
102
+ def next_cursor
103
+ return nil unless next?
104
+
105
+ response.data.schools.first.page_info.end_cursor
106
+ end
107
+
108
+ ##
109
+ # Public: Retrieve the next page of schools.
110
+ #
111
+ # Returns the next page as Plurall::Schools, or nil.
112
+ #
113
+ def next
114
+ return nil unless next?
115
+
116
+ next_response = Plurall::Api.schools after: next_cursor
117
+ self.class.new next_response
118
+ end
119
+
120
+ ##
121
+ # Public: Whether there are previous schools available.
122
+ #
123
+ # Examples
124
+ #
125
+ # schools = Plurall.schools school_id: 123456
126
+ # schools.prev?
127
+ #
128
+ # Returns true or false.
129
+ #
130
+ def prev?
131
+ response.data.schools.first.page_info.has_previous_page
132
+ end
133
+
134
+ ##
135
+ # Internal: The previous cursor used for pagination.
136
+ #
137
+ # Returns the previous cursor as a String, or nil.
138
+ #
139
+ def prev_cursor
140
+ return nil unless prev?
141
+
142
+ response.data.schools.first.page_info.start_cursor
143
+ end
144
+
145
+ ##
146
+ # Public: Retrieve the previous page of schools.
147
+ #
148
+ # Examples
149
+ #
150
+ # schools = Plurall.schools school_id: 123456
151
+ # prev_schools = schools.prev
152
+ #
153
+ # Returns the previous page as Plurall::Schools, or nil.
154
+ #
155
+ def prev
156
+ return nil unless prev?
157
+
158
+ prev_response = Plurall::Api.schools before: prev_cursor
159
+ self.class.new prev_response
160
+ end
161
+
162
+ ##
163
+ # Internal: Returns a string representation of the list.
164
+ #
165
+ def inspect
166
+ "#<#{self.class.name}:0x#{(object_id * 2).to_s(16).rjust(16, "0")} schools:#{total_count}>"
167
+ end
168
+ end
169
+ end