knitr-ruby 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/knitr-ruby/knitr.rb +25 -0
- data/lib/knitr-ruby/knitrscript.R +76 -0
- data/lib/knitr-ruby/version.rb +3 -0
- data/lib/knitr-ruby.rb +1 -0
- metadata +78 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 15629ec29dc2e3bcf286cb15f3f322b5d97e43c0
|
4
|
+
data.tar.gz: 9161c1f351e318d2ac388b914e74b8a2992ea0d7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6c090ba7bde986d22bf656d5d9afc923e22ba7a47db7e91ce79c1735b86fba70d45ea9a9b7308ae3e7bd9b4327e9f2d81445dc8221e9ada5e498781a28f1a921
|
7
|
+
data.tar.gz: a04b9e056073ef4e1656d2347f6f161cbcfe73ff5edde41867a65464a35c5d06c51f8b3f6c60b1cfa95e093c9981d4f335521b4d5f166a09809ff929718efca7
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'open3'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module KnitrRuby
|
5
|
+
class Knitr < OpenStruct
|
6
|
+
|
7
|
+
def knit(content)
|
8
|
+
dir = File.expand_path File.dirname(__FILE__)
|
9
|
+
command = "./knitrscript.R --args #{options}"
|
10
|
+
Open3::popen3(command, chdir: dir) do |stdin, stdout, stderr, wait_thr|
|
11
|
+
stdin.puts content
|
12
|
+
stdin.close
|
13
|
+
|
14
|
+
raise StandardError, "Error knitting: #{stderr.read}" if wait_thr.value.exitstatus > 0
|
15
|
+
content = stdout.read
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def options
|
20
|
+
opts = chunk_options || {}
|
21
|
+
opts.map {|k,v| "#{k}=#{v}" }.join(" ")
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/Rscript
|
2
|
+
library("knitr")
|
3
|
+
|
4
|
+
## process the command line arguments -
|
5
|
+
## - args are separate strings containing each arg=value pair
|
6
|
+
args <- commandArgs(TRUE)[-1] ## grab arguments
|
7
|
+
|
8
|
+
## Example arguments arranged as this character vector
|
9
|
+
## args <- c("root.dir=", "fig.show=hold", "fig.path=../docs-gh-pages/figures/",
|
10
|
+
## "fig.width=10", "fig.height=7", "dev=svg", "warning=false")
|
11
|
+
|
12
|
+
## writeLines("args after capture")
|
13
|
+
## writeLines("<pre>")
|
14
|
+
## print(args)
|
15
|
+
## writeLines("</pre>")
|
16
|
+
|
17
|
+
## Handle the arguments
|
18
|
+
spl <- strsplit(args, "=") ## split each arg=val pair into arg name & value
|
19
|
+
nams <- sapply(spl, `[`, 1) ## extract argument names
|
20
|
+
vals <- sapply(spl, `[`, 2) ## extract argument values
|
21
|
+
ind <- grepl("[0-9]+", vals) ## index the numeric values
|
22
|
+
VALS <- as.list(vals)
|
23
|
+
VALS[ind] <- as.numeric(vals[ind]) ## convert numeric strings to numeric values
|
24
|
+
## handle logical values
|
25
|
+
logi <- vals %in% c("false", "true", "FALSE", "TRUE")
|
26
|
+
if (any(logi)) {
|
27
|
+
VALS[logi] <- as.logical(vals[logi])
|
28
|
+
}
|
29
|
+
## Missing values for argument pairs like `"root.dir="` some through
|
30
|
+
## strsplit() as NA, so handle
|
31
|
+
nas <- is.na(vals)
|
32
|
+
VALS[nas] <- list(NULL)
|
33
|
+
## remaining must be characters
|
34
|
+
take <- !(ind | logi | nas) ## select argument values not numeric or logicals
|
35
|
+
## add `' '` around string values
|
36
|
+
VALS[take] <- paste("'", vals[take], "'", sep = "")
|
37
|
+
|
38
|
+
## Other handling
|
39
|
+
lose <- which(nams == "root.dir") ## temp: drop the root.dir argument
|
40
|
+
|
41
|
+
## writeLines("Argument names and values")
|
42
|
+
## writeLines("<pre>")
|
43
|
+
## print(args)
|
44
|
+
## print(nams)
|
45
|
+
## print(vals)
|
46
|
+
## writeLines("</pre>")
|
47
|
+
|
48
|
+
## process argument value pairs back into a single string with R code...
|
49
|
+
call <- paste("list(", paste(nams[-lose], VALS[-lose], sep = "=",
|
50
|
+
collapse = ", "), ")", sep = "")
|
51
|
+
## ... which we then parse and evaluate to create a list containing named components for each
|
52
|
+
## argument name and the object in each component is the respective argument value
|
53
|
+
## writeLines("<pre>")
|
54
|
+
## print(call)
|
55
|
+
## writeLines("</pre>")
|
56
|
+
|
57
|
+
args <- eval(parse(text = call))
|
58
|
+
|
59
|
+
## writeLines("<pre>")
|
60
|
+
## print(args)
|
61
|
+
## writeLines("</pre>")
|
62
|
+
|
63
|
+
tmp <- do.call(opts_chunk$set, args) ## use this list as arguments to chunk options function
|
64
|
+
## writeLines("<pre>")
|
65
|
+
## print(opts_chunk$get())
|
66
|
+
## writeLines("</pre>")
|
67
|
+
|
68
|
+
## hardcoded knitr package options - until we work out how best to have both package &
|
69
|
+
## chunk options supplied via command line argument
|
70
|
+
opts_knit$set(base.url="http://ropensci.github.io/docs/", base.dir=".", root.dir=NULL, self.contained=FALSE, verbose=FALSE)
|
71
|
+
|
72
|
+
## knit the document being processed; takes inpu from stdin and outputs to stdout
|
73
|
+
tmp <- knit(text = readLines(file("stdin")), output=stdout(), quiet=TRUE)
|
74
|
+
|
75
|
+
## note that objects `tmp` are just to stop objects returned by function that doesn't need
|
76
|
+
## to be assigned (do.call, knitr) spitting NULLs into the stdout stream.
|
data/lib/knitr-ruby.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'knitr-ruby/knitr'
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: knitr-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Martin Fenner
|
8
|
+
- Gavin Simpson
|
9
|
+
- Carl Boettiger
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2014-04-09 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ">="
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: rspec
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '2.6'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '2.6'
|
43
|
+
description: A Ruby wrapper for the knitr R package which processes markdown with
|
44
|
+
embedded code.
|
45
|
+
email: mf@martinfenner.org
|
46
|
+
executables: []
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- lib/knitr-ruby.rb
|
51
|
+
- lib/knitr-ruby/knitr.rb
|
52
|
+
- lib/knitr-ruby/knitrscript.R
|
53
|
+
- lib/knitr-ruby/version.rb
|
54
|
+
homepage: https://github.com/ropensci/knitr-ruby
|
55
|
+
licenses:
|
56
|
+
- MIT
|
57
|
+
metadata: {}
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 1.3.6
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 2.2.2
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: Ruby wrapper for knitr R package
|
78
|
+
test_files: []
|