diff --git a/docs/api.md b/docs/api.md index 5cd720eb3..6909fd062 100644 --- a/docs/api.md +++ b/docs/api.md @@ -9,6 +9,8 @@ For simplicity, whenever possible, the API mirrors Jekyll internal data structur The API is exposed as `http://localhost:4000/_api` (or whatever server/port your Jekyll installation is running on). +**Note: Prior to version 1.0.0, the HTTP API is to be considered a pre-release API, and is subject to breaking changes without notice. You're welcome (and are encouraged) to build external tools or apps against this API, but as the API is refined and finalized, it may not strictly follow [Semantic Versioning](http://semver.org/) standards.** + ### API Request and response payloads #### Pages and Documents diff --git a/lib/jekyll-admin.rb b/lib/jekyll-admin.rb index 4ef3f19f9..528f24056 100644 --- a/lib/jekyll-admin.rb +++ b/lib/jekyll-admin.rb @@ -38,6 +38,10 @@ module JekyllAdmin def self.site - @site ||= Jekyll.sites.first + @site ||= begin + site = Jekyll.sites.first + site.future = true + site + end end end diff --git a/lib/jekyll-admin/server/collection.rb b/lib/jekyll-admin/server/collection.rb index 2da70ae30..00454e94c 100644 --- a/lib/jekyll-admin/server/collection.rb +++ b/lib/jekyll-admin/server/collection.rb @@ -33,6 +33,7 @@ class Server < Sinatra::Base end write_file(document_path, document_body) + ensure_document json document.to_api(:include_content => true) end diff --git a/lib/jekyll-admin/server/data.rb b/lib/jekyll-admin/server/data.rb index dd2a09742..3d6b6f261 100644 --- a/lib/jekyll-admin/server/data.rb +++ b/lib/jekyll-admin/server/data.rb @@ -15,6 +15,7 @@ class Server < Sinatra::Base put "/:data_file_id" do write_file(data_file.relative_path, data_file_body) + ensure_data_file_exists json data_file.to_api(:include_content => true) end diff --git a/lib/jekyll-admin/server/page.rb b/lib/jekyll-admin/server/page.rb index a3a4ee436..07b9e02dd 100644 --- a/lib/jekyll-admin/server/page.rb +++ b/lib/jekyll-admin/server/page.rb @@ -18,6 +18,7 @@ class Server < Sinatra::Base end write_file(page_path, page_body) + ensure_page json page.to_api(:include_content => true) end diff --git a/lib/jekyll-admin/server/static_file.rb b/lib/jekyll-admin/server/static_file.rb index 3e75b6e70..59e7a0750 100644 --- a/lib/jekyll-admin/server/static_file.rb +++ b/lib/jekyll-admin/server/static_file.rb @@ -17,6 +17,7 @@ class Server < Sinatra::Base put "/*" do write_file(static_file_path, static_file_body) + ensure_static_file_exists json static_file.to_api(:include_content => true) end diff --git a/package.json b/package.json index d68da34ac..0f4542e3d 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "open:src": "babel-node tools/srcServer.js", "lint": "esw webpack.config.* src tools", "lint:watch": "npm run lint -- --watch", - "clean-dist": "npm run remove-dist && mkdir ./lib/jekyll-admin/public", + "clean-dist": "npm run remove-dist && npm run add-dist", + "add-dist": "mkdirp ./lib/jekyll-admin/public", "remove-dist": "rimraf ./lib/jekyll-admin/public", "build:html": "babel-node tools/buildHtml.js", "prebuild": "npm run clean-dist && npm run build:html && npm run lint && npm test", @@ -70,6 +71,7 @@ "file-loader": "0.8.5", "isparta": "4.0.0", "jsdom": "^9.2.1", + "mkdirp": "^0.5.1", "mocha": "2.4.5", "nock": "^8.0.0", "node-sass": "3.7.0", diff --git a/script/cibuild-node b/script/cibuild-node index a959b0624..098510ebe 100755 --- a/script/cibuild-node +++ b/script/cibuild-node @@ -3,4 +3,13 @@ set -e echo "Running Node tests..." -npm test + +# We want to run `script/build` on CI to ensure things actually build, but +# we don't want to have to run `script/build` locally every time we run tests +# +# Note: `script/build` runs `npm test` as part of the build process +if [ -n "$CI" ]; then + script/build +else + npm test +fi diff --git a/spec/jekyll-admin/server/collection_spec.rb b/spec/jekyll-admin/server/collection_spec.rb index d588be372..937a4f1c6 100644 --- a/spec/jekyll-admin/server/collection_spec.rb +++ b/spec/jekyll-admin/server/collection_spec.rb @@ -195,6 +195,23 @@ def app delete_file "_posts/2016-01-01-test2.md" end + it "writes a new file with a future date" do + future_date = Date.today + 7 + delete_file "_posts/#{future_date}-test.md" + + request = { + :front_matter => { :foo => "bar" }, + :raw_content => "test" + } + put "/collections/posts/#{future_date}-test.md", request.to_json + + expect(last_response).to be_ok + expect(last_response_parsed["foo"]).to eq("bar") + expect("_posts/#{future_date}-test.md").to be_an_existing_file + + delete_file "_posts/#{future_date}-test.md" + end + context "renaming a file" do %w(with without).each do |type| it "renames a file #{type} the collection prefix" do