ぼざクリ タグ広場 https://hub.nizika.monster
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

71 lines
1.9 KiB

  1. class WikiPagesController < ApplicationController
  2. def show
  3. wiki_page = WikiPage.find(params[:id])
  4. return head :not_found unless wiki_page
  5. render json: wiki_page.as_json.merge(body: wiki_page.body)
  6. end
  7. def show_by_title
  8. wiki_page = WikiPage.find_by(title: params[:title])
  9. return head :not_found unless wiki_page
  10. render json: wiki_page.as_json.merge(body: wiki_page.body)
  11. end
  12. def create
  13. return head :unauthorized unless current_user
  14. return head :forbidden unless ['admin', 'member'].include?(current_user.role)
  15. wiki_page = WikiPage.new(title: params[:title], created_user: current_user, updated_user: current_user)
  16. if wiki_page.save
  17. wiki_page.set_body params[:body], user: current_user
  18. render json: wiki_page, status: :created
  19. else
  20. render json: { errors: wiki_page.errors.full_messages }, status: :unprocessable_entity
  21. end
  22. end
  23. def update
  24. return head :unauthorized unless current_user
  25. return head :forbidden unless ['admin', 'member'].include?(current_user.role)
  26. wiki_page = WikiPage.find(params[:id])
  27. return head :not_found unless wiki_page
  28. wiki_page.updated_user = current_user
  29. wiki_page.set_body params[:body], user: current_user
  30. wiki_page.save!
  31. head :ok
  32. end
  33. def search
  34. q = WikiPage.all
  35. if params[:title].present?
  36. title = params[:title].to_s.strip
  37. q = q.where('title LIKE ?', "%#{ WikiPage.sanitize_sql_like(title) }%")
  38. end
  39. render json: q.limit(20)
  40. end
  41. def changes
  42. id = params[:id]
  43. log = id.present? ? wiki.page("#{ id }.md").versions : wiki.repo.log('main', nil, max_count: 50)
  44. render json: log.map { |commit|
  45. { sha: commit.id,
  46. author: commit.author.name,
  47. message: commit.message,
  48. timestamp: commit.authored_date } }
  49. end
  50. private
  51. WIKI_PATH = Rails.root.join('wiki').to_s
  52. def wiki
  53. @wiki ||= Gollum::Wiki.new(WIKI_PATH)
  54. end
  55. end