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
authorization_slug() click to toggle source
# File lib/mumuki/bibliotheca/sinatra.rb, line 120
def authorization_slug
  slug
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