hastie 0.2.0

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.
Files changed (63) hide show
  1. data/.autotest +9 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +10 -0
  5. data/LICENSE +21 -0
  6. data/README.textile +136 -0
  7. data/Rakefile +1 -0
  8. data/bin/hastie +64 -0
  9. data/hastie.gemspec +31 -0
  10. data/lib/hastie/config_file.rb +42 -0
  11. data/lib/hastie/config_generator.rb +37 -0
  12. data/lib/hastie/constants.rb +25 -0
  13. data/lib/hastie/report_generator.rb +118 -0
  14. data/lib/hastie/report_publisher.rb +162 -0
  15. data/lib/hastie/report_updater.rb +40 -0
  16. data/lib/hastie/report_watcher.rb +65 -0
  17. data/lib/hastie/server_generator.rb +47 -0
  18. data/lib/hastie/server_reader.rb +81 -0
  19. data/lib/hastie/templates/hastie_config.tt +6 -0
  20. data/lib/hastie/templates/report.markdown.tt +19 -0
  21. data/lib/hastie/templates/report.textile.tt +19 -0
  22. data/lib/hastie/templates/report_index.html.tt +8 -0
  23. data/lib/hastie/templates/server/.gitignore +1 -0
  24. data/lib/hastie/templates/server/_config.yml +25 -0
  25. data/lib/hastie/templates/server/_includes/.gitignore +0 -0
  26. data/lib/hastie/templates/server/_layouts/.gitignore +0 -0
  27. data/lib/hastie/templates/server/_plugins/.gitignore +0 -0
  28. data/lib/hastie/templates/server/_posts/.gitignore +0 -0
  29. data/lib/hastie/templates/server/_reports.yml +0 -0
  30. data/lib/hastie/templates/server/_server_config.yml +15 -0
  31. data/lib/hastie/templates/server/css/.gitignore +0 -0
  32. data/lib/hastie/templates/server/data/.gitignore +0 -0
  33. data/lib/hastie/templates/server/imgs/.gitignore +0 -0
  34. data/lib/hastie/templates/server/index.html +0 -0
  35. data/lib/hastie/templates/server/js/.gitignore +0 -0
  36. data/lib/hastie/version.rb +3 -0
  37. data/lib/hastie.rb +15 -0
  38. data/spec/config_generator_spec.rb +124 -0
  39. data/spec/fakefs_helper.rb +67 -0
  40. data/spec/fixtures/config.ru +29 -0
  41. data/spec/fixtures/hastie_config +2 -0
  42. data/spec/fixtures/report/2110-12-16-report.textile +19 -0
  43. data/spec/fixtures/report/_config.yml +9 -0
  44. data/spec/fixtures/report/data/report/.gitignore +0 -0
  45. data/spec/fixtures/report/imgs/report/.gitignore +0 -0
  46. data/spec/fixtures/report/js/.gitignore +0 -0
  47. data/spec/fixtures/report/report.yml +23 -0
  48. data/spec/fixtures/server/_config.yml +10 -0
  49. data/spec/fixtures/server/_posts/2011-11-11-jfv_mak_snp_analysis.textile +0 -0
  50. data/spec/fixtures/server/_reports.yml +1 -0
  51. data/spec/fixtures/server/css/style.css +126 -0
  52. data/spec/fixtures/server/data/jfv_mak_snp_analysis/.gitignore +0 -0
  53. data/spec/fixtures/server/imgs/favicon.ico +0 -0
  54. data/spec/fixtures/server/imgs/subset_images/.gitignore +0 -0
  55. data/spec/fixtures/server/js/.gitignore +0 -0
  56. data/spec/report_generator_spec.rb +168 -0
  57. data/spec/report_publisher_spec.rb +148 -0
  58. data/spec/report_updater_spec.rb +54 -0
  59. data/spec/report_watcher_spec.rb +99 -0
  60. data/spec/server_generator_spec.rb +68 -0
  61. data/spec/server_reader_spec.rb +120 -0
  62. data/spec/spec_helper.rb +52 -0
  63. metadata +234 -0
@@ -0,0 +1,40 @@
1
+ require 'fileutils'
2
+ require 'hastie/config_file'
3
+ require 'hastie/constants'
4
+ require 'hastie/server_reader'
5
+
6
+ module Hastie
7
+ class ReportUpdater < ServerReader
8
+ def self.banner
9
+ "hastie update <REPORT_DIR> <OPTIONS>"
10
+ end
11
+
12
+ desc "Updates local files from remote server"
13
+ argument :name, :type => :string, :default => ".", :desc => "The name report directory"
14
+
15
+ def read_report_file
16
+ self.destination_root = name
17
+ report_config_file = File.join(self.destination_root, Hastie.report_config_name)
18
+ if !File.exists? report_config_file
19
+ say "Cannot locate #{Hastie.report_config_name}."
20
+ say "Report directory does not contain report"
21
+ say "#{File.expand_path(self.destination_root)}"
22
+ exit(1)
23
+ end
24
+ # we get the report filename from this config file
25
+ local_config = ConfigFile.load(report_config_file, :local)
26
+ self.options = local_config.merge(self.options)
27
+ end
28
+
29
+ def fetch_static_files
30
+ options[:server]["static"] ||= []
31
+ options[:server]["static"].each do |static_file|
32
+ static_path = File.join(options[:server_root], static_file)
33
+ if File.exists? static_path
34
+ say_status "copy", "#{static_path} to #{File.basename(destination_root)}"
35
+ FileUtils.cp_r static_path, self.destination_root
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,65 @@
1
+ require 'fileutils'
2
+ require 'hastie/constants'
3
+ require 'hastie/config_file'
4
+ require 'thor/group'
5
+
6
+ module Hastie
7
+ class ReportWatcher < Thor::Group
8
+ include Thor::Actions
9
+
10
+ desc "Watches Directory Using Jekyll"
11
+ argument :path, :type => :string, :default => ".", :desc => "The path to the report directory"
12
+
13
+ attr_accessor :report_dir
14
+
15
+ # this is done just as a double check that we are in a report directory
16
+ def check_report_file
17
+ self.report_dir = File.expand_path(path)
18
+ report_config_file = File.join(report_dir, Hastie.report_config_name)
19
+ if !File.exists? report_config_file
20
+ say_status "error","Cannot locate #{Hastie.report_config_name}.", :red
21
+ say_status "error","Directory #{self.report_dir} is not a report.", :red
22
+ exit(1)
23
+ end
24
+ end
25
+
26
+ def set_root
27
+ self.destination_root = self.report_dir
28
+ end
29
+
30
+ def read_config_file
31
+ config_file = File.join(self.report_dir, Hastie.watch_config_file)
32
+ if !File.exists? config_file
33
+ say_status "error", "Cannot find #{config_file}", :red
34
+ say_status "error","Directory #{self.report_dir} is not a report.", :red
35
+ exit(1)
36
+ end
37
+ local_config = ConfigFile.load(config_file, :local)
38
+ self.options = local_config.merge(self.options)
39
+ end
40
+
41
+ def start_jekyll
42
+ port = self.options["local"]["server_port"] || "4000"
43
+ url = "http://0.0.0.0:#{port}"
44
+ say_status "open", url
45
+
46
+ in_root do
47
+ if !File.exist?("config.ru")
48
+ # use built in method
49
+ exec("jekyll --auto --server")
50
+ else
51
+ # use thin method
52
+ jekyllPid = Process.spawn("jekyll --auto")
53
+ thinPid = Process.spawn("thin -p #{port} -R config.ru start")
54
+ trap("INT") {
55
+ [jekyllPid, thinPid].each { |pid| Process.kill(9, pid) rescue Errno::ESRCH }
56
+ exit 0
57
+ }
58
+
59
+ [jekyllPid, thinPid].each { |pid| Process.wait(pid) }
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,47 @@
1
+ require 'fileutils'
2
+ require 'hastie/constants'
3
+ require 'hastie/config_file'
4
+ require 'thor/group'
5
+ require 'grit'
6
+
7
+ module Hastie
8
+ class ServerGenerator < Thor::Group
9
+ include Thor::Actions
10
+
11
+ def self.banner
12
+ "hastie create_server [NAME]"
13
+ end
14
+
15
+ desc "Creates framework for new server"
16
+ argument :name, :type => :string, :desc => "The dir of the new server location. no spaces"
17
+
18
+ def self.source_root
19
+ File.dirname(__FILE__)
20
+ end
21
+
22
+ def set_destination
23
+ # hack to unfreeze the options hash
24
+ self.options = Thor::CoreExt::HashWithIndifferentAccess.new(options)
25
+
26
+ # want to allow for relative paths
27
+ options[:server_id] = File.basename(name)
28
+ self.destination_root = File.join(File.dirname(name), options[:server_id])
29
+ say_status "note", "root: #{self.destination_root}"
30
+ end
31
+
32
+ def create_server
33
+ directory("templates/server", self.destination_root)
34
+ end
35
+
36
+ def create_git_repo
37
+ in_root do
38
+ say_status "note", "creating git repository in #{self.destination_root}"
39
+ repo = Grit::Repo.init(".")
40
+ all_files = Dir.glob("./**")
41
+ #all_files.each {|f| say_status "note", "adding #{f}"}
42
+ repo.add(all_files)
43
+ repo.commit_all("initial commit of server scaffold. created from hastie")
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,81 @@
1
+ require 'yaml'
2
+ require 'fileutils'
3
+ require 'thor/group'
4
+ require 'hastie/config_file'
5
+ require 'hastie/constants'
6
+
7
+ module Hastie
8
+ class ServerReader < Thor::Group
9
+ include Thor::Actions
10
+ class_option :server_root, :aliases => "-s", :desc => "Root directory of the server to read / publish to"
11
+ class_option :config_file, :aliases => "-c", :desc => "Path to .hastie config file", :default => Hastie.config_file
12
+
13
+ no_tasks do
14
+ def config_file
15
+ @config_file ||= if options[:config_file]
16
+ File.expand_path(options[:config_file])
17
+ else
18
+ Hastie.config_file
19
+ end
20
+ @config_file
21
+ end
22
+ end
23
+
24
+ def self.source_root
25
+ File.dirname(__FILE__)
26
+ end
27
+
28
+ # Tries to access users config file
29
+ # loads contents into the options hash
30
+ def read_config_file
31
+ say_status "note", "config file: #{self.config_file}"
32
+ if !File.exists? self.config_file
33
+ say "No config file found. Please create #{self.config_file}"
34
+ exit(1)
35
+ end
36
+ config = ConfigFile.load(self.config_file)
37
+ self.options = config.merge(self.options)
38
+ end
39
+
40
+ # Tries to access the servers
41
+ def get_server_config
42
+ say_status "note", "server root: #{options[:server_root]}"
43
+ # First check if the server directory exists
44
+ if !File.directory? options[:server_root]
45
+ say_status "error", "Cannot find server directory:", :red
46
+ say options[:server_root]
47
+ say "Please modify \'server_root\' to point to server root directory"
48
+ exit(1)
49
+ end
50
+
51
+ # Check for config file inside server_root
52
+ server_config_file = File.join(options[:server_root], SERVER_CONFIG_FILE)
53
+ if !File.exists? server_config_file
54
+ say_status "error", "Cannot find #{SERVER_CONFIG_FILE} file in server directory:", :red
55
+ say server_config_file
56
+ say ""
57
+ say "Are you sure #{options[:server_root]} is a valid server directory?"
58
+ exit(1)
59
+ end
60
+
61
+ # Check for reports file inside server_root
62
+ server_report_file = File.join(options[:server_root], SERVER_REPORTS_FILE)
63
+ if !File.exists? server_report_file
64
+ say_status "error", "Cannot find #{SERVER_REPORTS_FILE} file in server directory:", :red
65
+ say server_report_file
66
+ say ""
67
+ say "Are you sure #{options[:server_root]} is a valid server directory?"
68
+ exit(1)
69
+ end
70
+
71
+ # merge the server config and report file
72
+ # put them in their own 'namespace' to avoid
73
+ # collisions with existing configs
74
+ server_config = ConfigFile.load(server_config_file, :server)
75
+ self.options = server_config.merge(self.options)
76
+
77
+ server_reports = ConfigFile.load(server_report_file, :published_reports)
78
+ self.options = server_reports.merge(self.options)
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,6 @@
1
+ server_root: <%= server_root %>
2
+ type: <%= options[:type] %>
3
+ <% if options[:analyst] %>
4
+ analyst: <%= options[:analyst] %>
5
+ <% end %>
6
+
@@ -0,0 +1,19 @@
1
+ ---
2
+ layout: report
3
+ title: <%= title %>
4
+ analyst: <%= options[:analyst] %>
5
+ researcher: <%= options[:researcher] %>
6
+ pi: <%= options[:pi] %>
7
+ data:
8
+ - <%= options[:data_dir] %>/
9
+ categories:
10
+ - open
11
+ ---
12
+
13
+ ## Objective
14
+
15
+ ## Data
16
+
17
+ ## Methods
18
+
19
+ ## Results
@@ -0,0 +1,19 @@
1
+ ---
2
+ layout: report
3
+ title: <%= title %>
4
+ analyst: <%= options[:analyst] %>
5
+ researcher: <%= options[:researcher] %>
6
+ pi: <%= options[:pi] %>
7
+ data:
8
+ - <%= options[:data_dir] %>/
9
+ categories:
10
+ - open
11
+ ---
12
+
13
+ h2. Objective
14
+
15
+ h2. Data
16
+
17
+ h2. Methods
18
+
19
+ h2. Results
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <meta http-equiv="Refresh" content="0;url=<%= options[:report_file_generated] %>" />
4
+ </head>
5
+ <body>
6
+ <a id="report_link" href="<%= options[:report_file_generated] %>"><%= options[:title] %></a>
7
+ </body>
8
+ </html>
@@ -0,0 +1 @@
1
+ _site/*
@@ -0,0 +1,25 @@
1
+ source: .
2
+ destination: ./_site
3
+ includes: ./_includes
4
+
5
+ pygments: true
6
+ markdown: rdiscount
7
+ permalink: /:year-:month-:day_:title.html
8
+
9
+ baseurl: /
10
+
11
+ rdiscount:
12
+ extensions: []
13
+
14
+ exclude: []
15
+
16
+ static:
17
+ - css
18
+ - js
19
+ - _layouts
20
+ - _includes
21
+ - _plugins
22
+ - _config.yml
23
+
24
+ reports_dir: _posts
25
+
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,15 @@
1
+ source: .
2
+ destination: ./_site
3
+ includes: ./_includes
4
+
5
+ pygments: true
6
+ markdown: rdiscount
7
+ permalink: /:year-:month-:day_:title.html
8
+
9
+ baseurl: /
10
+
11
+ rdiscount:
12
+ extensions: []
13
+
14
+ exclude: []
15
+
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ module Hastie
2
+ VERSION = "0.2.0".freeze
3
+ end
data/lib/hastie.rb ADDED
@@ -0,0 +1,15 @@
1
+
2
+ if RUBY_VERSION =~ /1.9/
3
+ Encoding.default_external = Encoding::UTF_8
4
+ Encoding.default_internal = Encoding::UTF_8
5
+ end
6
+
7
+ # Most of Hastie functionality is derived from Thor groups.
8
+ # Each Thor group is maintained in a separate file.
9
+
10
+ require 'hastie/report_generator'
11
+ require 'hastie/report_publisher'
12
+ require 'hastie/report_updater'
13
+ require 'hastie/server_generator'
14
+ require 'hastie/config_generator'
15
+ require 'hastie/report_watcher'
@@ -0,0 +1,124 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/fakefs_helper')
3
+ require 'hastie/config_generator'
4
+
5
+ describe Hastie::ConfigGenerator do
6
+ def read_file file
7
+ if File.exists? file
8
+ File.open(file, 'r').read
9
+ else
10
+ ""
11
+ end
12
+ end
13
+
14
+ before :each do
15
+ @server_dir = File.expand_path(File.join(File.dirname(__FILE__), "fixtures", "server"))
16
+ @output_dir = File.expand_path(File.join(File.dirname(__FILE__), "sandbox"))
17
+ @name = "hastie_config_gen"
18
+ @config_file = File.join(@output_dir, @name)
19
+ @input = [@server_dir, "--path", @output_dir, "--name", @name]
20
+ FileUtils.mkdir_p @output_dir
21
+ end
22
+
23
+ after :each do
24
+ FileUtils.rm_r @output_dir if File.exists?(@output_dir)
25
+ end
26
+
27
+ it "should have server_root" do
28
+ content = capture(:stdout) do
29
+ lambda { Hastie::ConfigGenerator.start @input }.should_not raise_error SystemExit
30
+ end
31
+
32
+ content = read_file @config_file
33
+ content.should match /server_root: #{@server_dir}/
34
+
35
+ end
36
+
37
+ describe "config flags" do
38
+ it "--analyst" do
39
+ @input << "--analyst" << "dog"
40
+ content = capture(:stdout) do
41
+ lambda { Hastie::ConfigGenerator.start @input }.should_not raise_error SystemExit
42
+ end
43
+
44
+ content = read_file @config_file
45
+ content.should match /analyst: dog/
46
+ end
47
+
48
+ it "--type" do
49
+ @input << "--type" << "textile"
50
+ content = capture(:stdout) do
51
+ lambda { Hastie::ConfigGenerator.start @input }.should_not raise_error SystemExit
52
+ end
53
+
54
+ content = read_file @config_file
55
+ content.should match /type: textile/
56
+ end
57
+ end
58
+ end
59
+
60
+ describe Hastie::ConfigGenerator, fakefs: true do
61
+ before :each do
62
+ @server_root = "/tmp/server/root"
63
+ @input = [@server_root]
64
+ end
65
+
66
+ describe "invalid server_root" do
67
+ it "should error if server_root does not exist" do
68
+ content = capture(:stdout) do
69
+ lambda { Hastie::ConfigGenerator.start @input }.should raise_error SystemExit
70
+ end
71
+ content.should match /not a directory/
72
+ end
73
+ end
74
+
75
+ describe "valid server_root" do
76
+ before :each do
77
+ FileUtils.mkdir_p @server_root
78
+ #
79
+ # CLONE: copies files from real fs to fakefs.
80
+ # TODO: use clone in other specs to copy the templates directory
81
+ #
82
+ FakeFS::FileSystem.clone(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "hastie", "templates")))
83
+ end
84
+
85
+ it "should not error if server_root does not exist" do
86
+ content = capture(:stdout) do
87
+ lambda { Hastie::ConfigGenerator.start @input }.should_not raise_error SystemExit
88
+ end
89
+ end
90
+
91
+ it "should create hastie config file" do
92
+ content = capture(:stdout) do
93
+ lambda { Hastie::ConfigGenerator.start @input }.should_not raise_error SystemExit
94
+ end
95
+ File.exists?(File.expand_path("~/.hastie")).should == true
96
+ end
97
+
98
+ it "--path" do
99
+ path = "/alt/file/location"
100
+ @input << "--path" << path
101
+ # Hastie::ConfigGenerator.start @input
102
+ content = capture(:stdout) do
103
+ lambda { Hastie::ConfigGenerator.start @input }.should_not raise_error SystemExit
104
+ end
105
+
106
+ File.exists?("#{path}/.hastie").should == true
107
+ end
108
+
109
+ it "--name" do
110
+ path = "/alt/file/location"
111
+ name = "hastier"
112
+ @input << "--path" << path << "--name" << name
113
+ # Hastie::ConfigGenerator.start @input
114
+ content = capture(:stdout) do
115
+ lambda { Hastie::ConfigGenerator.start @input }.should_not raise_error SystemExit
116
+ end
117
+
118
+ File.exists?("#{path}/#{name}").should == true
119
+ end
120
+ end
121
+
122
+
123
+ end
124
+
@@ -0,0 +1,67 @@
1
+ class FakeFsHelper
2
+ CONFIG_FILE = "/tmp/.hastie"
3
+ SERVER_DIR = "/sites/test_server"
4
+ REPORTS_FILE = "_reports.yml"
5
+ SERVER_CONFIG_FILE = "_config.yml"
6
+
7
+ def self.read_file file
8
+ if File.exists? file
9
+ File.open(file, 'r').read
10
+ else
11
+ ""
12
+ end
13
+ end
14
+
15
+ def self.stub_config_file config_file = CONFIG_FILE, server_dir = SERVER_DIR
16
+ FileUtils.mkdir(File.dirname(config_file))
17
+ File.open(config_file, 'w') do |file|
18
+ file.puts "server_root: #{server_dir}"
19
+ end
20
+ end
21
+
22
+ def self.stub_server_dir dir = SERVER_DIR
23
+ FileUtils.mkdir_p dir
24
+ end
25
+
26
+ def self.stub_server_config dir = SERVER_DIR
27
+ stub_server_dir dir
28
+ File.open(File.join(dir, SERVER_CONFIG_FILE), 'a') do |file|
29
+ file.puts ""
30
+ end
31
+ end
32
+
33
+ def self.add_reports_dir dir = SERVER_DIR
34
+ stub_server_config dir
35
+ File.open(File.join(dir, SERVER_CONFIG_FILE), 'a') do |file|
36
+ file.puts "reports_dir: _posts"
37
+ end
38
+ end
39
+
40
+ def self.add_static_files dir = SERVER_DIR
41
+ stub_server_config dir
42
+ static_dirs = ["css", "js", "_layouts", "_includes", "_plugins"]
43
+ static_files = ["_config.yml"]
44
+ File.open(File.join(dir, SERVER_CONFIG_FILE), 'a') do |file|
45
+ file.puts "static:"
46
+ static_dirs.each {|sdir| file.puts "- #{sdir}"}
47
+ static_files.each {|f| file.puts "- #{f}"}
48
+ end
49
+
50
+ static_dirs.each {|sdir| FileUtils.mkdir File.join(dir, sdir)}
51
+ static_files.each {|sfile| FileUtils.touch File.join(dir, sfile)}
52
+ end
53
+
54
+ def self.stub_reports_file dir = SERVER_DIR
55
+ stub_server_dir dir
56
+ File.open(File.join(dir, REPORTS_FILE), 'a') do |file|
57
+ file.puts ""
58
+ end
59
+ end
60
+
61
+ def self.add_published_report report_id, dir = SERVER_DIR
62
+ stub_reports_file dir
63
+ File.open(File.join(dir, REPORTS_FILE), 'a') do |file|
64
+ file.puts "- #{report_id}"
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,29 @@
1
+ require 'bundler/setup'
2
+ require 'sinatra/base'
3
+
4
+ # The project root directory
5
+ $root = ::File.dirname(__FILE__)
6
+
7
+ BUILD_DIR = '_site'
8
+
9
+ class SinatraStaticServer < Sinatra::Base
10
+
11
+
12
+ get(/.+/) do
13
+ send_sinatra_file(request.path) {404}
14
+ end
15
+
16
+ not_found do
17
+ send_sinatra_file('404.html') {"Sorry, I cannot find #{request.path}"}
18
+ end
19
+
20
+ def send_sinatra_file(path, &missing_file_block)
21
+ file_path = File.join(File.dirname(__FILE__), BUILD_DIR, path)
22
+ file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i
23
+ File.exist?(file_path) ? send_file(file_path) : missing_file_block.call
24
+ end
25
+
26
+ end
27
+
28
+ run SinatraStaticServer
29
+
@@ -0,0 +1,2 @@
1
+ analyst: jfv
2
+ type: textile
@@ -0,0 +1,19 @@
1
+ ---
2
+ layout: report
3
+ title: Spec/fixtures/report
4
+ analyst: jfv
5
+ researcher: unknown
6
+ pi: unknown
7
+ data:
8
+ - data/report/
9
+ ---
10
+
11
+ h2. Objective
12
+
13
+ h2. Data
14
+
15
+ h2. Analysis
16
+
17
+ h3. Methods
18
+
19
+ h3. Results
@@ -0,0 +1,9 @@
1
+ static:
2
+ - css
3
+ - js
4
+ - _layouts
5
+ - _includes
6
+ - _plugins
7
+ - _config.yml
8
+
9
+ reports_dir: _posts
File without changes
File without changes
File without changes
@@ -0,0 +1,23 @@
1
+ ---
2
+ published_reports:
3
+ - jfv_mak_snp_analysis
4
+ server:
5
+ static:
6
+ - css
7
+ - js
8
+ - _layouts
9
+ - _includes
10
+ - _plugins
11
+ - _config.yml
12
+ reports_dir: _posts
13
+ server_root: spec/fixtures/server/
14
+ analyst: jfv
15
+ type: textile
16
+ config_file: /Users/jfv/.hastie
17
+ name: report
18
+ title: Spec/fixtures/report
19
+ report_id: report
20
+ researcher: unknown
21
+ pi: unknown
22
+ data_dir: data/report
23
+ report_file: 2110-12-16-report.textile