Skip to content

Commit f0990cc

Browse files
committed
setup api transition summaries. beta => v3
1 parent 00d07eb commit f0990cc

5 files changed

Lines changed: 115 additions & 9 deletions

File tree

Rules

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ compile '/feed/' do
2323
:colorizers => {:javascript => :pygmentsrb}
2424
end
2525

26-
compile '/changes/*/' do
27-
filter :erb
28-
filter :kramdown
29-
filter :colorize_syntax,
30-
:colorizers => {:javascript => :pygmentsrb}
31-
layout 'changes'
32-
layout 'default'
26+
%w(v3 */).each do |version|
27+
compile "/changes/#{version}" do
28+
filter :erb
29+
filter :kramdown
30+
filter :colorize_syntax,
31+
:colorizers => {:javascript => :pygmentsrb}
32+
layout 'changes' if version[0] == '*'
33+
layout 'default'
34+
end
3335
end
3436

3537
compile '*' do

config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,13 @@ data_sources:
4444
type: static
4545
items_root: /static
4646

47+
# For the atom feed.
4748
base_url: http://developer.github.com
49+
50+
# Array of [version, released_at] Array tuples.
51+
api_versions:
52+
-
53+
- beta
54+
- 2011-4-27
55+
-
56+
- v3

content/changes/v3.html

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
title: GitHub API v3
3+
new_version: v3
4+
old_version: beta
5+
---
6+
7+
# API `<%= @item[:old_version] %>` to `<%= @item[:new_version] %>`
8+
9+
<dl>
10+
<dt>Old Mime Type</dt>
11+
<dd><%= api_mimetype_listing @item[:old_version] %></dd>
12+
<dt>New Mime Type</dt>
13+
<dd><%= api_mimetype_listing @item[:new_version] %></dd>
14+
<% if no_current_api_versions?(@item[:old_version], @item[:new_version]) %>
15+
<dt>Current Mime Type</dt>
16+
<dd><%= api_mimetype_listing current_api %></dd>
17+
<% end %>
18+
</dl>
19+
20+
<%= render '_changes', :changes => api_changes(:v3) %>
21+

lib/changes_helper.rb

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
module ChangesHelper
2+
MimeFormat = "application/vnd.github.%s+json".freeze
23
# Public: Filters the change items out. If a version is given, show only the
34
# items related to that version.
45
#
@@ -17,4 +18,72 @@ def api_changes(version = nil)
1718
attribute_to_time(y[:created_at]) <=> attribute_to_time(x[:created_at])
1819
end.first(30)
1920
end
21+
22+
# Public
23+
def current_api
24+
@current_api ||= (api_versions[-2] || api_versions.first).first
25+
end
26+
27+
# Public
28+
def upcoming_api
29+
@upcoming_api ||= begin
30+
version, date = api_versions.last
31+
version unless date
32+
end
33+
end
34+
35+
# Public
36+
def current_api?(version)
37+
@api_current_checks ||= {}
38+
if @api_current_checks.key?(version)
39+
@api_current_checks[version]
40+
end
41+
42+
@api_current_checks[version] = version == current_api
43+
end
44+
45+
# Public
46+
def no_current_api_versions?(*versions)
47+
versions.none? { |v| current_api?(v) }
48+
end
49+
50+
# Public
51+
def api_released_at(version)
52+
@api_releases ||= {}
53+
if @api_releases.key?(version)
54+
@api_releases[version]
55+
end
56+
57+
@api_releases[version] = begin
58+
pair = api_versions.detect do |(name, date)|
59+
name == version
60+
end
61+
pair ? pair[1] : nil
62+
end
63+
end
64+
65+
# Public
66+
def api_mimetype_listing(version)
67+
version_s = version.to_s
68+
mime = mimetype_for version_s
69+
if time = api_released_at(version_s)
70+
mime << " ("
71+
mime << "Current, " if current_api?(version_s)
72+
mime << strftime(time)
73+
mime << ")"
74+
else
75+
mime
76+
end
77+
end
78+
79+
# Internal
80+
def mimetype_for(version)
81+
MimeFormat % version.to_s
82+
end
83+
84+
# Internal
85+
def api_versions
86+
@api_versions ||= Array(@site.config[:api_versions])
87+
end
2088
end
89+

lib/resources.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,14 @@ module Helpers
2525
:technoweenie => '821395fe70906c8290df7f18ac4ac6cf'
2626
}
2727

28+
DefaultTimeFormat = "%B %-d, %Y".freeze
29+
2830
def post_date(item)
29-
pub = item[:created_at]
30-
attribute_to_time(pub).strftime("%B %-d, %Y")
31+
strftime item[:created_at]
32+
end
33+
34+
def strftime(time, format = DefaultTimeFormat)
35+
attribute_to_time(time).strftime(format)
3136
end
3237

3338
def gravatar_for(login)

0 commit comments

Comments
 (0)