>>> ktistec: Building community/ktistec 2.1.0-r0 (using abuild 3.13.0-r3) started Sun, 21 Jul 2024 02:56:48 +0000 >>> ktistec: Checking sanity of /home/buildozer/aports/community/ktistec/APKBUILD... >>> ktistec: Analyzing dependencies... >>> ktistec: Installing for build: build-base tzdata crystal libxml2-dev musl-utils openssl-dev shards sqlite-dev yaml-dev (1/40) Installing tzdata (2024a-r1) (2/40) Installing gc (8.2.6-r0) (3/40) Installing libgc++ (8.2.6-r0) (4/40) Installing gc-dev (8.2.6-r0) (5/40) Installing libatomic_ops (7.8.0-r4) (6/40) Installing gdbm (1.23-r1) (7/40) Installing mpdecimal (4.0.0-r0) (8/40) Installing libpanelw (6.4_p20240420-r0) (9/40) Installing readline (8.2.10-r0) (10/40) Installing sqlite-libs (3.45.3-r1) (11/40) Installing python3 (3.12.3-r1) (12/40) Installing python3-pycache-pyc0 (3.12.3-r1) (13/40) Installing pyc (3.12.3-r1) (14/40) Installing python3-pyc (3.12.3-r1) (15/40) Installing libevent (2.1.12-r7) (16/40) Installing libevent-dev (2.1.12-r7) (17/40) Installing libevent-static (2.1.12-r7) (18/40) Installing bsd-compat-headers (0.7.2-r6) (19/40) Installing libformw (6.4_p20240420-r0) (20/40) Installing libmenuw (6.4_p20240420-r0) (21/40) Installing libncurses++ (6.4_p20240420-r0) (22/40) Installing ncurses-dev (6.4_p20240420-r0) (23/40) Installing libedit-dev (20240517.3.1-r0) (24/40) Installing zlib-dev (1.3.1-r1) (25/40) Installing libpcre2-16 (10.43-r0) (26/40) Installing libpcre2-32 (10.43-r0) (27/40) Installing pcre2-dev (10.43-r0) (28/40) Installing llvm17-libs (17.0.6-r1) (29/40) Installing crystal (1.12.2-r0) (30/40) Installing xz (5.6.1-r3) (31/40) Installing xz-dev (5.6.1-r3) (32/40) Installing libxml2-utils (2.12.7-r0) (33/40) Installing libxml2-dev (2.12.7-r0) (34/40) Installing openssl-dev (3.3.1-r3) (35/40) Installing yaml (0.2.5-r2) (36/40) Installing shards (0.18.0-r0) (37/40) Installing sqlite (3.45.3-r1) (38/40) Installing sqlite-dev (3.45.3-r1) (39/40) Installing yaml-dev (0.2.5-r2) (40/40) Installing .makedepends-ktistec (20240721.025649) Executing busybox-1.36.1-r29.trigger OK: 1919 MiB in 163 packages >>> ktistec: Cleaning up srcdir >>> ktistec: Cleaning up pkgdir >>> ktistec: Cleaning up tmpdir >>> ktistec: Fetching https://distfiles.alpinelinux.org/distfiles/v3.20/ktistec-2.1.0.tar.gz Connecting to distfiles.alpinelinux.org (172.105.82.32:443) wget: server returned error: HTTP/1.1 404 Not Found >>> ktistec: Fetching ktistec-2.1.0.tar.gz::https://github.com/toddsundsted/ktistec/archive/refs/tags/v2.1.0.tar.gz Connecting to github.com (140.82.121.4:443) Connecting to codeload.github.com (140.82.121.10:443) saving to '/var/cache/distfiles/v3.20/ktistec-2.1.0.tar.gz.part' ktistec-2.1.0.tar.gz 100% |********************************| 4272k 0:00:00 ETA '/var/cache/distfiles/v3.20/ktistec-2.1.0.tar.gz.part' saved >>> ktistec: Fetching https://distfiles.alpinelinux.org/distfiles/v3.20/ktistec-2.1.0.tar.gz >>> ktistec: Checking sha512sums... ktistec-2.1.0.tar.gz: OK ktistec.initd: OK ktistec.confd: OK update-shard-lock.patch: OK >>> ktistec: Unpacking /var/cache/distfiles/v3.20/ktistec-2.1.0.tar.gz... >>> ktistec: update-shard-lock.patch patching file shard.lock I: Resolving dependencies I: Fetching https://github.com/kemalcr/kemal.git I: Fetching https://github.com/toddsundsted/slang.git I: Fetching https://github.com/crystal-lang/crystal-sqlite3.git I: Fetching https://github.com/toddsundsted/libxml_ext.git I: Fetching https://github.com/toddsundsted/openssl_ext.git I: Fetching https://github.com/toddsundsted/web_finger.git I: Fetching https://github.com/toddsundsted/school.git I: Fetching https://github.com/icyleaf/markd.git I: Fetching https://gitlab.com/arctic-fox/spectator.git I: Fetching https://github.com/luislavena/radix.git I: Fetching https://github.com/crystal-loot/exception_page.git I: Fetching https://github.com/sija/backtracer.cr.git I: Fetching https://github.com/crystal-lang/crystal-db.git I: Fetching https://github.com/toddsundsted/host_meta.git I: Installing radix (0.4.1) I: Installing backtracer (1.2.2) I: Installing exception_page (0.4.1) I: Installing kemal (1.5.0) I: Installing slang (2.0.0) I: Installing db (0.13.1) I: Installing sqlite3 (0.21.0) I: Installing libxml_ext (0.1.2) I: Installing openssl_ext (0.1.6) I: Installing host_meta (0.2.3) I: Installing web_finger (0.2.5) I: Installing school (0.2.4) I: Installing markd (0.5.0) I: Installing spectator (0.12.0) SQLite3 version 3.45.3 delete-old-notifications: applied in 0.0003s TaskWorker #work calls perform on all scheduled tasks ensures task is not left running does not resurrect a task that has been destroyed stores the backtrace when task throws an uncaught exception sets complete to true sets complete to true unless task wasn't scheduled sets complete to true unless task throws an uncaught exception sets complete to true unless task is rescheduled sets last_attempt_at returns true if work was done returns false if work was not done .destroy_old_tasks destroys old complete tasks destroys old failed tasks ignores new tasks .clean_up_running_tasks sets running tasks to not running ContentRules .new creates an instance #run given an empty outbox adds the activity to the outbox given an empty inbox does not add the activity to the inbox owner in recipients adds the activity to the inbox public URL in recipients does not add the activity to the inbox and owner is follows activity's actor adds the activity to the inbox followers collection in recipients does not add the activity to the inbox and owner is follows activity's actor adds the activity to the inbox given no notifications does not add the create to the notifications does not add the announce to the notifications does not add the like to the notifications adds the follow to the notifications object mentions the owner adds the object to the notifications and is attributed to the owner does not add the object to the notifications object mentions another actor does not add the object to the notifications another object mentions the owner does not add the object to the notifications object is in reply to an object attributed to the owner adds the reply to the notifications and is attributed to the owner does not add the object to the notifications object is in reply to an object attributed to another actor does not add the reply to the notifications in a thread being followed by the owner adds the reply to the notifications adds the reply to the notifications but object is not the root of the thread does not add the reply to the notifications does not add the reply to the notifications in a thread being followed by another actor does not add the reply to the notifications does not add the reply to the notifications another object is in reply to an object attributed to the owner does not add the reply to the notifications object both is in reply to an object attributed to the owner and mentions the owner adds the object to the notifications once gives preference to the reply notification object is tagged with hashtags where object is attributed to the owner does not add the hashtag to the notifications does not add the hashtag to the notifications where 'foo' is followed by the owner adds the hashtag to the notifications adds the hashtag to the notifications and 'bar' is followed by the owner adds both hashtags to the notifications adds both hashtags to the notifications where 'foo' is followed by another actor does not add the hashtag to the notifications does not add the hashtag to the notifications and 'bar' is followed by another actor does not add the hashtag to the notifications does not add the hashtag to the notifications object is tagged with mentions where object is attributed to the owner does not add the object to the notifications does not add the object to the notifications where 'foo@remote.com' is followed by the owner adds the object to the notifications adds the object to the notifications and 'bar@remote.com' is followed by the owner adds a single object to the notifications adds a single object to the notifications where 'foo@remote.com' is followed by another actor does not add the object to the notifications does not add the object to the notifications and 'bar@remote.com' is followed by another actor does not add the object to the notifications does not add the object to the notifications object is tagged with a hashtag and a mention and is a reply does add any notifications and all three are followed by owner adds three notifications object is attributed to the owner adds the announce to the notifications adds the like to the notifications another object is attributed to the owner does not add the announce to the notifications does not add the like to the notifications follow does not follow the owner does not add the follow to the notifications given notifications with a followed hashtag already added for the owner removes the previous notification from the notifications does not add a duplicate hashtag to the notifications removes the previous notification from the notifications does not add a duplicate hashtag to the notifications for other owner adds the hashtag to the notifications adds the hashtag to the notifications given notifications with a followed mention already added for the owner removes the previous notification from the notifications does not add a duplicate mention to the notifications removes the previous notification from the notifications does not add a duplicate mention to the notifications for other owner adds the object to the notifications adds the object to the notifications given notifications with a followed thread reply already added for the owner removes the previous create from the notifications does not add another object to the notifications removes the previous announce from the notifications does not add another object to the notifications for other owner adds the object to the notifications adds the object to the notifications given notifications with mention already added does not add the mention to the notifications removes the mention from the notifications and an unrelated delete does not remove the mention from the notifications and an unrelated undo does not remove the mention from the notifications given notifications with reply already added does not add the reply to the notifications removes the reply from the notifications and an unrelated delete does not remove the reply from the notifications and an unrelated undo does not remove the reply from the notifications given notifications with an announce already added does not add the announce to the notifications removes the announce from the notifications does not remove the announce from the notifications given notifications with another announce for the same object adds the announce to the notifications removes the previous announce from the notifications given notifications with a like already added does not add the like to the notifications removes the like from the notifications does not remove the like from the notifications given notifications with another like for the same object adds the like to the notifications removes the previous like from the notifications given notifications with follow already added does not add the follow to the notifications removes the follow from the notifications does not remove the follow from the notifications given notifications with an announce that has been undone removes the announce from the notifications given an empty timeline adds the object to the timeline adds the object to the timeline object is a reply does not add the object to the timeline adds the object to the timeline but is attributed to the owner adds the object to the timeline another object is a reply adds the object to the timeline adds the object to the timeline object mentions the owner adds the object to the timeline adds the object to the timeline object mentions the owner and another actor adds the object to the timeline adds the object to the timeline object mentions another actor does not add the object to the timeline adds the object to the timeline but is attributed to the owner adds the object to the timeline given a timeline with an object already added and an associated create does not add the object to the timeline removes the object from the timeline and an unrelated delete does not remove the object from the timeline and an unrelated undo does not remove the object from the timeline and an associated announce does not add the object to the timeline removes the object from the timeline and a related undo removes the object from the timeline and another announce does not remove the object from the timeline that has been undone removes the object from the timeline given a timeline with another object already added does not remove the object from the timeline does not remove the object from the timeline given a timeline with an object that has been deleted destroys the timeline entry given an empty timeline adds the object to the timeline adds the object to the timeline given a content filter adds the object to the timeline adds the object to the timeline given a content filter of the actor adds the object to the timeline adds the object to the timeline adds the object to the timeline adds the object to the timeline given a content filter adds the object to the timeline adds the object to the timeline given a content filter of the actor does not add the object to the timeline does not add the object to the timeline Ktistec::HTML .enhance returns enhancements returns attachments for embedded images strips attributes from the figure strips attributes from the figcaption removes the anchor but preserves the img and figcaption preserves lone br removes trailing br replaces double br with p handles inline elements correctly handles inline elements correctly handles inline elements correctly handles inline elements correctly handles block elements correctly handles block elements correctly handles block elements correctly handles block elements correctly handles block elements correctly handles block elements correctly handles block elements correctly handles block elements correctly handles block elements correctly handles block elements correctly handles Trix figure elements correctly preserves adjacent elements preserves text trims empty p hashtags replaces hashtags with markup preserves adjacent text skips hashtags inside links skips hashtags inside pre blocks skips hashtags inside code blocks returns hashtags mentions replaces matched mentions with links preserves adjacent text skips mentions inside links skips mentions inside pre blocks skips mentions inside code blocks returns mentions given a mention that doesn't match any actor replaces unmatched mentions with spans doesn't return mentions handles both hashtags and mentions Ktistec::Network .resolve returns the IRI resolves and returns the IRI resolves and returns the IRI Ktistec::Node #clone clones the node Ktistec::PrefixOperator #nud returns a prefix operator consumes the expression to the right raises an error if there is no expression to the right Ktistec::InfixOperator #led returns an infix operator consumes the expression to the right raises an error if there is no expression to the right Ktistec::RuleDefinition::Pattern #parse allows keywords as arguments allows expressions as arguments allows keywords in option keys allows expressions in option values raises on error if option key is invalid raises an error if definition includes multiple constants raises an error if definition does not include a constant given a pattern returns a pattern parses the constant parses the arguments parses the options positions the parser on the next token Ktistec::RuleDefinition #std returns a rule parses the name parses the trace keyword parses the patterns raises an error if name is not a literal string raises an error if end is missing #clone deep copies patterns Ktistec::Parser #current returns a node is a constant is an identifier is an operator is a rule definition is a keyword raises an error when string is unterminated raises an error when operator is invalid #advance raises an error if specified id does not match the current node's id #expression is end of input given a prefix operator parses the expression positions the parser on the next token positions the parser on the next token positions the parser on the next token raises an error if there is no expression to the right raises an error if there is no expression to the right given an infix operator parses the expression positions the parser on the next token positions the parser on the next token positions the parser on the next token raises an error if there is no expression to the right raises an error if there is no expression to the right raises an error if there is no expression to the left given a function operator parses the expression positions the parser on the next token positions the parser on the next token positions the parser on the next token raises an error if there is no closing parenthesis raises an error if there is no closing parenthesis raises an error if there is no expression to the left raises an error if the expression to the left is not an identifier #statement is end of input given a rule definition parses the statement positions the parser on the next token raises an error if end is missing #statements returns no statements returns two rules Ktistec::Database .recreate_timeline_and_notifications given notifications leaves entries that belong removes entries that don't belong adds entries that are missing given a timeline leaves entries that belong removes entries that don't belong adds entries that are missing Ktistec::Lexer #advance returns a token is end of input is a literal string is a literal string is an error if the string is unterminated is a literal int is a literal float is a literal int is a literal float is a literal int is a literal float is a constant is an identifier is an operator is an operator is an operator ignores whitespace ignores comments handles successive tokens handles successive tokens ignores whitespace ignores comments Ktistec::Compiler #compile returns a domain compiles rule definitions given a rule the compiled domain defines one rule with rule has the specified name defines conditions with conditions is a literal is a variable handles not handles not with accessor invokes accessor raises an error if receiver doesn't respond to accessor raises an error if receiver is unbound is a literal is a variable handles not handles not with accessor invokes accessor raises an error if receiver doesn't respond to accessor raises an error if receiver is unbound defines actions with actions invokes assert method invokes retract method given a rule with 'within' supports the predicate 'within' given a rule with 'strip' supports the function 'strip' given a rule with 'filter' supports the function 'filter' given a rule definition with trace specified enables tracing given a rule definition using any defines conditions is Any given a rule definition using none defines conditions is None given a rule definition using a fact defines conditions is a nullary pattern given a fact and a rule definition asserting a fact defines actions asserts a fact and a rule definition retracting a fact defines actions retracts a fact given a rule definition using a property fact defines conditions is a unary pattern given a fact and a rule definition asserting a property fact defines actions asserts a fact and a rule definition retracting a property fact defines actions retracts a fact given a rule definition using a relationship fact defines conditions is a binary pattern given a fact and a rule definition asserting a relationship fact defines actions asserts a fact and a rule definition retracting a relationship fact defines actions retracts a fact raises an error if constant is undefined raises an error if there are too many arguments raises an error if accessor is undefined SessionsController GET /sessions responds with HTML responds with JSON POST /sessions redirects if params are missing redirects if params are missing rerenders if params are incorrect rerenders if params are incorrect sets cookie and redirects  returns token given a redirect path in the session redirects to the path returns the path DELETE /sessions fails to authenticate fails to authenticate destroys session and redirects destroys session and redirects UploadsController POST /uploads returns 401 if not authorized when authorized is successful returns the resource URL in the location header returns the resource path in the response stores the file if file is not present returns 400 DELETE /uploads/:p1/:p2/:p3/:id returns 401 if not authorized when authorized is successful deletes the file returns 400 if the path contains invalid characters returns 403 if the upload does not belong to the user returns 404 if the upload does not exist DELETE /uploads returns 401 if not authorized when authorized is successful deletes the file returns 400 if the path contains invalid characters returns 403 if the upload does not belong to the user returns 404 if the upload does not exist MentionsController GET /mentions returns 401 returns 401 when authenticated succeeds succeeds renders the collection renders the collection renders the collection renders the collection returns 404 if no such mention exists POST /mentions/follow returns 401 when authenticated succeeds follows the mention within a turbo-frame succeeds renders an unfollow button given an existing follow succeeds does not change the count of mention relationships within a turbo-frame succeeds renders an unfollow button returns 404 if no mentioned objects exist POST /mentions/unfollow returns 401 when authenticated succeeds within a turbo-frame succeeds renders a follow button given an existing follow succeeds unfollows the mention within a turbo-frame succeeds renders a follow button returns 404 if no mentioned objects exist SuggestionsController /tags returns 401 if not authorized when authorized hashtag returns the best match mention returns the best match returns 400 if no prefix is specified FiltersController GET /filters returns 401 if not authorized returns 401 if not authorized when authorized succeeds succeeds renders the collection renders the collection POST /filters returns 401 if not authorized returns 401 if not authorized when authorized succeeds succeeds adds a new content filter term adds a new content filter term returns 422 if term is blank returns 422 if term is blank renders an error message if term is blank returns an error message if term is blank given existing terms returns 422 if term already exists returns 422 if term already exists renders an error message if term already exists renders an error message if term already exists DELETE /filters/:id returns 401 if not authorized returns 401 if not authorized when authorized returns 404 if term does not exist returns 404 if term does not exist given existing terms returns 403 if term does not belong to the actor returns 403 if term does not belong to the actor redirects if successful redirects if successful destroys the term destroys the term SettingsController GET /settings returns 401 if not authorized when authorized and accepting HTML succeeds renders a form renders a form and accepting JSON succeeds renders an object POST /settings/actor returns 401 if not authorized when authorized and posting form data succeeds updates the name updates the summary updates the timezone given an account with a timezone does not updates the timezone if blank updates the password does not update the password if blank does not update the password if empty updates the image updates the icon given an actor with an image and an icon removes the image removes the icon updates the attachments and posting JSON data succeeds updates the name updates the summary updates the timezone given an account with a timezone does not updates the timezone if blank updates the password does not update the password if blank does not update the password if null updates the image updates the icon given an actor with an image and an icon removes the image removes the icon updates the attachments POST /settings/service returns 401 if not authorized when authorized and posting form data succeeds changes the footer changes the site does not change the site and posting JSON data succeeds changes the footer changes the site does not change the site POST /settings/terminate returns 401 if not authorized when authorized schedules a terminate task destroys the account ends the session redirects TasksController GET /tasks returns 401 if not authorized when authorized succeeds does not render any tasks does not render any tasks given a task renders a row renders an object renders the task class renders the task class renders the task status renders the task status given a task that fetches content renders the path to the subject page renders the path to the subject page renders the task status renders the task status renders the subject renders the subject with a subject renders the subject renders the subject that is complete does not render the task does not render the task does not render any empty cells RelationshipsController POST /actors/:username/outbox returns 401 if not authorized when authorized returns 404 if not found returns 403 if not the current account returns 400 if activity type is not supported on announce returns 400 if the object iri is missing returns 400 if object does not exist redirects when successful creates an announce activity does not create a visible activity if not public creates a visible activity if public addresses (to) the public collection addresses (to) the object's actor addresses (cc) the actor's followers collection puts the activity in the actor's outbox sends the activity to the other's inbox puts the object in the actor's timeline and the object's already in the timeline does not put the object in the actor's timeline and the object is a reply puts the object in the actor's timeline on like returns 400 if the object iri is missing returns 400 if object does not exist redirects when successful creates a like activity does not create a visible activity if not public creates a visible activity if public addresses (to) the public collection addresses (to) the object's actor addresses (cc) the actor's followers collection puts the activity in the actor's outbox sends the activity to the other's inbox does not put the object in the actor's timeline on publish returns 400 if the content is missing when validation fails returns 422 renders a form with the object redirects when successful redirects to the object view redirects to the threaded view creates a create activity creates a note object given a canonical path sets the canonical path when a draft object is specified creates a create activity does not create an object does not change the iri changes the published timestamp returns 400 if object does not exist returns 403 if attributed to another account when a published object is specified creates an update activity does not create an object does not change the iri does not change the published timestamp changes the content changes the object replied to returns 400 if object does not exist returns 403 if attributed to another account does not create a visible activity if not public creates a visible activity if public does not create a visible object if not public creates a visible object if public includes the IRI of the replied to object sets the IRI of the replies collection returns 400 if the replied to object does not exist addresses (to) the specified actor addresses (to) all mentioned actors addresses (to) the specified actor and all mentioned actors addresses (cc) the specified actor addresses (to) the public collection addresses (cc) the actor's followers collection addresses (to) the replied to object's attributed to actor enhances the content enhances the content puts the activity in the actor's outbox sends the activity to the other's inbox puts the object in the actor's timeline and the object's already in the timeline does not put the object in the actor's timeline and the object is a reply does not put the object in the actor's timeline on follow returns 400 if object does not exist redirects when successful creates an unconfirmed follow relationship creates a follow activity puts the activity in the actor's outbox sends the activity to the object's outbox does not put the object in the actor's timeline on accept returns 400 if a follow activity does not exist returns 400 if the follow activity does not belong to the actor returns 400 if the relationship does not exist confirms the follow relationship creates an accept activity puts the activity in the actor's outbox sends the activity to the other's inbox on reject returns 400 if a follow activity does not exist returns 400 if the follow activity does not belong to the actor returns 400 if the relationship does not exist confirms the follow relationship creates a reject activity puts the activity in the actor's outbox sends the activity to the other's inbox when undoing an announce returns 400 if the announce activity does not exist returns 400 if the announce activity does not belong to the actor addresses (cc) the actor's followers collection undoes the announce puts the activity in the actor's outbox sends the activity to the other's inbox when undoing a like returns 400 if the like activity does not exist returns 400 if the like activity does not belong to the actor addresses (cc) the actor's followers collection undoes the like puts the activity in the actor's outbox sends the activity to the other's inbox when undoing a follow returns 400 if the follow activity does not exist returns 400 if the follow activity does not belong to the actor returns 400 if the relationship does not exist destroys the relationship undoes the follow puts the activity in the actor's outbox sends the activity to the other's inbox on delete given an object returns 400 if the object does not exist returns 400 if the object is not local returns 400 if the object was not attributed to the actor redirects when successful redirects to the actor's home page redirects back deletes the object puts the activity in the actor's outbox sends the activity to the other's inbox given an actor returns 400 if the actor does not exist returns 400 if the actor is not local returns 400 if the actor is not the actor deletes the actor puts the activity in the actor's outbox sends the activity to the other's inbox given a remote object sends the activity to the object's inbox given a local object sends the activity to the object's inbox ObjectsController POST /objects returns 401 if not authorized when authorized succeeds succeeds creates an object creates an object when validation fails returns 422 if validation fails returns 422 if validation fails renders a form with the object renders the object GET /objects/:id succeeds succeeds renders the object renders the object returns 404 if object is a draft returns 404 if object is not visible returns 404 if object is remote returns 404 if object does not exist when authorized redirects if draft but not the author returns 404 and it's in the user's inbox succeeds if local succeeds if local returns 404 if object is remote GET /objects/:id/replies succeeds renders an empty collection with a reply renders the collection returns 404 if object is a draft returns 404 if object is not visible returns 404 if object is remote returns 404 if object does not exist GET /objects/:id/thread succeeds succeeds renders the collection renders the collection returns 404 if object is a draft returns 404 if object is not visible returns 404 if object is remote returns 404 if object does not exist when authorized redirects if draft but not the author returns 404 and it's in the user's inbox succeeds if local succeeds if local returns 404 if object is remote with replies renders the collection renders the collection that are approved renders the collection renders the collection GET /objects/:id/edit returns 401 if not authorized when authorized given a draft post succeeds succeeds renders a form with the object renders a button that submits to the outbox path renders a button that submits to the object update path renders an input with the draft content renders the content with a canonical path renders an input with the canonical path renders the canonical path as URL given a published post succeeds succeeds renders a form with the object renders a button that submits to the outbox path does not render a button that submits to the object update path renders an input with the content renders the content with a canonical path renders an input with the canonical path renders the canonical path as URL returns 404 if not attributed to actor returns 404 if object does not exist POST /objects/:id returns 401 if not authorized when authorized succeeds succeeds changes the content changes the content updates the canonical path updates the canonical path when validation fails returns 422 if validation fails returns 422 if validation fails renders a form with the object renders the object returns 404 if not a draft returns 404 if object does not exist DELETE /objects/:id returns 401 if not authorized when authorized succeeds succeeds deletes the object deletes the object returns 404 if not a draft returns 404 if object does not exist GET /remote/objects/:id returns 401 if not authorized when authorized succeeds succeeds renders the object renders the object returns 404 if object is a draft returns 404 if object is not visible returns 404 if object is remote if remote object is visible succeeds returns 404 if object does not exist and it's in the user's inbox succeeds succeeds GET /remote/objects/:id/thread returns 401 when authorized succeeds succeeds renders the collection renders the collection returns 404 if object is a draft returns 404 if object is not visible returns 404 if object is remote if remote object is visible succeeds returns 404 if object does not exist and it's in the user's inbox succeeds succeeds with replies renders the collection renders the collection GET /remote/objects/:id/reply returns 401 when authorized succeeds renders the object renders the form prepopulates editor with mentions returns 404 if object is a draft returns 404 if object is not visible returns 404 if object is remote if remote object is visible succeeds returns 404 if object does not exist POST /remote/objects/:id/approve returns 401 when authorized succeeds approves the object but it's already approved returns 400 returns 404 if object does not exist POST /remote/objects/:id/unapprove returns 401 when authorized succeeds unapproves the object but it's already unapproved returns 400 returns 404 if object does not exist POST /remote/objects/:id/block returns 401 when authorized succeeds blocks the object returns 404 if object does not exist POST /remote/objects/:id/unblock returns 401 when authorized succeeds unblocks the object returns 404 if object does not exist POST /remote/objects/:id/follow returns 401 when authorized succeeds follows the thread begins fetching the thread within a turbo-frame succeeds renders an unfollow button given a reply succeeds follows the thread begins fetching the thread within a turbo-frame succeeds renders an unfollow button given an existing follow and fetch succeeds does not change the count of follow relationships does not change the count of fetch tasks where the fetch is complete but has failed clears the backtrace within a turbo-frame succeeds renders an unfollow button returns 404 if object is draft returns 404 if object does not exist POST /remote/objects/:id/unfollow returns 401 when authorized succeeds within a turbo-frame succeeds renders a follow button given a follow and fetch succeeds unfollows the thread stops fetching the thread within a turbo-frame succeeds renders a follow button given a reply succeeds unfollows the root object of the thread stops fetching the root object of the thread within a turbo-frame succeeds renders a follow button returns 404 if object is draft returns 404 if object does not exist SystemController GET /system returns 401 if not authorized when authorized succeeds given a source of logs renders an input renders an object and a log level renders the log level renders the log level POST /system returns 401 if not authorized when authorized redirects given a source of logs sets the log level sets the log level and a log level resets the log level resets the log level TagsController GET /tags/:hashtag succeeds succeeds renders the collection renders the collection renders the collection renders the collection if authenticated renders the collection renders the collection returns 404 if no tagged objects exist POST /tags/:hashtag/follow returns 401 when authenticated succeeds follows the tag begins fetching the tag within a turbo-frame succeeds renders an unfollow button given an existing follow and fetch succeeds does not change the count of follow relationships does not change the count of fetch tasks where the fetch is complete but has failed clears the backtrace within a turbo-frame succeeds renders an unfollow button returns 404 if no tagged objects exist POST /tags/:hashtag/unfollow returns 401 when authenticated succeeds within a turbo-frame succeeds renders a follow button given a follow and a fetch succeeds unfollows the tag stops fetching the hashtag within a turbo-frame succeeds renders a follow button returns 404 if no tagged objects exist ActivitiesController GET /activities/:id renders the activity returns 404 if activity is not visible returns 404 if activity is remote returns 404 if activity does not exist when the user is the owner renders the activity returns 404 if activity is remote GET /remote/activities/:id returns 401 if not authorized when authorized renders the activity returns 404 if activity is not visible returns 404 if activity is remote returns 404 if activity does not exist and it is addressed to the public collection renders the activity renders the activity and the user is the owner renders the activity renders the activity MetricsController::Chart .labels returns the labels at daily granularity returns the labels at weekly granularity returns the labels at monthly granularity returns the labels at yearly granularity returns an empty collection #data returns the summated data at daily granularity returns the summated data at weekly granularity returns the summated data at monthly granularity returns the summated data at yearly granularity returns the averaged data at daily granularity returns the averaged data at weekly granularity returns the averaged data at monthly granularity returns the averaged data at yearly granularity returns an empty collection MetricsController /metrics returns 401 if not authorized returns 401 if not authorized when authorized succeeds succeeds renders metrics chart renders metrics labels renders metrics datasets renders metrics data EverythingController /everything returns 401 if not authorized returns 401 if not authorized when authorized succeeds succeeds renders the collection renders the collection RelationshipsController POST /actors/:username/inbox returns 404 if account not found returns 400 if activity is blank returns 400 if activity can't be verified returns 409 if activity was already received and processed does not return 409 if the activity is accept does not return 409 if the activity is reject returns 403 if the activity claims to be local returns 403 if the activity's actor claims to be local returns 400 if the activity cannot be deserialized due to an unsupported type returns 400 if activity is not supported returns 400 if actor is not present does not save the activity on failure when unsigned retrieves the activity from the origin does not retrieve the actor from the origin saves the activity is successful and the actor is not cached retrieves the actor from the origin saves the actor saves the actor's public key is successful and the actor is embedded in the activity retrieves the actor from the origin saves the actor saves the actor's public key is successful and the actor is referenced by the activity retrieves the actor from the origin saves the actor saves the actor's public key is successful when signed does not retrieve the activity from the origin does not retrieve the actor from the origin saves the activity is successful and the actor is not cached retrieves the actor from the origin saves the actor saves the actor's public key is successful and the actor is embedded in the activity retrieves the remote actor from the origin saves the actor saves the actor's public key is successful and the actor is referenced by the activity retrieves the remote actor from the origin saves the actor saves the actor's public key is successful and the actor is cached but doesn't have a public key retrieves the actor from the origin updates the actor's public key is successful but the public key is wrong retrieves the activity from the origin does not retrieve the actor from the origin returns 400 if the activity can't be verified when the other actor is down marks the actor as up on announce returns 400 if no object is included fetches object if remote doesn't fetch the object if embedded fetches the attributed to actor saves the object puts the activity in the actor's inbox puts the activity in the actor's notifications puts the object in the actor's timeline and the object's already in the timeline does not put the object in the actor's timeline and the object's a reply puts the object in the actor's timeline and the activity is addressed to the other's followers does not put the activity in the actor's inbox and the actor follows other puts the activity in the actor's inbox and the activity is addressed to the public collection does not put the activity in the actor's inbox and the actor follows other puts the activity in the actor's inbox is successful on like returns 400 if no object is included fetches object if remote doesn't fetch the object if embedded fetches the attributed to actor saves the object puts the activity in the actor's inbox puts the activity in the actor's notifications does not put the object in the actor's timeline on create returns 400 if no object is included returns 400 if object is not attributed to activity's actor fetches object if remote doesn't fetch the object if embedded saves the object puts the activity in the actor's inbox does not put the activity in the actor's notifications puts the object in the actor's timeline and the object's already in the timeline does not put the object in the actor's timeline and the object's a reply does not put the object in the actor's timeline and object mentions the actor puts the activity in the actor's notifications and the activity is addressed to the other's followers does not put the activity in the actor's inbox and the actor follows other puts the activity in the actor's inbox and the activity is addressed to the public collection does not put the activity in the actor's inbox and the actor follows other puts the activity in the actor's inbox is successful on update returns 400 if no object is included returns 400 if object is not attributed to activity's actor fetches object if remote doesn't fetch the object if embedded updates the object puts the activity in the actor's inbox is successful signature is not valid but the remote object can be fetched checks for the existence of the object updates the saved object succeeds on follow returns 400 if actor is missing returns 400 if object is missing when object is this account creates an unconfirmed follow relationship puts the activity in the actor's inbox puts the activity in the actor's notifications does not put the object in the actor's timeline and activity isn't addressed puts the activity in the actor's inbox when object is not this account does not create a follow relationship puts the activity in the actor's inbox does not put the activity in the actor's notifications does not put the object in the actor's timeline and activity isn't addressed puts the activity in the actor's inbox on accept returns 400 if relationship does not exist returns 400 if related activity does not exist returns 400 if it's not accepting the actor's follow accepts the relationship accepts the relationship even if previously received on reject returns 400 if relationship does not exist returns 400 if related activity does not exist returns 400 if it's not rejecting the actor's follow rejects the relationship rejects the relationship even if previously received when undoing an announce returns 400 if related activity does not exist returns 400 if the announce and undo aren't from the same actor puts the activity in the actor's inbox marks the announce as undone succeeds a like returns 400 if related activity does not exist returns 400 if the like and undo aren't from the same actor puts the activity in the actor's inbox marks the like as undone succeeds a follow returns 400 if relationship does not exist returns 400 if related activity does not exist returns 400 if the follow to undo isn't for this actor returns 400 if the follow and undo aren't from the same actor puts the activity in the actor's inbox destroys the relationship marks the follow as undone succeeds when deleting an object returns 400 if the object does not exist returns 400 if the object isn't from the activity's actor marks the object as deleted succeeds using a tombstone marks the object as deleted succeeds signature is not valid but the remote object no longer exists checks for the existence of the object marks the object as deleted succeeds an actor returns 400 if the actor does not exist returns 400 if the actor isn't the activity's actor marks the actor as deleted succeeds signature is not valid but the remote actor no longer exists checks for the existence of the actor marks the actor as deleted succeeds SearchesController GET /search returns 401 if not authorized returns 401 if not authorized when authorized presents a search form presents a search form given a handle to an actor retrieves and saves an actor retrieves and saves an actor works with a leading @ if present works with a leading @ if present ignores surrounding whitespace if present ignores surrounding whitespace if present that already exists updates the actor updates the actor presents a follow button with an existing follow presents an unfollow button with a public key doesn't nuke the public key that is local doesn't fetch the actor that is down marks the actor as up given a URL to an actor retrieves and saves an actor retrieves and saves an actor that already exists updates the actor updates the actor presents a follow button with an existing follow presents an unfollow button with a public key doesn't nuke the public key that is local doesn't fetch the actor that is down marks the actor as up given a URL to an object retrieves and saves an object retrieves and saves an object of an existing object updates the object updates the object presents a like button with an existing like presents an undo button of a local object doesn't fetch the object given a non-existent host returns 400 returns 400 given bad JSON returns 400 returns 400 ActorsController GET /actors/:username returns 404 if not found returns 404 if not found returns 200 if found returns 200 if found responds with HTML responds with JSON when authorized with no filters it renders all posts filters out shares from posts given a reply with no filters it renders all posts filters out replies from posts GET /actors/:username/public-posts returns 404 if not found returns 404 if not found succeeds succeeds when author is local given a create renders the object's create aspect given an announce renders the object's announce aspect given a create and an announce renders the object's create aspect when author is remote given a create and an announce renders the object's announce aspect renders the collection renders the collection GET /actors/:username/posts returns 401 if not authorized returns 401 if not authorized when authorized returns 404 if not found returns 404 if not found returns 403 if different account returns 403 if different account succeeds succeeds when author is local given a create renders the object's create aspect given an announce renders the object's announce aspect given a create and an announce renders the object's create aspect when author is remote given a create and an announce renders the object's announce aspect renders the collection renders the collection GET /actors/:username/timeline returns 401 if not authorized returns 401 if not authorized when authorized returns 404 if not found returns 404 if not found returns 403 if different account returns 403 if different account succeeds succeeds updates the last checked timestamp updates the last checked timestamp when author is the actor given a create renders the object's create aspect given an announce renders the object's announce aspect when author is not the actor given a create renders the object's create aspect given an announce renders the object's announce aspect given both a create and an announce outside of actor's mailbox renders the object without aspect given a create, and an announce outside of actor's mailbox renders the object's create aspect given an announce, and a create outside of actor's mailbox renders the object's announce aspect given a like renders the object without aspect and a create renders the object's create aspect and an announce renders the object's announce aspect renders an empty collection renders an empty collection GET /actors/:username/notifications returns 401 if not authorized returns 401 if not authorized when authorized returns 404 if not found returns 404 if not found returns 403 if different account returns 403 if different account succeeds succeeds updates the last checked timestamp updates the last checked timestamp renders an empty collection renders an empty collection GET /actors/:username/drafts returns 401 if not authorized returns 401 if not authorized when authorized returns 404 if not found returns 404 if not found returns 403 if different account returns 403 if different account succeeds succeeds renders the collection renders the collection GET /remote/actors/:id returns 401 if not authorized returns 401 if not authorized when authorized returns 404 if not found returns 404 if not found renders the actor renders the actor POST /remote/actors/:id/block returns 401 if not authorized when authorized returns 404 if not found succeeds blocks the actor POST /remote/actors/:id/unblock returns 401 if not authorized when authorized returns 404 if not found succeeds unblocks the actor POST /remote/actors/:id/refresh returns 401 if not authorized when authorized returns 404 if not found schedules the refresh task WellKnownController webfinger returns 400 if bad request returns 400 if bad request returns 400 if bad host returns 404 if not found returns 200 if found returns 200 if 'acct' URI scheme is missing returns 200 if 'https' URI scheme is used returns 200 if 'https' URI scheme is used returns the handle in the subject returns the handle in the subject if 'acct' URI scheme is missing returns the handle in the subject if 'https' URI scheme is used returns the handle in the subject if 'https' URI scheme is used returns aliases returns reference to the actor document returns reference to the profile page returns reference to the template returns 400 if bad host returns 200 if found returns 200 if 'https' URI scheme is used returns the domain in the subject returns the domain in the subject if 'https' URI scheme is used returns aliases returns reference to the template nodeinfo returns 200 returns reference to the nodeinfo document returns the version returns software returns protocols returns services returns open registrations returns usage returns metadata RelationshipsController GET /actors/:username/:relationship returns 404 if actor does not exist returns 404 if actor does not exist returns 401 if relationship type is not supported returns 401 if relationship type is not supported when relationship is following when unauthorized renders only the related public actors renders only the related public actors when authorized renders all the related actors renders all the related actors renders only the related public actors renders only the related public actors when relationship is followers when unauthorized renders only the related public actors renders only the related public actors when authorized renders all the related actors renders all the related actors renders only the related public actors renders only the related public actors when relationship is likes when unauthorized returns 401 returns 401 when authorized renders all the related objects renders all the related objects when relationship is shares when unauthorized returns 401 returns 401 when authorized renders all the related objects renders all the related objects InteractionsController GET /objects/:id/remote-foobar returns 404 GET /objects/:id/remote-reply returns 404 if not found succeeds succeeds renders a form returns a template includes the target includes the target includes the action includes the action renders the message GET /objects/:id/remote-like renders the message GET /objects/:id/remote-share renders the message GET /actors/:username/remote-follow returns 404 if not found succeeds succeeds renders a form returns a template includes the target includes the target includes the action includes the action renders the message POST /remote-interaction returns 400 if target is missing returns 400 if target is missing returns 400 if action is missing returns 400 if action is missing renders an error if domain is missing returns an error if domain is missing renders an error if domain is blank returns an error if domain is blank retains the domain if domain doesn't exist retains the domain if domain doesn't exist redirects if succesful succeeds returns the remote location if successful returns the remote location if successful given a handle instead of a domain redirects if succesful succeeds returns the remote location if successful returns the remote location if successful GET /authorize-interaction returns 401 if not authorized when authorized returns 400 if the uri is missing returns 400 if the uri can't be dereferenced given a remote actor succeeds succeeds renders the remote actor returns the actor given a remote object succeeds succeeds renders the remote object returns the object HomeController on step 1 (set host and site names) GET / renders a form returns a template POST / rerenders if host is invalid rerenders if site is invalid rerenders if host is invalid rerenders if site is invalid sets host and redirects sets site and redirects sets host and redirects sets site and redirects on step 2 (create account) GET / renders a form returns a template POST / redirects if params are missing redirects if params are missing rerenders if params are invalid rerenders if params are invalid redirects and sets cookie creates account creates actor associates account and actor returns token creates account creates actor associates account and actor when requesting the home page if unauthenticated GET / renders a list of local actors renders a list of local actors when author is local given a create renders the object's create aspect given an announce renders the object's announce aspect given a create and an announce renders the object's create aspect when author is remote given a create and an announce renders the object's announce aspect if authenticated GET / redirects to the user's page redirects to the user's page POST / returns 404 returns 404 Ktistec::Open .open fetches the page follows redirects to page follows redirects to page fails on errors fails on errors fails on errors fails on errors fails on errors fails on errors fails on errors fails on errors fails on errors fails on errors fails on errors .open? returns nil on errors Ktistec::JSON_LD ::CONTEXTS loads stored contexts .expand returns a JSON document returns a JSON document returns a JSON document raises an error given JSON document with vocabulary #[] returns terms given JSON-LD document with embedded context #[] returns mapped terms given JSON-LD document with remote context #[] returns mapped terms given JSON-LD document with mixed context #[] returns mapped terms given JSON-LD document using compact IRIs #[] returns mapped terms returns mapped terms returns mapped terms given JSON-LD document with mapped keys #[] returns mapped terms given JSON-LD document with nested objects #[] returns mapped terms given JSON-LD document with natural language values #[] returns merged values given JSON-LD document with no natural language values #[] returns value as a map given JSON-LD document with uncached context #[] gently ignores the context given a context term without an id #[] ignores the invalid term given no context #[] assumes an activitystreams context applies given a URL to a locally hosted litepub schema #[] assumes a canonical litepub context applies Ktistec::Controller get /foo/bar/accepts responds with html responds with text responds with json responds with json responds with json post /foo/bar/turbo-frame responds with turbo-frame does not respond with turbo-frame get /foo/bar/created redirects with 302 redirects with 201 get /foo/bar/redirect redirects with 301 sets the location header includes the body /foo/bar/ok responds with json responds with text responds with html responds with json by default prefers json sets the content type sets the content type sets the content type Ktistec::Auth get /foo/bar/auth anonymous session fails to authenticate fails to authenticate stores the path in the session authenticated session successfully authenticates successfully authenticates doesn't store the path in the session get /foo/bar/skip anonymous session doesn't authenticate but doesn't fail doesn't authenticate but doesn't fail doesn't store the path in the session authenticated session successfully authenticates successfully authenticates doesn't store the path in the session Ktistec::Database .all_migrations returns migrations .all_versions returns versions .all_applied_versions does not include test migration .all_pending_versions includes test migration .do_operation creates and destroys the migration applies and reverts the migration Ktistec::Database::Migration .columns returns the table's columns .indexes returns the table's indexes .add_column adds the column adds the index .remove_column removes the column removes the index retains the data Ktistec::Method post /foo/bar/delete invokes the delete action invokes the post action Ktistec::Model .table_name returns the table name returns the table name #table_name returns the table name returns the table name .values raises an error if column doesn't exist .conditions raises an error if column doesn't exist .all_subtypes returns type and all subtypes returns type and all subtypes .query_and_paginate includes the additional columns .query_all includes the additional columns .query_one includes the additional columns .new creates a new instance bulk assigns properties bulk assigns properties supports assignment of nil assigns belongs_to associations assigns belongs_to associations raises an error if property type is wrong raises an error if property type is wrong raises an error if a non-nilable property is not assigned raises an error if a non-nilable property is not assigned does not raise an error if the non-nilable property is assigned via an alias does not raise an error if the non-nilable property is assigned via an association raises an error if strict is true and property is not a property raises an error if strict is true and property is not a property #assign bulk assigns properties bulk assigns properties bulk assigns properties supports assignment of nil assigns belongs_to associations assigns has_one associations assigns has_many associations raises an error if property type is wrong raises an error if property type is wrong raises an error if strict is true and property is not a property raises an error if strict is true and property is not a property #== returns true if all properties are equal returns true if all properties are equal #hash returns the hash returns the hash .empty? returns true returns true .count returns the count of persisted instances returns the count of matching instances returns the count of matching instances returns the count of persisted instances returns the count of matching instances returns the count of matching instances .all returns all persisted instances returns all persisted instances .find given the id finds the saved instance finds the updated instance finds the saved instance raises an error given properties finds the saved instance finds the saved instance finds the updated instance finds the updated instance finds the saved instance finds the saved instance raises an error given associations finds the saved instance using the foreign key finds the saved instance using the foreign key finds the saved instance using the association finds the saved instance using the association when instantiating an abstract model raises an error .find? returns nil returns nil returns nil .find_or_new creates a new instance creates a new instance given an existing instance finds the saved instance finds the saved instance .find_or_create creates a new instance creates a new instance given an existing instance finds the saved instance finds the saved instance .where given properties returns the saved instances returns the saved instances returns the saved instances returns the updated instances returns the updated instances returns the updated instances returns the saved instances returns the saved instances returns the saved instances returns an empty collection returns an empty collection returns an empty collection returns an empty collection given associations returns the saved instances using the foreign key returns the saved instances using the foreign key returns the saved instances using the association returns the saved instances using the association .scalar returns the count of saved instances returns the count of saved instances .exec deletes the saved instances deletes the saved instances returns the count of rows affected returns the count of rows affected .sql given a saved instance returns the saved instances returns the saved instances returns an empty collection returns an empty collection #serialize_graph serializes the graph of models skips associated instances #valid? performs the validations performs the validations performs the validations even if unchanged if called directly passes the validations validates the associated instance validates the associated instance does not validate the associated instance does not validate the associated instance if it's unchanged before validate lifecycle callback runs the callback runs the callback even if unchanged if called directly runs the callback on associated instance does not run the callback on associated instance if it's unchanged after validate lifecycle callback runs the callback runs the callback even if unchanged if called directly runs the callback on associated instance does not run the callback on associated instance if it's unchanged #save new instance saves a new instance assigns an id saves a new instance with an assigned id saves a new instance even if unchanged if saved directly raises a validation exception doesn't raise a validation exception saves the properties saves the properties saves the associated instance doesn't save the associated instance doesn't save the associated instance if it's unchanged doesn't save the instance existing instance does not save a new instance does not assign an id does not save a new instance with an assigned id updates the instance even if unchanged if saved directly raises a validation exception doesn't raise a validation exception updates the properties updates the properties saves the associated instance doesn't save the associated instance doesn't save the associated instance if it's unchanged doesn't save the instance before save lifecycle callback runs the callback runs the callback even if unchanged if called directly runs the callback on associated instance does not run the callback on associated instance if it's unchanged after save lifecycle callback runs the callback runs the callback even if unchanged if called directly runs the callback on associated instance does not run the callback on associated instance if it's unchanged #update_property raises an error if model is unsaved given a saved instance updates the property updates the saved property raises an error if property does not exist #destroy destroys the persisted instance before destroy lifecycle callback runs the callback after destroy lifecycle callback runs the callback #reload! reloads the model properties from the database clears the changed status raises an error if not found raises an error if unsaved #new_record? returns true if the record has not been saved returns false if the record has been saved #changed? returns true if the record is new returns true if the record is new even if it was cleared returns false if the record has not been changed returns true if the record has been changed returns false if the record has been cleared after it was changed returns false if the record has been saved returns false if the record has been saved given a saved record returns false if queried returns false if queried returns false if queried returns false if queried returns false if queried returns false if queried returns false if queried with inverse associations does not mark inverse record as changed does not mark inverse record as changed does not mark inverse record as changed does not mark inverse record as changed returns false if the property has not been changed returns true if the property has been changed returns false if the property has been cleared after it was changed returns true if the property has been changed #to_s returns a string representation #inspect returns a string representation #to_json returns the JSON representation #to_h returns the hash representation derived properties sets the aliased property gets the aliased property when queried via the aliased property returns the model associations belongs_to assigns the associated instance assigns the associated instance assigns the associated instance assigns the associated instance finds a deleted instance if explicitly specified finds a deleted instance if explicitly specified finds an undone instance if explicitly specified finds an undone instance if explicitly specified updates the foreign key when saved updates the foreign key when saved has_many assigns the inverse association assigns the inverse association does not destroy unassociated instances on assignment destroys unassociated instances on assignment and save destroys the last associated instance does not save through a destroyed instance does not save through a deleted instance includes a deleted instance if explicitly specified includes an undone instance if explicitly specified has_one assigns the inverse association assigns the inverse association does not destroy unassociated instances on assignment destroys unassociated instances on assignment and save does not save through a destroyed instance does not save through a deleted instance finds a deleted instance if explicitly specified finds a deleted instance if explicitly specified finds an undone instance if explicitly specified finds an undone instance if explicitly specified returns the correct instance returns the correct instance returns nil returns nil Ktistec::Model::Internal .to_sentence converts the type to a string converts the type to a string converts the types to a string converts the types to a string Ktistec::Util .id generates a random identifier .render_as_text ignores empty content removes inline markup replaces block elements with newlines leaves bare text alone leaves escaped content alone .sanitize ignores empty content removes forbidden tags and their content entirely replaces unsupported tags with their content preserves supported tags strips attributes preserves href on links, adds target and rel attributes to remote links preserves href on links, adds data-turbo-frame attribute to local links preserves href on paths, adds data-turbo-frame attribute preserves src and alt on images, adds loading attribute and compatibility classes preserves 'invisible' in class attribute on span elements preserves 'ellipsis' in class attribute on span elements doesn't corrupt element order leaves bare text alone leaves escaped content alone .to_sentence returns an empty string returns the word returns the words in sentence form returns the words in sentence form uses the specified words connector uses the specified last word connector ,distance_of_time_in_words test_pairs span: 00:00:14; words: "less than a minute" transforms the span of time into words span: 00:00:45; words: "1 minute" transforms the span of time into words span: 00:01:15; words: "1 minute" transforms the span of time into words span: 00:01:35; words: "2 minutes" transforms the span of time into words span: 00:14:00; words: "14 minutes" transforms the span of time into words span: 00:45:00; words: "about 1 hour" transforms the span of time into words span: 01:15:00; words: "about 1 hour" transforms the span of time into words span: 01:35:00; words: "about 2 hours" transforms the span of time into words span: 14:00:00; words: "14 hours" transforms the span of time into words span: 1.06:00:00; words: "about 1 day" transforms the span of time into words span: 1.16:00:00; words: "about 2 days" transforms the span of time into words span: 14.00:00:00; words: "14 days" transforms the span of time into words span: 40.00:00:00; words: "about 1 month" transforms the span of time into words span: 50.00:00:00; words: "about 2 months" transforms the span of time into words span: Time::MonthSpan(@value=10); words: "10 months" transforms the span of time into words span: Time::MonthSpan(@value=14); words: "about 1 year" transforms the span of time into words span: Time::MonthSpan(@value=18); words: "over 1 year" transforms the span of time into words span: Time::MonthSpan(@value=22); words: "almost 2 years" transforms the span of time into words span: Time::MonthSpan(@value=26); words: "about 2 years" transforms the span of time into words span: Time::MonthSpan(@value=30); words: "over 2 years" transforms the span of time into words span: Time::MonthSpan(@value=34); words: "almost 3 years" transforms the span of time into words .pluralize pluralizes the noun pluralizes the noun pluralizes the noun pluralizes the noun Ktistec::Util::PaginatedArray .more changes the indicator #map returns a paginated array returns a paginated array with the results of applying the supplied block returns an indication of whether there are more results Ktistec::CSRF sends GETs to next handler blocks POSTs without the token allows POSTs with the correct token in FORM submit allows POSTs with the correct token in HTTP header allows POSTs to allowed route allows POSTs to allowed route using wildcards does not allow POSTs to mismatched route using wildcards outputs error string calls an error proc with context Ktistec::JWT .encode encodes the payload .decode decodes the token raises an error if the token is not well-formed raises an error if the token is not encoded correctly raise an error if the signature is not correct .expired? returns true if payload is expired returns false if payload is not expired Ktistec::Rewrite get /@foobar rewrites the request get /%40foobar rewrites the request Ktistec::Rule .make_pattern inherits from School::Pattern given a pattern class #vars returns the vars returns the vars returns the vars returns the vars returns the vars and a database and models #match with no arguments invokes the block once for each match does not bind values with an undefined argument raises an error with a lit target that matches a model invokes the block once does not bind values with a lit target that does not match a model does not invoke the block does not bind values does not invoke the block does not bind values with an unbound var target invokes the block once for each match binds the target to each match with a bound var target that matches a model invokes the block once binds the target to the match with a bound var target that does not match a model does not invoke the block does not bind values does not invoke the block does not bind values with a not target invokes the block once for each match binds the target to each match invokes the block once for each match binds the target to each match with a within target invokes the block once for each match binds the target to each match does not invoke the block does not bind values with a lit association that matches a model invokes the block once does not bind values with a lit association that does not match a model does not invoke the block does not bind values with an unbound var association invokes the block once for each match binds the association to each match with a bound var association that matches a model invokes the block once binds the match with a bound var association that does not match a model does not invoke the block does not bind values with a not association invokes the block once binds the match invokes the block once binds the match with a within association invokes the block once binds the match invokes the block once binds the match with a lit property that matches a model value invokes the block once does not bind values with a lit property that matches a model value through accessor invokes the block once does not bind values with a lit property that does not match a model value does not invoke the block does not bind values does not invoke the block does not bind values with an unbound var property invokes the block once for each match binds the property value to each match with a bound var property that matches a model value invokes the block once binds the match with a bound var property that does not match a model value does not invoke the block does not bind values does not invoke the block does not bind values with a not property invokes the block twice binds the match invokes the block twice binds the match with a within property invokes the block twice binds the match invokes the block twice binds the match with a property and the function 'strip' invokes the block once binds the match invokes the block once binds the match invokes the block once binds the match with a property and the predicate 'filter' invokes the block once binds the match invokes the block once binds the match invokes the block once binds the match with a property, the predicate 'filter', and the function 'strip' invokes the block once binds the match invokes the block once binds the match invokes the block once binds the match with a wildcard invokes the block once binds the match with an escaped wildcard invokes the block once binds the match with an escaped escape invokes the block once binds the match via a derived property invokes the block once binds the match with a target with a cached association invokes the block once binds the association with a target with an uncached association does not invoke the block does not bind values with a target with a non-nil property invokes the block once binds the association with a target with a nil property does not invoke the block does not bind values .assert creates an instance creates an instance .retract destroys an instance destroys an instance Ktistec::Signature .sign returns headers includes a signature includes digest header if the body is supplied does not include digest header if the body is not supplied includes content type header if content type is supplied does not include content type header if content type is not supplied includes content length header if content length is supplied does not include content length header if content length is not supplied includes accept header if accept is supplied does not include accept header if accept is not supplied with hs2019 sets the algorithm signature parameter to 'rsa-sha256' sets the created signature parameter sets the expires signature parameter includes (created) in the headers signature parameter includes (expires) in the headers signature parameter with rsa-sha256 sets the algorithm signature parameter to 'rsa-sha256' includes date in the headers signature parameter .verify raises an error if the signature header is not present raises an error if the signature header is malformed raises an error if the signing keys don't match raises an error if the host header isn't signed raises an error if the host doesn't match raises an error if the port doesn't match given a non-standard port raises an error if the port doesn't match verifies signature raises an error if the (request-target) header isn't signed raises an error if the request target path doesn't match raises an error if the request target method doesn't match with hs2019 raises an error if the (created) header doesn't match raises an error if the (expires) header doesn't match raises an error if date is out of range raises an error if date is out of range verifies signature with rsa-sha256 raises an error if the (created) header is included raises an error if the (expires) header is included raises an error if the date header doesn't match raises an error if date is out of range raises an error if date is out of range verifies signature raises an error if neither the (created) header nor the date header is included raises an error if the digest header isn't signed raises an error if the digest header doesn't match raises an error if the body digest doesn't match raises an error if the content type header doesn't match raises an error if the content length header doesn't match raises an error if the accept header doesn't match SQLite3 extensions given an array deserializes a read serializes a write given JSON deserializes a read serializes a write deserializes a read serializes a write deserializes a read serializes a write strip strips the markup strips the markup strips the markup HTTP::Server::Context creates a new session returns the session token in a header returns the session token in a cookie anonymous session uses an existing session with expired token creates a new session with invalid token creates a new session with new secret key creates a new session authenticated session uses an existing session with expired token creates a new session with invalid token creates a new session with new secret key creates a new session Ktistec::LogLevel #save persists the instance to the database #destroy removes the instance from the database #all_as_hash returns all log levels as a hash Ktistec::Settings initializes instance from the persisted values #save persists assigned values to the database #assign sets the host sets the site sets the footer #valid? expects host to be present expects host to specify a scheme expects host to specify a host name expects host to specify a host name expects host to specify a host name expects host not to specify a fragment expects hosts not to specify a query expects host not to specify a path expects site to be present Ktistec ::VERSION should return the version .settings returns the settings singleton given previous errors clears the errors when getting the settings singleton given initialized settings .host returns the host .site returns the site .footer returns the footer Ktistec::Model::Undoable .new includes Ktistec::Model::Undoable #undo! undoes the instance sets undone_at an undone record isn't counted isn't counted unless explicitly included isn't counted isn't counted unless explicitly included isn't returned isn't returned unless explicitly included can't be found can't be found unless explicitly included can't be found can't be found unless explicitly included can't be found can't be found unless explicitly included can't be found can't be found unless explicitly included an undone instance won't be validated won't be saved Ktistec::Model::Polymorphic .new includes Ktistec::Model::Polymorphic .count returns the count returns the count for subclass .all finds all instances finds all instances of subclass .where finds all matching instances does not find any matching instances of subclass .find finds the matching instance finds the matching instance of subclass returns the correct subclass populates the uninherited properties of subclass populates the uninherited properties of subclass populates the uninherited properties of subclass raises an error raises an error when instantiating an abstract model raises an error raises an error #as_a returns the correct subclass raises an error Ktistec::Model::Common .new includes Ktistec::Model::Common timestamps sets created_at sets updated_at does not change created_at changes updated_at Ktistec::Model::Deletable .new includes Ktistec::Model::Deletable #delete! deletes the instance sets deleted_at a deleted record isn't counted isn't counted unless explicitly included isn't counted isn't counted unless explicitly included isn't returned isn't returned unless explicitly included can't be found can't be found unless explicitly included can't be found can't be found unless explicitly included can't be found can't be found unless explicitly included can't be found can't be found unless explicitly included a deleted instance won't be validated won't be saved notifications partial notifications.html.slang renders an empty page given an announce notification renders a sharing message given another announce notification renders a sharing message given a like notification renders a liking message given another like notification renders a liking message given a mention notification renders a message given a follow hashtag notification renders a message renders the content given a deleted object does not render the content given a blocked object does not render the content given a follow mention notification renders a message renders the content given a deleted object does not render the content given a blocked object does not render the content given a thread follow notification for a reply renders a replied to message given a thread thread notification for the root renders a fetch the root of the thread message notifications.json.ecr renders an empty collection object partials label.html.slang the actor is the author renders one profile icon the actor is not the author renders two profile icons content.html.slang given HTML content renders the content as is given Markdown content renders the content as HTML does not render a button to the threaded conversation does not render a button to the threaded conversation does not render a button to the threaded conversation when authenticated renders a button to the threaded conversation renders a button to the threaded conversation renders a button to the threaded conversation given hashtags with the same name renders one hashtag given mentions with the same name renders one mention given mentions with different names but the same handle renders two mentions given mentions with different names renders two mentions if approved renders a button to the threaded conversation renders a button to the threaded conversation when is draft does not render a button to edit when authenticated does not render a button to reply does not render a button to like does not render a button to share renders a button to delete renders a button to edit does not render a button to block does not render a button to unblock when is remote does not render a button to block does not render a button to unblock when authenticated renders a button to block does not render a button to unblock if object is blocked does not render a button to block renders a button to unblock and object has been announced does not render a button to block and object has been liked does not render a button to block when in reply to a post by the account's actor does not render a checkbox does not render a checkbox when authenticated renders a checkbox renders a checkbox expects the checkbox not to be checked expects the checkbox to be checked if object content is externally hosted renders link to the external content if object content is not externally hosted renders name of the object object_partial renders the activity type as a class when with detail renders the activity type as a class when in a thread renders the activity type as a class thread.html.slang does not render a button to follow the thread given a follow does not render a button to unfollow the thread does not render information about the task given a task does not render information about the task if authenticated renders a button to follow the thread given a follow renders a button to unfollow the thread does not render information about the task given a task renders information about the task partials collection.json.ecr when paginated renders a collection page contains the id of the collection page contains a page of items does not contain navigation links and on the second page contains a link to the previous page and contains more contains a link to the next page when not paginated renders a collection contains the id of the collection does not contain any items contains the first collection page contains the first collection page contains the first collection page of items does not contain navigation links and contains more contains a link to the next page actor-panel.html.slang if anonymous does not render an internal link to the actor does not render buttons and actor is local renders a button to remote follow and actor is down does not render a down warning message if authenticated renders an internal link to the actor and account actor is actor does not render buttons and following actor renders a button to unfollow does not render a button to block renders a button to follow and actor is blocked renders a button to unblock does not render a button to follow renders a blocked message segment does not render a blocked message segment renders a button to block and actor is down renders a down warning message actor-card.html.slang if anonymous does not render an internal link to the actor does not render buttons and actor is local renders a button to remote follow if authenticated renders an internal link to the actor if account actor is actor does not render buttons and on a page of actors the actor is following if already following renders a button to unfollow renders a button to follow having not accepted or rejected a follow if following renders a button to accept renders a button to reject renders a button to block renders a button to accept renders a button to reject renders a button to block having accepted or rejected a follow if following renders a button to unfollow does not render a button to block renders a button to follow renders a button to block if following renders a button to unfollow does not render a button to block renders a button to follow renders a button to block editor.html.slang if authenticated given a new object renders an id does not render an input with the object iri includes an input to save draft does not include a link to return to drafts given a saved object renders an id renders an input with the object iri given a reply renders an input with the replied to object's iri given a draft object includes an input to publish post includes an input to save draft includes a link to return to drafts given a published object includes an input to update post does not include an input to save draft does not include a link to return to drafts an object with errors renders the error class reply.html.slang if authenticated prepopulates editor with mentions FooBarController GET /foo/bar/id_param/:id is not successful for non-numeric parameters is successful for numeric parameters it returns the id of the resource GET /foo/bar/iri_param/:id is not successful for invalid parameters is successful for valid parameters it returns the IRI of the resource helpers paginate does not render pagination controls with more pages renders the next link on the second page renders the prev link .wrap_link wraps the link in an anchor wraps the scheme in an invisible span does not include the host and path in an ellipsis span given a very long link wraps the truncated host and path in an ellipsis span wraps the remainder in an invisible span with length specified wraps the truncated host and path in an ellipsis span wraps the remainder in an invisible span with scheme included does not wrap the scheme in an invisible span includes the scheme with the host and path with tag specified wraps the link in the tag given a string returns the string .wrap_filter_term wraps a filter term in a span wraps a wildcard % in a span wraps a wildcard _ in a span wraps an escaped wildcard % in a span wraps an escaped wildcard _ in a span does not wrap text activity_button emits a form with nested content emits a form with a csrf token emits a form with a hidden input specifying the object emits a form with a hidden input specifying the type emits a form with a hidden input specifying the visibility specifies the action specifies the method specifies the form class specifies the button class without a body emits a form with nested content given data attributes emits form data attributes emits button data attributes given a DELETE method emits a hidden input sets the method to POST given a GET method does not emit a csrf token form_button emits a form with nested content emits a form with a csrf token specifies the action specifies the method specifies the form class specifies the button class without a body emits a form with nested content given data attributes emits form data attributes emits button data attributes given a DELETE method emits a hidden input sets the method to POST given a GET method does not emit a csrf token authenticity_token emits input tag with the authenticity token error_messages emits nested div containing error message form_tag emits a form with nested content emits a form with a csrf token specifies the action specifies the method sets the error class given data attributes emits data attributes given a nil model does not set the error class given a DELETE method emits a hidden input sets the method to POST given a GET method does not emit a csrf token sets the method to GET input_tag emits div containing label and input tags emits a label tag with the label text emits an input tag with the specified name emits an input tag with the associated value specifies the class overrides the default type specifies the placeholder sets the error class given data attributes emits data attributes given a nil model emits an input tag with the specified name does not set the error class given a value with an ampersand and quotes emits an input tag with the associated value select_tag emits div containing label and select tags emits a label tag with the label text emits a select tag with the specified name emits option tags with the specified values emits option tags with the specified text given a field value that matches an option emits an option tag with the option selected given a selected value that matches an option emits an option tag with the option selected specifies the class sets the error class given data attributes emits data attributes given a nil model emits a select tag with the specified name does not set the error class submit_button emits an input of type submit specifies the value specifies the class params_to_inputs emits hidden fields emits hidden field emits hidden field emits hidden field activity_pub_collection generates a JSON-LD document is an ordered collection nests the first page of items the first page of items is an ordered collection page includes an ordered collection of items does not include a link to the next page with more pages includes a link to the next page the second page of items is an ordered collection page includes an ordered collection of items includes a link to the previous page does not include a link to the previous page with more pages includes a link to the next page error_block emits a block of errors field_pair emits a key/value pair task_status_line given a task that is complete returns nil given a task that is running returns the status given a task that hasn't run returns the status given a task that is ready to run returns the status given a task that will run returns the status when detail is true given a task that previously ran returns the status given a task that has failed returns the status fetch_task_status_line given a task that is complete returns nil given a task that is running returns the status and a collection of published objects includes status of most recent post given a task that hasn't run returns the status given a task that is ready to run returns the status given a task that will run returns the status when detail is true given a task that previously ran returns the status given a task with a successful fetch returns the status given a task that has failed returns the status host returns the host sanitize sanitizes HTML pluralize pluralizes the noun does not pluralize the noun pluralizes the noun comma emits a comma does not emit a comma id generates an id back_path gets the back path home_path gets the home path sessions_path gets the sessions path search_path gets the search path settings_path gets the settings path filters_path gets the filters path filter_path given a term gets the filter path gets the filter path system_path gets the system path metrics_path gets the metrics path tasks_path gets the tasks path remote_activity_path given an activity gets the remote activity path gets the remote activity path activity_path given an activity gets the activity path gets the activity path anchor given an object gets the anchor gets the anchor objects_path gets the objects path remote_object_path given an object gets the remote object path gets the remote object path object_path given an object gets the object path gets the object path remote_thread_path given an object gets the remote thread path gets the remote thread path thread_path given an object gets the thread path gets the thread path edit_object_path given an object gets the edit object path gets the edit object path reply_path given an object gets the reply path gets the reply path approve_path given an object gets the approve path gets the approve path unapprove_path given an object gets the unapprove path gets the unapprove path block_object_path given an object gets the block object path gets the block object path unblock_object_path given an object gets the unblock object path gets the unblock object path object_remote_reply_path given an object gets the object remote reply path gets the object remote reply path object_remote_like_path given an object gets the object remote like path gets the object remote like path object_remote_share_path given an object gets the object remote share path gets the object remote share path remote_actor_path given an actor gets the remote actor path gets the remote actor path actor_path given an actor gets the actor path gets the actor path block_actor_path given an actor gets the block actor path gets the block actor path unblock_actor_path given an actor gets the unblock actor path gets the unblock actor path actor_relationships_path given an actor and a relationship gets the actor relationships path gets the actor relationships path outbox_path given an actor gets the outbox path gets the outbox path inbox_path given an actor gets the inbox path gets the inbox path actor_remote_follow_path given an actor gets the actor remote follow path gets the actor remote follow path hashtag_path given a hashtag gets the hashtag path gets the hashtag path mention_path given a mention gets the mention path gets the mentions path remote_interaction_path gets the remote interaction path index.html.slang does not render a button to follow the mention given a follow does not render a button to unfollow the mention if authenticated renders a button to follow the mention given a follow renders a button to unfollow the mention actor actor.html.slang does not render an editor if authenticated does not render an editor if account actor is actor renders an editor actor.json.ecr does not render a shared inbox endpoint if local renders a shared inbox endpoint index.html.slang does not render a button to follow the hashtag given a follow does not render a button to unfollow the hashtag does not render information about the task given a task does not render information about the task if authenticated renders a button to follow the hashtag given a follow renders a button to unfollow the hashtag does not render information about the task given a task renders information about the task LastTime validations rejects blank name rejects duplicates rejects non-existent account accepts nil account_id successfully validates instance Tag #save increments the count #destroy decrements the count .match returns the best match returns no match validations rejects if subject_iri is blank rejects if subject_iri is not an absolute URI successfully validates instance Relationship validations runs validation and rejects runs validation and rejects rejects duplicates successfully validates instance Task::Fetch::Fetcher #find_or_fetch_object given an object fetches the object persists the object fetches the actor persists the actor returns the object returns true that can't be dereferenced fetches the object does not persist the object does not return the object returns false given a prior failure does not fetch the object fetches the actor does not persist the actor does not return the object returns false given a prior failure does not fetch the actor that is already cached does not fetch the object does not persist the object does not fetch the actor does not persist the actor returns the object returns false that is deleted does not return the object returns false returns the object returns false that is blocked does not return the object returns false returns the object returns false from a deleted actor does not return the object returns false returns the object returns true from a blocked actor does not return the object returns false returns the object returns true #calculate_next_attempt_at returns a time in the immediate future does not increment the failure counter returns a time in the near future does not increment the failure counter returns a time in the far future increments the failures counter given a prior failure resets the failure counter resets the failure counter returns a time even further in the future increments the failure counter given six prior failures returns a time the maximum distance in the future increments the failure counter Task::Fetch::Thread validation rejects missing source rejects blank thread successfully validates instance #thread= sets subject_iri #thread gets subject_iri .find_or_new given an existing task for thread finds the existing task finds the existing task finds the existing task finds the existing task #complete! makes the task not runnable #perform sets the next attempt at given a thread with no replies changes time of last attempt does not change time of last success given a thread with one reply does not fetch the replies collection changes time of last attempt changes time of last success fetches the replies collection changes time of last attempt changes time of last success given a thread with a local reply starts with cached objects in the horizon fetches all the uncached objects persists all the uncached objects does not fetch the local object replies collection fetches the remote object replies collection changes time of last attempt does not change time of last success and a later reply adds the later reply to the horizon changes time of last attempt changes time of last success given a thread with many replies starts with cached objects in the horizon fetches the object fetches the collection fetches a reply from the collection persists a reply from the collection does not change the thread value adds a reply to the horizon sets the next attempt in the immediate future fetches the object fetches the collection once fetches all the replies from the collection persists all the replies from the collection does not change the thread value adds all the replies to the horizon sets the next attempt in the near future with all replies already fetched sets the next attempt in the far future and a later reply does not fetch the later reply does not add the later reply to the horizon sets the next attempt in the far future fetches the later reply adds the later reply to the horizon sets the next attempt in the far future with some replies fetched does not fetch the object does not fetch the collection fetches the remaining replies from the collection persists the remaining replies from the collection and the task is asynchronously set as complete does not fetch the object does not fetch the collection does not fetch any replies from the collection sets the next attempt in the immediate future sets the task as complete given a thread with uncached ancestors starts with cached objects in the horizon fetches the nearest uncached object persists the nearest uncached object adds the nearest uncached object to the horizon updates the thread value does not set the root object sets the next attempt in the immediate future fetches all the uncached objects persists all the uncached objects adds all the uncached objects to the horizon updates the thread value sets the root object sets the next attempt in the near future and uncached authors fetches all the uncached authors persists all the uncached authors with a cached ancestor does not fetch the object fetches the other objects that is deleted does not fetch the object still fetches the other objects that is blocked does not fetch the object still fetches the other objects with a cached root adds the root to the horizon with replies fetches the replies with an unfetchable object fetches the object does not fetch following objects fetches preceding objects with all replies fetched sets the next attempt in the far future given a thread with pages of replies organized by first and next fetches the collections fetches the replies from the collections persists the replies adds the replies to the horizon sets the next attempt in the near future organized by last and prev fetches the collections fetches the replies from the collections persists the replies adds the replies to the horizon sets the next attempt in the near future given a thread with Mastodon-style paging starts with cached objects in the horizon fetches the collections fetches the replies from the collections persists the replies from the collections adds the replies from the collections to the horizon does not update the thread value sets the next attempt in the near future with all replies fetched sets the next attempt in the far future .merge_into updates task if thread changes given an existing task for thread merges the tasks destroys the task which is merged from does not destroy the task which is merged to #best_root returns the object when the root it cached returns the root #path_to returns the path to the thread page Task::Fetch::Thread::State #<< returns the state instance appends the node #includes? returns true if nodes includes node returns false if nodes does not include node #prioritize! sorts nodes by difference between last success and last attempt #last_success_at returns the time of the most recent successful fetch when nodes have never succeeded returns nil ActivityPub::Object given a task updates fetch tasks when thread changes given an existing fetch task updates fetch tasks when thread changes Task::Fetch::Hashtag validation rejects missing source rejects blank name successfully validates instance #complete! makes the task not runnable #perform sets the next attempt at given no tagged object has an empty horizon given one tagged object starts with the collection in the horizon fetches the hashtag collection changes time of last attempt does not change time of last success starts with the href of the hashtag in the horizon does not fetch the hashtag collection changes time of last attempt does not change time of last success given many tagged objects fetches the hashtag collection fetches an object from the collection persists an object from the collection changes time of last attempt changes time of last success sets the next attempt in the immediate future fetches the hashtag collection once fetches all the objects from the collection persists all the objects from the collection changes time of last attempt changes time of last success sets the next attempt in the near future with all objects already fetched sets the next attempt in the far future and a later object does not fetch the object sets the next attempt in the far future does not fetch the object sets the next attempt in the far future and later objects adds the new collection to the horizon fetches the new collection fetches the uncached object from the collection persists the uncached object from the collection sets the next attempt in the near future with all objects fetched does not fetch any new objects sets the next attempt in the near future with some objects fetched does not fetch the collection fetches the remaining objects from the collection persists the remaining objects from the collection and uncached authors fetches all the uncached authors persists all the uncached authors and the task is asynchronously set as complete does not fetch the hashtag collection does not fetch any objects from the collection sets the next attempt in the immediate future sets the task as complete given many tagged objects, via the Mastodon API fetches the hashtag collection fetches the API response fetches an object from the API persists an object from the API changes time of last attempt changes time of last success sets the next attempt in the immediate future fetches the hashtag collection fetches the API response fetches all the objects from the API persists all the objects from the API changes time of last attempt changes time of last success sets the next attempt in the near future does not raise an error does not raise an error given tagged objects from more than one origin starts with the initial collection in the horizon changes time of last attempt changes time of last success and the second object fetched adds the second collection to the horizon does not add the collection for the unrelated hashtag to the horizon and the third object fetched adds the third collection to the horizon and a undereferenceable object IRI only tries to fetch it once given tagged objects from more than one origin, via the Mastodon API starts with the initial collection in the horizon changes time of last attempt changes time of last success and the second object fetched adds the second collection to the horizon does not add the collection for the unrelated hashtag to the horizon and the third object fetched adds the third collection to the horizon and a undereferenceable object IRI only tries to fetch it once #path_to returns the path to the hashtag page Task::Fetch::Hashtag::State::Node creation normalizes and downcases the href Task::Fetch::Hashtag::State #<< returns the state instance appends the node #includes? returns true if nodes includes node returns false if nodes does not include node #prioritize! sorts nodes by difference between last success and last attempt #last_success_at returns the time of the most recent successful fetch when nodes have never succeeded returns nil Task::Transfer #transfer dereferences the recipient does not dereference the transferer sends the activity to the local recipient sends the activity to the remote recipient does not send the activity to the transferer given an OpenSSL error doesn't raise an error stores the failure reason does not mark the recipient as down given an IO error doesn't raise an error stores the failure reason does not mark the recipient as down given three errors for the same recipient within the last ten days marks the recipient as down given only two errors for the same recipient does not mark the recipient as down given only two errors within the last ten days does not mark the recipient as down when the recipient is down does not send the activity to the recipient Task::Deliver validation rejects missing sender rejects missing activity successfully validates instance #recipients includes the sender by default addressed to a local recipient includes the recipient addressed to a remote recipient that is cached includes the recipient that is not cached includes the recipient addressed to a local collection does not include the collection of the sender's followers does not include the collection includes the followers when follows are not confirmed does not include the followers when followers have been deleted does not include the recipients addressed to a remote collection does not include the collection addressed to the public collection does not include the collection #perform when the object has been deleted does not fail Task::Terminate validation rejects missing source rejects missing subject rejects remote subject successfully validates instance #perform when an object exists deletes the object when the object is published creates a delete activity for the object schedules a task to deliver the activity reschedules itself when no objects exist deletes the actor creates a delete activity for the actor schedules a task to deliver the activity does not reschedule itself Task::UpdateMetrics #last_id retrieves the last id value from the state #last_id= stores the last id value in the state .schedule_unless_exists schedules a new task given an existing task does not schedule a new task #perform sets the next attempt at given items in the inbox creates points accumulates points for activities on the same day accumulates points in the timezone of the account creates points for activities created since the last run point already exists increments point value sets the last_id Task::Receive validation rejects missing receiver rejects missing activity successfully validates instance #deliver_to retrieves the deliver to value from the state retrieves the deliver to value from the state #deliver_to= stores the deliver to value in the state #recipients does not include the receiver by default addressed to the receiver includes the receiver addressed to a local recipient does not include the recipient addressed to a remote recipient does not include the recipient addressed to a local collection does not include the collection of the receiver's followers given a reply does not include the collection does not include the followers which is addressed to the local collection includes the followers when follows are not confirmed does not include the followers when followers have been deleted does not include the recipients when the original is not attributed to the receiver does not include the followers but it is itself a reply to another post by the receiver includes the followers unless it doesn't address the local colletion does not include the followers addressed to a remote collection does not include the collection does not include the receiver of the senders's followers includes the receiver when collection isn't the followers collection does not include the receiver when follows are not confirmed does not include the receiver addressed to the public collection does not include the collection does not include the receiver the receiver is a follower of the sender includes the receiver #perform when the object has already been deleted does not fail Task::Backup .schedule_unless_exists schedules a new task given an existing task does not schedule a new task #perform_backup sets the next attempt at dumps a backup file Task::RefreshActor validation rejects missing source rejects missing actor rejects local actor when task already exists for that actor rejects task rejects task if existing task is running successfully validates task if existing task is complete successfully validates task if existing task has a backtrace successfully validates task .exists? returns true if existing task is scheduled returns true if existing task is running returns false if existing task is complete returns false if existing task has a backtrace #perform fetches the actor updates the actor documents the error if fetch fails Task::Performance .schedule_unless_exists schedules a new task given an existing task does not schedule a new task #perform sets the next attempt at records three data points Point .charts returns the names of all charts .chart returns the points in the chart returns the points before the ending of the range returns the points after the beginning of the range does not return points not in the chart Relationship::Content::Canonical validation rejects relative from_iri rejects relative to_iri given a route rejects a from_iri that routes rejects a to_iri that does not route given an exiting relationship rejects existing from_iri rejects existing to_iri successfully validates instance Relationship::Content::Timeline creation creates confirmed relationships by default validation rejects missing owner rejects missing object successfully validates instance Relationship::Content::Approved validation rejects missing actor rejects missing object successfully validates instance Relationship::Content::Outbox creation creates confirmed relationships by default validation rejects missing owner rejects missing activity permits duplicates successfully validates instance Relationship::Content::Notification::Follow::Mention validation rejects blank name successfully validates instance Relationship::Content::Notification::Follow::Hashtag validation rejects blank name successfully validates instance Relationship::Content::Inbox creation creates confirmed relationships by default validation rejects missing owner rejects missing activity permits duplicates successfully validates instance Relationship::Content::Notification creation creates confirmed relationships by default validation rejects missing owner successfully validates instance Relationship::Content::Follow::Thread validation rejects missing actor rejects blank thread successfully validates instance #thread= sets to_iri #thread gets to_iri .find_or_new given an existing relationship for thread finds the existing follow finds the existing follow finds the existing follow finds the existing follow .merge_into updates relationship if thread changes given an existing relationship for thread merges the relationships destroys the relationship which is merged from does not destroy the relationship which is merged to ActivityPub::Object given a follow updates follow relationships when thread changes given an existing follow relationship updates follow relationships when thread changes Relationship::Content::Follow::Mention validation rejects missing actor rejects blank name successfully validates instance #name= sets to_iri #name gets to_iri Relationship::Content::Follow::Hashtag validation rejects missing actor rejects blank name successfully validates instance #name= sets to_iri #name gets to_iri Relationship::Social::Follow validation rejects missing actor rejects missing actor successfully validates instance #activity? returns nil given an associated follow activity returns the associated follow activity that has been undone returns nil given multiple associated follow activities returns the most recent follow activity Session #body= sets the body #body gets the body #string stores a string value in the session retrieves a string value from the session #string? retrieves a string value from the session returns nil #delete deletes the entry from the session with an expiry in the future stores the expiration date retrieves a string value from the session retrieves a string value from the session deletes the entry from the session with an expiry in the past stores the expiration date raises an exception returns nil returns nil #account= sets the account #account gets the account #generate_jwt generates a web token .find_by_jwt? returns the session returns nil returns nil .clean_up_stale_sessions removes old, anonymous sessions ActivityPub::Object #source= assigns content assigns media type assigns attachments assigns hashtags creates hashtags assigns mentions creates mentions doesn't assign if the object isn't local addressing (to) replaces mentions when validating returns false if the canonical path is not valid is valid given embedded objects gets the ids caches the replies .from_json_ld instantiates the subclass creates a new instance when addressed to the public collection is visible when hashtag name is null is ignored when hashtag name is blank is ignored when mention name is null is ignored when mention name is blank is ignored when attachment url is null is ignored when attachment url is blank is ignored when attachment media type is null is ignored when attachment media type is blank is ignored #from_json_ld updates an existing instance when addressed to the public collection is visible when hashtag name is null is ignored when hashtag name is blank is ignored when mention name is null is ignored when mention name is blank is ignored when attachment url is null is ignored when attachment url is blank is ignored when attachment media type is null is ignored when attachment media type is blank is ignored #to_json_ld renders an identical instance renders hashtags renders mentions #make_delete_activity instantiates a delete activity for the subject assigns the subject's attributed_to as the actor assigns the subject as the object copies the subject's to copies the subject's cc .federated_posts instantiates the correct subclass filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out non-public posts paginates the results .public_posts instantiates the correct subclass filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out non-public posts filters out replies filters out objects belonging to undone activities paginates the results .public_posts_count instantiates the correct subclass filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out non-public posts filters out replies filters out objects belonging to undone activities returns the count #with_statistics! updates announces count updates likes count doesn't fail when the object hasn't been saved filters out undone announces filters out undone likes #thread sets thread to its iri given a reply and a thread on object sets thread to object's thread and an in_reply_to_iri on object sets thread to object's in_reply_to_iri and an in_reply_to_iri on reply sets thread to its in_reply_to_iri sets thread to object's iri when saving the root in a thread sets reply's thread to object's thread when threaded #with_replies_count! returns the count of replies omits deleted replies and their children omits blocked replies and their children omits destroyed replies and their children omits replies with deleted attributed to actors omits replies with blocked attributed to actors omits replies with destroyed attributed to actors given an actor doesn't count any replies and an approved object omits unapproved replies but includes their approved children doesn't include the actor's unapproved replies #replies returns replies omits deleted replies omits blocked replies omits destroyed replies omits replies with deleted attributed to actors omits replies with blocked attributed to actors omits replies with destroyed attributed to actors omits unapproved replies and an approved object returns approved replies omits deleted replies omits blocked replies omits destroyed replies omits replies with deleted attributed to actors omits replies with blocked attributed to actors omits replies with destroyed attributed to actors #thread returns all replies properly nested omits deleted replies and their children omits blocked replies and their children omits destroyed replies and their children omits replies with deleted attributed to actors omits replies with blocked attributed to actors omits replies with destroyed attributed to actors returns the depths given an approval only includes the subject and an approved object omits unapproved replies but includes their approved children doesn't include the actor's unapproved replies #ancestors returns all ancestors omits deleted replies and their parents omits blocked replies and their parents omits destroyed replies and their parents omits replies with deleted attributed to actors omits replies with blocked attributed to actors omits replies with destroyed attributed to actors returns the depths given an actor only includes the subject and an approved object omits unapproved replies but includes their approved parents doesn't include the actor's unapproved replies #activities returns the associated activities given a like includes only activities of the specified class excludes all activities of the specified class filters out undone activities filters out activities of deleted actors filters out activities of blocked actors #approved_by? returns true if approved by actor returns false if not approved by actor #external? returns true #root? returns true if root returns false if a reply returns false if not root #draft? returns true if draft returns false if not local returns false if published canonical path #canonical_path returns nil by default given an existing canonical relationship returns the canonical path given an existing canonical relationship #save doesn't destroy the canonical path #canonical_path= assigns a new canonical path adds the canonical path to urls given an existing canonical relationship updates the canonical path adds the canonical path to urls removes the canonical path removes the canonical path from urls given existing urls adds the canonical URL to the urls #delete destroys the associated canonical path #destroy destroys the associated canonical path #tags returns tags ActivityPub::Activity when validating is valid given embedded objects caches the actor caches the object caches the target .from_json_ld instantiates the subclass creates a new instance when addressed to the public collection is visible #from_json_ld updates an existing instance when addressed to the public collection is visible #to_json_ld renders an identical instance renders object and target recursively by default renders everything recursively if true renders nothing recursively if false Ktistec::Model::Blockable .new includes Ktistec::Model::Blockable #block! blocks the instance sets blocked_at #unblock! unblocks the instance clears blocked_at Ktistec::Model::Renderable .new includes Ktistec::Model::Renderable #to_html renders HTML as HTML renders Markdown as HTML Ktistec::Model::Linked .new includes Ktistec::Model::Linked validation may be absent must be present must be an absolute URI must be unique is valid the generated accessor does not fetch and does not return the object fetches but does not return the object fetches but does not return the object when linked object is local returns but does not fetch the object returns but does not fetch the object returns but does not fetch the object when linked object is remote does not fetch and does not return the object fetches and returns the object fetches and returns the object when object is cached returns but does not fetch the object returns but does not fetch the object fetches and returns the object when linked object is cached and unchanged returns but does not fetch the object fetches and returns the object when linked object is changed returns but does not fetch the object fetches and returns the object given bad JSON does not raise an error given bad JSON-LD does not raise an error given a bad JSON-LD value does not raise an error given an unsupported type does not raise an error .dereference? fetches but does not return the object fetches but does not return the object when linked object is local returns but does not fetch the object returns but does not fetch the object when object is deleted does not return and does not fetch the object returns but does not fetch the object when linked object is remote fetches and returns the object fetches and returns the object when object is cached returns but does not fetch the object fetches and returns the object when object is deleted fetches and returns the object returns but does not fetch the object given bad JSON does not raise an error given bad JSON-LD does not raise an error given a bad JSON-LD value does not raise an error given an unsupported type does not raise an error #origin returns the origin #uid returns the unique identifier #local? indicates if the instance is local #cached? indicates if the instance is cached Ktistec::Model::Serialized .new includes Ktistec::Model::Serialized .dig? returns the value cast to the specified type returns nil if key does not exist .dig_value? given a nested object returns the result of the block given an array of nested objects returns the result of the block on the first element .dig_values? given a nested object returns the result of the block as an array given an array of nested objects returns the result of the block on all elements .dig_id? given a nested object returns the identifier given a link returns the identifier given an identifier returns the identifier given an array of nested objects returns the first identifier given an array of links returns the first identifier given an array of identifiers returns the first identifier .dig_ids? given a nested object returns the identifier as an array given a link returns the identifier as an array given an identifier returns the identifier as an array given an array of nested objects returns all the identifiers given an array of links returns all the identifiers given an array of identifiers returns all the identifiers ActivityPub::Collection when validating must be an absolute URI must be unique is valid .from_json_ld creates a new instance extracts items identifiers extracts items identifiers handles ordered items handles embedded first handles embedded last handles embedded prev handles embedded next handles embedded current raises an error #from_json_ld updates an existing instance extracts items identifiers extracts items identifiers handles ordered items handles embedded first handles embedded last handles embedded prev handles embedded next handles embedded current raises an error #to_json_ld renders an identical instance embeds first embeds last embeds prev embeds next embeds current embeds local item links remote item links item links item #all_item_iris returns nil given a collection with items returns the items given a collection paginated with first and next fetches the collections returns the items given a collection paginated with last and prev fetches the collections returns the items ActivityPub::Actor #username= assigns iri assigns inbox assigns outbox assigns following assigns followers assigns urls assigns attachments doesn't assign if the actor isn't local .match? returns the matched actor returns nil on failed match given empty urls matches on the iri given nil urls matches on the iri #public_key returns the public key #private_key returns the private key when using the keypair verifies the signed message when validating is valid .map given an array of icons with width and height picks the largest icon given an array of icons picks the first icon .from_json_ld instantiates the subclass creates a new instance includes the public key given an array of URLs parses the array of URLs #from_json_ld updates an existing instance includes the public key given an array of URLs parses the array of URLs #to_json_ld renders an identical instance renders the URL given an array of URLs renders the array of URLs given an array of attachments renders the array of attachments, with html links #make_delete_activity instantiates a delete activity for the subject assigns the subject as the actor assigns the subject as the object addresses (to) the public collection addresses (cc) the subject's followers and following #down? indicates that the actor is down indicates that the actor is not down #up? indicates that the actor is not up indicates that the actor is up #follow adds a public following relationship adds a public followers relationship adds a non-public following relationship adds a non-public followers relationship does not display a deleted following actor does not display a blocked following actor does not display a deleted followers actor #follows? filters response based on confirmed state filters response based on visible state returns falsey for deleted actors returns falsey for blocked actors #likes instantiates the correct subclass filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out posts if the like has been undone paginates the results #announces instantiates the correct subclass filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out posts if the announce has been undone paginates the results #drafts instantiates the correct subclass filters out deleted posts filters out blocked posts filters out published posts includes only posts attributed to subject paginates the results for outbox #in_outbox instantiates the correct subclass filters out non-public posts filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out undone activities includes replies paginates the results #in_outbox? returns true if object is in outbox returns false if object has been deleted returns false if object has been blocked returns false if actor of activity has been deleted returns false if actor of activity has been blocked returns false if activity has been undone returns false if object is not in outbox for inbox #in_inbox instantiates the correct subclass filters out non-public posts filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out undone activities includes replies paginates the results #in_inbox? returns true if object is in inbox returns false if object has been deleted returns false if object has been blocked returns false if actor of activity has been deleted returns false if actor of activity has been blocked returns false if activity has been undone returns false if object is not in inbox #find_activity_for instantiates the correct subclass filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out undone activities filters for specific activities filters out specific activities returns the first activity #known_posts instantiates the correct subclass filters out non-public posts filters out deleted posts filters out blocked posts paginates the results #public_posts instantiates the correct subclass filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out non-public posts filters out replies filters out posts belonging to undone activities filters out posts that are not in an outbox paginates the results #all_posts instantiates the correct subclass filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors includes non-public posts includes replies filters out posts belonging to undone activities filters out posts that are not in an outbox paginates the results #timeline instantiates the correct subclass returns the count filters out deleted posts filters out blocked posts filters out posts by deleted actors filters out posts by blocked actors filters out posts not associated with included activities filters out posts not associated with included activities given a prior create not in timeline includes announcements by default includes announcements filters out announcements given a reply includes replies by default includes replies filters out replies given a local post includes the post given a post without an associated activity includes the post paginates the results #notifications instantiates the correct subclass returns the count filters out undone activities filters out activities with deleted objects filters out activities with blocked objects filters out activities from deleted actors filters out activities from blocked actors paginates the results approvals #approve approves the object #unapprove unapproves the object terms #terms instantiates the correct subclass paginates the results #handle returns the handle ActivityPub::Activity::Delete #actor returns an actor or actor subclass #object returns an actor, object or one of their subclasses validations when the object is an object fails if the actor is not the object's creator passes validation if the object has been deleted passes validation when the object is an actor fails if the actors do not match passes validation if the object has been deleted passes validation #to_json_ld doesn't recursively serialize the actor doesn't recursively serialize the object ActivityPub::Activity::Like #actor returns an actor or actor subclass #object returns a object or object subclass ActivityPub::Activity::Create #actor returns an actor or actor subclass #object returns an object or object subclass validations validates the actor is local validates the object is attributed to the actor passes validation ActivityPub::Activity::Undo #actor returns an actor or actor subclass #object returns a activity or activity subclass validations validates the actor is the object's actor passes validation ActivityPub::Activity::Accept #actor returns an actor or actor subclass #object returns a follow or follow subclass ActivityPub::Activity::Follow #actor returns an actor or actor subclass #object returns an actor or actor subclass #accepted_or_rejected returns nil when accepted returns the accept activity when rejected returns the reject activity validations validates the actor is local validates the object has an inbox passes validation ActivityPub::Activity::Reject #actor returns an actor or actor subclass #object returns a follow or follow subclass Task #gone? is false if the task is saved is true if the saved task is destroyed is true if the task is not saved #runnable? is true if running is false, complete is false and backtrace is nil is false if running is true is false if complete is true is false if backtrace is not nil #past_due? is true if next_attempt_at is nil is true if next_attempt_at is in the past is false if next_attempt_at is in the future #schedule raises an error if the task is running raises an error if the task has a backtrace sets the next_attempt_at if specified sets complete to false saves the task .scheduled returns the scheduled tasks in priority order does not reserve the scheduled tasks returns the scheduled tasks in priority order reserves the scheduled tasks Tag::Mention validation rejects missing subject rejects blank name #save strips the leading @ adds the host if missing does not change the host if present .most_recent_object returns the most recent object with the mention does not return draft objects does not return deleted objects does not return blocked objects does not return objects with deleted attributed to actors does not return objects with blocked attributed to actors does not return objects with destroyed attributed to actors .all_objects returns objects with the mention filters out draft objects filters out deleted objects filters out blocked objects filters out objects with deleted attributed to actors filters out objects with blocked attributed to actors filters out objects with destroyed attributed to actors paginates the results .all_objects_count returns count of objects with the mention filters out draft objects filters out deleted objects filters out blocked objects filters out objects with deleted attributed to actors filters out objects with blocked attributed to actors filters out objects with destroyed attributed to actors Tag::Hashtag validation rejects missing subject rejects blank name #save strips the leading # .most_recent_object returns the most recent object with the tag does not return draft objects does not return deleted objects does not return blocked objects does not return objects with deleted attributed to actors does not return objects with blocked attributed to actors does not return objects with destroyed attributed to actors .all_objects returns objects with the tag filters out draft objects filters out deleted objects filters out blocked objects filters out objects with deleted attributed to actors filters out objects with blocked attributed to actors filters out objects with destroyed attributed to actors given an older object filters out the older object paginates the results .all_objects_count returns count of objects with the tag filters out draft objects filters out deleted objects filters out blocked objects filters out objects with deleted attributed to actors filters out objects with blocked attributed to actors filters out objects with destroyed attributed to actors given an older object filters out the older object .public_objects returns objects with the tag filters out non-published objects filters out non-visible objects filters out deleted objects filters out blocked objects filters out objects with deleted attributed to actors filters out objects with blocked attributed to actors filters out objects with destroyed attributed to actors given a remote object filters out the object that has been approved includes the object paginates the results .public_objects_count returns count of objects with the tag filters out non-published objects filters out non-visible objects filters out deleted objects filters out blocked objects filters out objects with deleted attributed to actors filters out objects with blocked attributed to actors filters out objects with destroyed attributed to actors given a remote object filters out the object that has been approved includes the object ActivityPub .from_json_ld raises an error if the type is not specified defaults the instance to the specified class raises an error if the type is not supported defaults the instance to the specified class instantiates the correct subclass creates an instance if one doesn't exist updates the instance if it already exists .from_json_ld? returns nil if the type is not specified returns nil if the type is not supported Account #password= changes the encrypted_password does not change the encrypted_password if the password is nil does not change the encrypted_password if the password is an empty string #encrypted_password returns the encrypted password #check_password returns true if supplied password is correct returns false if supplied password is not correct #validate rejects the username as too short rejects the username as containing invalid characters rejects the username as not unique rejects the password as too short rejects the password as weak rejects the timezone as unsupported given an actor to associate with #actor= updates the iri #actor updates the actor #save updates the associated actor's public key updates the associated actor's private key #sessions gets related sessions Ktistec::Handler::Canonical get /does/not/exist returns 404 returns 200 given a canonical mapping returns 200 returns 301 and a request for JSON does not redirect does not redirect and a request with a segment suffix returns 200 returns 301 Finished in 33.47 seconds 3392 examples, 0 failures 2024-07-21T03:05:55.054313Z INFO - Updating database statistics: 0.022ms 2024-07-21T03:06:18.061103Z NOTICE - ktistec.json_ld: uncached external context not loaded: https://uncached 2024-07-21T03:06:25.944948Z WARN - task.terminate: Task::Terminate: deleting https://test.test/objects/tfchzlky published=false 2024-07-21T03:06:25.945984Z WARN - task.terminate: Task::Terminate: deleting https://test.test/objects/qfijblyp published=true 2024-07-21T03:06:25.947658Z WARN - task.terminate: Task::Terminate: deleting https://test.test/objects/hzofptgc published=true 2024-07-21T03:06:25.949083Z WARN - task.terminate: Task::Terminate: deleting https://test.test/objects/jlktobnr published=false 2024-07-21T03:06:25.949689Z WARN - task.terminate: Task::Terminate: deleting https://test.test/actors/pybhltcx 2024-07-21T03:06:25.950986Z WARN - task.terminate: Task::Terminate: deleting https://test.test/actors/tlxzscvq 2024-07-21T03:06:25.952286Z WARN - task.terminate: Task::Terminate: deleting https://test.test/actors/vdeogcxh 2024-07-21T03:06:25.953577Z WARN - task.terminate: Task::Terminate: deleting https://test.test/actors/yibtqkso 2024-07-21T03:06:26.477654Z INFO - Updating database statistics: 0.284ms 2024-07-21T03:06:26.479331Z INFO - Updating database statistics: 0.249ms 2024-07-21T03:06:27.504283Z INFO - ktistec.json_ld: SpectatorTestContext::Group__temp_19809::LinkedModel#linked_model? - https://remote/objects/object -- Unexpected char '<' at line 1, column 1 2024-07-21T03:06:27.508381Z INFO - ktistec.json_ld: SpectatorTestContext::Group__temp_19809::LinkedModel#linked_model? - https://remote/objects/object -- Expected Hash for #[]?(key : String), not Array(JSON::Any) 2024-07-21T03:06:27.517809Z INFO - ktistec.json_ld: SpectatorTestContext::Group__temp_19809::LinkedModel#linked_model? - https://remote/objects/object -- Cast from Int64 to String failed, at /usr/lib/crystal/core/json/any.cr:250:5:250 2024-07-21T03:06:27.523772Z INFO - ktistec.json_ld: SpectatorTestContext::Group__temp_19809::LinkedModel#linked_model? - https://remote/objects/object -- Not Implemented: no type 2024-07-21T03:06:27.587728Z INFO - ktistec.json_ld: SpectatorTestContext::Group__temp_19809::LinkedModel.dereference? - https://remote/objects/object - Unexpected char '<' at line 1, column 1 2024-07-21T03:06:27.593792Z INFO - ktistec.json_ld: SpectatorTestContext::Group__temp_19809::LinkedModel.dereference? - https://remote/objects/object - Expected Hash for #[]?(key : String), not Array(JSON::Any) 2024-07-21T03:06:27.600769Z INFO - ktistec.json_ld: SpectatorTestContext::Group__temp_19809::LinkedModel.dereference? - https://remote/objects/object - Cast from Int64 to String failed, at /usr/lib/crystal/core/json/any.cr:250:5:250 2024-07-21T03:06:27.605088Z INFO - ktistec.json_ld: SpectatorTestContext::Group__temp_19809::LinkedModel.dereference? - https://remote/objects/object - Not Implemented: FooBarBaz >>> ktistec: Entering fakeroot... created directory: '/home/buildozer/aports/community/ktistec/pkg/' created directory: '/home/buildozer/aports/community/ktistec/pkg/ktistec/' created directory: '/home/buildozer/aports/community/ktistec/pkg/ktistec/usr/' created directory: '/home/buildozer/aports/community/ktistec/pkg/ktistec/usr/bin' 'server' -> '/home/buildozer/aports/community/ktistec/pkg/ktistec/usr/bin/ktistec' created directory: '/home/buildozer/aports/community/ktistec/pkg/ktistec/var/' created directory: '/home/buildozer/aports/community/ktistec/pkg/ktistec/var/lib/' created directory: '/home/buildozer/aports/community/ktistec/pkg/ktistec/var/lib/ktistec' '/home/buildozer/aports/community/ktistec/pkg/ktistec/var/lib/ktistec/uploads' -> 'public/uploads' >>> ktistec-openrc*: Running split function openrc... >>> ktistec-openrc*: Preparing subpackage ktistec-openrc... >>> ktistec-openrc*: Running postcheck for ktistec-openrc >>> ktistec*: Running postcheck for ktistec >>> ktistec*: Preparing package ktistec... >>> ktistec*: Stripping binaries >>> ktistec*: Script found. /bin/sh added as a dependency for ktistec-2.1.0-r0.apk >>> ktistec*: Adding .pre-install >>> ktistec-openrc*: Scanning shared objects >>> ktistec*: Scanning shared objects >>> ktistec-openrc*: Tracing dependencies... >>> ktistec-openrc*: Package size: 24.0 KB >>> ktistec-openrc*: Compressing data... >>> ktistec-openrc*: Create checksum... >>> ktistec-openrc*: Create ktistec-openrc-2.1.0-r0.apk >>> ktistec*: Tracing dependencies... tzdata /bin/sh so:libc.musl-x86_64.so.1 so:libcrypto.so.3 so:libevent-2.1.so.7 so:libgc.so.1 so:libgcc_s.so.1 so:libgmp.so.10 so:libpcre2-8.so.0 so:libsqlite3.so.0 so:libssl.so.3 so:libxml2.so.2 so:libz.so.1 >>> ktistec*: Package size: 18.0 MB >>> ktistec*: Compressing data... >>> ktistec*: Create checksum... >>> ktistec*: Create ktistec-2.1.0-r0.apk >>> ktistec: Build complete at Sun, 21 Jul 2024 03:06:29 +0000 elapsed time 0h 9m 41s >>> ktistec: Cleaning up srcdir >>> ktistec: Cleaning up pkgdir >>> ktistec: Uninstalling dependencies... (1/40) Purging .makedepends-ktistec (20240721.025649) (2/40) Purging tzdata (2024a-r1) (3/40) Purging libxml2-dev (2.12.7-r0) (4/40) Purging libxml2-utils (2.12.7-r0) (5/40) Purging openssl-dev (3.3.1-r3) (6/40) Purging shards (0.18.0-r0) (7/40) Purging crystal (1.12.2-r0) (8/40) Purging gc-dev (8.2.6-r0) (9/40) Purging libgc++ (8.2.6-r0) (10/40) Purging libatomic_ops (7.8.0-r4) (11/40) Purging libevent-dev (2.1.12-r7) (12/40) Purging python3-pyc (3.12.3-r1) (13/40) Purging python3-pycache-pyc0 (3.12.3-r1) (14/40) Purging pyc (3.12.3-r1) (15/40) Purging python3 (3.12.3-r1) (16/40) Purging libevent-static (2.1.12-r7) (17/40) Purging pcre2-dev (10.43-r0) (18/40) Purging libedit-dev (20240517.3.1-r0) (19/40) Purging bsd-compat-headers (0.7.2-r6) (20/40) Purging ncurses-dev (6.4_p20240420-r0) (21/40) Purging libncurses++ (6.4_p20240420-r0) (22/40) Purging libpanelw (6.4_p20240420-r0) (23/40) Purging zlib-dev (1.3.1-r1) (24/40) Purging libpcre2-16 (10.43-r0) (25/40) Purging libpcre2-32 (10.43-r0) (26/40) Purging sqlite-dev (3.45.3-r1) (27/40) Purging sqlite (3.45.3-r1) (28/40) Purging sqlite-libs (3.45.3-r1) (29/40) Purging yaml-dev (0.2.5-r2) (30/40) Purging yaml (0.2.5-r2) (31/40) Purging gc (8.2.6-r0) (32/40) Purging gdbm (1.23-r1) (33/40) Purging libevent (2.1.12-r7) (34/40) Purging libformw (6.4_p20240420-r0) (35/40) Purging libmenuw (6.4_p20240420-r0) (36/40) Purging llvm17-libs (17.0.6-r1) (37/40) Purging mpdecimal (4.0.0-r0) (38/40) Purging readline (8.2.10-r0) (39/40) Purging xz-dev (5.6.1-r3) (40/40) Purging xz (5.6.1-r3) Executing busybox-1.36.1-r29.trigger OK: 1693 MiB in 123 packages >>> ktistec: Updating the community/x86_64 repository index... >>> ktistec: Signing the index...