diff --git a/.Rbuildignore b/.Rbuildignore
index 05b44ca7..5c5ff985 100644
--- a/.Rbuildignore
+++ b/.Rbuildignore
@@ -12,4 +12,4 @@ Dockerfile
^archive$
^data-raw$
.azure/
-LICENSE.md
+^LICENSE\.md$
diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 3ecfd368..e6bd94fb 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -8,7 +8,7 @@ jobs:
shell: Rscript {0}
container:
# update muggle here and in Dockerfile
- image: subugoe/muggle-buildtime-onbuild:f7fb6146d8712c4bffb024f4d4f40c40ffab5598
+ image: subugoe/muggle-buildtime-onbuild:0.1.1-20210126
env:
MUGGLE_PKG_NAME: ${{ github.event.repository.name }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -32,8 +32,7 @@ jobs:
R_LIBS_SITE: $R_LIBS_RUNTIME_GH
run: remotes::install_deps(dependencies = TRUE)
- name: Check
- # TODO error out on all but note again https://github.com/subugoe/hoad/issues/194
- run: devtools::check(error_on = "error")
+ run: devtools::check(error_on = "warning")
- name: Build Package Website
run: |
pkgdown::build_site(override = list(new_process = FALSE))
diff --git a/DESCRIPTION b/DESCRIPTION
index f34db353..6e33e30f 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,6 +1,6 @@
Package: metacheck
Title: Crossref Metadata Compliance
-Version: 0.1.0
+Version: 0.1.0.9000
Authors@R:
c(
person(
@@ -17,6 +17,13 @@ Authors@R:
email = "info@maxheld.de",
comment = c(ORCID = "0000-0002-4703-5388")
),
+ person(
+ given = "Henrieke",
+ family = "Walter",
+ role = c("aut"),
+ email = "henrieke.walter@sub.uni-goettingen.de",
+ comment = c(ORCID = "0000-0003-3313-7364")
+ ),
person(
given = "Göttingen State and University Library",
role = c("cph", "fnd")
@@ -37,11 +44,11 @@ Authors@R:
Description:
Automatically check metadata compliance for hybrid open access (OA).
Includes a webapp to send compliance reports by email.
-License: MIT + file LICENSE
+License: AGPL (>= 3)
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
-RoxygenNote: 7.1.1
+RoxygenNote: 7.1.1.9999
Imports:
rcrossref,
dplyr,
@@ -51,7 +58,6 @@ Imports:
blastula,
stringi,
lubridate,
- tidyselect,
shiny,
htmltools,
reactable,
@@ -65,13 +71,14 @@ Imports:
checkmate,
readr,
gluedown,
- tibble
+ tibble,
+ rmarkdown,
+ glue,
+ fs
Suggests:
testthat,
subugoetheme,
- shinycaas,
- rmarkdown,
- bench
+ shinycaas
URL: https://subugoe.github.io/metacheck, https://github.com/subugoe/metacheck
BugReports: https://github.com/subugoe/metacheck/issues
Remotes:
@@ -79,5 +86,5 @@ Remotes:
subugoe/shinycaas@1.0.0,
subugoe/rcrossref@51d036808c1dc1f46cf1bad1b136e97ad213e162,
rstudio/shinyvalidate@420aec079dbd2c0e12bf8350f4452d105a9cc45c,
- subugoe/biblids@d44010e7d0b7d2eef016ef33a05d29e67417dfe6
+ subugoe/biblids@88735e4146dfefb576ef9558211822f4bb099bec
Config/testthat/edition: 3
diff --git a/Dockerfile b/Dockerfile
index 6882fb35..034301e9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-ARG MUGGLE_TAG=f7fb6146d8712c4bffb024f4d4f40c40ffab5598
+ARG MUGGLE_TAG=0.1.1-20210126
FROM subugoe/muggle-buildtime-onbuild:${MUGGLE_TAG} as buildtime
FROM subugoe/muggle-runtime-onbuild:${MUGGLE_TAG} as runtime
CMD shinycaas::shiny_opts_az(); metacheck::runMetacheck()
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index dfe45578..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,2 +0,0 @@
-YEAR: 2020
-COPYRIGHT HOLDER: Najko Jahn
diff --git a/LICENSE.md b/LICENSE.md
index 6904a457..fab6548e 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,21 +1,659 @@
-# MIT License
-
-Copyright (c) 2020 Najko Jahn
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+GNU Affero General Public License
+=================================
+
+_Version 3, 19 November 2007_
+_Copyright (C) 2007 Free Software Foundation, Inc. <>_
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+## Preamble
+
+The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains
+free software for all its users.
+
+When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing
+under this license.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+## TERMS AND CONDITIONS
+
+### 0. Definitions.
+
+"This License" refers to version 3 of the GNU Affero General Public
+License.
+
+"Copyright" also means copyright-like laws that apply to other kinds
+of works, such as semiconductor masks.
+
+"The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of
+an exact copy. The resulting work is called a "modified version" of
+the earlier work or a work "based on" the earlier work.
+
+A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user
+through a computer network, with no transfer of a copy, is not
+conveying.
+
+An interactive user interface displays "Appropriate Legal Notices" to
+the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+### 1. Source Code.
+
+The "source code" for a work means the preferred form of the work for
+making modifications to it. "Object code" means any non-source form of
+a work.
+
+A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can
+regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same
+work.
+
+### 2. Basic Permissions.
+
+All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force.
+You may convey covered works to others for the sole purpose of having
+them make modifications exclusively for you, or provide you with
+facilities for running those works, provided that you comply with the
+terms of this License in conveying all material for which you do not
+control copyright. Those thus making or running the covered works for
+you must do so exclusively on your behalf, under your direction and
+control, on terms that prohibit them from making any copies of your
+copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the
+conditions stated below. Sublicensing is not allowed; section 10 makes
+it unnecessary.
+
+### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such
+circumvention is effected by exercising rights under this License with
+respect to the covered work, and you disclaim any intention to limit
+operation or modification of the work as a means of enforcing, against
+the work's users, your or third parties' legal rights to forbid
+circumvention of technological measures.
+
+### 4. Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+### 5. Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these
+conditions:
+
+- a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+- b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under
+ section 7. This requirement modifies the requirement in section 4
+ to "keep intact all notices".
+- c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+- d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+### 6. Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these
+ways:
+
+- a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+- b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the Corresponding
+ Source from a network server at no charge.
+- c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+- d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+- e) Convey the object code using peer-to-peer transmission,
+ provided you inform other peers where the object code and
+ Corresponding Source of the work are being offered to the general
+ public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal,
+family, or household purposes, or (2) anything designed or sold for
+incorporation into a dwelling. In determining whether a product is a
+consumer product, doubtful cases shall be resolved in favor of
+coverage. For a particular product received by a particular user,
+"normally used" refers to a typical or common use of that class of
+product, regardless of the status of the particular user or of the way
+in which the particular user actually uses, or expects or is expected
+to use, the product. A product is a consumer product regardless of
+whether the product has substantial commercial, industrial or
+non-consumer uses, unless such uses represent the only significant
+mode of use of the product.
+
+"Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to
+install and execute modified versions of a covered work in that User
+Product from a modified version of its Corresponding Source. The
+information must suffice to ensure that the continued functioning of
+the modified object code is in no case prevented or interfered with
+solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or
+updates for a work that has been modified or installed by the
+recipient, or for the User Product in which it has been modified or
+installed. Access to a network may be denied when the modification
+itself materially and adversely affects the operation of the network
+or violates the rules and protocols for communication across the
+network.
+
+Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+### 7. Additional Terms.
+
+"Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders
+of that material) supplement the terms of this License with terms:
+
+- a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+- b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+- c) Prohibiting misrepresentation of the origin of that material,
+ or requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+- d) Limiting the use for publicity purposes of names of licensors
+ or authors of the material; or
+- e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+- f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions
+ of it) with contractual assumptions of liability to the recipient,
+ for any liability that these contractual assumptions directly
+ impose on those licensors and authors.
+
+All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions; the
+above requirements apply either way.
+
+### 8. Termination.
+
+You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+### 9. Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run
+a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+### 10. Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+### 11. Patents.
+
+A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+A contributor's "essential patent claims" are all patent claims owned
+or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+A patent license is "discriminatory" if it does not include within the
+scope of its coverage, prohibits the exercise of, or is conditioned on
+the non-exercise of one or more of the rights that are specifically
+granted under this License. You may not convey a covered work if you
+are a party to an arrangement with a third party that is in the
+business of distributing software, under which you make payment to the
+third party based on the extent of your activity of conveying the
+work, and under which the third party grants, to any of the parties
+who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by
+you (or copies made from those copies), or (b) primarily for and in
+connection with specific products or compilations that contain the
+covered work, unless you entered into that arrangement, or that patent
+license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+### 12. No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under
+this License and any other pertinent obligations, then as a
+consequence you may not convey it at all. For example, if you agree to
+terms that obligate you to collect a royalty for further conveying
+from those to whom you convey the Program, the only way you could
+satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+
+### 13. Remote Network Interaction; Use with the GNU General Public License.
+
+Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your
+version supports such interaction) an opportunity to receive the
+Corresponding Source of your version by providing access to the
+Corresponding Source from a network server at no charge, through some
+standard or customary means of facilitating copying of software. This
+Corresponding Source shall include the Corresponding Source for any
+work covered by version 3 of the GNU General Public License that is
+incorporated pursuant to the following paragraph.
+
+Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+### 14. Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions
+of the GNU Affero General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever
+published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions
+of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+### 15. Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+### 16. Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
+NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
+LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
+TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
+PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+### 17. Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+## How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively state
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper
+mail.
+
+If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for
+the specific requirements.
+
+You should also get your employer (if you work as a programmer) or
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. For more information on this, and how to apply and follow
+the GNU AGPL, see .
diff --git a/NAMESPACE b/NAMESPACE
index 5a703fee..e3461cfa 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -1,9 +1,8 @@
# Generated by roxygen2: do not edit by hand
-export("%>%")
-export(add_attachment_xlsx)
export(cr_compliance_overview)
export(cr_funder_df)
+export(cr_has_orcid)
export(cr_license_ind)
export(cr_md_ind)
export(cr_tdm_df)
@@ -12,6 +11,7 @@ export(gather_ind_table)
export(get_compliant_cc)
export(get_cr_md)
export(get_license_md)
+export(gh_file)
export(ind_table_to_gt)
export(license_check)
export(license_normalise)
@@ -25,40 +25,7 @@ export(render_email)
export(runMetacheck)
export(send_email)
export(vor_issue)
-import(gt)
-import(reactable)
-importFrom(base64enc,base64decode)
-importFrom(dplyr,`%>%`)
-importFrom(dplyr,across)
-importFrom(dplyr,anti_join)
-importFrom(dplyr,arrange)
-importFrom(dplyr,bind_cols)
-importFrom(dplyr,bind_rows)
-importFrom(dplyr,desc)
-importFrom(dplyr,distinct)
-importFrom(dplyr,filter)
-importFrom(dplyr,group_by)
-importFrom(dplyr,inner_join)
-importFrom(dplyr,left_join)
-importFrom(dplyr,mutate)
-importFrom(dplyr,n_distinct)
-importFrom(dplyr,one_of)
-importFrom(dplyr,rename)
-importFrom(dplyr,select)
-importFrom(dplyr,summarise)
-importFrom(gh,gh)
-importFrom(htmltools,div)
+import(dplyr)
+import(purrr)
+import(tidyr)
importFrom(magrittr,"%>%")
-importFrom(purrr,"%||%")
-importFrom(purrr,keep)
-importFrom(purrr,map)
-importFrom(purrr,map_df)
-importFrom(rcrossref,cr_works)
-importFrom(readr,read_csv)
-importFrom(stringi,stri_extract)
-importFrom(stringi,stri_match_all_regex)
-importFrom(tibble,tribble)
-importFrom(tidyr,pivot_longer)
-importFrom(tidyr,unnest)
-importFrom(tidyselect,any_of)
-importFrom(tidyselect,matches)
diff --git a/R/metacheck.R b/R/communicate.R
similarity index 87%
rename from R/metacheck.R
rename to R/communicate.R
index 90aed776..74ddb15b 100644
--- a/R/metacheck.R
+++ b/R/communicate.R
@@ -1,6 +1,3 @@
-#' @keywords internal
-"_PACKAGE"
-
#' Start web application
#' @inheritDotParams rmarkdown::run
#' @inherit rmarkdown::run
diff --git a/R/cr_md_cc.R b/R/cr_md_cc.R
index 12c0d7e5..81a8814f 100644
--- a/R/cr_md_cc.R
+++ b/R/cr_md_cc.R
@@ -1,13 +1,10 @@
#' Extract and validate Crossref license metadata
#'
-#' @details Workflow to check for compliant open content license metadata in Crossref.
-#' License metadata is considered as compliant, if a Creative Commons license is
-#' provided for the version-of-record without delay indicated by the license date.
+#' Workflow to check for compliant open content license metadata in Crossref.
+#' License metadata is considered as compliant, if a Creative Commons license is provided for the version-of-record without delay indicated by the license date.
#'
#' @param cr crossref metadata using [get_cr_md()]
-#'
-#' @importFrom dplyr `%>%` bind_rows bind_cols filter mutate anti_join distinct left_join
-#'
+#' @family transform
#' @export
license_check <- function(cr) {
if (!"license" %in% colnames(cr)) {
@@ -60,15 +57,11 @@ license_check <- function(cr) {
}
return(out)
}
+
#' Extract license info from Crossref metadata
-#'
-#' @param cr crossref metadata using [get_cr_md()]
-#'
-#' @importFrom dplyr `%>%` mutate filter
-#' @importFrom tidyr unnest
-#' @importFrom stringi stri_extract
+#' @inheritParams license_check
+#' @family transform
#' @export
-#'
get_license_md <- function(cr) {
cr %>%
select(doi, license) %>%
@@ -77,15 +70,12 @@ get_license_md <- function(cr) {
gsub("/", "", .)
)
}
+
#' Extract records with compliant CC license metadata
#'
-#' @details In order to be compliant,
-#' CC license has to apply to version of record and must be valid
-#' without delay.
-#'
-#' @param license_df normalized license metadata from [license_df()]
-#'
-#' @importFrom dplyr `%>%` mutate filter
+#' In order to be compliant, CC license has to apply to version of record and must be valid without delay.
+#' @param license_df normalized license metadata from [license_check()]
+#' @family transform
#' @export
get_compliant_cc <- function(license_df) {
license_df %>%
@@ -97,16 +87,13 @@ get_compliant_cc <- function(license_df) {
delay.in.days == 0) %>%
mutate(check_result = "All fine!")
}
+
#' Extract records with CC license not applied to version of records
#'
-#' @details In order to be compliant,
-#' CC license has to apply to version of record and must be valid
-#' without delay.
-#'
-#' @param license_df normalized license metadata from [license_df()]
+#' In order to be compliant, CC license has to apply to version of record and must be valid without delay.
+#' @inheritParams get_compliant_cc
#' @param compliant_dois DOIs representing records with valid CC info
-#'
-#' @importFrom dplyr `%>%` mutate filter
+#' @family transform
#' @export
vor_issue <- function(license_df, compliant_dois) {
license_df %>%
diff --git a/R/cr_md_fetch.R b/R/cr_md_fetch.R
index ddad1682..f2abc0a4 100644
--- a/R/cr_md_fetch.R
+++ b/R/cr_md_fetch.R
@@ -1,37 +1,11 @@
-#' Get Crossref metadata from API
-#'
-#' @param dois character vector with DOIs
-#' @param .progress show progress bar, use "none" if no progress should be
-#' displayed
-#'
-#' @importFrom rcrossref cr_works
-#'
-#' @export
-get_cr_md <- function(dois, .progress = "text") {
- checkmate::assert_character(dois, any.missing = FALSE, unique = TRUE)
- tt <- rcrossref::cr_works(dois = dois, .progress = .progress)[["data"]]
- if (!is.null(tt)) {
- out <- tt %>%
- mutate(issued = lubridate::parse_date_time(issued, c("y", "ymd", "ym"))) %>%
- mutate(issued_year = lubridate::year(issued))
- } else {
- out <- NULL
- }
- out
-}
#' License checker
#'
-#' Retrieves records from Crossref metadata where
-#' the version of record (vor), i.e. publisher version
-#' is provided under a Creative Commons license without delay.
-#'
-#' @param cr tibble with Crossref metadata retrieved from
-#' API with `rcrossref:.cr_works()`
-#' @importFrom tidyr unnest
-#' @importFrom dplyr `%>%` select mutate filter
+#' Retrieves records from Crossref metadata where the version of record (vor), i.e. publisher version is provided under a Creative Commons license without delay.
#'
+#' @param cr
+#' tibble with Crossref metadata retrieved from API with `rcrossref:.cr_works()`
+#' @family transform
#' @export
-#'
license_val <- function(cr) {
if (!is.null(cr))
license_df <- cr %>%
@@ -48,15 +22,13 @@ license_val <- function(cr) {
#' Obtain records with non-compliant license information
#'
#' @description In case license metadata do not comply, what are the reasons:
-#' - Did the publisher provide license metadata for the article?
-#' - Is the article provided under a CC license?
-#' - Did the CC license apply immediately after publication?
-#'
-#' @param cr tibble with non-compliant license metadata retrieved from the
-#' Crossref API with `rcrossref:.cr_works()`
-#' @importFrom tidyr unnest
-#' @importFrom dplyr `%>%` select filter
+#' - Did the publisher provide license metadata for the article?
+#' - Is the article provided under a CC license?
+#' - Did the CC license apply immediately after publication?
#'
+#' @param cr
+#' tibble with non-compliant license metadata retrieved from the Crossref API with `rcrossref:.cr_works()`
+#' @family transform
#' @export
license_report <- function(cr) {
faulty_case <- cr %>%
@@ -84,10 +56,8 @@ license_report <- function(cr) {
}
#' Normalise license info from Crossref
#'
-#' @param cr tibble with non-compliant license metadata retrieved from the
-#' Crossref API with `rcrossref:.cr_works()`
-#' @importFrom dplyr `%>%` select filter
-#'
+#' @inheritParams license_report
+#' @family transform
#' @export
license_normalise <- function(cr) {
license_val(cr) %>%
diff --git a/R/cr_md_funder.R b/R/cr_md_funder.R
index 678b1617..01baaf43 100644
--- a/R/cr_md_funder.R
+++ b/R/cr_md_funder.R
@@ -1,10 +1,7 @@
#' Get funder list from Crossref metadata
#'
#' @param cr crossref metadata using [get_cr_md()]
-#'
-#' @importFrom dplyr `%>%` filter select rename
-#' @importFrom tidyr unnest
-#'
+#' @family transform
#' @export
cr_funder_df <- function(cr) {
if (!"funder" %in% colnames(cr)) {
diff --git a/R/cr_md_ind.R b/R/cr_md_ind.R
index 860f4509..0e182515 100644
--- a/R/cr_md_ind.R
+++ b/R/cr_md_ind.R
@@ -1,9 +1,7 @@
#' License overview
#'
#' @param cr crossref metadata
-#'
-#' @importFrom dplyr `%>%` group_by summarise mutate filter arrange desc n_distinct
-#'
+#' @family transform
#' @export
cr_license_ind <- function(cr) {
license_normalise(cr) %>%
@@ -12,12 +10,11 @@ cr_license_ind <- function(cr) {
arrange(desc(articles)) %>%
mutate(ind_group = "CC licenses")
}
+
#' TDM overview
#'
#' @param cr crossref metadata
-#'
-#' @importFrom dplyr `%>%` group_by summarise mutate filter
-#' @importFrom tidyr unnest
+#' @family transform
#' @export
cr_tdm_ind <- function(cr) {
cr %>%
@@ -28,13 +25,12 @@ cr_tdm_ind <- function(cr) {
summarise(articles = n_distinct(doi)) %>%
mutate(ind_group = "TDM")
}
+
#' Other types of relevant metadata
#'
#' @param cr crossref metadata
#' @param .group group by variable, like publisher
-#'
-#' @importFrom tidyr pivot_longer
-#' @importFrom dplyr `%>%` group_by summarise mutate
+#' @family transform
#' @export
cr_md_ind <- function(cr, .group) {
cr %>%
@@ -48,10 +44,11 @@ cr_md_ind <- function(cr, .group) {
tidyr::pivot_longer(1:4, names_to = "type", values_to = "articles") %>%
mutate(ind_group = "Others")
}
+
#' Create compliance overview table
#'
#' @param cr crossref metadata
-#' @importFrom dplyr `%>%` group_by summarise mutate filter arrange n_distinct bind_rows
+#' @family visualize
#' @export
gather_ind_table <- function(cr) {
# get indicators
@@ -63,13 +60,13 @@ gather_ind_table <- function(cr) {
mutate(all = n_distinct(cr$doi))%>%
mutate(prop = articles / all * 100) %>%
select(-all) %>%
- mutate(prop_bar = map(prop, ~bar_chart(value = .x, color = "#00bfc4")))
+ mutate(prop_bar = purrr::map(prop, ~bar_chart(value = .x, color = "#00bfc4")))
}
+
#' GT representation of compliance overview table
#'
-#' @import gt
#' @param ind_table tibble compliance overview table
-#'
+#' @family visualize
#' @export
ind_table_to_gt <- function(ind_table) {
gt::gt(ind_table) %>%
@@ -78,77 +75,72 @@ ind_table_to_gt <- function(ind_table) {
value = "Artikel",
prop = "Anteil",
prop_bar = "") %>%
- tab_style(
- style = cell_text(color = "black", weight = "bold"),
+ gt::tab_style(
+ style = gt::cell_text(color = "black", weight = "bold"),
locations = list(
- cells_column_labels(everything())
+ gt::cells_column_labels(everything())
)
) %>%
- cols_width(
- vars(name) ~ px(150)
+ gt::cols_width(
+ vars(name) ~ gt::px(150)
) %>%
- cols_width(
- vars(prop_bar) ~ px(100)
+ gt::cols_width(
+ vars(prop_bar) ~ gt::px(100)
) %>%
- fmt_number(
+ gt::fmt_number(
columns = vars(prop),
decimals = 0,
pattern = "{x}%") %>%
- cols_align(align = "right",
+ gt::cols_align(align = "right",
columns = vars(value, prop)) %>%
- cols_align(align = "left",
+ gt::cols_align(align = "left",
columns = vars(prop_bar)) %>%
- tab_options(
- row_group.border.top.width = px(3),
+ gt::tab_options(
+ row_group.border.top.width = gt::px(3),
row_group.border.top.color = "black",
row_group.border.bottom.color = "black",
table_body.hlines.color = "white",
table.border.top.color = "white",
- table.border.top.width = px(3),
+ table.border.top.width = gt::px(3),
table.border.bottom.color = "white",
- table.border.bottom.width = px(3),
+ table.border.bottom.width = gt::px(3),
column_labels.border.bottom.color = "black",
- column_labels.border.bottom.width = px(2)
+ column_labels.border.bottom.width = gt::px(2)
)
}
+
#' Embed HTML Bar Charts in gt
#'
#'
#'
#' @noRd
bar_chart <- function(value, color = "red"){
-
glue::glue("") %>%
as.character() %>%
gt::html()
}
-
#' Reactable represenation of metadata indicators
-#'
-#' Inspired from
-#'
-#' @import reactable
-#'
#' @param ind_table tibble compliance overview table
#' @param fill_col fill color for bar charts (hex code)
-#'
+#' @family visualize
#' @export
react_ind_table <- function(ind_table, fill_col = "#fc5185") {
+ # Inspired from
reactable::reactable(
data = ind_table,
columns = list(
- type = colDef(html = TRUE,
+ type = reactable::colDef(html = TRUE,
name = "",
style = list(fontFamily = "monospace", whiteSpace = "pre")
),
articles = colDef(html = TRUE,
name = "Articles",
defaultSortOrder = "desc",
- format = colFormat(separators = TRUE),
+ format = reactable::colFormat(separators = TRUE),
style = list(fontFamily = "monospace", whiteSpace = "pre")
),
- prop = colDef(html = TRUE,
+ prop = reactable::colDef(html = TRUE,
name = "Share",
defaultSortOrder = "desc",
# Render the bar charts using a custom cell render function
@@ -167,16 +159,9 @@ react_ind_table <- function(ind_table, fill_col = "#fc5185") {
}
#' React bar chart helper
-#'
-#' From
-#'
-#' @importFrom htmltools div
-#'
#' @noRd
react_bar_chart <- function(label, width = "100%", height = "14px", fill = "#00bfc4", background = NULL) {
bar <- htmltools::div(style = list(background = fill, width = width, height = height))
chart <- htmltools::div(style = list(flexGrow = 1, marginLeft = "6px", background = background), bar)
htmltools::div(style = list(display = "flex", alignItems = "center"), label, chart)
}
-
-
diff --git a/R/cr_md_overview.R b/R/cr_md_overview.R
index c599aabf..bf2628ba 100644
--- a/R/cr_md_overview.R
+++ b/R/cr_md_overview.R
@@ -1,10 +1,7 @@
#' Get compliance overview
#'
#' @param cr crossref metadata using [get_cr_md()]
-#'
-#' @importFrom dplyr `%>%` filter select across one_of
-#' @importFrom tidyselect matches
-#'
+#' @family transform
#' @export
cr_compliance_overview <- function(cr) {
# remove potential duplicated
@@ -35,9 +32,12 @@ cr_compliance_overview <- function(cr) {
}
list(cr_overview = cr_overview, cc_license_check = cc_df, tdm = tdm_df, funder_info = funder_df, open_apc_info = open_apc_df )
}
+
#' Check for ORCIDs
#'
-#' @importFrom purrr map
+#' @inheritParams cr_compliance_overview
+#' @family transform
+#' @export
cr_has_orcid <- function(cr) {
cr %>%
select(doi, author) %>%
diff --git a/R/cr_md_tdm.R b/R/cr_md_tdm.R
index 1d6f7cc5..b95dcd2f 100644
--- a/R/cr_md_tdm.R
+++ b/R/cr_md_tdm.R
@@ -1,10 +1,7 @@
#' Get text-mining links from Crossref metadata
#'
#' @param cr crossref metadata using [get_cr_md()]
-#'
-#' @importFrom dplyr `%>%` filter select
-#' @importFrom tidyr unnest
-#'
+#' @family transform
#' @export
cr_tdm_df <- function(cr) {
if("link" %in% colnames(cr)) {
diff --git a/R/email.R b/R/email.R
index 37365632..5dbdd07c 100644
--- a/R/email.R
+++ b/R/email.R
@@ -1,6 +1,7 @@
#' Render email
#' @param dois Character vector of DOIs
#' @param session_id Character vector to identify current shiny session
+#' @family communicate
#' @export
render_email <- function(dois, session_id = NULL) {
cr <- get_cr_md(dois)
@@ -33,8 +34,8 @@ render_email <- function(dois, session_id = NULL) {
}
#' Add attachment to email
-#' @inheritParams blastula::add_attachment
-#' @export
+#' @inheritParams render_email
+#' @noRd
add_attachment_xlsx <- function(email, session_id = NULL) {
blastula::add_attachment(
email = email,
@@ -45,6 +46,7 @@ add_attachment_xlsx <- function(email, session_id = NULL) {
#' Send out email
#' @inheritParams blastula::smtp_send
+#' @family communicate
#' @export
send_email <- function(to, email, cc = "metacheck-support@sub.uni-goettingen.de") {
blastula::smtp_send(
@@ -65,6 +67,7 @@ send_email <- function(to, email, cc = "metacheck-support@sub.uni-goettingen.de"
#' Temp path to write xlsx to
#' @inheritParams render_email
+#' @noRd
xlsx_path <- function(session_id = NULL) {
fs::path_temp(paste0(session_id, "-license_df.xlsx"))
}
diff --git a/R/import.R b/R/import.R
new file mode 100644
index 00000000..29186bca
--- /dev/null
+++ b/R/import.R
@@ -0,0 +1,22 @@
+#' Get Crossref metadata from API
+#'
+#' @param dois character vector with DOIs
+#' @param .progress
+#' show progress bar, use "none" if no progress should be displayed
+#' @family ETL import
+#' @export
+get_cr_md <- function(dois, .progress = "text") {
+ # TODO this can be replaced by class validation
+ # TODO not sure where the best place for the unique assertion is
+ checkmate::assert_character(dois, any.missing = FALSE, unique = TRUE)
+
+ tt <- rcrossref::cr_works(dois = dois, .progress = .progress)[["data"]]
+ if (!is.null(tt)) {
+ out <- tt %>%
+ mutate(issued = lubridate::parse_date_time(issued, c("y", "ymd", "ym"))) %>%
+ mutate(issued_year = lubridate::year(issued))
+ } else {
+ out <- NULL
+ }
+ out
+}
diff --git a/R/metacheck_package.R b/R/metacheck_package.R
new file mode 100644
index 00000000..caf306bf
--- /dev/null
+++ b/R/metacheck_package.R
@@ -0,0 +1,6 @@
+#' @keywords internal
+"_PACKAGE"
+
+#' @importFrom magrittr %>%
+#' @import dplyr tidyr purrr
+NULL
diff --git a/R/open_apc_fetch.R b/R/open_apc_fetch.R
index 3f6c8751..18d1b276 100644
--- a/R/open_apc_fetch.R
+++ b/R/open_apc_fetch.R
@@ -1,18 +1,12 @@
#' Get most current Open APC snapshot
#'
-#' Open APC shares several csv files via GitHub, which contain data about
-#' institutional spending for open access articles.
-#'
-#'
-#' @param open_apc_cols character vector representing Open APC collections.
-#' See `open_apc_collections()` for an overview.
-#'
-#' @importFrom dplyr filter `%>%` inner_join
-#' @importFrom purrr map_df
-#'
-#' @return Tibble with article-level subset of Open APC dataset including
-#' collection.
+#' Open APC shares several csv files via GitHub, which contain data about institutional spending for open access articles.
+#' @param open_apc_cols
+#' character vector representing Open APC collections.
+#' See [open_apc_collections()] for an overview.
#'
+#' @return Tibble with article-level subset of Open APC dataset including collection.
+#' @family transform
#' @export
open_apc_get <- function(open_apc_cols = NULL) {
req <- open_apc_collections() %>%
@@ -21,25 +15,20 @@ open_apc_get <- function(open_apc_cols = NULL) {
out <- purrr::map_df(req, open_apc_get_)
inner_join(out, open_apc_collections(), by = "gh_link")
}
+
#' Get single Open APC dataset using GitHub Data API
-#'
#' @param gh_link URL to GitHub blob
-#'
-#' @importFrom readr read_csv
-#' @importFrom dplyr select mutate
-#' @importFrom tidyselect any_of
-#'
+#' @family transform
#' @export
open_apc_get_ <- function(gh_link = NULL) {
gh_file(gh_link, to_disk = FALSE) %>%
- read_csv() %>%
+ readr::read_csv() %>%
select(any_of(c("institution", "doi", "period", "euro", "is_hybrid", "agreement"))) %>%
mutate(gh_link = gh_link)
}
#' Open APC collections
-#'
-#' @importFrom tibble tribble
+#' @family data
#' @export
open_apc_collections <- function() {
tibble::tribble(
@@ -50,35 +39,30 @@ open_apc_collections <- function() {
"deal-wiley-optout", "https://github.com/OpenAPC/openapc-de/blob/master/data/transformative_agreements/deal_wiley_germany_opt_out/deal_wiley_germany_opt_out.csv"
)
}
+
#' Gets a file from a github repo, using the Data API blob endpoint
#'
-#' This avoids the 1MB limit of the content API and uses [gh::gh] to deal with
-#' authorization and such. See https://developer.github.com/v3/git/blobs/
+#' This avoids the 1MB limit of the content API and uses [gh::gh] to deal with authorization and such.
+#' See https://developer.github.com/v3/git/blobs/
#'
#' @author Noam Ross
#'
-#' @param url the URL of the file to download via API, of the form
-#' `github.com/:owner/:repo/blob/:path
-#' @param ref the reference of a commit: a branch name, tag, or commit SHA
+#' @param url the URL of the file to download via API, of the form `github.com/:owner/:repo/blob/:path
#' @param owner,repo,path,ref alternate way to specify the file. These will
#' override values in `url`
#' @param to_disk,destfile write file to disk (default=TRUE)? If so, use the
#' name in `destfile`, or the original filename by default
-#' @param .token,.api_url,.method,.limit,.send_headers arguments passed on to
-#' [gh::gh]
-#' @importFrom gh gh
-#' @importFrom stringi stri_match_all_regex
-#' @importFrom purrr %||% keep
-#' @importFrom base64enc base64decode
-#' @return Either the local path of the downloaded file (default), or a raw
-#' vector
+#' @inheritParams gh::gh
+#' @family import
+#' @export
+#' @return Either the local path of the downloaded file (default), or a raw vector
gh_file <- function(url = NULL, ref=NULL,
owner = NULL, repo = NULL, path = NULL,
to_disk=TRUE, destfile=NULL,
.token = NULL, .api_url= NULL, .method="GET",
.limit = NULL, .send_headers = NULL) {
if (!is.null(url)) {
- matches <- stri_match_all_regex(
+ matches <- stringi::stri_match_all_regex(
url,
"(github\\.com/)?([^\\/]+)/([^\\/]+)/[^\\/]+/([^\\/]+)/([^\\?]+)"
)
@@ -90,20 +74,20 @@ gh_file <- function(url = NULL, ref=NULL,
pathfile <- basename(path)
}
- dir_contents <- gh(
+ dir_contents <- gh::gh(
"/repos/:owner/:repo/contents/:path",
owner = owner, repo = repo, path = pathdir, ref = ref,
.token = NULL, .api_url = NULL, .method = "GET",
.limit = NULL, .send_headers = NULL
)
file_sha <- keep(dir_contents, ~ .$path == path)[[1]]$sha
- blob <- gh(
+ blob <- gh::gh(
"/repos/:owner/:repo/git/blobs/:sha",
owner = owner, repo = repo, sha = file_sha,
.token = NULL, .api_url = NULL, .method = "GET",
.limit = NULL, .send_headers = NULL
)
- raw <- base64decode(blob[["content"]])
+ raw <- base64enc::base64decode(blob[["content"]])
if (to_disk) {
destfile <- destfile %||% pathfile
writeBin(raw, con = destfile)
diff --git a/R/test_helper.R b/R/test_helper.R
deleted file mode 100644
index cd3c20ed..00000000
--- a/R/test_helper.R
+++ /dev/null
@@ -1,3 +0,0 @@
-is_valid_email <- function(x) {
- grepl("^\\s*[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\s*$", as.character(x), ignore.case=TRUE)
-}
diff --git a/R/utils-pipe.R b/R/utils-pipe.R
deleted file mode 100644
index e79f3d80..00000000
--- a/R/utils-pipe.R
+++ /dev/null
@@ -1,11 +0,0 @@
-#' Pipe operator
-#'
-#' See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details.
-#'
-#' @name %>%
-#' @rdname pipe
-#' @keywords internal
-#' @export
-#' @importFrom magrittr %>%
-#' @usage lhs \%>\% rhs
-NULL
diff --git a/data-raw/sample_dois.R b/data-raw/sample_dois.R
deleted file mode 100644
index 9d6da0e3..00000000
--- a/data-raw/sample_dois.R
+++ /dev/null
@@ -1,7 +0,0 @@
-## code to prepare `sample_dois` dataset goes here
-library(readr)
-library(usethis)
-o_apc <- readr::read_csv("https://raw.githubusercontent.com/OpenAPC/openapc-de/master/data/apc_de.csv")
-sample_dois <- sample(o_apc$doi, 200)
-
-usethis::use_data(sample_dois, overwrite = TRUE)
diff --git a/data/sample_dois.rda b/data/sample_dois.rda
deleted file mode 100644
index 03c31b9a..00000000
Binary files a/data/sample_dois.rda and /dev/null differ
diff --git a/inst/app/index.Rmd b/inst/app/index.Rmd
index 2dbc43f7..5bf766f5 100644
--- a/inst/app/index.Rmd
+++ b/inst/app/index.Rmd
@@ -36,6 +36,7 @@ actionButton(
```{r}
# used to disambiguate excel file names
+# TODO replace with shiny session id #83
session_id <- as.character(floor(runif(1) * 1e20))
# get dois
diff --git a/inst/rmarkdown/templates/email/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/email/skeleton/skeleton.Rmd
deleted file mode 100644
index 84d6715b..00000000
--- a/inst/rmarkdown/templates/email/skeleton/skeleton.Rmd
+++ /dev/null
@@ -1,132 +0,0 @@
----
-output: blastula::blastula_email
-params:
- dois: !r c("10.1007/s10111-020-00626-z", "10.1007/s10444-020-09763-5", "mm")
----
-
-```{r setup, include=FALSE}
-knitr::opts_chunk$set(echo = TRUE)
-library(dplyr)
-library(purrr)
-library(tidyr)
-library(hybridmdchecker)
-```
-
-Hi Michaela,
-
-Thank you for using the HOAD compliance checker. Here's our report.
-
-```{r, echo=FALSE, message=FALSE, warning=FALSE}
-cr <- metacheck::get_cr_md(dois = params$dois)
-```
-
-### Indexing status in Crossref
-
-```{r, echo=FALSE}
-cr_missing <- !setequal(tolower(params$dois), tolower(cr$doi))
-```
-
-```{r not_indexed_in_crossref, eval=cr_missing, echo=FALSE, results = 'asis'}
- glue::glue("
- We found that Crossref indexes **{length(unique(cr$doi))}** out of **{ length(unique(params$dois))}** articles. **The following DOIS were not registered with Crossref:**
-
- ")
- gluedown::md_bullet(params$dois[!tolower(params$dois) %in% tolower(cr$doi)])
-```
-
-
-```{r, echo=FALSE}
-cr_missing <- setequal(tolower(params$dois), tolower(cr$doi))
-```
-
-```{r indexed_in_crossref, eval=cr_missing, echo=FALSE, results = 'asis'}
-glue::glue("All {length(unique(params$dois))} DOIs have metadata in Crossref")
-```
-
-### Compliance overview
-
-```{r, echo=FALSE}
-tt <- gather_ind_table(cr)
-```
-
-
-```{r, echo=FALSE}
-has_license <- nrow(tt[tt$ind_group == "CC licenses",]) > 0
-```
-
-```{r, echo=FALSE, results='asis', eval = 'has_license'}
-ind_table_to_gt(tt)
-```
-
-
-```{r, eval=has_license, echo=FALSE}
-# check compliance
-compliant_with_license <- cr %>%
- metacheck::license_normalise() %>%
- inner_join(cr, by = "doi") %>%
- select(doi, container.title, publisher, issn, issued_year, cc_normalised = license.x)
-```
-
-```{r, echo=FALSE}
-has_non_compliant_dois <- nrow(cr$doi[!tolower(cr$doi) %in% tolower(compliant_with_license$doi)]) > 0
-```
-
-```{r, echo=FALSE, eval=has_non_compliant_dois}
-# get non-compliant records
-non_compliant_dois <-
- cr$doi[!tolower(cr$doi) %in% tolower(compliant_with_license$doi)]
- # determine why
-out <- if(!is.null(non_compliant_dois))
- purrr::map_df(non_compliant_dois, function(x) {
- cr[cr$doi == x,] %>%
- metacheck::license_report()
- })
-# export
-non_compliant <- cr %>%
- select(doi, container.title, publisher, issn) %>%
- filter(doi %in% non_compliant_dois) %>%
- left_join(out, by = "doi") %>%
- mutate(reason = ifelse(is.na(reason), "No license metadata available", reason))
-```
-
-```{r, echo=FALSE}
-has_funder <- "funder" %in% names(cr)
-```
-
-```{r, eval=has_funder, echo=FALSE}
-# tdm data
-funder_df <- cr %>%
- select(doi, container.title, publisher, issn, issued_year, funder) %>%
- unnest(funder) %>%
- rename(fundref_doi = DOI) %>%
- mutate(api_link = paste0("https://api.crossref.org/works/", doi))
-```
-
-```{r export, eval=has_license, echo=FALSE}
-if(!is.null(non_compliant)) {
- license_df <- bind_rows(compliant_with_license, non_compliant)
-} else {
- license_df <- compliant_with_license
-}
-license_df <- license_df %>%
- mutate(api_link = paste0("https://api.crossref.org/works/", doi)) %>%
- arrange(publisher)
-
-if(!is.null(funder_df)) {
- export_report <- list(cc_license =license_df, funder_overview = funder_df)
- } else {
- export_report <- list(cc_license =license_df)
- }
-writexl::write_xlsx(export_report, "license_df.xlsx")
-```
-
-
-Please find attached an article-level compliance report. This Excel spreadsheet contains some Crossref metadata including Creative Commons license and detailed funder information, if applicable.
-
-```{r echo=FALSE, results = 'asis'}
-glue::glue("**We found {nrow(non_compliant)} publications with non-compliant license metadata. We strongly recommend to report licensing issues to the publisher to ensure that open access articles are discoverable.**")
-```
-
-Cheers!
-
-Najko
diff --git a/inst/rmarkdown/templates/email/skeleton/skeleton.html b/inst/rmarkdown/templates/email/skeleton/skeleton.html
deleted file mode 100644
index 1ebe373f..00000000
--- a/inst/rmarkdown/templates/email/skeleton/skeleton.html
+++ /dev/null
@@ -1,442 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-skeleton.utf8
-
-
-
-
-
-
-
-
-
-
-
Hi,
-
Thank you for using the HOAD compliance checker. Here’s the compliance report.
-
-
Indexing status in Crossref
-
Crossref indexes metadata for 2 out of 3 DOIs. We could not retrieve metadata from Crossref for the following DOIs:
-
-
mm
-
-
-
-
Non-compliant CC licenses in Crossref metadata
-
We have found some issues while checking the compliance of Crossref metadata relative to open content licensing.
Date of publication and Creative Commons license does not match
-
-
-
-
-
-
Cheers!
-
-
-
-
-
-
-
-
-
diff --git a/man/add_attachment_xlsx.Rd b/man/add_attachment_xlsx.Rd
deleted file mode 100644
index 8a7b8747..00000000
--- a/man/add_attachment_xlsx.Rd
+++ /dev/null
@@ -1,15 +0,0 @@
-% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/email.R
-\name{add_attachment_xlsx}
-\alias{add_attachment_xlsx}
-\title{Add attachment to email}
-\usage{
-add_attachment_xlsx(email, session_id = NULL)
-}
-\arguments{
-\item{email}{The email message object, as created by the \code{\link[blastula:compose_email]{compose_email()}}
-function. The object's class is \code{email_message}.}
-}
-\description{
-Add attachment to email
-}
diff --git a/man/cr_compliance_overview.Rd b/man/cr_compliance_overview.Rd
index 42bc1a9a..445746ba 100644
--- a/man/cr_compliance_overview.Rd
+++ b/man/cr_compliance_overview.Rd
@@ -12,3 +12,22 @@ cr_compliance_overview(cr)
\description{
Get compliance overview
}
+\seealso{
+Other transform:
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/cr_funder_df.Rd b/man/cr_funder_df.Rd
index 370dc751..c12d9af5 100644
--- a/man/cr_funder_df.Rd
+++ b/man/cr_funder_df.Rd
@@ -12,3 +12,22 @@ cr_funder_df(cr)
\description{
Get funder list from Crossref metadata
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/cr_has_orcid.Rd b/man/cr_has_orcid.Rd
index d5cfddbc..9100940d 100644
--- a/man/cr_has_orcid.Rd
+++ b/man/cr_has_orcid.Rd
@@ -6,6 +6,28 @@
\usage{
cr_has_orcid(cr)
}
+\arguments{
+\item{cr}{crossref metadata using \code{\link[=get_cr_md]{get_cr_md()}}}
+}
\description{
Check for ORCIDs
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/cr_license_ind.Rd b/man/cr_license_ind.Rd
index 02dff451..121f9919 100644
--- a/man/cr_license_ind.Rd
+++ b/man/cr_license_ind.Rd
@@ -12,3 +12,22 @@ cr_license_ind(cr)
\description{
License overview
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/cr_md_ind.Rd b/man/cr_md_ind.Rd
index 48aa59d0..58c1e72d 100644
--- a/man/cr_md_ind.Rd
+++ b/man/cr_md_ind.Rd
@@ -14,3 +14,22 @@ cr_md_ind(cr, .group)
\description{
Other types of relevant metadata
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/cr_tdm_df.Rd b/man/cr_tdm_df.Rd
index f5f3d6ee..dff05fe8 100644
--- a/man/cr_tdm_df.Rd
+++ b/man/cr_tdm_df.Rd
@@ -12,3 +12,22 @@ cr_tdm_df(cr)
\description{
Get text-mining links from Crossref metadata
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/cr_tdm_ind.Rd b/man/cr_tdm_ind.Rd
index bc12199d..240c00b1 100644
--- a/man/cr_tdm_ind.Rd
+++ b/man/cr_tdm_ind.Rd
@@ -12,3 +12,22 @@ cr_tdm_ind(cr)
\description{
TDM overview
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/gather_ind_table.Rd b/man/gather_ind_table.Rd
index e52ef211..209ed737 100644
--- a/man/gather_ind_table.Rd
+++ b/man/gather_ind_table.Rd
@@ -12,3 +12,9 @@ gather_ind_table(cr)
\description{
Create compliance overview table
}
+\seealso{
+Other visualize:
+\code{\link{ind_table_to_gt}()},
+\code{\link{react_ind_table}()}
+}
+\concept{visualize}
diff --git a/man/get_compliant_cc.Rd b/man/get_compliant_cc.Rd
index c1531031..a510afac 100644
--- a/man/get_compliant_cc.Rd
+++ b/man/get_compliant_cc.Rd
@@ -7,13 +7,27 @@
get_compliant_cc(license_df)
}
\arguments{
-\item{license_df}{normalized license metadata from \code{\link[=license_df]{license_df()}}}
+\item{license_df}{normalized license metadata from \code{\link[=license_check]{license_check()}}}
}
\description{
-Extract records with compliant CC license metadata
+In order to be compliant, CC license has to apply to version of record and must be valid without delay.
}
-\details{
-In order to be compliant,
-CC license has to apply to version of record and must be valid
-without delay.
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
}
+\concept{transform}
diff --git a/man/get_cr_md.Rd b/man/get_cr_md.Rd
index 7b360753..c06033dd 100644
--- a/man/get_cr_md.Rd
+++ b/man/get_cr_md.Rd
@@ -1,5 +1,5 @@
% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/cr_md_fetch.R
+% Please edit documentation in R/import.R
\name{get_cr_md}
\alias{get_cr_md}
\title{Get Crossref metadata from API}
@@ -9,9 +9,9 @@ get_cr_md(dois, .progress = "text")
\arguments{
\item{dois}{character vector with DOIs}
-\item{.progress}{show progress bar, use "none" if no progress should be
-displayed}
+\item{.progress}{show progress bar, use "none" if no progress should be displayed}
}
\description{
Get Crossref metadata from API
}
+\concept{ETL import}
diff --git a/man/get_license_md.Rd b/man/get_license_md.Rd
index fb6cd3c9..be400557 100644
--- a/man/get_license_md.Rd
+++ b/man/get_license_md.Rd
@@ -12,3 +12,22 @@ get_license_md(cr)
\description{
Extract license info from Crossref metadata
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/gh_file.Rd b/man/gh_file.Rd
index a7fdeef4..7a667e61 100644
--- a/man/gh_file.Rd
+++ b/man/gh_file.Rd
@@ -20,10 +20,7 @@ gh_file(
)
}
\arguments{
-\item{url}{the URL of the file to download via API, of the form
-`github.com/:owner/:repo/blob/:path}
-
-\item{ref}{the reference of a commit: a branch name, tag, or commit SHA}
+\item{url}{the URL of the file to download via API, of the form `github.com/:owner/:repo/blob/:path}
\item{owner, repo, path, ref}{alternate way to specify the file. These will
override values in \code{url}}
@@ -31,17 +28,40 @@ override values in \code{url}}
\item{to_disk, destfile}{write file to disk (default=TRUE)? If so, use the
name in \code{destfile}, or the original filename by default}
-\item{.token, .api_url, .method, .limit, .send_headers}{arguments passed on to
-\link[gh:gh]{gh::gh}}
+\item{.token}{Authentication token. Defaults to \code{GITHUB_PAT} or
+\code{GITHUB_TOKEN} environment variables, in this order if any is set.
+See \code{\link[gh:gh_token]{gh_token()}} if you need more flexibility, e.g. different tokens
+for different GitHub Enterprise deployments.}
+
+\item{.api_url}{Github API url (default: \url{https://api.github.com}). Used
+if \code{endpoint} just contains a path. Defaults to \code{GITHUB_API_URL}
+environment variable if set.}
+
+\item{.method}{HTTP method to use if not explicitly supplied in the
+\code{endpoint}.}
+
+\item{.limit}{Number of records to return. This can be used
+instead of manual pagination. By default it is \code{NULL},
+which means that the defaults of the GitHub API are used.
+You can set it to a number to request more (or less)
+records, and also to \code{Inf} to request all records.
+Note, that if you request many records, then multiple GitHub
+API calls are used to get them, and this can take a potentially
+long time.}
+
+\item{.send_headers}{Named character vector of header field values
+(except \code{Authorization}, which is handled via \code{.token}). This can be
+used to override or augment the default \code{User-Agent} header:
+\code{"https://github.com/r-lib/gh"}.}
}
\value{
-Either the local path of the downloaded file (default), or a raw
-vector
+Either the local path of the downloaded file (default), or a raw vector
}
\description{
-This avoids the 1MB limit of the content API and uses \link[gh:gh]{gh::gh} to deal with
-authorization and such. See https://developer.github.com/v3/git/blobs/
+This avoids the 1MB limit of the content API and uses \link[gh:gh]{gh::gh} to deal with authorization and such.
+See https://developer.github.com/v3/git/blobs/
}
\author{
Noam Ross
}
+\concept{import}
diff --git a/man/ind_table_to_gt.Rd b/man/ind_table_to_gt.Rd
index fb4e0e6a..a080b95d 100644
--- a/man/ind_table_to_gt.Rd
+++ b/man/ind_table_to_gt.Rd
@@ -12,3 +12,9 @@ ind_table_to_gt(ind_table)
\description{
GT representation of compliance overview table
}
+\seealso{
+Other visualize:
+\code{\link{gather_ind_table}()},
+\code{\link{react_ind_table}()}
+}
+\concept{visualize}
diff --git a/man/license_check.Rd b/man/license_check.Rd
index d968542d..4ad1563b 100644
--- a/man/license_check.Rd
+++ b/man/license_check.Rd
@@ -10,10 +10,25 @@ license_check(cr)
\item{cr}{crossref metadata using \code{\link[=get_cr_md]{get_cr_md()}}}
}
\description{
-Extract and validate Crossref license metadata
-}
-\details{
Workflow to check for compliant open content license metadata in Crossref.
-License metadata is considered as compliant, if a Creative Commons license is
-provided for the version-of-record without delay indicated by the license date.
+License metadata is considered as compliant, if a Creative Commons license is provided for the version-of-record without delay indicated by the license date.
+}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
}
+\concept{transform}
diff --git a/man/license_normalise.Rd b/man/license_normalise.Rd
index 40ba7b3f..7a7f3a19 100644
--- a/man/license_normalise.Rd
+++ b/man/license_normalise.Rd
@@ -7,9 +7,27 @@
license_normalise(cr)
}
\arguments{
-\item{cr}{tibble with non-compliant license metadata retrieved from the
-Crossref API with \code{rcrossref:.cr_works()}}
+\item{cr}{tibble with non-compliant license metadata retrieved from the Crossref API with \code{rcrossref:.cr_works()}}
}
\description{
Normalise license info from Crossref
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/license_report.Rd b/man/license_report.Rd
index 1290073a..565c386e 100644
--- a/man/license_report.Rd
+++ b/man/license_report.Rd
@@ -7,8 +7,7 @@
license_report(cr)
}
\arguments{
-\item{cr}{tibble with non-compliant license metadata retrieved from the
-Crossref API with \code{rcrossref:.cr_works()}}
+\item{cr}{tibble with non-compliant license metadata retrieved from the Crossref API with \code{rcrossref:.cr_works()}}
}
\description{
In case license metadata do not comply, what are the reasons:
@@ -18,3 +17,22 @@ In case license metadata do not comply, what are the reasons:
\item Did the CC license apply immediately after publication?
}
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/license_val.Rd b/man/license_val.Rd
index 3a6d0a2d..f37ce6e3 100644
--- a/man/license_val.Rd
+++ b/man/license_val.Rd
@@ -7,11 +7,27 @@
license_val(cr)
}
\arguments{
-\item{cr}{tibble with Crossref metadata retrieved from
-API with \code{rcrossref:.cr_works()}}
+\item{cr}{tibble with Crossref metadata retrieved from API with \code{rcrossref:.cr_works()}}
}
\description{
-Retrieves records from Crossref metadata where
-the version of record (vor), i.e. publisher version
-is provided under a Creative Commons license without delay.
+Retrieves records from Crossref metadata where the version of record (vor), i.e. publisher version is provided under a Creative Commons license without delay.
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/metacheck-package.Rd b/man/metacheck-package.Rd
index 0cf9c336..47d71a1a 100644
--- a/man/metacheck-package.Rd
+++ b/man/metacheck-package.Rd
@@ -1,5 +1,5 @@
% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/metacheck.R
+% Please edit documentation in R/metacheck_package.R
\docType{package}
\name{metacheck-package}
\alias{metacheck}
@@ -24,6 +24,7 @@ Useful links:
Authors:
\itemize{
\item Maximilian Held \email{info@maxheld.de} (\href{https://orcid.org/0000-0002-4703-5388}{ORCID})
+ \item Henrieke Walter \email{henrieke.walter@sub.uni-goettingen.de} (\href{https://orcid.org/0000-0003-3313-7364}{ORCID})
}
Other contributors:
diff --git a/man/open_apc_collections.Rd b/man/open_apc_collections.Rd
index 6a31acf8..3582b6ea 100644
--- a/man/open_apc_collections.Rd
+++ b/man/open_apc_collections.Rd
@@ -9,3 +9,4 @@ open_apc_collections()
\description{
Open APC collections
}
+\concept{data}
diff --git a/man/open_apc_get.Rd b/man/open_apc_get.Rd
index 2186d198..7a7eeb6d 100644
--- a/man/open_apc_get.Rd
+++ b/man/open_apc_get.Rd
@@ -8,13 +8,30 @@ open_apc_get(open_apc_cols = NULL)
}
\arguments{
\item{open_apc_cols}{character vector representing Open APC collections.
-See \code{open_apc_collections()} for an overview.}
+See \code{\link[=open_apc_collections]{open_apc_collections()}} for an overview.}
}
\value{
-Tibble with article-level subset of Open APC dataset including
-collection.
+Tibble with article-level subset of Open APC dataset including collection.
}
\description{
-Open APC shares several csv files via GitHub, which contain data about
-institutional spending for open access articles.
+Open APC shares several csv files via GitHub, which contain data about institutional spending for open access articles.
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/open_apc_get_.Rd b/man/open_apc_get_.Rd
index 378934b7..781043ef 100644
--- a/man/open_apc_get_.Rd
+++ b/man/open_apc_get_.Rd
@@ -12,3 +12,22 @@ open_apc_get_(gh_link = NULL)
\description{
Get single Open APC dataset using GitHub Data API
}
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get}()},
+\code{\link{vor_issue}()}
+}
+\concept{transform}
diff --git a/man/pipe.Rd b/man/pipe.Rd
deleted file mode 100644
index 0eec7526..00000000
--- a/man/pipe.Rd
+++ /dev/null
@@ -1,12 +0,0 @@
-% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/utils-pipe.R
-\name{\%>\%}
-\alias{\%>\%}
-\title{Pipe operator}
-\usage{
-lhs \%>\% rhs
-}
-\description{
-See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details.
-}
-\keyword{internal}
diff --git a/man/react_ind_table.Rd b/man/react_ind_table.Rd
index fee7bef7..8f4b118b 100644
--- a/man/react_ind_table.Rd
+++ b/man/react_ind_table.Rd
@@ -12,5 +12,11 @@ react_ind_table(ind_table, fill_col = "#fc5185")
\item{fill_col}{fill color for bar charts (hex code)}
}
\description{
-Inspired from \url{https://glin.github.io/reactable/articles/building-twitter-followers.html}
+Reactable represenation of metadata indicators
}
+\seealso{
+Other visualize:
+\code{\link{gather_ind_table}()},
+\code{\link{ind_table_to_gt}()}
+}
+\concept{visualize}
diff --git a/man/render_email.Rd b/man/render_email.Rd
index 8859c631..56b04617 100644
--- a/man/render_email.Rd
+++ b/man/render_email.Rd
@@ -14,3 +14,8 @@ render_email(dois, session_id = NULL)
\description{
Render email
}
+\seealso{
+Other communicate:
+\code{\link{send_email}()}
+}
+\concept{communicate}
diff --git a/man/runMetacheck.Rd b/man/runMetacheck.Rd
index a5fd97d7..74047dcf 100644
--- a/man/runMetacheck.Rd
+++ b/man/runMetacheck.Rd
@@ -1,5 +1,5 @@
% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/metacheck.R
+% Please edit documentation in R/communicate.R
\name{runMetacheck}
\alias{runMetacheck}
\title{Start web application}
diff --git a/man/send_email.Rd b/man/send_email.Rd
index 5b6ce706..cef6c630 100644
--- a/man/send_email.Rd
+++ b/man/send_email.Rd
@@ -27,3 +27,8 @@ email address (e.g., \code{c("Joe Public" = "joe_public@example.com")}).}
\description{
Send out email
}
+\seealso{
+Other communicate:
+\code{\link{render_email}()}
+}
+\concept{communicate}
diff --git a/man/vor_issue.Rd b/man/vor_issue.Rd
index e8ef5ea1..6145ec0f 100644
--- a/man/vor_issue.Rd
+++ b/man/vor_issue.Rd
@@ -7,15 +7,29 @@
vor_issue(license_df, compliant_dois)
}
\arguments{
-\item{license_df}{normalized license metadata from \code{\link[=license_df]{license_df()}}}
+\item{license_df}{normalized license metadata from \code{\link[=license_check]{license_check()}}}
\item{compliant_dois}{DOIs representing records with valid CC info}
}
\description{
-Extract records with CC license not applied to version of records
+In order to be compliant, CC license has to apply to version of record and must be valid without delay.
}
-\details{
-In order to be compliant,
-CC license has to apply to version of record and must be valid
-without delay.
+\seealso{
+Other transform:
+\code{\link{cr_compliance_overview}()},
+\code{\link{cr_funder_df}()},
+\code{\link{cr_has_orcid}()},
+\code{\link{cr_license_ind}()},
+\code{\link{cr_md_ind}()},
+\code{\link{cr_tdm_df}()},
+\code{\link{cr_tdm_ind}()},
+\code{\link{get_compliant_cc}()},
+\code{\link{get_license_md}()},
+\code{\link{license_check}()},
+\code{\link{license_normalise}()},
+\code{\link{license_report}()},
+\code{\link{license_val}()},
+\code{\link{open_apc_get_}()},
+\code{\link{open_apc_get}()}
}
+\concept{transform}
diff --git a/man/xlsx_path.Rd b/man/xlsx_path.Rd
deleted file mode 100644
index dea92e6f..00000000
--- a/man/xlsx_path.Rd
+++ /dev/null
@@ -1,14 +0,0 @@
-% Generated by roxygen2: do not edit by hand
-% Please edit documentation in R/email.R
-\name{xlsx_path}
-\alias{xlsx_path}
-\title{Temp path to write xlsx to}
-\usage{
-xlsx_path(session_id = NULL)
-}
-\arguments{
-\item{session_id}{Character vector to identify current shiny session}
-}
-\description{
-Temp path to write xlsx to
-}
diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml
index 35a1c6f1..3b11d121 100644
--- a/pkgdown/_pkgdown.yml
+++ b/pkgdown/_pkgdown.yml
@@ -20,6 +20,35 @@ home:
links:
- text: Read project description
href: https://www.sub.uni-goettingen.de/en/projects-research/project-details/projekt/hybrid-oa-dashboards/
+reference:
+- title: Data
+ desc: Data objects and queries
+- contents:
+ - has_concept("doi")
+- title: Import
+ desc: Read in data
+- contents:
+ - has_concept("import")
+- title: Tidy
+ desc: Normalize data
+- contents:
+ - has_concept("tidy")
+- title: Transform
+ desc: Detect licenses etc.
+- contents:
+ - has_concept("transform")
+- title: Visualise
+ desc: Tables and plots
+- contents:
+ - has_concept("visualise")
+- title: Model
+ desc: Nothing yet
+- contents:
+ - has_concept("model")
+- title: Communicate
+ desc: Shiny app and rmarkdown
+- contents:
+ - has_concept("communicate")
navbar:
components:
support:
diff --git a/tests/testthat/_snaps/cr_md_fetch.md b/tests/testthat/_snaps/cr_md_fetch.md
index e99ccb3e..f760d65e 100644
--- a/tests/testthat/_snaps/cr_md_fetch.md
+++ b/tests/testthat/_snaps/cr_md_fetch.md
@@ -28,7 +28,7 @@
{
"type": "character",
"attributes": {},
- "value": ["2020-12-10", "2020-11-17", "2020-01-22", "2020-11-17", "2020-10-05", "2020-11-17", "2020-11-11", "2020-11-10", "2020-11-10", "2020-04-30"]
+ "value": ["2020-12-10", "2021-01-30", "2020-01-22", "2020-11-17", "2020-10-05", "2020-11-17", "2020-11-11", "2020-11-10", "2020-11-10", "2020-04-30"]
},
{
"type": "character",
@@ -38,7 +38,7 @@
{
"type": "character",
"attributes": {},
- "value": ["2020-12-10", "2020-11-17", "2020-09-25", "2020-11-17", "2020-10-05", "2020-11-17", "2020-11-11", "2020-11-10", "2020-11-10", "2020-06-04"]
+ "value": ["2020-12-10", "2021-01-30", "2020-09-25", "2020-11-17", "2021-01-19", "2020-11-17", "2020-11-11", "2020-11-10", "2020-11-10", "2020-06-04"]
},
{
"type": "double",
@@ -94,7 +94,7 @@
{
"type": "character",
"attributes": {},
- "value": ["1", "1", "1", "0", "3", "0", "0", "5", "2", "0"]
+ "value": ["1", "4", "1", "0", "4", "0", "0", "5", "2", "0"]
},
{
"type": "character",
diff --git a/tests/testthat/test-cr_auth.R b/tests/testthat/test-cr_auth.R
index 3c78c7d7..59777483 100644
--- a/tests/testthat/test-cr_auth.R
+++ b/tests/testthat/test-cr_auth.R
@@ -5,18 +5,6 @@ test_that("crossref metadata is enabled", {
expect_equal(1, 1)
})
-test_that("crossref metadata plus is faster", {
- skip("Test does not work; times are often the same.")
- with_mdplus <- bench::bench_time(
- rcrossref::cr_agency(sample_dois[1:10], .progress = "text")
- )["real"]
- withr::local_envvar(.new = c("crossref_plus" = ""))
- without_mdplus <- bench::bench_time(
- rcrossref::cr_agency(sample_dois[1:10], .progress = "text")
- )["real"]
- expect_lte(with_mdplus, without_mdplus)
-})
-
test_that("metacheck declares polite user agent", {
expect_true(is_valid_email(Sys.getenv("crossref_email")))
})
diff --git a/tests/testthat/test-email.R b/tests/testthat/test-email.R
index 7f3e1faa..b8d9e5a6 100644
--- a/tests/testthat/test-email.R
+++ b/tests/testthat/test-email.R
@@ -4,7 +4,14 @@ test_that("email can be rendered", {
})
test_that("email can be send", {
- skip_if(Sys.getenv("MAILJET_SMTP_PASSWORD") == "")
+ skip_if(
+ Sys.getenv("MAILJET_SMTP_PASSWORD") == "",
+ message = "Mailjet credentials not available."
+ )
+ testthat::skip_if_not(
+ Sys.getenv("GITHUB_REF" == "refs/heads/main"),
+ message = "Testing email only on main."
+ )
send_email(
to = "held@sub.uni-goettingen.de",
email = blastula::prepare_test_message(),