Class: Wikidotrb::Module::Page

Inherits:
Object
  • Object
show all
Defined in:
lib/wikidotrb/module/page.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(site:, fullname:, name: "", category: "", title: "", children_count: 0, comments_count: 0, size: 0, rating: 0, votes_count: 0, rating_percent: 0, revisions_count: 0, parent_fullname: "", tags: [], created_by: nil, created_at: nil, updated_by: nil, updated_at: nil, commented_by: nil, commented_at: nil, _id: nil, _source: nil, _revisions: nil, _votes: nil, _discuss: nil) ⇒ Page

Returns a new instance of Page.



366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
# File 'lib/wikidotrb/module/page.rb', line 366

def initialize(site:, fullname:, name: "", category: "", title: "", children_count: 0, comments_count: 0, size: 0, rating: 0,
               votes_count: 0, rating_percent: 0, revisions_count: 0, parent_fullname: "", tags: [], created_by: nil, created_at: nil,
               updated_by: nil, updated_at: nil, commented_by: nil, commented_at: nil, _id: nil, _source: nil, _revisions: nil,
               _votes: nil, _discuss: nil)
  @site = site
  @fullname = fullname
  @name = name
  @category = category
  @title = title
  @children_count = children_count
  @comments_count = comments_count
  @size = size
  @rating = rating
  @votes_count = votes_count
  @rating_percent = rating_percent
  @revisions_count = revisions_count
  @parent_fullname = parent_fullname
  @tags = tags
  @created_by = created_by
  @created_at = created_at
  @updated_by = updated_by
  @updated_at = updated_at
  @commented_by = commented_by
  @commented_at = commented_at
  @_id = _id
  @_source = _source
  @_revisions = _revisions
  @_votes = _votes
  @_discuss = _discuss
end

Instance Attribute Details

#_discuss

Returns the value of attribute _discuss.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def _discuss
  @_discuss
end

#_id

Returns the value of attribute _id.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def _id
  @_id
end

#_revisions

Returns the value of attribute _revisions.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def _revisions
  @_revisions
end

#_source

Returns the value of attribute _source.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def _source
  @_source
end

#_votes

Returns the value of attribute _votes.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def _votes
  @_votes
end

#category

Returns the value of attribute category.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def category
  @category
end

#children_count

Returns the value of attribute children_count.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def children_count
  @children_count
end

#commented_at

Returns the value of attribute commented_at.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def commented_at
  @commented_at
end

#commented_by

Returns the value of attribute commented_by.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def commented_by
  @commented_by
end

#comments_count

Returns the value of attribute comments_count.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def comments_count
  @comments_count
end

#created_at

Returns the value of attribute created_at.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def created_at
  @created_at
end

#created_by

Returns the value of attribute created_by.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def created_by
  @created_by
end

#fullname

Returns the value of attribute fullname.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def fullname
  @fullname
end

#name

Returns the value of attribute name.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def name
  @name
end

#parent_fullname

Returns the value of attribute parent_fullname.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def parent_fullname
  @parent_fullname
end

#rating

Returns the value of attribute rating.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def rating
  @rating
end

#rating_percent

Returns the value of attribute rating_percent.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def rating_percent
  @rating_percent
end

#revisions_count

Returns the value of attribute revisions_count.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def revisions_count
  @revisions_count
end

#site

Returns the value of attribute site.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def site
  @site
end

#size

Returns the value of attribute size.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def size
  @size
end

#tags

Returns the value of attribute tags.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def tags
  @tags
end

#title

Returns the value of attribute title.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def title
  @title
end

#updated_at

Returns the value of attribute updated_at.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def updated_at
  @updated_at
end

#updated_by

Returns the value of attribute updated_by.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def updated_by
  @updated_by
end

#votes_count

Returns the value of attribute votes_count.



360
361
362
# File 'lib/wikidotrb/module/page.rb', line 360

def votes_count
  @votes_count
end

Class Method Details

.create_or_edit(site:, fullname:, page_id: nil, title: "", source: "", comment: "", force_edit: false, raise_on_exists: false)



515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
# File 'lib/wikidotrb/module/page.rb', line 515

def self.create_or_edit(site:, fullname:, page_id: nil, title: "", source: "", comment: "", force_edit: false, raise_on_exists: false)
  site.client.

  page_lock_request_body = {
    mode: "page",
    wiki_page: fullname,
    moduleName: "edit/PageEditModule"
  }
  page_lock_request_body[:force_lock] = "yes" if force_edit

  # Requesting page lock
  page_lock_response_data = site.amc_request(bodies: [page_lock_request_body])[0]

  # Handling page lock errors
  if page_lock_response_data.nil? || page_lock_response_data["locked"] || page_lock_response_data["other_locks"]
    raise Wikidotrb::Common::Exceptions::TargetErrorException, "Page #{fullname} is locked or other locks exist"
  end

  is_exist = page_lock_response_data.key?("page_revision_id")

  raise Wikidotrb::Common::Exceptions::TargetExistsException, "Page #{fullname} already exists" if raise_on_exists && is_exist

  raise ArgumentError, "page_id must be specified when editing existing page" if is_exist && page_id.nil?

  lock_id = page_lock_response_data["lock_id"]
  lock_secret = page_lock_response_data["lock_secret"]
  page_revision_id = page_lock_response_data["page_revision_id"]

  edit_request_body = {
    action: "WikiPageAction",
    event: "savePage",
    moduleName: "Empty",
    mode: "page",
    lock_id: lock_id,
    lock_secret: lock_secret,
    revision_id: page_revision_id || "",
    wiki_page: fullname,
    page_id: page_id || "",
    title: title,
    source: source,
    comments: comment
  }

  response_data = site.amc_request(bodies: [edit_request_body])[0]

  unless response_data && response_data["status"] == "ok"
    error_status = response_data.nil? ? "no_response" : response_data["status"]
    raise Wikidotrb::Common::Exceptions::WikidotStatusCodeException.new(
      "Failed to create or edit page: #{fullname}",
      error_status
    )
  end

  res = PageCollection.search_pages(site, SearchPagesQuery.new(fullname: fullname))
  puts "Search result: #{res.inspect}"
  raise Wikidotrb::Common::Exceptions::NotFoundException, "Page creation failed: #{fullname}" if res.empty?

  res[0]
end

Instance Method Details

#delete_meta(name)



502
503
504
505
506
507
508
509
510
511
512
513
# File 'lib/wikidotrb/module/page.rb', line 502

def delete_meta(name)
  @site.client.
  @site.amc_request(bodies: [
                      {
                        metaName: name,
                        action: "WikiPageAction",
                        event: "deleteMetaTag",
                        pageId: id,
                        moduleName: "edit/EditMetaModule"
                      }
                    ])
end

#destroy



464
465
466
467
468
469
470
471
472
473
474
# File 'lib/wikidotrb/module/page.rb', line 464

def destroy
  @site.client.
  @site.amc_request(bodies: [
                      {
                        action: "WikiPageAction",
                        event: "deletePage",
                        page_id: id,
                        moduleName: "Empty"
                      }
                    ])
end

#discuss



397
398
399
400
401
# File 'lib/wikidotrb/module/page.rb', line 397

def discuss
  PageCollection.new(site: @site, pages: [self]).get_page_discuss if @_discuss.nil?
  @_discuss.update
  @_discuss
end

#discuss=(value)



403
404
405
# File 'lib/wikidotrb/module/page.rb', line 403

def discuss=(value)
  @_discuss = value
end

#edit(title: nil, source: nil, comment: nil, force_edit: false)



575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
# File 'lib/wikidotrb/module/page.rb', line 575

def edit(title: nil, source: nil, comment: nil, force_edit: false)
  title ||= @title
  source ||= @source.wiki_text
  comment ||= ""

  Page.create_or_edit(
    site: @site,
    fullname: @fullname,
    page_id: id,
    title: title,
    source: source,
    comment: comment,
    force_edit: force_edit
  )
end

#get_metas



476
477
478
479
480
481
482
483
484
485
486
# File 'lib/wikidotrb/module/page.rb', line 476

def get_metas
  response_data = @site.amc_request(bodies: [{ pageId: id, moduleName: "edit/EditMetaModule" }])[0]
  body = response_data["body"]

  metas = {}
  body.scan(/<meta name="([^"]+)" content="([^"]+)"/) do |meta|
    metas[meta[0]] = meta[1]
  end

  metas
end

#get_url



411
412
413
# File 'lib/wikidotrb/module/page.rb', line 411

def get_url
  "#{@site.get_url}/#{@fullname}"
end

#id



415
416
417
418
# File 'lib/wikidotrb/module/page.rb', line 415

def id
  PageCollection.new(site: @site, pages: [self]).get_page_ids if @_id.nil?
  @_id
end

#id=(value)



420
421
422
# File 'lib/wikidotrb/module/page.rb', line 420

def id=(value)
  @_id = value
end

#is_discuss_acquired?Boolean

Returns:

  • (Boolean)


407
408
409
# File 'lib/wikidotrb/module/page.rb', line 407

def is_discuss_acquired?
  !@_discuss.nil?
end

#is_id_acquired?Boolean

Returns:

  • (Boolean)


424
425
426
# File 'lib/wikidotrb/module/page.rb', line 424

def is_id_acquired?
  !@_id.nil?
end

#latest_revision



446
447
448
449
450
451
452
453
# File 'lib/wikidotrb/module/page.rb', line 446

def latest_revision
  # Get the one where revision_count and rev_no match
  @revisions.each do |revision|
    return revision if revision.rev_no == @revisions_count
  end

  raise Wikidotrb::Common::Exceptions::NotFoundException, "Cannot find latest revision"
end

#revisions



437
438
439
440
# File 'lib/wikidotrb/module/page.rb', line 437

def revisions
  PageCollection.new(site: @site, pages: [self]).get_page_revisions if @_revisions.nil?
  PageRevisionCollection.new(page: self, revisions: @_revisions)
end

#revisions=(value)



442
443
444
# File 'lib/wikidotrb/module/page.rb', line 442

def revisions=(value)
  @_revisions = value
end

#set_meta(name, value)



488
489
490
491
492
493
494
495
496
497
498
499
500
# File 'lib/wikidotrb/module/page.rb', line 488

def set_meta(name, value)
  @site.client.
  @site.amc_request(bodies: [
                      {
                        metaName: name,
                        metaContent: value,
                        action: "WikiPageAction",
                        event: "saveMetaTag",
                        pageId: id,
                        moduleName: "edit/EditMetaModule"
                      }
                    ])
end

#set_tags(tags)



591
592
593
594
595
596
597
598
599
600
601
602
# File 'lib/wikidotrb/module/page.rb', line 591

def set_tags(tags)
  @site.client.
  @site.amc_request(bodies: [
                      {
                        tags: tags.join(" "),
                        action: "WikiPageAction",
                        event: "saveTags",
                        pageId: id,
                        moduleName: "Empty"
                      }
                    ])
end

#source



428
429
430
431
# File 'lib/wikidotrb/module/page.rb', line 428

def source
  PageCollection.new(site: @site, pages: [self]).get_page_sources if @_source.nil?
  @_source
end

#source=(value)



433
434
435
# File 'lib/wikidotrb/module/page.rb', line 433

def source=(value)
  @_source = value
end

#votes



455
456
457
458
# File 'lib/wikidotrb/module/page.rb', line 455

def votes
  PageCollection.new(site: @site, pages: [self]).get_page_votes if @_votes.nil?
  @_votes
end

#votes=(value)



460
461
462
# File 'lib/wikidotrb/module/page.rb', line 460

def votes=(value)
  @_votes = value
end