mumukit-platform 4.2.0 → 5.0.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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/README.md +17 -1
- data/lib/mumukit/platform.rb +15 -1
- data/lib/mumukit/platform/course.rb +0 -2
- data/lib/mumukit/platform/organization.rb +0 -4
- data/lib/mumukit/platform/organization_mapping.rb +3 -3
- data/lib/mumukit/platform/user.rb +0 -2
- data/lib/mumukit/platform/version.rb +1 -1
- metadata +3 -9
- data/lib/mumukit/platform/course/helpers.rb +0 -43
- data/lib/mumukit/platform/organization/helpers.rb +0 -112
- data/lib/mumukit/platform/organization/profile.rb +0 -39
- data/lib/mumukit/platform/organization/settings.rb +0 -25
- data/lib/mumukit/platform/organization/theme.rb +0 -4
- data/lib/mumukit/platform/user/helpers.rb +0 -142
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1e1ce06ac9d7055da2a3f86b3a865630a7788e182e0c021485c9b2b638df543
|
4
|
+
data.tar.gz: d1ab26c3c29648fea155c0aef57315b57e1405efab03b44fadfa2f8e06c0724c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74adaec00a74e0774e0136b6295462a0f47d26380b915cdef19e04a1a7458de90987a599c25c6843362d21bd1626819e5fcfaed6b23d21e9f0b109d4eae77dac
|
7
|
+
data.tar.gz: d40805aa710719fef5c0a78a306787946f312e8d685ed927501696045e1754a3a6f56c855ec3d8f8e9fe02c1a92fd1bf9b8661a00b373576a22ccd0bba65d7b5
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3
|
1
|
+
2.6.3
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -23,6 +23,23 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
$ gem install mumukit-platform
|
25
25
|
|
26
|
+
## Requeriments
|
27
|
+
|
28
|
+
In order to properly use this gem, you must declare _organization_, _course_ and _user_ classes, and implement some required methods:
|
29
|
+
|
30
|
+
_organization_:
|
31
|
+
* `#name`
|
32
|
+
* `#locale`
|
33
|
+
* `.find_by_name!`
|
34
|
+
|
35
|
+
_user_:
|
36
|
+
* `.for_profile`
|
37
|
+
* `.find_by_uid!`
|
38
|
+
|
39
|
+
_course_:
|
40
|
+
* `.find_by_slug!`
|
41
|
+
|
42
|
+
|
26
43
|
## Contributing
|
27
44
|
|
28
45
|
Bug reports and pull requests are welcome on GitHub at https://github.com/mumuki/mumukit-platform. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
@@ -30,4 +47,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/mumuki
|
|
30
47
|
## License
|
31
48
|
|
32
49
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
33
|
-
|
data/lib/mumukit/platform.rb
CHANGED
@@ -26,6 +26,20 @@ module Mumukit::Platform
|
|
26
26
|
end
|
27
27
|
|
28
28
|
CORE_MODELS.each do |klass|
|
29
|
+
# Configured classes must implement the following methods:
|
30
|
+
#
|
31
|
+
# _organization_:
|
32
|
+
# * `#name`
|
33
|
+
# * `#locale`
|
34
|
+
# * `.find_by_name!`
|
35
|
+
#
|
36
|
+
# _user_:
|
37
|
+
# * `.for_profile`
|
38
|
+
# * `.find_by_uid!`
|
39
|
+
#
|
40
|
+
# _course_:
|
41
|
+
# * `.find_by_slug!`
|
42
|
+
#
|
29
43
|
define_singleton_method("#{klass}_class") do
|
30
44
|
begin
|
31
45
|
config["#{klass}_class"] ||= config["#{klass}_class_name"].constantize
|
@@ -42,8 +56,8 @@ require_relative './platform/domain'
|
|
42
56
|
require_relative './platform/model'
|
43
57
|
require_relative './platform/locale'
|
44
58
|
require_relative './platform/course'
|
45
|
-
require_relative './platform/user'
|
46
59
|
require_relative './platform/organization'
|
60
|
+
require_relative './platform/user'
|
47
61
|
require_relative './platform/organization_mapping'
|
48
62
|
require_relative './platform/application'
|
49
63
|
require_relative './platform/web_framework'
|
@@ -9,10 +9,10 @@ module Mumukit::Platform::OrganizationMapping
|
|
9
9
|
|
10
10
|
def self.parse(name)
|
11
11
|
mapping = name.try { |it| it.strip.downcase }
|
12
|
-
if mapping.blank? || mapping == '
|
13
|
-
Subdomain
|
14
|
-
elsif mapping == 'path'
|
12
|
+
if mapping.blank? || mapping == 'path'
|
15
13
|
Path
|
14
|
+
elsif mapping == 'subdomain'
|
15
|
+
Subdomain
|
16
16
|
else
|
17
17
|
raise "Unrecognized organization mapping #{mapping}"
|
18
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mumukit-platform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franco Leonardo Bulgarelli
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04
|
11
|
+
date: 2019-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mumukit-nuntius
|
@@ -144,20 +144,14 @@ files:
|
|
144
144
|
- lib/mumukit/platform/application.rb
|
145
145
|
- lib/mumukit/platform/bridge.rb
|
146
146
|
- lib/mumukit/platform/course.rb
|
147
|
-
- lib/mumukit/platform/course/helpers.rb
|
148
147
|
- lib/mumukit/platform/domain.rb
|
149
148
|
- lib/mumukit/platform/locale.rb
|
150
149
|
- lib/mumukit/platform/model.rb
|
151
150
|
- lib/mumukit/platform/notifiable.rb
|
152
151
|
- lib/mumukit/platform/organization.rb
|
153
|
-
- lib/mumukit/platform/organization/helpers.rb
|
154
|
-
- lib/mumukit/platform/organization/profile.rb
|
155
|
-
- lib/mumukit/platform/organization/settings.rb
|
156
|
-
- lib/mumukit/platform/organization/theme.rb
|
157
152
|
- lib/mumukit/platform/organization_mapping.rb
|
158
153
|
- lib/mumukit/platform/uri.rb
|
159
154
|
- lib/mumukit/platform/user.rb
|
160
|
-
- lib/mumukit/platform/user/helpers.rb
|
161
155
|
- lib/mumukit/platform/version.rb
|
162
156
|
- lib/mumukit/platform/web_framework.rb
|
163
157
|
- lib/mumukit/platform/with_applications.rb
|
@@ -184,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
178
|
- !ruby/object:Gem::Version
|
185
179
|
version: '0'
|
186
180
|
requirements: []
|
187
|
-
rubygems_version: 3.0.
|
181
|
+
rubygems_version: 3.0.4
|
188
182
|
signing_key:
|
189
183
|
specification_version: 4
|
190
184
|
summary: Shared Mumuki Platform Components
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module Mumukit::Platform::Course::Helpers
|
2
|
-
include Mumukit::Platform::Notifiable
|
3
|
-
|
4
|
-
## Implementors must declare the following methods:
|
5
|
-
#
|
6
|
-
# * slug
|
7
|
-
# * shifts
|
8
|
-
# * code
|
9
|
-
# * days
|
10
|
-
# * period
|
11
|
-
# * description
|
12
|
-
|
13
|
-
def platform_class_name
|
14
|
-
:Course
|
15
|
-
end
|
16
|
-
|
17
|
-
## API Exposure
|
18
|
-
|
19
|
-
def to_param
|
20
|
-
slug
|
21
|
-
end
|
22
|
-
|
23
|
-
## Resource Hash
|
24
|
-
|
25
|
-
def self.slice_resource_h(resource_h)
|
26
|
-
resource_h.slice(:slug, :shifts, :code, :days, :period, :description)
|
27
|
-
end
|
28
|
-
|
29
|
-
def to_resource_h
|
30
|
-
{
|
31
|
-
slug: slug,
|
32
|
-
shifts: shifts,
|
33
|
-
code: code,
|
34
|
-
days: days,
|
35
|
-
period: period,
|
36
|
-
description: description
|
37
|
-
}.except(*protected_resource_fields).compact
|
38
|
-
end
|
39
|
-
|
40
|
-
def protected_resource_fields
|
41
|
-
[]
|
42
|
-
end
|
43
|
-
end
|
@@ -1,112 +0,0 @@
|
|
1
|
-
module Mumukit::Platform::Organization::Helpers
|
2
|
-
extend ActiveSupport::Concern
|
3
|
-
include Mumukit::Platform::Notifiable
|
4
|
-
|
5
|
-
## Implementors must declare the following methods:
|
6
|
-
#
|
7
|
-
# * name
|
8
|
-
# * book
|
9
|
-
# * profile
|
10
|
-
# * settings
|
11
|
-
# * theme
|
12
|
-
|
13
|
-
included do
|
14
|
-
delegate *Mumukit::Platform::Organization::Theme.accessors, to: :theme
|
15
|
-
delegate *Mumukit::Platform::Organization::Settings.accessors, :private?, :login_settings, to: :settings
|
16
|
-
delegate *Mumukit::Platform::Organization::Profile.accessors, :locale_json, to: :profile
|
17
|
-
end
|
18
|
-
|
19
|
-
def platform_class_name
|
20
|
-
:Organization
|
21
|
-
end
|
22
|
-
|
23
|
-
def slug
|
24
|
-
Mumukit::Auth::Slug.join_s name
|
25
|
-
end
|
26
|
-
|
27
|
-
def central?
|
28
|
-
name == 'central'
|
29
|
-
end
|
30
|
-
|
31
|
-
def test?
|
32
|
-
name == 'test'
|
33
|
-
end
|
34
|
-
|
35
|
-
def base?
|
36
|
-
name == 'base'
|
37
|
-
end
|
38
|
-
|
39
|
-
def switch!
|
40
|
-
Mumukit::Platform::Organization.switch! self
|
41
|
-
end
|
42
|
-
|
43
|
-
def to_s
|
44
|
-
name
|
45
|
-
end
|
46
|
-
|
47
|
-
def url_for(path)
|
48
|
-
Mumukit::Platform.application.organic_url_for(name, path)
|
49
|
-
end
|
50
|
-
|
51
|
-
def url
|
52
|
-
url_for '/'
|
53
|
-
end
|
54
|
-
|
55
|
-
def domain
|
56
|
-
Mumukit::Platform.application.organic_domain(name)
|
57
|
-
end
|
58
|
-
|
59
|
-
## API Exposure
|
60
|
-
|
61
|
-
def to_param
|
62
|
-
name
|
63
|
-
end
|
64
|
-
|
65
|
-
## Name validation
|
66
|
-
|
67
|
-
def self.valid_name?(name)
|
68
|
-
!!(name =~ anchored_valid_name_regex)
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.anchored_valid_name_regex
|
72
|
-
/\A#{valid_name_regex}\z/
|
73
|
-
end
|
74
|
-
|
75
|
-
def self.valid_name_regex
|
76
|
-
/([-a-z0-9_]+(\.[-a-z0-9_]+)*)?/
|
77
|
-
end
|
78
|
-
|
79
|
-
## Resource Hash
|
80
|
-
|
81
|
-
def self.slice_resource_h(resource_h)
|
82
|
-
resource_h.slice(:name, :book, :profile, :settings, :theme)
|
83
|
-
end
|
84
|
-
|
85
|
-
def to_resource_h
|
86
|
-
{
|
87
|
-
name: name,
|
88
|
-
book: book.slug,
|
89
|
-
profile: profile,
|
90
|
-
settings: settings,
|
91
|
-
theme: theme
|
92
|
-
}.except(*protected_resource_fields).compact
|
93
|
-
end
|
94
|
-
|
95
|
-
def protected_resource_fields
|
96
|
-
[]
|
97
|
-
end
|
98
|
-
|
99
|
-
module ClassMethods
|
100
|
-
def current
|
101
|
-
Mumukit::Platform::Organization.current
|
102
|
-
end
|
103
|
-
|
104
|
-
def parse(json)
|
105
|
-
json
|
106
|
-
.slice(:name)
|
107
|
-
.merge(theme: Mumukit::Platform::Organization::Theme.parse(json[:theme]))
|
108
|
-
.merge(settings: Mumukit::Platform::Organization::Settings.parse(json[:settings]))
|
109
|
-
.merge(profile: Mumukit::Platform::Organization::Profile.parse(json[:profile]))
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
class Mumukit::Platform::Organization::Profile < Mumukit::Platform::Model
|
2
|
-
LOCALES = Mumukit::Platform::Locale::SPECS
|
3
|
-
|
4
|
-
model_attr_accessor :logo_url,
|
5
|
-
:banner_url,
|
6
|
-
:favicon_url,
|
7
|
-
:breadcrumb_image_url,
|
8
|
-
:open_graph_image_url,
|
9
|
-
:locale,
|
10
|
-
:description,
|
11
|
-
:contact_email,
|
12
|
-
:terms_of_service,
|
13
|
-
:community_link,
|
14
|
-
:errors_explanations
|
15
|
-
|
16
|
-
def locale_json
|
17
|
-
locale_h.to_json
|
18
|
-
end
|
19
|
-
|
20
|
-
def locale_h
|
21
|
-
Mumukit::Platform::Locale::SPECS[locale]
|
22
|
-
end
|
23
|
-
|
24
|
-
def logo_url
|
25
|
-
@logo_url ||= 'https://mumuki.io/logo-alt-large.png' # Best image size: 350x75
|
26
|
-
end
|
27
|
-
|
28
|
-
def banner_url
|
29
|
-
@banner_url || logo_url # Best image size: 350x75
|
30
|
-
end
|
31
|
-
|
32
|
-
def favicon_url
|
33
|
-
@favicon_url ||= '/favicon.ico' # Best image size: 16x16, 32x32 or 48x48
|
34
|
-
end
|
35
|
-
|
36
|
-
def open_graph_image_url
|
37
|
-
@open_graph_image_url ||= Mumukit::Platform.application.url_for("logo-alt.png") # Best image size: 256x256
|
38
|
-
end
|
39
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
class Mumukit::Platform::Organization::Settings < Mumukit::Platform::Model
|
2
|
-
model_attr_accessor :login_methods,
|
3
|
-
:login_provider,
|
4
|
-
:login_provider_settings,
|
5
|
-
:forum_discussions_minimal_role,
|
6
|
-
:raise_hand_enabled?,
|
7
|
-
:feedback_suggestions_enabled?,
|
8
|
-
:public?,
|
9
|
-
:embeddable?,
|
10
|
-
:immersive?,
|
11
|
-
:forum_enabled?,
|
12
|
-
:report_issue_enabled?
|
13
|
-
|
14
|
-
def private?
|
15
|
-
!public?
|
16
|
-
end
|
17
|
-
|
18
|
-
def login_methods
|
19
|
-
@login_methods ||= ['user_pass']
|
20
|
-
end
|
21
|
-
|
22
|
-
def forum_discussions_minimal_role
|
23
|
-
(@forum_discussions_minimal_role || 'student').to_sym
|
24
|
-
end
|
25
|
-
end
|
@@ -1,142 +0,0 @@
|
|
1
|
-
module Mumukit::Platform::User::Helpers
|
2
|
-
include Mumukit::Auth::Roles
|
3
|
-
include Mumukit::Platform::Notifiable
|
4
|
-
|
5
|
-
extend Gem::Deprecate
|
6
|
-
|
7
|
-
## Implementors must declare the following methods:
|
8
|
-
#
|
9
|
-
# * permissions
|
10
|
-
# * uid
|
11
|
-
# * social_id
|
12
|
-
# * image_url
|
13
|
-
# * email
|
14
|
-
# * first_name
|
15
|
-
# * last_name
|
16
|
-
|
17
|
-
## Permissions
|
18
|
-
|
19
|
-
delegate :has_role?,
|
20
|
-
:add_permission!,
|
21
|
-
:remove_permission!,
|
22
|
-
:has_permission?,
|
23
|
-
:has_permission_delegation?,
|
24
|
-
:protect!,
|
25
|
-
:protect_delegation!,
|
26
|
-
:protect_permissions_assignment!,
|
27
|
-
to: :permissions
|
28
|
-
|
29
|
-
def platform_class_name
|
30
|
-
:User
|
31
|
-
end
|
32
|
-
|
33
|
-
def merge_permissions!(new_permissions)
|
34
|
-
self.permissions = permissions.merge(new_permissions)
|
35
|
-
end
|
36
|
-
|
37
|
-
(Mumukit::Auth::Roles::ROLES - [:writer, :editor, :owner] + [:discusser]).each do |role|
|
38
|
-
role_of = "#{role}_of?"
|
39
|
-
role_here = "#{role}_here?"
|
40
|
-
|
41
|
-
# Tells whether this user has #{role} permissions in
|
42
|
-
# the given organization
|
43
|
-
define_method role_of do |organization|
|
44
|
-
has_permission? role, organization.slug
|
45
|
-
end
|
46
|
-
|
47
|
-
# Tells whether this user has #{role} permissions in
|
48
|
-
# the current organization
|
49
|
-
define_method role_here do
|
50
|
-
send role_of, Mumukit::Platform::Organization.current
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# Tells whether this user has forum discusser permissions in
|
55
|
-
# the given organization
|
56
|
-
def discusser_of?(organization)
|
57
|
-
has_permission? organization.forum_discussions_minimal_role, organization.slug
|
58
|
-
end
|
59
|
-
|
60
|
-
(Mumukit::Auth::Roles::ROLES - [:owner]).each do |role|
|
61
|
-
|
62
|
-
# Assignes the #{role} role to this user
|
63
|
-
# for the given slug
|
64
|
-
define_method "make_#{role}_of!" do |slug|
|
65
|
-
add_permission! role, slug
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
## Profile
|
70
|
-
|
71
|
-
def full_name
|
72
|
-
"#{first_name} #{last_name}"
|
73
|
-
end
|
74
|
-
|
75
|
-
alias_method :name, :full_name
|
76
|
-
|
77
|
-
def profile_completed?
|
78
|
-
[first_name, last_name].all? &:present?
|
79
|
-
end
|
80
|
-
|
81
|
-
def to_s
|
82
|
-
"#{full_name} <#{email}> [#{uid}]"
|
83
|
-
end
|
84
|
-
|
85
|
-
## Accesible organizations
|
86
|
-
|
87
|
-
def student_granted_organizations
|
88
|
-
permissions.student_granted_organizations.map do |org|
|
89
|
-
Mumukit::Platform::Organization.find_by_name!(org) rescue nil
|
90
|
-
end.compact
|
91
|
-
end
|
92
|
-
|
93
|
-
def has_student_granted_organizations?
|
94
|
-
student_granted_organizations.present?
|
95
|
-
end
|
96
|
-
|
97
|
-
[[:accessible_organizations, :student_granted_organizations],
|
98
|
-
[:has_accessible_organizations?, :has_student_granted_organizations?]].each do |it, replacement|
|
99
|
-
alias_method it, replacement
|
100
|
-
deprecate it, replacement, 2019, 6
|
101
|
-
end
|
102
|
-
|
103
|
-
def main_organization
|
104
|
-
student_granted_organizations.first
|
105
|
-
end
|
106
|
-
|
107
|
-
def has_main_organization?
|
108
|
-
student_granted_organizations.length == 1
|
109
|
-
end
|
110
|
-
|
111
|
-
def has_immersive_main_organization?
|
112
|
-
!!main_organization.try(&:immersive?)
|
113
|
-
end
|
114
|
-
|
115
|
-
## API Exposure
|
116
|
-
|
117
|
-
def to_param
|
118
|
-
uid
|
119
|
-
end
|
120
|
-
|
121
|
-
## Resource Hash
|
122
|
-
|
123
|
-
def self.slice_resource_h(resource_h)
|
124
|
-
resource_h.slice(:uid, :social_id, :image_url, :email, :first_name, :last_name, :permissions)
|
125
|
-
end
|
126
|
-
|
127
|
-
def to_resource_h
|
128
|
-
{
|
129
|
-
uid: uid,
|
130
|
-
social_id: social_id,
|
131
|
-
image_url: image_url,
|
132
|
-
email: email,
|
133
|
-
first_name: first_name,
|
134
|
-
last_name: last_name,
|
135
|
-
permissions: permissions
|
136
|
-
}.except(*protected_resource_fields).compact
|
137
|
-
end
|
138
|
-
|
139
|
-
def protected_resource_fields
|
140
|
-
[]
|
141
|
-
end
|
142
|
-
end
|