class Mumuki::Bibliotheca::App
Public Instance Methods
api_syncer()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 136 def api_syncer Mumuki::Bibliotheca.api_syncer(json_body) end
authenticate!()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 116 def authenticate! halt 401 unless current_user? end
book()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra/books.rb, line 3 def book Book.find_by_slug! slug.to_s end
delete!(collection_class)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 165 def delete!(collection_class) authorize! :editor collection_class.find_by_slug!(slug.to_s).destroy! {} end
fork!(collection_class)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 159 def fork!(collection_class) authorize! :writer destination = json_body['organization'] collection_class.locate!(slug.to_s).fork_to!(destination, history_syncer).as_json end
guide()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra/guides.rb, line 3 def guide Guide.find_by_slug!(slug.to_s) end
history_syncer()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 132 def history_syncer Mumuki::Bibliotheca.history_syncer(current_user) end
insert_and_notify!(content_kind)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 140 def insert_and_notify!(content_kind) raise Mumukit::Auth::InvalidSlugFormatError, "#{content_kind.as_module_name} with slug #{slug} already exists!" if content_kind.as_module.find_by_slug(slug.to_s) upsert_and_notify!(content_kind) end
json_body()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 23 def json_body @json_body ||= JSON.parse(request.body.read) rescue nil end
list_books(books)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra/books.rb, line 7 def list_books(books) { books: books.as_json(only: [:name, :slug, :chapters]) } end
list_guides(guides)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra/guides.rb, line 7 def list_guides(guides) { guides: guides.map { |it| it.as_json(only: [:name, :slug, :type]).merge(language: it.language.name) } } end
list_topics(topics)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra/topics.rb, line 7 def list_topics(topics) { topics: topics.as_json(only: [:name, :slug]) } end
organizations_for(item)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 175 def organizations_for(item) Organization .in_path(item) .accessible_as(current_user, :student) .map { |it| it.as_json(only: [:name]) } end
permissions()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 171 def permissions current_user&.permissions end
route_slug_parts()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 39 def route_slug_parts [] end
slice_guide_resource_h_for_api(guide)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra/guides.rb, line 11 def slice_guide_resource_h_for_api(guide) guide.merge(language: guide.dig(:language, :name)).merge(exercises: guide[:exercises].map { |it| it.tap { |it| it[:language] = it.dig(:language, :name) if it[:language]}}) end
slug()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 27 def slug if route_slug_parts.present? Mumukit::Auth::Slug.join(*route_slug_parts) elsif subject Mumukit::Auth::Slug.parse(subject.slug) elsif json_body Mumukit::Auth::Slug.parse(json_body['slug']) else raise Mumukit::Auth::InvalidSlugFormatError.new('Slug not available') end end
subject()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 124 def subject Guide.find_by_id(params[:id]) end
topic()
click to toggle source
# File lib/mumuki/bibliotheca/sinatra/topics.rb, line 3 def topic Topic.find_by_slug!(slug.to_s) end
transform(language)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra/languages.rb, line 6 def transform(language) language .to_resource_h .replace_key!(:runner_url, :test_runner_url) end
upsert!(content_kind)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 152 def upsert!(content_kind) authorize! :writer content = api_syncer.locate_and_import! content_kind, slug.to_s history_syncer.export! content content.to_resource_h end
upsert_and_notify!(content_kind)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 145 def upsert_and_notify!(content_kind) resource_h = upsert! content_kind Mumukit::Nuntius.notify_content_change_event! content_kind, slug.to_s resource_h end
validate_accessible!(subject)
click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 182 def validate_accessible!(subject) authorize! :writer if subject.private? end