hightouch 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -5,6 +5,8 @@ gem 'rygments'
5
5
  gem 'rack-codehighlighter'
6
6
  gem 'redcarpet'
7
7
  gem 'virtus'
8
+ gem 'octokit'
9
+ #gem 'hightouch'
8
10
 
9
11
  # Development dependencies
10
12
  gem 'pry'
data/Gemfile.lock CHANGED
@@ -1,6 +1,6 @@
1
1
  GIT
2
2
  remote: https://github.com/middleman/middleman.git
3
- revision: 3c78d9f171e44806165bf2a5c710b376a23bcd7b
3
+ revision: f76883b53aec64cf583979d170f392c73d618765
4
4
  specs:
5
5
  middleman (3.0.0.beta.2)
6
6
  middleman-core (= 3.0.0.beta.2)
@@ -16,7 +16,7 @@ GIT
16
16
  tilt (~> 1.3.1)
17
17
  middleman-more (3.0.0.beta.2)
18
18
  coffee-script (~> 2.2.0)
19
- compass (~> 0.12.0)
19
+ compass (~> 0.12.1)
20
20
  execjs (~> 1.2)
21
21
  haml (~> 3.1.0)
22
22
  middleman-core (= 3.0.0.beta.2)
@@ -32,13 +32,14 @@ GEM
32
32
  activesupport (3.2.2)
33
33
  i18n (~> 0.6)
34
34
  multi_json (~> 1.0)
35
+ addressable (2.2.7)
35
36
  chunky_png (1.2.5)
36
37
  coderay (1.0.5)
37
38
  coffee-script (2.2.0)
38
39
  coffee-script-source
39
40
  execjs
40
41
  coffee-script-source (1.2.0)
41
- compass (0.12.0)
42
+ compass (0.12.1)
42
43
  chunky_png (~> 1.2)
43
44
  fssm (>= 0.2.7)
44
45
  sass (~> 3.1)
@@ -49,9 +50,16 @@ GEM
49
50
  multi_json (~> 1.0)
50
51
  factory_girl (2.6.3)
51
52
  activesupport (>= 2.3.9)
53
+ faraday (0.7.6)
54
+ addressable (~> 2.2)
55
+ multipart-post (~> 1.1)
56
+ rack (~> 1.1)
57
+ faraday_middleware (0.8.5)
58
+ faraday (>= 0.7.4, < 0.9)
52
59
  ffi (1.0.11)
53
60
  fssm (0.2.8.1)
54
61
  haml (3.1.4)
62
+ hashie (1.2.0)
55
63
  hike (1.2.1)
56
64
  i18n (0.6.0)
57
65
  listen (0.3.3)
@@ -60,7 +68,14 @@ GEM
60
68
  rb-inotify (~> 0.8.8)
61
69
  method_source (0.7.1)
62
70
  multi_json (1.1.0)
71
+ multipart-post (1.1.5)
63
72
  nokogiri (1.5.2)
73
+ octokit (1.0.0)
74
+ addressable (~> 2.2)
75
+ faraday (~> 0.7)
76
+ faraday_middleware (~> 0.8)
77
+ hashie (~> 1.2)
78
+ multi_json (~> 1.0)
64
79
  pry (0.9.8.4)
65
80
  coderay (~> 1.0.5)
66
81
  method_source (~> 0.7.1)
@@ -113,6 +128,7 @@ PLATFORMS
113
128
  DEPENDENCIES
114
129
  factory_girl
115
130
  middleman!
131
+ octokit
116
132
  pry
117
133
  rack-codehighlighter
118
134
  redcarpet
data/README.md CHANGED
@@ -5,6 +5,18 @@ hightouch (HT) is a static website generator based on
5
5
  inspired by
6
6
  [middleman-blog](https://github.com/middleman/middleman-blog).
7
7
 
8
- ### Start to write a blog posting
8
+ # Install
9
9
 
10
+ ```ruby
11
+ gem install hightouch
12
+ ```
13
+
14
+ # Usage
15
+
16
+ ```ruby
17
+ hightouch new app_name # Or ht new app_name
18
+ cd app_name
19
+ bundle install
20
+ middleman
21
+ ```
10
22
 
data/config.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  Bundler.require
2
- require 'i18n'
3
- require 'hightouch'
4
2
 
3
+ require 'hightouch'
5
4
  activate :hightouch
6
5
 
7
6
  Encoding.default_external = 'utf-8'
@@ -4,23 +4,27 @@ module Hightouch
4
4
 
5
5
  attribute :name, String
6
6
  attribute :blog, Blog
7
- attribute :blog_postings, Hash, default: {}
7
+ attribute :blog_posting_cache, Hash, default: {}
8
+
9
+ def blog_postings
10
+ Hash[blog_posting_cache.sort_by { |k, v| v.date_created }.reverse]
11
+ end
8
12
 
9
13
  def add_blog_posting(blog_posting)
10
- blog_postings[blog_posting.name] = blog_posting
14
+ blog_posting_cache[blog_posting.name] = blog_posting
11
15
  end
12
16
 
13
17
  def remove_blog_posting(blog_posting)
14
- blog_postings.delete(blog_posting.name)
18
+ blog_posting_cache.delete(blog_posting.name)
15
19
  blog.remove_archive(self) if empty?
16
20
  end
17
21
 
18
22
  def empty?
19
- blog_postings.empty?
23
+ blog_posting_cache.empty?
20
24
  end
21
25
 
22
26
  def count
23
- blog_postings.size
27
+ blog_posting_cache.size
24
28
  end
25
29
 
26
30
  def path
@@ -1,9 +1,14 @@
1
1
  module Hightouch
2
2
  module ArchivePageGenerator
3
- def generate_archive_page(archive)
4
- page archive.path, proxy: "/templates/archive.html", ignore: true do
5
- @collection = archive.class.name.split(/::/).last.downcase.pluralize.to_sym
6
- @archive_name = archive.name
3
+ def generate_archive_pages
4
+ [:categories, :tags, :archives].each do |i|
5
+ blog.send(i).each do |k, v|
6
+ template_name = v.class.name.split(/::/).last.downcase
7
+ page v.path, proxy: "/templates/archive.html", ignore: true do
8
+ @collection = i
9
+ @archive_name = v.name
10
+ end
11
+ end
7
12
  end
8
13
  end
9
14
  end
@@ -2,10 +2,10 @@ module Hightouch
2
2
  class Blog
3
3
  include Virtus
4
4
 
5
- attribute :archives, Hash, default: {}
6
- attribute :categories, Hash, default: {}
7
- attribute :tags, Hash, default: {}
8
- attribute :blog_postings, Hash, default: {}
5
+ attribute :archive_cache, Hash, default: {}
6
+ attribute :category_cache, Hash, default: {}
7
+ attribute :tag_cache, Hash, default: {}
8
+ attribute :blog_posting_cache, Hash, default: {}
9
9
 
10
10
  attr_reader :app
11
11
 
@@ -13,28 +13,48 @@ module Hightouch
13
13
  @app = app
14
14
  end
15
15
 
16
+ def archives
17
+ Hash[archive_cache.sort_by { |k, v| v.name }.reverse]
18
+ end
19
+
20
+ def categories
21
+ Hash[category_cache.sort_by { |k, v| v.name }]
22
+ end
23
+
24
+ def tags
25
+ Hash[tag_cache.sort_by { |k, v| v.name }]
26
+ end
27
+
28
+ def blog_postings
29
+ Hash[blog_posting_cache.sort_by { |k, v| v.date_created }.reverse]
30
+ end
31
+
16
32
  def create_archive(type, attrs)
17
- send(type.name.split(/::/).last.downcase.pluralize.to_sym)[attrs[:name]] = type.new(attrs)
33
+ send("#{type.name.split(/::/).last.downcase}_cache".to_sym)[attrs[:name]] = type.new(attrs)
34
+ end
35
+
36
+ def find_archive(type, key)
37
+ send("#{type.name.split(/::/).last.downcase}_cache".to_sym)[key]
18
38
  end
19
39
 
20
40
  def remove_archive(archive)
21
41
  key = archive.name
22
- send(archive.class.name.split(/::/).last.downcase.pluralize.to_sym).delete(key)
42
+ send("#{archive.class.name.split(/::/).last.downcase}_cache".to_sym).delete(key)
23
43
  end
24
44
 
25
45
  def touch_blog_posting(page)
26
46
  key = page.data.title
27
- blog_posting = blog_postings[key]
47
+ blog_posting = blog_posting_cache[key]
28
48
 
29
49
  if blog_posting
30
50
  blog_posting.update
31
51
  else
32
- blog_postings[key] = BlogPosting.new(page, self)
52
+ blog_posting_cache[key] = BlogPosting.new(page, self)
33
53
  end
34
54
  end
35
55
 
36
56
  def blog_posting(path)
37
- blog_postings.values.select { |v| v.url == path }.first
57
+ blog_posting_cache.values.select { |v| v.url == path }.first
38
58
  end
39
59
  end
40
60
  end
@@ -40,14 +40,19 @@ module Hightouch
40
40
  update_archive(@date_created)
41
41
 
42
42
  @description = nil
43
- @article_body = nil
43
+ @body = nil
44
44
  end
45
45
 
46
46
  def article_body
47
- @article_body ||= begin
48
- body = page.render(layout: false)
49
- body.sub!(DESC_SEPARATOR, '')
50
- end
47
+ @body ||= begin
48
+ body = page.render(layout: false)
49
+
50
+ if body =~ DESC_SEPARATOR
51
+ body.sub!(DESC_SEPARATOR, '')
52
+ else
53
+ body
54
+ end
55
+ end
51
56
  end
52
57
 
53
58
  def description
@@ -77,7 +82,7 @@ module Hightouch
77
82
  a = association[u]
78
83
  next if a
79
84
 
80
- a = blog.send(association_name)[u] || blog.send(:create_archive, type, name: u, blog: blog)
85
+ a = blog.find_archive(type, u) || blog.send(:create_archive, type, name: u, blog: blog)
81
86
 
82
87
  a.add_blog_posting(self)
83
88
  association[u] = a
@@ -88,7 +93,7 @@ module Hightouch
88
93
  name = date_created.strftime('%Y/%m')
89
94
  return if archive && archive.name == name
90
95
 
91
- archive = blog.archives[name] || blog.create_archive(Archive, name: name, blog: blog)
96
+ archive = blog.find_archive(Archive, name) || blog.create_archive(Archive, name: name, blog: blog)
92
97
  archive.add_blog_posting(self)
93
98
  end
94
99
  end
@@ -1,3 +1,3 @@
1
1
  module Hightouch
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.2'
3
3
  end
data/lib/hightouch.rb CHANGED
@@ -37,12 +37,6 @@ module Hightouch
37
37
  @blog ||= Blog.new(self)
38
38
  end
39
39
 
40
- def generate_archive_pages
41
- [:categories, :tags, :archives].each do |i|
42
- blog.send(i).each { |k, v| generate_archive_page(v) }
43
- end
44
- end
45
-
46
40
  def font_size_for_tag(tag, opts = {})
47
41
  max_font_size = opts[:max_font_size] || 36
48
42
  min_font_size = opts[:min_font_size] || 11
@@ -60,20 +54,6 @@ module Hightouch
60
54
  end
61
55
 
62
56
  private
63
- def generate_category_page(category)
64
- name = category.is_a?(String) ? category : category.name
65
- page "/blog/#{name}.html", proxy: "/templates/category.html", ignore: true do
66
- @category_name = name
67
- end
68
- end
69
-
70
- def generate_tag_page(tag)
71
- name = tag.is_a?(String) ? tag : tag.name
72
- page "/blog/tags/#{name}.html", proxy: "/templates/tag.html", ignore: true do
73
- @tag_name = name
74
- end
75
- end
76
-
77
57
  def max_tag
78
58
  blog.tags.values.max { |x, y| x.count <=> y.count }
79
59
  end
@@ -81,8 +61,6 @@ module Hightouch
81
61
  def min_tag
82
62
  blog.tags.values.min { |x, y| x.count <=> y.count }
83
63
  end
84
-
85
-
86
64
  end
87
65
  end
88
66
 
@@ -5,13 +5,13 @@
5
5
  %ul
6
6
  - blog.categories.each do |k, v|
7
7
  %li=link_to "#{titleize(humanize(k))} (#{v.count})", v.path
8
- %li
9
- %h2 Tags
10
- %div
11
- - blog.tags.each do |k, v|
12
- =link_to k, v.path, style: "font-size: #{font_size_for_tag(v)}px;", title: "#{v.count} blog posting#{"s" if v.count > 1}"
13
8
  %li
14
9
  %h2 Archives
15
10
  %ul
16
11
  - blog.archives.each do |k, v|
17
12
  %li=link_to "#{titleize(humanize(k))} (#{v.count})", v.path
13
+ %li
14
+ %h2 Tags
15
+ %div
16
+ - blog.tags.each do |k, v|
17
+ =link_to k, v.path, style: "font-size: #{font_size_for_tag(v)}px;", title: "#{v.count} blog posting#{"s" if v.count > 1}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hightouch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-13 00:00:00.000000000 Z
12
+ date: 2012-03-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: middleman
16
- requirement: &21019520 !ruby/object:Gem::Requirement
16
+ requirement: &20215420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.0.0.beta.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *21019520
24
+ version_requirements: *20215420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rygments
27
- requirement: &21018000 !ruby/object:Gem::Requirement
27
+ requirement: &20214560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.2.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *21018000
35
+ version_requirements: *20214560
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack-codehighlighter
38
- requirement: &20987280 !ruby/object:Gem::Requirement
38
+ requirement: &20213660 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.5.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *20987280
46
+ version_requirements: *20213660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: redcarpet
49
- requirement: &20985020 !ruby/object:Gem::Requirement
49
+ requirement: &20163380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.0.1
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *20985020
57
+ version_requirements: *20163380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: virtus
60
- requirement: &20982200 !ruby/object:Gem::Requirement
60
+ requirement: &20161900 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,18 @@ dependencies:
65
65
  version: 0.3.0
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *20982200
68
+ version_requirements: *20161900
69
+ - !ruby/object:Gem::Dependency
70
+ name: octokit
71
+ requirement: &20160140 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *20160140
69
80
  description: Hightouch(HT) will help you to build your web blog in minutes and with
70
81
  helpers to deploy your site to github pages
71
82
  email:
@@ -88,8 +99,6 @@ files:
88
99
  - lib/hightouch/tag.rb
89
100
  - lib/hightouch/version.rb
90
101
  - lib/hightouch.rb
91
- - source/templates/tag.html.haml
92
- - source/templates/category.html.haml
93
102
  - source/templates/archive.html.haml
94
103
  - source/stylesheets/pygments-github.css
95
104
  - source/stylesheets/pygments.css
@@ -1,5 +0,0 @@
1
- - blog.categories.each do |k, v|
2
- - if k == @archive_name
3
- - v.blog_postings.each do |url, p|
4
- = partial "partials/blog_posting_summary", locals: { blog_posting: p }
5
-
@@ -1,4 +0,0 @@
1
- - blog.tags.each do |k, v|
2
- - if k == @archive_name
3
- - v.blog_postings.each do |url, p|
4
- = partial "partials/blog_posting_summary", locals: { blog_posting: p }