mediawiktory 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.dokaz +1 -0
- data/.rubocop_todo.yml +16 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +10 -4
- data/CONTRIBUTING.md +6 -9
- data/README.md +153 -72
- data/bin/mediawiktory-gen +35 -0
- data/lib/media_wiktory.rb +2 -0
- data/lib/mediawiktory.rb +13 -14
- data/lib/mediawiktory/generator.rb +107 -0
- data/lib/mediawiktory/generator/api.rb +75 -0
- data/lib/mediawiktory/generator/module.rb +105 -0
- data/lib/mediawiktory/generator/param.rb +271 -0
- data/lib/mediawiktory/generator/renderable.rb +59 -0
- data/lib/mediawiktory/generator/templates/_action_method.erb +20 -0
- data/lib/mediawiktory/generator/templates/_module_in_param_docs.erb +2 -0
- data/lib/mediawiktory/generator/templates/_param_impl_boolean.erb +1 -0
- data/lib/mediawiktory/generator/templates/_param_impl_enum.erb +1 -0
- data/lib/mediawiktory/generator/templates/_param_impl_enum_of_modules.erb +1 -0
- data/lib/mediawiktory/generator/templates/_param_impl_string.erb +1 -0
- data/lib/mediawiktory/generator/templates/_param_impl_timestamp.erb +1 -0
- data/lib/mediawiktory/generator/templates/_param_method.erb +14 -0
- data/lib/mediawiktory/generator/templates/action.rb.erb +204 -0
- data/lib/mediawiktory/generator/templates/action_class.rb.erb +30 -0
- data/lib/mediawiktory/generator/templates/actions.rb.erb +31 -0
- data/lib/mediawiktory/generator/templates/api.rb.erb +65 -0
- data/lib/mediawiktory/{client.rb → generator/templates/client.rb.erb} +24 -10
- data/lib/mediawiktory/generator/templates/module_class.rb.erb +22 -0
- data/lib/mediawiktory/generator/templates/response.rb.erb +122 -0
- data/lib/mediawiktory/version.rb +4 -2
- data/lib/mediawiktory/wikipedia/actions.rb +2296 -0
- data/lib/mediawiktory/wikipedia/actions/abusefiltercheckmatch.rb +55 -0
- data/lib/mediawiktory/wikipedia/actions/abusefilterchecksyntax.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/abusefilterevalexpression.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/abusefilterunblockautopromote.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/addstudents.rb +52 -0
- data/lib/mediawiktory/wikipedia/actions/antispoof.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/base.rb +351 -0
- data/lib/mediawiktory/wikipedia/actions/block.rb +132 -0
- data/lib/mediawiktory/wikipedia/actions/bouncehandler.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/categorytree.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/centralauthtoken.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/centralnoticechoicedata.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/centralnoticequerycampaign.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/changeauthenticationdata.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/checktoken.rb +52 -0
- data/lib/mediawiktory/wikipedia/actions/cirrus-config-dump.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/cirrus-mapping-dump.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/cirrus-settings-dump.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/clearhasmsg.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/clientlogin.rb +86 -0
- data/lib/mediawiktory/wikipedia/actions/compare.rb +71 -0
- data/lib/mediawiktory/wikipedia/actions/createaccount.rb +86 -0
- data/lib/mediawiktory/wikipedia/actions/cspreport.rb +38 -0
- data/lib/mediawiktory/wikipedia/actions/cxconfiguration.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/cxdelete.rb +55 -0
- data/lib/mediawiktory/wikipedia/actions/cxpublish.rb +95 -0
- data/lib/mediawiktory/wikipedia/actions/cxsave.rb +87 -0
- data/lib/mediawiktory/wikipedia/actions/cxsuggestionlist.rb +81 -0
- data/lib/mediawiktory/wikipedia/actions/cxtoken.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/delete.rb +103 -0
- data/lib/mediawiktory/wikipedia/actions/deleteeducation.rb +65 -0
- data/lib/mediawiktory/wikipedia/actions/deleteglobalaccount.rb +47 -0
- data/lib/mediawiktory/wikipedia/actions/echomarkread.rb +77 -0
- data/lib/mediawiktory/wikipedia/actions/echomarkseen.rb +57 -0
- data/lib/mediawiktory/wikipedia/actions/edit.rb +266 -0
- data/lib/mediawiktory/wikipedia/actions/editmassmessagelist.rb +65 -0
- data/lib/mediawiktory/wikipedia/actions/emailuser.rb +62 -0
- data/lib/mediawiktory/wikipedia/actions/enlist.rb +89 -0
- data/lib/mediawiktory/wikipedia/actions/expandtemplates.rb +129 -0
- data/lib/mediawiktory/wikipedia/actions/fancycaptchareload.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/featuredfeed.rb +57 -0
- data/lib/mediawiktory/wikipedia/actions/feedcontributions.rb +121 -0
- data/lib/mediawiktory/wikipedia/actions/feedrecentchanges.rb +159 -0
- data/lib/mediawiktory/wikipedia/actions/feedwatchlist.rb +108 -0
- data/lib/mediawiktory/wikipedia/actions/filerevert.rb +55 -0
- data/lib/mediawiktory/wikipedia/actions/flagconfig.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/globalblock.rb +76 -0
- data/lib/mediawiktory/wikipedia/actions/globaluserrights.rb +94 -0
- data/lib/mediawiktory/wikipedia/actions/graph.rb +47 -0
- data/lib/mediawiktory/wikipedia/actions/help.rb +64 -0
- data/lib/mediawiktory/wikipedia/actions/imagerotate.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/import.rb +116 -0
- data/lib/mediawiktory/wikipedia/actions/jsonconfig.rb +60 -0
- data/lib/mediawiktory/wikipedia/actions/jsondata.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/languagesearch.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/linkaccount.rb +79 -0
- data/lib/mediawiktory/wikipedia/actions/liststudents.rb +63 -0
- data/lib/mediawiktory/wikipedia/actions/login.rb +55 -0
- data/lib/mediawiktory/wikipedia/actions/logout.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/managetags.rb +80 -0
- data/lib/mediawiktory/wikipedia/actions/massmessage.rb +55 -0
- data/lib/mediawiktory/wikipedia/actions/mergehistory.rb +79 -0
- data/lib/mediawiktory/wikipedia/actions/mobileview.rb +170 -0
- data/lib/mediawiktory/wikipedia/actions/move.rb +131 -0
- data/lib/mediawiktory/wikipedia/actions/oathvalidate.rb +47 -0
- data/lib/mediawiktory/wikipedia/actions/opensearch.rb +105 -0
- data/lib/mediawiktory/wikipedia/actions/options.rb +80 -0
- data/lib/mediawiktory/wikipedia/actions/pagetriageaction.rb +67 -0
- data/lib/mediawiktory/wikipedia/actions/pagetriagelist.rb +142 -0
- data/lib/mediawiktory/wikipedia/actions/pagetriagestats.rb +59 -0
- data/lib/mediawiktory/wikipedia/actions/pagetriagetagging.rb +83 -0
- data/lib/mediawiktory/wikipedia/actions/pagetriagetemplate.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/paraminfo.rb +91 -0
- data/lib/mediawiktory/wikipedia/actions/parse.rb +286 -0
- data/lib/mediawiktory/wikipedia/actions/parsoid-batch.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/patrol.rb +60 -0
- data/lib/mediawiktory/wikipedia/actions/protect.rb +121 -0
- data/lib/mediawiktory/wikipedia/actions/purge.rb +155 -0
- data/lib/mediawiktory/wikipedia/actions/query.rb +325 -0
- data/lib/mediawiktory/wikipedia/actions/refresheducation.rb +57 -0
- data/lib/mediawiktory/wikipedia/actions/removeauthenticationdata.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/resetpassword.rb +47 -0
- data/lib/mediawiktory/wikipedia/actions/review.rb +54 -0
- data/lib/mediawiktory/wikipedia/actions/reviewactivity.rb +60 -0
- data/lib/mediawiktory/wikipedia/actions/revisiondelete.rb +125 -0
- data/lib/mediawiktory/wikipedia/actions/rollback.rb +96 -0
- data/lib/mediawiktory/wikipedia/actions/rsd.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/sanitize-mapdata.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/scribunto-console.rb +62 -0
- data/lib/mediawiktory/wikipedia/actions/setglobalaccountstatus.rb +81 -0
- data/lib/mediawiktory/wikipedia/actions/setnotificationtimestamp.rb +180 -0
- data/lib/mediawiktory/wikipedia/actions/setpagelanguage.rb +81 -0
- data/lib/mediawiktory/wikipedia/actions/shortenurl.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/sitematrix.rb +91 -0
- data/lib/mediawiktory/wikipedia/actions/spamblacklist.rb +36 -0
- data/lib/mediawiktory/wikipedia/actions/stabilize.rb +76 -0
- data/lib/mediawiktory/wikipedia/actions/stashedit.rb +113 -0
- data/lib/mediawiktory/wikipedia/actions/strikevote.rb +60 -0
- data/lib/mediawiktory/wikipedia/actions/tag.rb +117 -0
- data/lib/mediawiktory/wikipedia/actions/templatedata.rb +148 -0
- data/lib/mediawiktory/wikipedia/actions/thank.rb +47 -0
- data/lib/mediawiktory/wikipedia/actions/titleblacklist.rb +51 -0
- data/lib/mediawiktory/wikipedia/actions/tokens.rb +36 -0
- data/lib/mediawiktory/wikipedia/actions/transcodereset.rb +47 -0
- data/lib/mediawiktory/wikipedia/actions/ulslocalization.rb +31 -0
- data/lib/mediawiktory/wikipedia/actions/unblock.rb +76 -0
- data/lib/mediawiktory/wikipedia/actions/undelete.rb +99 -0
- data/lib/mediawiktory/wikipedia/actions/unlinkaccount.rb +39 -0
- data/lib/mediawiktory/wikipedia/actions/upload.rb +172 -0
- data/lib/mediawiktory/wikipedia/actions/userrights.rb +107 -0
- data/lib/mediawiktory/wikipedia/actions/validatepassword.rb +55 -0
- data/lib/mediawiktory/wikipedia/actions/visualeditor.rb +96 -0
- data/lib/mediawiktory/wikipedia/actions/visualeditoredit.rb +164 -0
- data/lib/mediawiktory/wikipedia/actions/watch.rb +164 -0
- data/lib/mediawiktory/wikipedia/actions/webapp-manifest.rb +25 -0
- data/lib/mediawiktory/wikipedia/actions/wikilove.rb +79 -0
- data/lib/mediawiktory/wikipedia/actions/zeroconfig.rb +44 -0
- data/lib/mediawiktory/wikipedia/api.rb +80 -0
- data/lib/mediawiktory/wikipedia/client.rb +61 -0
- data/lib/mediawiktory/wikipedia/modules/abusefilters.rb +85 -0
- data/lib/mediawiktory/wikipedia/modules/abuselog.rb +101 -0
- data/lib/mediawiktory/wikipedia/modules/allcategories.rb +104 -0
- data/lib/mediawiktory/wikipedia/modules/alldeletedrevisions.rb +213 -0
- data/lib/mediawiktory/wikipedia/modules/allfileusages.rb +95 -0
- data/lib/mediawiktory/wikipedia/modules/allimages.rb +183 -0
- data/lib/mediawiktory/wikipedia/modules/alllinks.rb +108 -0
- data/lib/mediawiktory/wikipedia/modules/allmessages.rb +143 -0
- data/lib/mediawiktory/wikipedia/modules/allpages.rb +182 -0
- data/lib/mediawiktory/wikipedia/modules/allredirects.rb +108 -0
- data/lib/mediawiktory/wikipedia/modules/allrevisions.rb +181 -0
- data/lib/mediawiktory/wikipedia/modules/alltransclusions.rb +108 -0
- data/lib/mediawiktory/wikipedia/modules/allusers.rb +141 -0
- data/lib/mediawiktory/wikipedia/modules/authmanagerinfo.rb +63 -0
- data/lib/mediawiktory/wikipedia/modules/babel.rb +30 -0
- data/lib/mediawiktory/wikipedia/modules/backlinks.rb +100 -0
- data/lib/mediawiktory/wikipedia/modules/betafeatures.rb +30 -0
- data/lib/mediawiktory/wikipedia/modules/blocks.rb +127 -0
- data/lib/mediawiktory/wikipedia/modules/categories.rb +90 -0
- data/lib/mediawiktory/wikipedia/modules/categoryinfo.rb +30 -0
- data/lib/mediawiktory/wikipedia/modules/categorymembers.rb +183 -0
- data/lib/mediawiktory/wikipedia/modules/centralnoticelogs.rb +70 -0
- data/lib/mediawiktory/wikipedia/modules/checkuser.rb +83 -0
- data/lib/mediawiktory/wikipedia/modules/checkuserlog.rb +83 -0
- data/lib/mediawiktory/wikipedia/modules/contenttranslation.rb +83 -0
- data/lib/mediawiktory/wikipedia/modules/contenttranslationcorpora.rb +50 -0
- data/lib/mediawiktory/wikipedia/modules/contenttranslationlangtrend.rb +51 -0
- data/lib/mediawiktory/wikipedia/modules/contenttranslationstats.rb +22 -0
- data/lib/mediawiktory/wikipedia/modules/contenttranslationsuggestions.rb +70 -0
- data/lib/mediawiktory/wikipedia/modules/contributors.rb +90 -0
- data/lib/mediawiktory/wikipedia/modules/coordinates.rb +80 -0
- data/lib/mediawiktory/wikipedia/modules/cxpublishedtranslations.rb +54 -0
- data/lib/mediawiktory/wikipedia/modules/cxtranslatorstats.rb +30 -0
- data/lib/mediawiktory/wikipedia/modules/deletedrevisions.rb +169 -0
- data/lib/mediawiktory/wikipedia/modules/deletedrevs.rb +148 -0
- data/lib/mediawiktory/wikipedia/modules/duplicatefiles.rb +58 -0
- data/lib/mediawiktory/wikipedia/modules/embeddedin.rb +93 -0
- data/lib/mediawiktory/wikipedia/modules/extlinks.rb +66 -0
- data/lib/mediawiktory/wikipedia/modules/extracts.rb +81 -0
- data/lib/mediawiktory/wikipedia/modules/exturlusage.rb +92 -0
- data/lib/mediawiktory/wikipedia/modules/featureusage.rb +59 -0
- data/lib/mediawiktory/wikipedia/modules/filearchive.rb +104 -0
- data/lib/mediawiktory/wikipedia/modules/filerepoinfo.rb +35 -0
- data/lib/mediawiktory/wikipedia/modules/fileusage.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/flagged.rb +22 -0
- data/lib/mediawiktory/wikipedia/modules/g-allcategories.rb +91 -0
- data/lib/mediawiktory/wikipedia/modules/g-alldeletedrevisions.rb +200 -0
- data/lib/mediawiktory/wikipedia/modules/g-allfileusages.rb +82 -0
- data/lib/mediawiktory/wikipedia/modules/g-allimages.rb +170 -0
- data/lib/mediawiktory/wikipedia/modules/g-alllinks.rb +95 -0
- data/lib/mediawiktory/wikipedia/modules/g-allpages.rb +182 -0
- data/lib/mediawiktory/wikipedia/modules/g-allredirects.rb +95 -0
- data/lib/mediawiktory/wikipedia/modules/g-allrevisions.rb +168 -0
- data/lib/mediawiktory/wikipedia/modules/g-alltransclusions.rb +95 -0
- data/lib/mediawiktory/wikipedia/modules/g-backlinks.rb +100 -0
- data/lib/mediawiktory/wikipedia/modules/g-categories.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/g-categorymembers.rb +170 -0
- data/lib/mediawiktory/wikipedia/modules/g-contenttranslation.rb +83 -0
- data/lib/mediawiktory/wikipedia/modules/g-contenttranslationsuggestions.rb +70 -0
- data/lib/mediawiktory/wikipedia/modules/g-deletedrevisions.rb +156 -0
- data/lib/mediawiktory/wikipedia/modules/g-duplicatefiles.rb +58 -0
- data/lib/mediawiktory/wikipedia/modules/g-embeddedin.rb +93 -0
- data/lib/mediawiktory/wikipedia/modules/g-exturlusage.rb +79 -0
- data/lib/mediawiktory/wikipedia/modules/g-fileusage.rb +64 -0
- data/lib/mediawiktory/wikipedia/modules/g-geosearch.rb +116 -0
- data/lib/mediawiktory/wikipedia/modules/g-gettingstartedgetpages.rb +46 -0
- data/lib/mediawiktory/wikipedia/modules/g-images.rb +64 -0
- data/lib/mediawiktory/wikipedia/modules/g-imageusage.rb +100 -0
- data/lib/mediawiktory/wikipedia/modules/g-iwbacklinks.rb +67 -0
- data/lib/mediawiktory/wikipedia/modules/g-langbacklinks.rb +67 -0
- data/lib/mediawiktory/wikipedia/modules/g-links.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/g-linkshere.rb +64 -0
- data/lib/mediawiktory/wikipedia/modules/g-mostviewed.rb +51 -0
- data/lib/mediawiktory/wikipedia/modules/g-oldreviewedpages.rb +114 -0
- data/lib/mediawiktory/wikipedia/modules/g-pageswithprop.rb +59 -0
- data/lib/mediawiktory/wikipedia/modules/g-prefixsearch.rb +72 -0
- data/lib/mediawiktory/wikipedia/modules/g-projectpages.rb +58 -0
- data/lib/mediawiktory/wikipedia/modules/g-protectedtitles.rb +93 -0
- data/lib/mediawiktory/wikipedia/modules/g-querypage.rb +51 -0
- data/lib/mediawiktory/wikipedia/modules/g-random.rb +71 -0
- data/lib/mediawiktory/wikipedia/modules/g-recentchanges.rb +157 -0
- data/lib/mediawiktory/wikipedia/modules/g-redirects.rb +64 -0
- data/lib/mediawiktory/wikipedia/modules/g-revisions.rb +185 -0
- data/lib/mediawiktory/wikipedia/modules/g-search.rb +112 -0
- data/lib/mediawiktory/wikipedia/modules/g-templates.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/g-transcludedin.rb +64 -0
- data/lib/mediawiktory/wikipedia/modules/g-watchlist.rb +145 -0
- data/lib/mediawiktory/wikipedia/modules/g-watchlistraw.rb +109 -0
- data/lib/mediawiktory/wikipedia/modules/g-wblistentityusage.rb +64 -0
- data/lib/mediawiktory/wikipedia/modules/gadgetcategories.rb +48 -0
- data/lib/mediawiktory/wikipedia/modules/gadgets.rb +75 -0
- data/lib/mediawiktory/wikipedia/modules/geosearch.rb +129 -0
- data/lib/mediawiktory/wikipedia/modules/gettingstartedgetpages.rb +46 -0
- data/lib/mediawiktory/wikipedia/modules/globalallusers.rb +106 -0
- data/lib/mediawiktory/wikipedia/modules/globalblocks.rb +106 -0
- data/lib/mediawiktory/wikipedia/modules/globalgroups.rb +35 -0
- data/lib/mediawiktory/wikipedia/modules/globalusage.rb +58 -0
- data/lib/mediawiktory/wikipedia/modules/globaluserinfo.rb +43 -0
- data/lib/mediawiktory/wikipedia/modules/imageinfo.rb +142 -0
- data/lib/mediawiktory/wikipedia/modules/images.rb +64 -0
- data/lib/mediawiktory/wikipedia/modules/imageusage.rb +100 -0
- data/lib/mediawiktory/wikipedia/modules/info.rb +69 -0
- data/lib/mediawiktory/wikipedia/modules/iwbacklinks.rb +80 -0
- data/lib/mediawiktory/wikipedia/modules/iwlinks.rb +87 -0
- data/lib/mediawiktory/wikipedia/modules/json.rb +57 -0
- data/lib/mediawiktory/wikipedia/modules/jsonfm.rb +64 -0
- data/lib/mediawiktory/wikipedia/modules/langbacklinks.rb +80 -0
- data/lib/mediawiktory/wikipedia/modules/langlinks.rb +95 -0
- data/lib/mediawiktory/wikipedia/modules/links.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/linkshere.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/logevents.rb +151 -0
- data/lib/mediawiktory/wikipedia/modules/mapdata.rb +46 -0
- data/lib/mediawiktory/wikipedia/modules/mmsites.rb +30 -0
- data/lib/mediawiktory/wikipedia/modules/mostviewed.rb +51 -0
- data/lib/mediawiktory/wikipedia/modules/mystashedfiles.rb +51 -0
- data/lib/mediawiktory/wikipedia/modules/none.rb +22 -0
- data/lib/mediawiktory/wikipedia/modules/notifications.rb +174 -0
- data/lib/mediawiktory/wikipedia/modules/oath.rb +30 -0
- data/lib/mediawiktory/wikipedia/modules/oldreviewedpages.rb +114 -0
- data/lib/mediawiktory/wikipedia/modules/ores.rb +22 -0
- data/lib/mediawiktory/wikipedia/modules/pageassessments.rb +45 -0
- data/lib/mediawiktory/wikipedia/modules/pageimages.rb +72 -0
- data/lib/mediawiktory/wikipedia/modules/pagepropnames.rb +38 -0
- data/lib/mediawiktory/wikipedia/modules/pageprops.rb +43 -0
- data/lib/mediawiktory/wikipedia/modules/pageswithprop.rb +72 -0
- data/lib/mediawiktory/wikipedia/modules/pageterms.rb +43 -0
- data/lib/mediawiktory/wikipedia/modules/pageviews.rb +51 -0
- data/lib/mediawiktory/wikipedia/modules/php.rb +35 -0
- data/lib/mediawiktory/wikipedia/modules/phpfm.rb +42 -0
- data/lib/mediawiktory/wikipedia/modules/prefixsearch.rb +72 -0
- data/lib/mediawiktory/wikipedia/modules/projectpages.rb +58 -0
- data/lib/mediawiktory/wikipedia/modules/projects.rb +29 -0
- data/lib/mediawiktory/wikipedia/modules/protectedtitles.rb +106 -0
- data/lib/mediawiktory/wikipedia/modules/querypage.rb +51 -0
- data/lib/mediawiktory/wikipedia/modules/random.rb +71 -0
- data/lib/mediawiktory/wikipedia/modules/rawfm.rb +29 -0
- data/lib/mediawiktory/wikipedia/modules/recentchanges.rb +170 -0
- data/lib/mediawiktory/wikipedia/modules/redirects.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/references.rb +30 -0
- data/lib/mediawiktory/wikipedia/modules/revisions.rb +198 -0
- data/lib/mediawiktory/wikipedia/modules/search.rb +125 -0
- data/lib/mediawiktory/wikipedia/modules/siteinfo.rb +70 -0
- data/lib/mediawiktory/wikipedia/modules/siteviews.rb +43 -0
- data/lib/mediawiktory/wikipedia/modules/stashimageinfo.rb +85 -0
- data/lib/mediawiktory/wikipedia/modules/tags.rb +51 -0
- data/lib/mediawiktory/wikipedia/modules/templates.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/tokens.rb +35 -0
- data/lib/mediawiktory/wikipedia/modules/transcludedin.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/transcodestatus.rb +22 -0
- data/lib/mediawiktory/wikipedia/modules/unreadnotificationpages.rb +50 -0
- data/lib/mediawiktory/wikipedia/modules/usercontribs.rb +155 -0
- data/lib/mediawiktory/wikipedia/modules/userinfo.rb +43 -0
- data/lib/mediawiktory/wikipedia/modules/users.rb +82 -0
- data/lib/mediawiktory/wikipedia/modules/videoinfo.rb +143 -0
- data/lib/mediawiktory/wikipedia/modules/watchlist.rb +158 -0
- data/lib/mediawiktory/wikipedia/modules/watchlistraw.rb +122 -0
- data/lib/mediawiktory/wikipedia/modules/wbentityusage.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/wblistentityusage.rb +77 -0
- data/lib/mediawiktory/wikipedia/modules/wikibase.rb +35 -0
- data/lib/mediawiktory/wikipedia/modules/wikisets.rb +58 -0
- data/lib/mediawiktory/wikipedia/modules/xml.rb +37 -0
- data/lib/mediawiktory/wikipedia/modules/xmlfm.rb +44 -0
- data/lib/mediawiktory/wikipedia/response.rb +122 -0
- data/lib/nokogiri/more.rb +12 -12
- data/mediawiktory.gemspec +4 -0
- metadata +350 -257
- data/bin/mediawiktory +0 -13
- data/doc/mediawiki_api_types.md +0 -14
- data/examples/query.rb +0 -15
- data/examples/query_generator.rb +0 -15
- data/lib/faraday/naive_cache.rb +0 -40
- data/lib/mediawiktory/action.rb +0 -61
- data/lib/mediawiktory/generated/abusefiltercheckmatch.rb +0 -9
- data/lib/mediawiktory/generated/abusefilterchecksyntax.rb +0 -6
- data/lib/mediawiktory/generated/abusefilterevalexpression.rb +0 -6
- data/lib/mediawiktory/generated/abusefilters.rb +0 -12
- data/lib/mediawiktory/generated/abusefilterunblockautopromote.rb +0 -8
- data/lib/mediawiktory/generated/abuselog.rb +0 -14
- data/lib/mediawiktory/generated/actions_mixin.rb +0 -352
- data/lib/mediawiktory/generated/addstudents.rb +0 -9
- data/lib/mediawiktory/generated/allcategories.rb +0 -15
- data/lib/mediawiktory/generated/alldeletedrevisions.rb +0 -28
- data/lib/mediawiktory/generated/allfileusages.rb +0 -14
- data/lib/mediawiktory/generated/allimages.rb +0 -23
- data/lib/mediawiktory/generated/alllinks.rb +0 -15
- data/lib/mediawiktory/generated/allmessages.rb +0 -19
- data/lib/mediawiktory/generated/allpages.rb +0 -21
- data/lib/mediawiktory/generated/allredirects.rb +0 -15
- data/lib/mediawiktory/generated/allrevisions.rb +0 -24
- data/lib/mediawiktory/generated/alltransclusions.rb +0 -15
- data/lib/mediawiktory/generated/allusers.rb +0 -18
- data/lib/mediawiktory/generated/antispoof.rb +0 -6
- data/lib/mediawiktory/generated/authmanagerinfo.rb +0 -10
- data/lib/mediawiktory/generated/babel.rb +0 -7
- data/lib/mediawiktory/generated/backlinks.rb +0 -14
- data/lib/mediawiktory/generated/betafeatures.rb +0 -7
- data/lib/mediawiktory/generated/block.rb +0 -20
- data/lib/mediawiktory/generated/blocks.rb +0 -16
- data/lib/mediawiktory/generated/bouncehandler.rb +0 -7
- data/lib/mediawiktory/generated/categories.rb +0 -12
- data/lib/mediawiktory/generated/categoryinfo.rb +0 -7
- data/lib/mediawiktory/generated/categorymembers.rb +0 -23
- data/lib/mediawiktory/generated/categorytree.rb +0 -7
- data/lib/mediawiktory/generated/centralauthtoken.rb +0 -5
- data/lib/mediawiktory/generated/centralnoticechoicedata.rb +0 -7
- data/lib/mediawiktory/generated/centralnoticelogs.rb +0 -11
- data/lib/mediawiktory/generated/centralnoticequerycampaign.rb +0 -6
- data/lib/mediawiktory/generated/changeauthenticationdata.rb +0 -10
- data/lib/mediawiktory/generated/checktoken.rb +0 -8
- data/lib/mediawiktory/generated/checkuser.rb +0 -14
- data/lib/mediawiktory/generated/checkuserlog.rb +0 -13
- data/lib/mediawiktory/generated/cirrus-config-dump.rb +0 -5
- data/lib/mediawiktory/generated/cirrus-mapping-dump.rb +0 -5
- data/lib/mediawiktory/generated/cirrus-settings-dump.rb +0 -5
- data/lib/mediawiktory/generated/clearhasmsg.rb +0 -6
- data/lib/mediawiktory/generated/clientlogin.rb +0 -15
- data/lib/mediawiktory/generated/compare.rb +0 -11
- data/lib/mediawiktory/generated/contenttranslation.rb +0 -12
- data/lib/mediawiktory/generated/contenttranslationcorpora.rb +0 -8
- data/lib/mediawiktory/generated/contenttranslationlangtrend.rb +0 -8
- data/lib/mediawiktory/generated/contenttranslationstats.rb +0 -5
- data/lib/mediawiktory/generated/contenttranslationsuggestions.rb +0 -11
- data/lib/mediawiktory/generated/contributors.rb +0 -12
- data/lib/mediawiktory/generated/coordinates.rb +0 -12
- data/lib/mediawiktory/generated/createaccount.rb +0 -15
- data/lib/mediawiktory/generated/cspreport.rb +0 -8
- data/lib/mediawiktory/generated/cxconfiguration.rb +0 -7
- data/lib/mediawiktory/generated/cxdelete.rb +0 -10
- data/lib/mediawiktory/generated/cxpublish.rb +0 -15
- data/lib/mediawiktory/generated/cxpublishedtranslations.rb +0 -9
- data/lib/mediawiktory/generated/cxsave.rb +0 -14
- data/lib/mediawiktory/generated/cxsuggestionlist.rb +0 -12
- data/lib/mediawiktory/generated/cxtoken.rb +0 -7
- data/lib/mediawiktory/generated/cxtranslatorstats.rb +0 -6
- data/lib/mediawiktory/generated/delete.rb +0 -15
- data/lib/mediawiktory/generated/deletedrevisions.rb +0 -23
- data/lib/mediawiktory/generated/deletedrevs.rb +0 -20
- data/lib/mediawiktory/generated/deleteeducation.rb +0 -10
- data/lib/mediawiktory/generated/deleteglobalaccount.rb +0 -9
- data/lib/mediawiktory/generated/duplicatefiles.rb +0 -10
- data/lib/mediawiktory/generated/echomarkread.rb +0 -11
- data/lib/mediawiktory/generated/echomarkseen.rb +0 -9
- data/lib/mediawiktory/generated/edit.rb +0 -35
- data/lib/mediawiktory/generated/editmassmessagelist.rb +0 -10
- data/lib/mediawiktory/generated/emailuser.rb +0 -11
- data/lib/mediawiktory/generated/embeddedin.rb +0 -13
- data/lib/mediawiktory/generated/enlist.rb +0 -13
- data/lib/mediawiktory/generated/expandtemplates.rb +0 -16
- data/lib/mediawiktory/generated/extlinks.rb +0 -11
- data/lib/mediawiktory/generated/extracts.rb +0 -13
- data/lib/mediawiktory/generated/exturlusage.rb +0 -13
- data/lib/mediawiktory/generated/fancycaptchareload.rb +0 -5
- data/lib/mediawiktory/generated/featuredfeed.rb +0 -8
- data/lib/mediawiktory/generated/featureusage.rb +0 -10
- data/lib/mediawiktory/generated/feedcontributions.rb +0 -16
- data/lib/mediawiktory/generated/feedrecentchanges.rb +0 -22
- data/lib/mediawiktory/generated/feedwatchlist.rb +0 -14
- data/lib/mediawiktory/generated/filearchive.rb +0 -15
- data/lib/mediawiktory/generated/filerepoinfo.rb +0 -7
- data/lib/mediawiktory/generated/filerevert.rb +0 -10
- data/lib/mediawiktory/generated/fileusage.rb +0 -11
- data/lib/mediawiktory/generated/flagconfig.rb +0 -5
- data/lib/mediawiktory/generated/flagged.rb +0 -5
- data/lib/mediawiktory/generated/gadgetcategories.rb +0 -8
- data/lib/mediawiktory/generated/gadgets.rb +0 -11
- data/lib/mediawiktory/generated/geosearch.rb +0 -17
- data/lib/mediawiktory/generated/gettingstartedgetpages.rb +0 -9
- data/lib/mediawiktory/generated/globalallusers.rb +0 -14
- data/lib/mediawiktory/generated/globalblock.rb +0 -13
- data/lib/mediawiktory/generated/globalblocks.rb +0 -14
- data/lib/mediawiktory/generated/globalgroups.rb +0 -7
- data/lib/mediawiktory/generated/globalusage.rb +0 -10
- data/lib/mediawiktory/generated/globaluserinfo.rb +0 -8
- data/lib/mediawiktory/generated/globaluserrights.rb +0 -13
- data/lib/mediawiktory/generated/graph.rb +0 -8
- data/lib/mediawiktory/generated/help.rb +0 -10
- data/lib/mediawiktory/generated/imageinfo.rb +0 -20
- data/lib/mediawiktory/generated/imagerotate.rb +0 -5
- data/lib/mediawiktory/generated/images.rb +0 -10
- data/lib/mediawiktory/generated/imageusage.rb +0 -14
- data/lib/mediawiktory/generated/import.rb +0 -16
- data/lib/mediawiktory/generated/info.rb +0 -10
- data/lib/mediawiktory/generated/iwbacklinks.rb +0 -12
- data/lib/mediawiktory/generated/iwlinks.rb +0 -13
- data/lib/mediawiktory/generated/jsonconfig.rb +0 -9
- data/lib/mediawiktory/generated/jsondata.rb +0 -6
- data/lib/mediawiktory/generated/langbacklinks.rb +0 -12
- data/lib/mediawiktory/generated/langlinks.rb +0 -14
- data/lib/mediawiktory/generated/languagesearch.rb +0 -7
- data/lib/mediawiktory/generated/linkaccount.rb +0 -14
- data/lib/mediawiktory/generated/links.rb +0 -11
- data/lib/mediawiktory/generated/linkshere.rb +0 -11
- data/lib/mediawiktory/generated/liststudents.rb +0 -9
- data/lib/mediawiktory/generated/logevents.rb +0 -19
- data/lib/mediawiktory/generated/login.rb +0 -11
- data/lib/mediawiktory/generated/logout.rb +0 -5
- data/lib/mediawiktory/generated/managetags.rb +0 -12
- data/lib/mediawiktory/generated/mapdata.rb +0 -9
- data/lib/mediawiktory/generated/massmessage.rb +0 -10
- data/lib/mediawiktory/generated/mergehistory.rb +0 -13
- data/lib/mediawiktory/generated/mmsites.rb +0 -6
- data/lib/mediawiktory/generated/mobileview.rb +0 -22
- data/lib/mediawiktory/generated/mostviewed.rb +0 -9
- data/lib/mediawiktory/generated/move.rb +0 -19
- data/lib/mediawiktory/generated/mystashedfiles.rb +0 -9
- data/lib/mediawiktory/generated/notifications.rb +0 -22
- data/lib/mediawiktory/generated/oath.rb +0 -7
- data/lib/mediawiktory/generated/oathvalidate.rb +0 -9
- data/lib/mediawiktory/generated/oldreviewedpages.rb +0 -15
- data/lib/mediawiktory/generated/opensearch.rb +0 -12
- data/lib/mediawiktory/generated/options.rb +0 -12
- data/lib/mediawiktory/generated/ores.rb +0 -6
- data/lib/mediawiktory/generated/pageassessments.rb +0 -9
- data/lib/mediawiktory/generated/pageimages.rb +0 -11
- data/lib/mediawiktory/generated/pagepropnames.rb +0 -8
- data/lib/mediawiktory/generated/pageprops.rb +0 -8
- data/lib/mediawiktory/generated/pageswithprop.rb +0 -11
- data/lib/mediawiktory/generated/pageterms.rb +0 -8
- data/lib/mediawiktory/generated/pagetriageaction.rb +0 -11
- data/lib/mediawiktory/generated/pagetriagelist.rb +0 -21
- data/lib/mediawiktory/generated/pagetriagestats.rb +0 -10
- data/lib/mediawiktory/generated/pagetriagetagging.rb +0 -13
- data/lib/mediawiktory/generated/pagetriagetemplate.rb +0 -7
- data/lib/mediawiktory/generated/pageviews.rb +0 -9
- data/lib/mediawiktory/generated/paraminfo.rb +0 -11
- data/lib/mediawiktory/generated/parse.rb +0 -36
- data/lib/mediawiktory/generated/parsoid-batch.rb +0 -6
- data/lib/mediawiktory/generated/patrol.rb +0 -10
- data/lib/mediawiktory/generated/prefixsearch.rb +0 -10
- data/lib/mediawiktory/generated/projectpages.rb +0 -10
- data/lib/mediawiktory/generated/projects.rb +0 -7
- data/lib/mediawiktory/generated/protect.rb +0 -16
- data/lib/mediawiktory/generated/protectedtitles.rb +0 -14
- data/lib/mediawiktory/generated/purge.rb +0 -15
- data/lib/mediawiktory/generated/query.rb +0 -20
- data/lib/mediawiktory/generated/querypage.rb +0 -9
- data/lib/mediawiktory/generated/random.rb +0 -11
- data/lib/mediawiktory/generated/recentchanges.rb +0 -21
- data/lib/mediawiktory/generated/redirects.rb +0 -11
- data/lib/mediawiktory/generated/references.rb +0 -7
- data/lib/mediawiktory/generated/refresheducation.rb +0 -9
- data/lib/mediawiktory/generated/removeauthenticationdata.rb +0 -8
- data/lib/mediawiktory/generated/resetpassword.rb +0 -9
- data/lib/mediawiktory/generated/review.rb +0 -10
- data/lib/mediawiktory/generated/reviewactivity.rb +0 -10
- data/lib/mediawiktory/generated/revisiondelete.rb +0 -15
- data/lib/mediawiktory/generated/revisions.rb +0 -26
- data/lib/mediawiktory/generated/rollback.rb +0 -14
- data/lib/mediawiktory/generated/rsd.rb +0 -5
- data/lib/mediawiktory/generated/sanitize-mapdata.rb +0 -8
- data/lib/mediawiktory/generated/scribunto-console.rb +0 -10
- data/lib/mediawiktory/generated/search.rb +0 -16
- data/lib/mediawiktory/generated/setglobalaccountstatus.rb +0 -12
- data/lib/mediawiktory/generated/setnotificationtimestamp.rb +0 -18
- data/lib/mediawiktory/generated/setpagelanguage.rb +0 -12
- data/lib/mediawiktory/generated/shortenurl.rb +0 -7
- data/lib/mediawiktory/generated/siteinfo.rb +0 -11
- data/lib/mediawiktory/generated/sitematrix.rb +0 -12
- data/lib/mediawiktory/generated/siteviews.rb +0 -8
- data/lib/mediawiktory/generated/spamblacklist.rb +0 -6
- data/lib/mediawiktory/generated/stabilize.rb +0 -12
- data/lib/mediawiktory/generated/stashedit.rb +0 -16
- data/lib/mediawiktory/generated/stashimageinfo.rb +0 -12
- data/lib/mediawiktory/generated/strikevote.rb +0 -10
- data/lib/mediawiktory/generated/tag.rb +0 -14
- data/lib/mediawiktory/generated/tags.rb +0 -9
- data/lib/mediawiktory/generated/templatedata.rb +0 -12
- data/lib/mediawiktory/generated/templates.rb +0 -11
- data/lib/mediawiktory/generated/thank.rb +0 -9
- data/lib/mediawiktory/generated/titleblacklist.rb +0 -9
- data/lib/mediawiktory/generated/tokens.rb +0 -6
- data/lib/mediawiktory/generated/transcludedin.rb +0 -11
- data/lib/mediawiktory/generated/transcodereset.rb +0 -9
- data/lib/mediawiktory/generated/transcodestatus.rb +0 -5
- data/lib/mediawiktory/generated/ulslocalization.rb +0 -6
- data/lib/mediawiktory/generated/unblock.rb +0 -12
- data/lib/mediawiktory/generated/undelete.rb +0 -13
- data/lib/mediawiktory/generated/unlinkaccount.rb +0 -8
- data/lib/mediawiktory/generated/unreadnotificationpages.rb +0 -9
- data/lib/mediawiktory/generated/upload.rb +0 -24
- data/lib/mediawiktory/generated/usercontribs.rb +0 -19
- data/lib/mediawiktory/generated/userinfo.rb +0 -8
- data/lib/mediawiktory/generated/userrights.rb +0 -13
- data/lib/mediawiktory/generated/users.rb +0 -11
- data/lib/mediawiktory/generated/validatepassword.rb +0 -10
- data/lib/mediawiktory/generated/videoinfo.rb +0 -20
- data/lib/mediawiktory/generated/visualeditor.rb +0 -13
- data/lib/mediawiktory/generated/visualeditoredit.rb +0 -23
- data/lib/mediawiktory/generated/watch.rb +0 -16
- data/lib/mediawiktory/generated/watchlist.rb +0 -20
- data/lib/mediawiktory/generated/watchlistraw.rb +0 -16
- data/lib/mediawiktory/generated/wbentityusage.rb +0 -11
- data/lib/mediawiktory/generated/wblistentityusage.rb +0 -11
- data/lib/mediawiktory/generated/webapp-manifest.rb +0 -5
- data/lib/mediawiktory/generated/wikibase.rb +0 -7
- data/lib/mediawiktory/generated/wikilove.rb +0 -13
- data/lib/mediawiktory/generated/wikisets.rb +0 -10
- data/lib/mediawiktory/generated/zeroconfig.rb +0 -7
- data/lib/mediawiktory/mw_module.rb +0 -324
- data/lib/mediawiktory/page.rb +0 -50
- data/lib/mediawiktory/query.rb +0 -58
- data/script/data/api.yaml +0 -40414
- data/script/lib/api.rb +0 -14
- data/script/lib/module.rb +0 -132
- data/script/lib/parameter.rb +0 -133
- data/script/parse_api.rb +0 -21
- data/test/cache.rb +0 -15
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
module MediaWiktory
|
7
|
+
class Generator
|
8
|
+
class Api < OpenStruct
|
9
|
+
class << self
|
10
|
+
def from_html(source, **metadata)
|
11
|
+
doc = Nokogiri::HTML(source)
|
12
|
+
modules =
|
13
|
+
doc
|
14
|
+
.at('#mw-content-text').children_groups('h3,h4', 'div,p')
|
15
|
+
.map { |title, components| Module.from_html_nodes(title.first._n.text.to_s, components) }
|
16
|
+
|
17
|
+
new(**metadata.merge(modules: modules))
|
18
|
+
end
|
19
|
+
|
20
|
+
def from_url(url)
|
21
|
+
uri = Addressable::URI.parse(url)
|
22
|
+
uri.query_values = {action: :query, meta: :siteinfo, siprop: :general, format: :json}
|
23
|
+
meta = JSON.parse(open(uri).read)['query']['general']
|
24
|
+
uri.query_values = {action: :help, recursivesubmodules: true}
|
25
|
+
html = open(uri).read
|
26
|
+
from_html(html, site: OpenStruct.new(name: meta['sitename'], base: meta['base']))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(**source)
|
31
|
+
super(source.merge(
|
32
|
+
main: source[:modules].detect(&:main?),
|
33
|
+
actions: source[:modules].select(&:action?),
|
34
|
+
non_actions: source[:modules].reject { |m| m.main? || m.action? }
|
35
|
+
))
|
36
|
+
modules.each { |m| m.api = self }
|
37
|
+
|
38
|
+
# "generators" parameter for action=query are special. They are not defined by modules, but
|
39
|
+
# by "You can use this or that module, just add 'g' to it".
|
40
|
+
query = actions.detect { |a| a.name == 'query' } or return
|
41
|
+
query.params.detect { |p| p.name == 'generator' }
|
42
|
+
.tap do |query_generator|
|
43
|
+
|
44
|
+
self.generators =
|
45
|
+
query_generator
|
46
|
+
.modules.map { |mod|
|
47
|
+
mod.merge(
|
48
|
+
name: "g-#{mod.name}",
|
49
|
+
description: "#{mod.description} _Generator module: for fetching pages corresponding to request._",
|
50
|
+
params: mod.params.reject { |p| p.name == 'prop' }.map(&:dup)
|
51
|
+
).tap { |m| m.prefix = "g#{m.prefix}" }
|
52
|
+
}
|
53
|
+
|
54
|
+
modules.concat(generators)
|
55
|
+
non_actions.concat(generators)
|
56
|
+
query_generator.vals =
|
57
|
+
query_generator.vals.map { |v| {name: v.name, module: "g-#{v.module}"} }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def module(name)
|
62
|
+
candidates = modules.reject(&:action?).select { |m| m.name == name }
|
63
|
+
candidates.empty? and fail ArgumentError, "Module #{name} not found"
|
64
|
+
candidates.count == 1 or fail ArgumentError, "Module #{name} is ambigous"
|
65
|
+
candidates.first
|
66
|
+
end
|
67
|
+
|
68
|
+
include Renderable
|
69
|
+
|
70
|
+
def main_template
|
71
|
+
'api.rb'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MediaWiktory
|
4
|
+
class Generator
|
5
|
+
class Module < Hashie::Mash
|
6
|
+
disable_warnings
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def from_html_nodes(title, nodes)
|
10
|
+
type, name, prefix = title.scan(/^([a-z]+)=([^(]+)(?:\s+\((.+)\))?$/).flatten
|
11
|
+
|
12
|
+
new(
|
13
|
+
type: type._n.to_sym || :main,
|
14
|
+
name: name || '',
|
15
|
+
prefix: prefix,
|
16
|
+
description: extract_description(nodes),
|
17
|
+
flags: extract_flags(nodes),
|
18
|
+
params: extract_params(nodes, prefix)
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def extract_description(nodes)
|
25
|
+
nodes.detect { |n| n.name == 'p' }._n.text.to_s.tr("\n", ' ').strip
|
26
|
+
end
|
27
|
+
|
28
|
+
def extract_flags(nodes)
|
29
|
+
flags = nodes.detect { |n| n['class']._n.include?('apihelp-flags') } or return []
|
30
|
+
flags.search('ul li > span').to_a
|
31
|
+
.map { |el| {id: el.attr('class'), text: el.text} }
|
32
|
+
.map { |h| h.merge(role: h[:id].sub(/^apihelp-(flag-)?/, '')) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def extract_params(nodes, prefix)
|
36
|
+
params = nodes.detect { |n| n['class']._n.include?('apihelp-parameters') } or return []
|
37
|
+
params.at('dl').each_term.to_a
|
38
|
+
.map { |dts, dds| Param.from_html_nodes(dts.first.text, dds, prefix: prefix) }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :api
|
43
|
+
|
44
|
+
def initialize(*)
|
45
|
+
super
|
46
|
+
# 'action' should not be rendered as "available default params" for api initializer
|
47
|
+
params.reject! { |p| p.name == 'action' } if main?
|
48
|
+
end
|
49
|
+
|
50
|
+
def prefix=(pre)
|
51
|
+
super
|
52
|
+
params.each { |p| p.prefix = pre }
|
53
|
+
end
|
54
|
+
|
55
|
+
def inspect
|
56
|
+
"#<#{self.class.name} #{name}>"
|
57
|
+
end
|
58
|
+
|
59
|
+
def action?
|
60
|
+
type == :action
|
61
|
+
end
|
62
|
+
|
63
|
+
def main?
|
64
|
+
type == :main
|
65
|
+
end
|
66
|
+
|
67
|
+
include Renderable
|
68
|
+
|
69
|
+
def main_template
|
70
|
+
'action_class.rb'
|
71
|
+
end
|
72
|
+
|
73
|
+
def api=(api)
|
74
|
+
@api = api
|
75
|
+
params.each { |p| p.api = api }
|
76
|
+
end
|
77
|
+
|
78
|
+
def description
|
79
|
+
super.split("\n").join("\n#\n# ")
|
80
|
+
end
|
81
|
+
|
82
|
+
def params
|
83
|
+
# TODO: some actions have "rest of parameters, see there".
|
84
|
+
# Currently, we ignore it
|
85
|
+
(super || []).reject { |p| p.name == '*' || main? && p.name == 'action' }
|
86
|
+
end
|
87
|
+
|
88
|
+
def http_method
|
89
|
+
post? ? 'Post' : 'Get'
|
90
|
+
end
|
91
|
+
|
92
|
+
def post?
|
93
|
+
flags.any? { |f| f.id == 'apihelp-flag-mustbeposted' }
|
94
|
+
end
|
95
|
+
|
96
|
+
def method_name
|
97
|
+
name.sub(/^g-/, '').split('-').join('_')
|
98
|
+
end
|
99
|
+
|
100
|
+
def class_name
|
101
|
+
name.split('-').map(&:capitalize).join
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,271 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MediaWiktory
|
4
|
+
class Generator
|
5
|
+
class Param < Hashie::Mash
|
6
|
+
disable_warnings
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def from_html_nodes(name, dds, prefix: nil)
|
10
|
+
new(
|
11
|
+
full_name: name,
|
12
|
+
name: name.sub(/^#{prefix}/, ''),
|
13
|
+
prefix: prefix,
|
14
|
+
description: extract_description(dds),
|
15
|
+
type: extract_type(dds),
|
16
|
+
vals: extract_values(dds)
|
17
|
+
|
18
|
+
# TODO: lost params
|
19
|
+
# limit: extract_limit(dds),
|
20
|
+
# default: extract_default(dds)
|
21
|
+
|
22
|
+
# TODO: mandatoriness:
|
23
|
+
# * optional
|
24
|
+
# * mandatory
|
25
|
+
# * this OR that is mandatory
|
26
|
+
# * this AND that can't intersect
|
27
|
+
# * and so on
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def extract_description(els)
|
32
|
+
els.detect { |e| e.attr('class') == 'description' }.at('p')._n.text.to_s.strip.tr("\n", ' ')
|
33
|
+
end
|
34
|
+
|
35
|
+
def extract_type(els)
|
36
|
+
# TODO: "Expiry time. May be relative (e.g. 5 months or 2 weeks) or absolute
|
37
|
+
# (e.g. 2014-09-18T12:34:56Z). If set to infinite, indefinite, or never, the block will
|
38
|
+
# never expire."
|
39
|
+
els.select { |e| e.attr('class') == 'info' }.each do |el|
|
40
|
+
case el.text
|
41
|
+
when /^Type: ([^\(]+)\s*($|\()/
|
42
|
+
return Regexp.last_match(1).strip
|
43
|
+
when /^Values \(separate with \|/,
|
44
|
+
/^Separate values with \|/
|
45
|
+
return 'list'
|
46
|
+
when /^One of the following values:/
|
47
|
+
return 'enum'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
'string'
|
51
|
+
end
|
52
|
+
|
53
|
+
def extract_default(els)
|
54
|
+
els.each { |el| return Regexp.last_match(1) if el =~ /^Default:\s*(.+)$/ }
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
|
58
|
+
def extract_values(els)
|
59
|
+
# 1. try dl from definition
|
60
|
+
els.detect { |e| e.attr('class') == 'description' }.tap { |d|
|
61
|
+
if d.at('dl')
|
62
|
+
return d.at('dl').each_term.map { |dts, dds|
|
63
|
+
{name: dts.first.text, description: dds.first.text.tr("\n", ' ')}
|
64
|
+
}
|
65
|
+
end
|
66
|
+
}
|
67
|
+
|
68
|
+
# 2. ...or take from info
|
69
|
+
els.select { |e| e.attr('class') == 'info' }.each do |el|
|
70
|
+
if el.text =~
|
71
|
+
/^(?:One of the following values||Values \(separate with \|.*?\)):\s*(.+)$/
|
72
|
+
if el.search('a').count > 1
|
73
|
+
return el.search('a').reject { |a| a.text == 'alternative' }
|
74
|
+
.map { |a|
|
75
|
+
{
|
76
|
+
name: a.text,
|
77
|
+
module: a.attr('href').scan(/^.*[\#+](.+)$/).flatten.first
|
78
|
+
}
|
79
|
+
}
|
80
|
+
else
|
81
|
+
return Regexp.last_match(1).sub(/^Can be empty, or/, '').split(',')
|
82
|
+
.map { |s| s.gsub(/^[[:space:]]|[[:space:]]$/, '') }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
nil
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
attr_accessor :api
|
92
|
+
|
93
|
+
def inspect
|
94
|
+
"#<#{self.class} #{name} (#{type})>"
|
95
|
+
end
|
96
|
+
|
97
|
+
alias_method :to_s, :inspect
|
98
|
+
|
99
|
+
def prefix=(pre)
|
100
|
+
super
|
101
|
+
self.full_name = "#{prefix}#{name}"
|
102
|
+
end
|
103
|
+
|
104
|
+
def full_name
|
105
|
+
self['full_name']._n.include?('-') ? "'#{self['full_name']}'" : self['full_name']
|
106
|
+
end
|
107
|
+
|
108
|
+
def method_name
|
109
|
+
name.tr('-', '_')
|
110
|
+
end
|
111
|
+
|
112
|
+
def modules_hash
|
113
|
+
modules.map { |m| module_in_hash(m) }.join(', ')
|
114
|
+
end
|
115
|
+
|
116
|
+
def enum_values
|
117
|
+
return [] unless vals
|
118
|
+
|
119
|
+
if vals.all? { |v| v.is_a?(String) }
|
120
|
+
vals.map(&:inspect).join(', ')
|
121
|
+
elsif vals.all? { |v| v.is_a?(Hash) && v.key?(:description) }
|
122
|
+
vals.map { |v| v[:name].inspect }.join(', ')
|
123
|
+
elsif modules?
|
124
|
+
vals.map { |v| v[:name].to_sym.inspect }.join(', ')
|
125
|
+
else
|
126
|
+
fail ArgumentError, "Unrenderable values: #{vals}"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def list?
|
131
|
+
type.start_with?('list')
|
132
|
+
end
|
133
|
+
|
134
|
+
def enum?
|
135
|
+
type.start_with?('enum')
|
136
|
+
end
|
137
|
+
|
138
|
+
def impl_type
|
139
|
+
type = real_type.sub(/^list of (.+)s$/, '\1')
|
140
|
+
type = 'string' if type == 'list'
|
141
|
+
type = 'enum of modules' if type == 'module'
|
142
|
+
case type
|
143
|
+
when 'string', 'user name', 'integer', 'integer or max'
|
144
|
+
'string'
|
145
|
+
when 'boolean'
|
146
|
+
'boolean'
|
147
|
+
when 'timestamp'
|
148
|
+
'timestamp'
|
149
|
+
when 'enum'
|
150
|
+
'enum'
|
151
|
+
when 'enum of modules'
|
152
|
+
'enum_of_modules'
|
153
|
+
else
|
154
|
+
fail ArgumentError, "Cannot render #{real_type} to Ruby still"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def ruby_type
|
159
|
+
case real_type
|
160
|
+
when 'string', 'user name', 'enum'
|
161
|
+
'String'
|
162
|
+
when 'boolean'
|
163
|
+
'true, false'
|
164
|
+
when 'integer'
|
165
|
+
'Integer'
|
166
|
+
when 'integer or max'
|
167
|
+
'Integer, "max"'
|
168
|
+
when 'list', 'list of user names', 'list of enums'
|
169
|
+
'Array<String>'
|
170
|
+
when 'list of integers'
|
171
|
+
'Array<Integer>'
|
172
|
+
when 'list of timestamps'
|
173
|
+
'Array<Time>'
|
174
|
+
when 'enum of modules'
|
175
|
+
'Symbol'
|
176
|
+
when 'list of modules'
|
177
|
+
'Array<Symbol>'
|
178
|
+
when 'timestamp'
|
179
|
+
'Time'
|
180
|
+
else
|
181
|
+
fail ArgumentError, "Cannot render #{real_type} to Ruby still"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def module_in_hash(m)
|
186
|
+
"#{m.method_name}: Modules::#{m.class_name}"
|
187
|
+
end
|
188
|
+
|
189
|
+
def param_docs
|
190
|
+
case real_type
|
191
|
+
when 'enum'
|
192
|
+
" One of #{render_vals}."
|
193
|
+
when 'enum of modules'
|
194
|
+
' Selecting an option includes tweaking methods from corresponding module:'
|
195
|
+
when 'list of modules'
|
196
|
+
' All selected options include tweaking methods from corresponding modules:'
|
197
|
+
when 'list of enums'
|
198
|
+
" Allowed values: #{render_vals}."
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
def render_vals
|
203
|
+
if vals.all? { |v| v.is_a?(String) }
|
204
|
+
vals.map(&:inspect).join(', ')
|
205
|
+
elsif vals.all? { |v| v.is_a?(Hash) && v.key?(:description) }
|
206
|
+
vals.map { |v| "#{v[:name].inspect} (#{v[:description].chomp('.')})" }.join(', ')
|
207
|
+
elsif modules?
|
208
|
+
else
|
209
|
+
fail ArgumentError, "Unrenderable values: #{vals}"
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def param_def
|
214
|
+
case real_type
|
215
|
+
when 'boolean'
|
216
|
+
'' # just sets `true` if method was called
|
217
|
+
when /^list/
|
218
|
+
'*values'
|
219
|
+
else
|
220
|
+
'value'
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
def value_conv
|
225
|
+
case real_type
|
226
|
+
when 'boolean'
|
227
|
+
"'true'" # on false, merge(param: something) not rendered at all
|
228
|
+
when 'list of modules'
|
229
|
+
"modules_to_hash(values, #{modules.map { |m| m.name.to_sym }})"
|
230
|
+
when 'list of timestamps'
|
231
|
+
"values.map(&:iso8601).join('|')"
|
232
|
+
when /^list/
|
233
|
+
"values.join('|')"
|
234
|
+
when 'enum of modules'
|
235
|
+
"module_to_hash(value, #{modules.map { |m| m.name.to_sym }})"
|
236
|
+
when 'timestamp'
|
237
|
+
'value.iso8601'
|
238
|
+
else
|
239
|
+
'value.to_s'
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
def real_type
|
244
|
+
case type
|
245
|
+
when 'enum'
|
246
|
+
modules? ? 'enum of modules' : 'enum'
|
247
|
+
when 'list'
|
248
|
+
if modules?
|
249
|
+
'list of modules'
|
250
|
+
elsif vals
|
251
|
+
'list of enums'
|
252
|
+
else
|
253
|
+
'list'
|
254
|
+
end
|
255
|
+
else
|
256
|
+
type
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def modules?
|
261
|
+
vals._n.all? { |v| v.is_a?(Hash) && v.key?(:module) }
|
262
|
+
end
|
263
|
+
|
264
|
+
def modules
|
265
|
+
modules? ? vals.map { |v| api.module(v.module) } : []
|
266
|
+
end
|
267
|
+
|
268
|
+
include Renderable
|
269
|
+
end
|
270
|
+
end
|
271
|
+
end
|