retter 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # RETTER (レッター) Lightweight diary workflow.
2
2
 
3
- コマンドラインで簡単に起動してブラウザですぐに確認できてデプロイがちょう楽そうな日記作成支援コマンドをつくる予定。
3
+ 簡単さにこだわったシンプルな記事作成ツール。以下のような特徴があります。
4
+
5
+ * CLIでの操作を前提としています
6
+ * どこにいてもすぐに記事を編集できます(Markdown)
7
+ * オフラインで簡単にプレビューできます
8
+ * だいたいどんなサーバ上でも動作します(静的HTMLまたはRackアプリとして)
9
+ * RSSフィードを吐きます
10
+ * トラックバック、コメントなどの機能はありません
4
11
 
5
12
  ## Installation
6
13
 
@@ -22,13 +29,15 @@ use `new` sub-command.
22
29
 
23
30
  ### Settings
24
31
 
25
- **retter required $EDITOR variable.**
32
+ **retter requires `$EDITOR` variable.**
26
33
 
27
34
  ~~~~
28
35
  $ echo "export EDITOR=vim" >> ~/.bash_profile
29
36
  $ . ~/.bash_profile
30
37
  ~~~~
31
38
 
39
+ ファイルシステム上のどこに居ても `retter` コマンドを使って編集から公開まで行えるよう、 事前に `$RETTER_HOME` 環境変数を設定しておくことができます。
40
+
32
41
  You can use `retter` command anywhere, If you set `$RETTER_HOME` variable.
33
42
 
34
43
  ~~~~
@@ -36,40 +45,87 @@ You can use `retter` command anywhere, If you set `$RETTER_HOME` variable.
36
45
  $ . ~/.bash_profile
37
46
  ~~~~
38
47
 
39
- ### Write a article, and publish.
48
+ ### Write an article
49
+
50
+ `retter` コマンドは設定されているエディタを起動します。Markdownで記事を書くことができます。
40
51
 
41
- `retter` open `$EDITOR`. Write an article with Markdown.
42
- The article will be draft.
52
+ `retter` opens `$EDITOR`. Write an article with Markdown. That article will be the draft.
43
53
 
44
54
  ~~~~
45
55
  $ retter
46
56
  ~~~~
47
57
 
48
- `preview` open the draft article by your default browser.
58
+ `preview` で書きかけの最新記事をブラウザで確認することができます(デフォルトブラウザが起動します)。
59
+
60
+ `preview` opens the draft article by your default browser.
49
61
 
50
62
  ~~~~
51
63
  $ retter preview
52
64
  ~~~~
53
65
 
54
- `bind` and `rebind` binds the draft article.
55
- And re-generates actual html web pages. All html pages will overwrite.
66
+ `bind`, `rebind` は下書きの記事をその日の記事として保存し、すべてのHTMLを再生成します。
67
+
68
+ `bind` and `rebind` binds the draft article. And re-generates actual html web pages. All html pages will be overwritten.
56
69
 
57
70
  ~~~~
58
71
  $ retter bind
59
72
  ~~~~
60
73
 
74
+ ### Publish
61
75
 
62
- To publish, use the git command.
76
+ 記事を公開するには、すべてのファイルを git リポジトリにコミットし、リモートサーバに push するか単純にファイルをアップロードします。
77
+
78
+ To publish, use the git command. Or, upload the file to your server.
79
+
80
+ #### Basic flow
81
+
82
+ 最も原始的な方法は、gitコマンドを直接使う方法です。
63
83
 
64
84
  ~~~~
85
+ $ cd $RETTER_HOME
65
86
  $ git add .
66
87
  $ git commit -m 'commit message'
67
88
  $ git push [remote] [branch] # heroku, github pages, etc..
68
89
  ~~~~
69
90
 
70
- Or, upload the file to your server.
91
+ #### Using shortcut commands
92
+
93
+ いくつかのショートカットを使い、コミットメッセージを書くことを省略したりすることができます。
94
+
95
+ ~~~~
96
+ $ retter commit # Shortcut of `git add . ; git commit -m 'Retter commit'`
97
+ $ retter home # Open a new shell at $RETTER_HOME
98
+ (retter) git push [remote] [branch] # heroku, github pages, etc..
99
+ ~~~~
100
+
101
+ #### Using Callbacks
102
+
103
+ コールバックを定義しておくことで、公開の作業を無意識に実行することができます。
104
+
105
+ Callback is enabled in `edit`, `bind`, `rebind` and `commit` sub-command.
106
+
107
+ ~~~~ruby
108
+ after [command], [invoke command or proc]
109
+ ~~~~
110
+
111
+ 以下のような内容を Retterfile に記述しておくことで、rebind または bind が実行されると即座に公開までの処理も実行されます。
71
112
 
72
- ### Edit specific date article.
113
+ In Retterfile:
114
+
115
+ ~~~~ruby
116
+ after :rebind, :commit
117
+
118
+ after :commit do
119
+ system "cd #{config.retter_home}"
120
+ system 'git push origin master'
121
+ end
122
+ ~~~~
123
+
124
+ `--silent` option skip the callback.
125
+
126
+ ### Edit article (specific date).
127
+
128
+ 過去や未来の日付を指定して記事を編集・プレビューするには、 `--date` オプションを用います。
73
129
 
74
130
  `--date` option is available in `edit` `preview` sub-command.
75
131
 
@@ -80,7 +136,9 @@ Or, upload the file to your server.
80
136
 
81
137
  ### Browse offline
82
138
 
83
- `open` sub-command open your (static) website by your default browser.
139
+ 生成されるすべてのページは静的HTMLです。`open` でサーバにデプロイしたものとほぼ同じようにオフラインでも閲覧することができます。rackでもOK。
140
+
141
+ `open` sub-command opens your (static) website by your default browser.
84
142
 
85
143
  ~~~~
86
144
  $ retter open # visit file://path/to/my_sweet_diary/index.html
@@ -93,6 +151,26 @@ Or, Use rack if needed.
93
151
  $ bundle exec rackup
94
152
  ~~~~
95
153
 
154
+ ### Pre-installed themes
155
+
156
+ スタイルシートを変更することでテーマを変更できます。HTMLのヘッダを変更するには `layouts/retter.html.haml` を編集します。
157
+
158
+ #### Default
159
+
160
+ ~~~~haml
161
+ %link{href: '/stylesheets/default.css', media: 'screen', rel: 'stylesheet', type: 'text/css'}
162
+ ~~~~
163
+
164
+ ![Default](http://hibariya.github.com/images/theme_samples/retter_default.jpg)
165
+
166
+ #### Orange
167
+
168
+ ~~~~haml
169
+ %link{href: '/stylesheets/orange.css', media: 'screen', rel: 'stylesheet', type: 'text/css'}
170
+ ~~~~
171
+
172
+ ![Orange](http://hibariya.github.com/images/theme_samples/retter_orange.jpg)
173
+
96
174
  ## LICENSE
97
175
 
98
176
  The MIT License
@@ -7,22 +7,31 @@ require 'bundler/cli'
7
7
  require 'retter'
8
8
 
9
9
  class Newretter < Thor::Group
10
- FILES = %w(
11
- .gitignore
12
- Gemfile
10
+ TEMPLATES = %w(
13
11
  Retterfile
12
+ Gemfile
14
13
  config.ru
14
+ index.html
15
15
  layouts/entries.html.haml
16
16
  layouts/entry.html.haml
17
17
  layouts/profile.html.haml
18
18
  layouts/index.html.haml
19
19
  layouts/retter.html.haml
20
+ )
21
+
22
+ FILES = %w(
23
+ .gitignore
24
+ retters/.gitkeep
20
25
  images/.gitkeep
21
- index.html
22
26
  entries/.gitkeep
23
27
  javascripts/.gitkeep
24
- stylesheets/application.css
25
- retters/.gitkeep
28
+ stylesheets/base.css
29
+ stylesheets/retter.css
30
+
31
+ stylesheets/orange.css
32
+ images/orange/bg_body.jpg
33
+ images/orange/bg_entry.jpg
34
+ images/orange/bg_header.png
26
35
  )
27
36
 
28
37
  include Thor::Actions
@@ -35,6 +44,10 @@ class Newretter < Thor::Group
35
44
 
36
45
  def create_files
37
46
  FILES.each do |file|
47
+ copy_file("skel/#{file}", "#{name}/#{file}")
48
+ end
49
+
50
+ TEMPLATES.each do |file|
38
51
  template("skel/#{file}", "#{name}/#{file}")
39
52
  end
40
53
  end
@@ -1,4 +1,5 @@
1
1
  %article
2
2
  .entry
3
- %h1.date= entry.date.strftime('%Y/%m/%d')
3
+ %h1.date
4
+ %a{href: entry_path(entry.date)}= entry.date.strftime('%Y/%m/%d')
4
5
  = entry
@@ -4,7 +4,8 @@
4
4
  %title= config.title
5
5
  %meta{:'http-equiv' => 'Content-Type', content: 'text/html', charset: 'utf-8'}
6
6
  %link{rel: 'icon', type: 'image/png', href: '/favicon.png'}
7
- %link{href: '/stylesheets/application.css', media: 'screen', rel: 'stylesheet', type: 'text/css'}
7
+ %link{href: '/stylesheets/base.css', media: 'screen', rel: 'stylesheet', type: 'text/css'}
8
+ %link{href: '/stylesheets/retter.css', media: 'screen', rel: 'stylesheet', type: 'text/css'}
8
9
  %link{rel: 'alternate', type: 'application/rss+xml', title: 'RSS', href: '/entries.rss'}
9
10
  %body
10
11
  #header
@@ -18,8 +19,10 @@
18
19
  %li
19
20
  %a{href: '/entries.html'} Archives
20
21
  %li
21
- %a{href: '/entries.rss'} RSS
22
+ %a{href: '/entries.rss', target: '_blank'} RSS
22
23
  #page
23
24
  #content= content
24
25
  #footer
25
26
  #{config.title} (C) #{config.author}
27
+ Generated by
28
+ %a{href: 'https://github.com/hibariya/retter', target: '_blank'} Retter
@@ -0,0 +1,8 @@
1
+
2
+ dl dd {
3
+ margin-bottom: 1em;
4
+ }
5
+
6
+ pre {
7
+ overflow: scroll;
8
+ }
@@ -0,0 +1,154 @@
1
+ @charset "utf-8";
2
+
3
+ html {
4
+ height: 100%;
5
+ }
6
+
7
+ body {
8
+ margin: 0 auto 0 auto;
9
+ padding: 0;
10
+ font-family: sans-serif;
11
+ background: #EEE;
12
+ background-image:url("../images/orange/bg_body.jpg");
13
+ height: 100%;
14
+ }
15
+
16
+ ul {
17
+ list-style: none;
18
+ }
19
+
20
+ a {
21
+ text-decoration: none;
22
+ color: rgb(25,30,10);
23
+ }
24
+
25
+ #header {
26
+ padding: 0;
27
+ margin: 0;
28
+ }
29
+
30
+ #header h1 {
31
+ margin: 0;
32
+ padding: 0.2em 0 0.2em 1em;
33
+ color: rgb(77,144,253);
34
+ height:40px;
35
+ background-image:url("../images/orange/bg_header.png");
36
+ background-repeat:repeat-x;
37
+ }
38
+
39
+ #header h1 a {
40
+ color:#FFF;
41
+ }
42
+
43
+ #header ul#menu {
44
+ margin: 0.5em 0 3em 0;
45
+ padding: 0 0 0 2em;
46
+ }
47
+
48
+ #header ul#menu{
49
+ }
50
+
51
+ #header ul#menu li {
52
+ float: left;
53
+ margin-right: 0.5em;
54
+ background:rgba(255,255,255,0.5);
55
+ padding:5px;
56
+ }
57
+
58
+ #header ul#menu li a {
59
+ color:#336;
60
+ }
61
+
62
+ #header ul#menu li a:hover {
63
+ color:#09C;
64
+ }
65
+
66
+ #page {
67
+ clear: both;
68
+ margin: 0 auto 0 auto;
69
+ width: 800px;
70
+ position: relative;
71
+ min-height: 100%;
72
+ }
73
+
74
+ article {
75
+ color:#603;
76
+ border-radius: 10px;
77
+ border: 3px #FFC solid;
78
+ -moz-border-radius: 10px;
79
+ -webkit-border-radius: 10px;
80
+ padding: 1em 1.5em 1em 1.5em;
81
+ margin: 1em 0 1em 0;
82
+ width 100%;
83
+ background-image:url("../images/orange/bg_entry.jpg");
84
+ position:relative;
85
+ }
86
+
87
+ article .date {
88
+ font-size: 1em;
89
+ text-align: center;
90
+ background-color:#036;
91
+ padding:10px;
92
+ width:100px;
93
+ float:right;
94
+
95
+ position:absolute;
96
+ top:-24px;
97
+ left:650px;
98
+ }
99
+
100
+ article .date a {
101
+ color:#FFF;
102
+ }
103
+
104
+ article .date a:visited {
105
+ color:#FFF;
106
+ }
107
+
108
+ article .date a:hover {
109
+ color:#669;
110
+ }
111
+
112
+ article ul#entries > li {
113
+ margin-top: 1em;
114
+ }
115
+
116
+ article ul#entries {
117
+ line-height: 1.5em;
118
+ }
119
+
120
+ #entries {
121
+ width 100%;
122
+ }
123
+
124
+ pre {
125
+ background: #EEE;
126
+ color: rgb(0,30,67);
127
+ padding: 1em;
128
+ border-radius: 10px;
129
+ border: 1px #BBB solid;
130
+ -moz-border-radius: 10px;
131
+ -webkit-border-radius: 10px;
132
+ }
133
+
134
+ #footer {
135
+ text-align: center;
136
+ margin: 1em 0 0 0;
137
+ padding: 0.5em 0.5em 0.5em 1em;
138
+ background: #036;
139
+ color: #FFF;
140
+ position: relative; bottom: 0;
141
+ }
142
+
143
+ #footer a {
144
+ color: #FFF;
145
+ }
146
+
147
+ #footer a:visited {
148
+ color: #FFF;
149
+ }
150
+
151
+ #footer a:hover {
152
+ color: #669;
153
+ }
154
+
@@ -112,3 +112,6 @@ pre {
112
112
  position: relative; bottom: 0;
113
113
  }
114
114
 
115
+ #footer a:visited {
116
+ color: rgb(77,144,253);
117
+ }
@@ -2,11 +2,11 @@
2
2
 
3
3
  class Retter::Command < Thor
4
4
  desc 'edit', 'Open $EDITOR. Write an article with Markdown.'
5
- method_options date: :string
5
+ method_options date: :string, silent: :boolean
6
6
  def edit
7
7
  system config.editor, detected_retter_file.to_s
8
8
 
9
- invoke_after :edit
9
+ invoke_after :edit unless options[:silent]
10
10
  end
11
11
 
12
12
  default_task :edit
@@ -26,19 +26,25 @@ class Retter::Command < Thor
26
26
  end
27
27
 
28
28
  desc 'rebind', 'Bind the draft article, re-generate all html pages.'
29
+ method_options silent: :boolean
29
30
  def rebind
30
31
  binder = Retter::Stationery.binder(config)
31
32
 
32
33
  binder.commit_wip_file
33
34
  binder.rebind!
34
35
 
35
- invoke_after :rebind
36
+ unless options[:silent]
37
+ invoke_after :bind
38
+ invoke_after :rebind
39
+ end
36
40
  end
37
41
 
38
42
  desc 'bind', 'Re-bind the draft article, re-generate all html pages.'
43
+ method_options silent: :boolean
39
44
  alias_method :bind, :rebind
40
45
 
41
46
  desc 'commit', "cd $RETTER_HOME && git add . && git commit -m 'Retter commit'"
47
+ method_options silent: :boolean
42
48
  def commit
43
49
  working_dir = config.retter_home.to_s
44
50
  git = Grit::Repo.new(working_dir)
@@ -47,7 +53,15 @@ class Retter::Command < Thor
47
53
  say git.add(working_dir), :green
48
54
  say git.commit_all('Retter commit'), :green
49
55
 
50
- invoke_after :commit
56
+ invoke_after :commit unless options[:silent]
57
+ end
58
+
59
+ desc 'home', 'Open a new shell in $RETTER_HOME'
60
+ def home
61
+ Dir.chdir config.retter_home.to_s
62
+
63
+ system %(PS1="(retter) " #{config.shell})
64
+ say 'bye', :green
51
65
  end
52
66
 
53
67
  desc 'new', 'Create a new site'
@@ -98,26 +112,28 @@ class Retter::Command < Thor
98
112
  def self.usage
99
113
  <<-EOM
100
114
  Usage:
101
- # startup
115
+ # Startup
102
116
  cd /path/to/dir
103
117
  retter new my_sweet_diary
104
118
  echo "export EDITOR=vim" >> ~/.zshenv # retter requires $EDITOR.
105
119
  echo "export RETTER_HOME=/path/to/my_sweet_diary" >> ~/.zshenv
106
120
  . ~/.zshenv
107
121
 
108
- # write a article, and publish.
122
+ # Write a article
109
123
  retter # $EDITOR will open. Write an article with Markdown.
110
124
  retter preview # Preview the draft article (browser will open).
125
+
126
+ # Publish
111
127
  retter bind # bind the draft article, re-generate all html pages.
112
- git add .
113
- git commit -m 'commit message'
114
- git push [remote] [branch]
128
+ retter commit # shortcut of "cd $RETTER_HOME; git add .; git commit -m 'Retter commit'"
129
+ cd $RETTER_HOME
130
+ git push [remote] [branch] # or sftp, rsync, etc...
115
131
 
116
- # edit specific date article.
132
+ # Specific date
117
133
  retter edit --date=20110101
118
134
  retter preview --date=20110101
119
135
 
120
- # browse offline.
136
+ # Browse offline.
121
137
  retter open # Open your (static) site top page (browser will open).
122
138
 
123
139
  See also: https://github.com/hibariya/retter
data/lib/retter/config.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  # coding: utf-8
2
2
 
3
3
  class Retter::Config
4
- ATTRIBUTES = [
4
+ ATTRIBUTES = [
5
5
  :editor,
6
+ :shell,
6
7
  :title,
7
8
  :description,
8
9
  :url,
@@ -41,13 +42,12 @@ class Retter::Config
41
42
 
42
43
  @retter_home = Pathname.new(@env['RETTER_HOME'])
43
44
  load_defaults
44
-
45
- retterfile = retter_home.join('Retterfile')
46
- instance_eval retterfile.read if retterfile.exist?
45
+ load_retterfile_if_exists
47
46
  end
48
47
 
49
48
  def load_defaults
50
49
  editor @env['EDITOR']
50
+ shell @env['SHELL']
51
51
  url 'http://example.com'
52
52
  retters_dir retter_home.join('retters/')
53
53
  wip_file retters_dir.join('today.md')
@@ -64,6 +64,11 @@ class Retter::Config
64
64
  feed_file retter_home.join('entries.rss')
65
65
  end
66
66
 
67
+ def load_retterfile_if_exists
68
+ retterfile = retter_home.join('Retterfile')
69
+ instance_eval retterfile.read if retterfile.exist?
70
+ end
71
+
67
72
  def detect_retter_home
68
73
  # TODO こういうの上のディレクトリも見て判断するのを何か参考にして書く
69
74
  @env['RETTER_HOME'] = Dir.pwd if File.exist? 'Retterfile'
@@ -12,18 +12,6 @@ module Retter::Stationery
12
12
  @config = config
13
13
  end
14
14
 
15
- def view_scope
16
- @view_scope ||= View::Scope.new(config, entries: entries)
17
- end
18
-
19
- def layout_renderer
20
- @layout_renderer ||= Haml::Engine.new(layout_file.read, ugly: true)
21
- end
22
-
23
- def entry_renderer
24
- @entry_renderer ||= Haml::Engine.new(entry_layout_file.read, ugly: true)
25
- end
26
-
27
15
  def rebind!
28
16
  commit_wip_file
29
17
 
@@ -118,5 +106,19 @@ module Retter::Stationery
118
106
  def entry_url(date, id = nil)
119
107
  (URI.parse(url) + date.strftime('/entries/%Y%m%d.html')).to_s
120
108
  end
109
+
110
+ private
111
+
112
+ def view_scope
113
+ @view_scope ||= View::Scope.new(config, entries: entries)
114
+ end
115
+
116
+ def layout_renderer
117
+ @layout_renderer ||= Haml::Engine.new(layout_file.read, ugly: true)
118
+ end
119
+
120
+ def entry_renderer
121
+ @entry_renderer ||= Haml::Engine.new(entry_layout_file.read, ugly: true)
122
+ end
121
123
  end
122
124
  end
@@ -16,24 +16,32 @@ module Retter::Stationery
16
16
  load_wip_entry_if_needed
17
17
  end
18
18
 
19
+ def print
20
+ build_entry
21
+ print_html
22
+ end
23
+
19
24
  def file_path
20
25
  config.retter_home.join '.preview.html'
21
26
  end
22
27
 
23
- def renderer
24
- Haml::Engine.new(layout_file.read, ugly: true)
25
- end
28
+ private
26
29
 
27
- def entry_renderer
28
- Haml::Engine.new(entry_layout_file.read, ugly: true)
30
+ def load_retter_file
31
+ retter_file = retter_file(@date)
32
+ @body = retter_file.exist? ? retter_file.read : ''
29
33
  end
30
34
 
31
- def print
32
- build_entry
33
- print_html
35
+ def load_wip_entry_if_needed
36
+ if @date == Date.today && wip_file.exist?
37
+ @body = [@body, wip_file.read].join("\n")
38
+ end
34
39
  end
35
40
 
36
- private
41
+ def build_entry
42
+ body_html = Retter::Stationery.markupper.render(@body)
43
+ @entry = Retter::Entry.new(date: @date, body: body_html)
44
+ end
37
45
 
38
46
  def print_html
39
47
  scope = View::Scope.new(config)
@@ -45,19 +53,12 @@ module Retter::Stationery
45
53
  end
46
54
  end
47
55
 
48
- def build_entry
49
- @entry = Retter::Entry.new(date: @date, body: Retter::Stationery.markupper.render(@body))
50
- end
51
-
52
- def load_retter_file
53
- retter_file = retter_file(@date)
54
- @body = retter_file.exist? ? retter_file.read : ''
56
+ def renderer
57
+ Haml::Engine.new(layout_file.read, ugly: true)
55
58
  end
56
59
 
57
- def load_wip_entry_if_needed
58
- if @date == Date.today && wip_file.exist?
59
- @body = [@body, wip_file.read].join("\n")
60
- end
60
+ def entry_renderer
61
+ Haml::Engine.new(entry_layout_file.read, ugly: true)
61
62
  end
62
63
  end
63
64
  end
@@ -3,7 +3,7 @@
3
3
  module Retter::Stationery
4
4
  class Renderer < ::Redcarpet::Render::HTML
5
5
  def block_code(code, lang)
6
- ::CodeRay.scan(code, lang ? lang.intern : :plain).div#.div(line_numbers: :table)
6
+ ::CodeRay.scan(code, lang ? lang.intern : :plain).div
7
7
  end
8
8
  end
9
9
  end
@@ -7,6 +7,16 @@ module Retter::Stationery::View
7
7
  def fix_path(html, prefix='./')
8
8
  elements = Nokogiri::HTML(html)
9
9
 
10
+ fix_href_path(fix_src_path(elements, prefix), prefix).to_s
11
+ end
12
+
13
+ def entry_path(date, id = nil)
14
+ date.strftime('/entries/%Y%m%d.html') + (id ? "##{id}" : '')
15
+ end
16
+
17
+ private
18
+
19
+ def fix_src_path(elements, prefix = './')
10
20
  elements.search("[src!=''][src!='']").each do |el|
11
21
  src = el.attr('src').scan(/[^\.\/]{3}.*/).first
12
22
  next if src =~ /^(?:http|https):\/\//
@@ -14,6 +24,10 @@ module Retter::Stationery::View
14
24
  el.set_attribute 'src', [prefix, src].join
15
25
  end
16
26
 
27
+ elements
28
+ end
29
+
30
+ def fix_href_path(elements, prefix = './')
17
31
  elements.search("[href][href!='#']").each do |el|
18
32
  href = el.attr('href')
19
33
  next if href =~ /^(?:http|https):\/\//
@@ -25,12 +39,9 @@ module Retter::Stationery::View
25
39
  end
26
40
  end
27
41
 
28
- elements.to_s
42
+ elements
29
43
  end
30
44
 
31
- def entry_path(date, id = nil)
32
- date.strftime('/entries/%Y%m%d.html') + (id ? "##{id}" : '')
33
- end
34
45
  end
35
46
 
36
47
  class Scope
@@ -43,9 +54,7 @@ module Retter::Stationery::View
43
54
  def_delegators :@config, *Retter::Config.delegatables
44
55
 
45
56
  [:entries].each do |meth|
46
- define_method meth do
47
- @assigns[meth]
48
- end
57
+ define_method(meth) { @assigns[meth] }
49
58
  end
50
59
 
51
60
  def initialize(config, assigns = {})
@@ -1,3 +1,3 @@
1
1
  module Retter
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
data/retter.gemspec CHANGED
@@ -5,7 +5,7 @@ require "retter/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "retter"
7
7
  s.version = Retter::VERSION
8
- s.authors = ["hibariya"]
8
+ s.authors = ["hibariya", "uzura29"]
9
9
  s.email = ["celluloid.key@gmail.com"]
10
10
  s.homepage = "https://github.com/hibariya/retter"
11
11
  s.summary = %q{Lightweight diary workflow}
@@ -15,9 +15,23 @@ describe 'Retter::Command#commit', clean: :all do
15
15
  command.stub!(:say) { true }
16
16
  wip_file.open('w') {|f| f.puts article }
17
17
  command.rebind
18
+ end
19
+
20
+ context 'with no options' do
21
+ before do
22
+ command.should_receive(:invoke_after).with(:commit)
23
+ command.commit
24
+ end
18
25
 
19
- command.commit
26
+ it { repo.commits.first.message.should == 'Retter commit' }
20
27
  end
21
28
 
22
- it { repo.commits.first.message.should == 'Retter commit' }
29
+ context 'with silent option' do
30
+ before do
31
+ command.stub!(:options) { {silent: true} }
32
+ command.should_not_receive(:invoke_after)
33
+ end
34
+
35
+ it { command.commit.should }
36
+ end
23
37
  end
@@ -12,6 +12,7 @@ describe 'Retter::Command#edit', clean: :all do
12
12
 
13
13
  context 'no options' do
14
14
  before do
15
+ command.should_receive(:invoke_after).with(:edit)
15
16
  command.edit
16
17
  end
17
18
 
@@ -38,11 +39,13 @@ describe 'Retter::Command#edit', clean: :all do
38
39
  end
39
40
  end
40
41
 
41
- context 'with date' do
42
+ context 'with date option' do
42
43
  let(:date_str) { '20110101' }
43
44
 
44
45
  before do
45
46
  command.stub!(:options) { {date: date_str} }
47
+
48
+ command.should_receive(:invoke_after).with(:edit)
46
49
  command.edit
47
50
  end
48
51
 
@@ -54,4 +57,15 @@ describe 'Retter::Command#edit', clean: :all do
54
57
  it { should written }
55
58
  end
56
59
  end
60
+
61
+ context 'with silent option' do
62
+ before do
63
+ command.stub!(:options) { {silent: true} }
64
+
65
+ command.should_not_receive(:invoke_after)
66
+ command.edit
67
+ end
68
+
69
+ it { wip_file.should written }
70
+ end
57
71
  end
@@ -28,6 +28,8 @@ describe 'Retter::Command#rebind', clean: :all do
28
28
  wip_file.open('w') {|f| f.puts article }
29
29
  Date.stub!(:today).and_return(Date.parse(date_str))
30
30
 
31
+ command.should_receive(:invoke_after).with(:bind)
32
+ command.should_receive(:invoke_after).with(:rebind)
31
33
  command.rebind
32
34
  end
33
35
 
@@ -58,4 +60,15 @@ describe 'Retter::Command#rebind', clean: :all do
58
60
  it { texts_of(entry_html, '.entry h1').should == %w(2011/01/01 朝11時 夜1時) }
59
61
  end
60
62
  end
63
+
64
+ context 'with silent option' do
65
+ before do
66
+ wip_file.open('w') {|f| f.puts 'article' }
67
+ command.stub!(:options) { {silent: true} }
68
+
69
+ command.should_not_receive(:invoke_after)
70
+ end
71
+
72
+ it { command.rebind.should }
73
+ end
61
74
  end
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - hibariya
9
+ - uzura29
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2011-09-16 00:00:00.000000000Z
13
+ date: 2011-09-20 00:00:00.000000000Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: thor
16
- requirement: &70165694450760 !ruby/object:Gem::Requirement
17
+ requirement: &70099940455160 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ! '>='
@@ -21,10 +22,10 @@ dependencies:
21
22
  version: 0.14.6
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *70165694450760
25
+ version_requirements: *70099940455160
25
26
  - !ruby/object:Gem::Dependency
26
27
  name: builder
27
- requirement: &70165694450200 !ruby/object:Gem::Requirement
28
+ requirement: &70099940452260 !ruby/object:Gem::Requirement
28
29
  none: false
29
30
  requirements:
30
31
  - - ! '>='
@@ -32,10 +33,10 @@ dependencies:
32
33
  version: 3.0.0
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70165694450200
36
+ version_requirements: *70099940452260
36
37
  - !ruby/object:Gem::Dependency
37
38
  name: redcarpet
38
- requirement: &70165694449720 !ruby/object:Gem::Requirement
39
+ requirement: &70099940451680 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ! '>='
@@ -43,10 +44,10 @@ dependencies:
43
44
  version: 2.0.0b3
44
45
  type: :runtime
45
46
  prerelease: false
46
- version_requirements: *70165694449720
47
+ version_requirements: *70099940451680
47
48
  - !ruby/object:Gem::Dependency
48
49
  name: coderay
49
- requirement: &70165694449240 !ruby/object:Gem::Requirement
50
+ requirement: &70099940451100 !ruby/object:Gem::Requirement
50
51
  none: false
51
52
  requirements:
52
53
  - - ! '>='
@@ -54,10 +55,10 @@ dependencies:
54
55
  version: 0.9.8
55
56
  type: :runtime
56
57
  prerelease: false
57
- version_requirements: *70165694449240
58
+ version_requirements: *70099940451100
58
59
  - !ruby/object:Gem::Dependency
59
60
  name: nokogiri
60
- requirement: &70165694448760 !ruby/object:Gem::Requirement
61
+ requirement: &70099940450560 !ruby/object:Gem::Requirement
61
62
  none: false
62
63
  requirements:
63
64
  - - ! '>='
@@ -65,10 +66,10 @@ dependencies:
65
66
  version: 1.5.0
66
67
  type: :runtime
67
68
  prerelease: false
68
- version_requirements: *70165694448760
69
+ version_requirements: *70099940450560
69
70
  - !ruby/object:Gem::Dependency
70
71
  name: launchy
71
- requirement: &70165694448280 !ruby/object:Gem::Requirement
72
+ requirement: &70099940450040 !ruby/object:Gem::Requirement
72
73
  none: false
73
74
  requirements:
74
75
  - - ! '>='
@@ -76,10 +77,10 @@ dependencies:
76
77
  version: 2.0.5
77
78
  type: :runtime
78
79
  prerelease: false
79
- version_requirements: *70165694448280
80
+ version_requirements: *70099940450040
80
81
  - !ruby/object:Gem::Dependency
81
82
  name: haml
82
- requirement: &70165694447800 !ruby/object:Gem::Requirement
83
+ requirement: &70099940449440 !ruby/object:Gem::Requirement
83
84
  none: false
84
85
  requirements:
85
86
  - - ! '>='
@@ -87,10 +88,10 @@ dependencies:
87
88
  version: 3.1.3
88
89
  type: :runtime
89
90
  prerelease: false
90
- version_requirements: *70165694447800
91
+ version_requirements: *70099940449440
91
92
  - !ruby/object:Gem::Dependency
92
93
  name: bundler
93
- requirement: &70165694447320 !ruby/object:Gem::Requirement
94
+ requirement: &70099940448860 !ruby/object:Gem::Requirement
94
95
  none: false
95
96
  requirements:
96
97
  - - ! '>='
@@ -98,10 +99,10 @@ dependencies:
98
99
  version: '1.0'
99
100
  type: :runtime
100
101
  prerelease: false
101
- version_requirements: *70165694447320
102
+ version_requirements: *70099940448860
102
103
  - !ruby/object:Gem::Dependency
103
104
  name: grit
104
- requirement: &70165694431940 !ruby/object:Gem::Requirement
105
+ requirement: &70099940448280 !ruby/object:Gem::Requirement
105
106
  none: false
106
107
  requirements:
107
108
  - - ! '>='
@@ -109,10 +110,10 @@ dependencies:
109
110
  version: 2.4.1
110
111
  type: :runtime
111
112
  prerelease: false
112
- version_requirements: *70165694431940
113
+ version_requirements: *70099940448280
113
114
  - !ruby/object:Gem::Dependency
114
115
  name: rake
115
- requirement: &70165694431440 !ruby/object:Gem::Requirement
116
+ requirement: &70099940447700 !ruby/object:Gem::Requirement
116
117
  none: false
117
118
  requirements:
118
119
  - - ! '>='
@@ -120,10 +121,10 @@ dependencies:
120
121
  version: 0.9.2
121
122
  type: :development
122
123
  prerelease: false
123
- version_requirements: *70165694431440
124
+ version_requirements: *70099940447700
124
125
  - !ruby/object:Gem::Dependency
125
126
  name: ir_b
126
- requirement: &70165694430920 !ruby/object:Gem::Requirement
127
+ requirement: &70099940447220 !ruby/object:Gem::Requirement
127
128
  none: false
128
129
  requirements:
129
130
  - - ! '>='
@@ -131,10 +132,10 @@ dependencies:
131
132
  version: 1.4.0
132
133
  type: :development
133
134
  prerelease: false
134
- version_requirements: *70165694430920
135
+ version_requirements: *70099940447220
135
136
  - !ruby/object:Gem::Dependency
136
137
  name: tapp
137
- requirement: &70165694430420 !ruby/object:Gem::Requirement
138
+ requirement: &70099940446620 !ruby/object:Gem::Requirement
138
139
  none: false
139
140
  requirements:
140
141
  - - ! '>='
@@ -142,10 +143,10 @@ dependencies:
142
143
  version: 1.1.0
143
144
  type: :development
144
145
  prerelease: false
145
- version_requirements: *70165694430420
146
+ version_requirements: *70099940446620
146
147
  - !ruby/object:Gem::Dependency
147
148
  name: rspec
148
- requirement: &70165694429900 !ruby/object:Gem::Requirement
149
+ requirement: &70099940446040 !ruby/object:Gem::Requirement
149
150
  none: false
150
151
  requirements:
151
152
  - - ! '>='
@@ -153,10 +154,10 @@ dependencies:
153
154
  version: 2.6.0
154
155
  type: :development
155
156
  prerelease: false
156
- version_requirements: *70165694429900
157
+ version_requirements: *70099940446040
157
158
  - !ruby/object:Gem::Dependency
158
159
  name: simplecov
159
- requirement: &70165694429420 !ruby/object:Gem::Requirement
160
+ requirement: &70099940445440 !ruby/object:Gem::Requirement
160
161
  none: false
161
162
  requirements:
162
163
  - - ! '>='
@@ -164,7 +165,7 @@ dependencies:
164
165
  version: 0.5.3
165
166
  type: :development
166
167
  prerelease: false
167
- version_requirements: *70165694429420
168
+ version_requirements: *70099940445440
168
169
  description: Lightweight diary workflow. ruby-1.9.2 or later is required.
169
170
  email:
170
171
  - celluloid.key@gmail.com
@@ -186,6 +187,9 @@ files:
186
187
  - lib/generator/skel/config.ru
187
188
  - lib/generator/skel/entries/.gitkeep
188
189
  - lib/generator/skel/images/.gitkeep
190
+ - lib/generator/skel/images/orange/bg_body.jpg
191
+ - lib/generator/skel/images/orange/bg_entry.jpg
192
+ - lib/generator/skel/images/orange/bg_header.png
189
193
  - lib/generator/skel/index.html
190
194
  - lib/generator/skel/javascripts/.gitkeep
191
195
  - lib/generator/skel/layouts/entries.html.haml
@@ -194,7 +198,9 @@ files:
194
198
  - lib/generator/skel/layouts/profile.html.haml
195
199
  - lib/generator/skel/layouts/retter.html.haml
196
200
  - lib/generator/skel/retters/.gitkeep
197
- - lib/generator/skel/stylesheets/application.css
201
+ - lib/generator/skel/stylesheets/base.css
202
+ - lib/generator/skel/stylesheets/orange.css
203
+ - lib/generator/skel/stylesheets/retter.css
198
204
  - lib/retter.rb
199
205
  - lib/retter/command.rb
200
206
  - lib/retter/config.rb