days 0.1.7 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 05ef76c071d08bf1521ffb377fca1d0db8fca47a
4
+ data.tar.gz: 94f21c6f115d09105660345429d6e69cf2f3504b
5
+ SHA512:
6
+ metadata.gz: a8c9b6ef9cf478e08d73ac02c0cdd5f40e365108cc5d12c4fae7219596b10cc0cad345709fbfe989df90c4670fa221569f73ced31699c1399e73d3a4f796d270
7
+ data.tar.gz: 9c8f993e8d8cb859140555f1866dc0154c0abd2af9f390907df0b41f7365b65e348783ed086bac22c4af9efcc9bcf144a5e7ab71bbcc7ac69b4aad9ce61680a0
@@ -7,9 +7,9 @@ Gem::Specification.new do |gem|
7
7
  gem.name = "days"
8
8
  gem.version = Days::VERSION
9
9
  gem.authors = ["Shota Fukumori (sora_h)"]
10
- gem.email = ["sorah@tubusu.net"]
11
- gem.description = %q{Simple blog system built up with Sinatra. Under in development}
12
- gem.summary = %q{Simple blog system built up with Sinatra. Under in development}
10
+ gem.email = ["her@sorah.jp"]
11
+ gem.description = %q{Simple blog system built up with Sinatra.}
12
+ gem.summary = %q{Simple blog system built up with Sinatra.}
13
13
  gem.homepage = "https://github.com/sorah/days"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
@@ -17,24 +17,24 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency "sinatra", '~> 1.3'
21
- gem.add_dependency "thor"
22
- gem.add_dependency "rack_csrf"
20
+ gem.add_dependency "sinatra", '~> 1.3.3'
21
+ gem.add_dependency "thor", '~> 0.16.0'
22
+ gem.add_dependency "rack_csrf", '~> 2.4.0'
23
23
 
24
- gem.add_dependency "settingslogic"
24
+ gem.add_dependency "settingslogic", '~> 2.0.9'
25
25
 
26
- gem.add_dependency "sprockets"
27
- gem.add_dependency "haml"
28
- gem.add_dependency "sass"
26
+ gem.add_dependency "sprockets", '~> 2.2.2'
27
+ gem.add_dependency "haml", '~> 3.1.7'
28
+ gem.add_dependency "sass", '~> 3.2.5'
29
29
 
30
- gem.add_dependency "redcarpet"
31
- gem.add_dependency "builder"
30
+ gem.add_dependency "redcarpet", '~> 2.2.2'
31
+ gem.add_dependency "builder", '~> 3.0.0'
32
32
 
33
- gem.add_dependency "activerecord", "~> 3.2"
33
+ gem.add_dependency "activerecord", "~> 3.2.14"
34
34
  gem.add_dependency "kaminari", "~> 0.13"
35
- gem.add_dependency "padrino-helpers"
36
- gem.add_dependency "stringex"
37
- gem.add_dependency "bcrypt-ruby"
35
+ gem.add_dependency "padrino-helpers", '~> 0.9.21'
36
+ gem.add_dependency "stringex", '~> 1.5.1'
37
+ gem.add_dependency "bcrypt-ruby", '~> 3.0.1'
38
38
 
39
39
  gem.add_development_dependency "sqlite3"
40
40
 
@@ -28,7 +28,7 @@ module Days
28
28
 
29
29
  map '/' do
30
30
  if app.environment != 'test'
31
- use Rack::Session::Cookie
31
+ use Rack::Session::Cookie, secret: app.session_secret
32
32
  use Rack::Csrf
33
33
  end
34
34
  if app.environment == 'development'
@@ -13,13 +13,16 @@ module Days
13
13
  when Array
14
14
  @title = entry.map(&:title).join(', ')
15
15
  @entries = entry
16
- haml :entries
16
+ return haml(:entries)
17
17
  when Entry
18
18
  @title = entry.title
19
- haml :entry, locals: {entry: entry, full: true}
19
+ return haml(:entry, locals: {entry: entry, full: true})
20
20
  end
21
- else
22
- ''
21
+ end
22
+
23
+ entry = Entry.where(old_path: request.path).first
24
+ if entry
25
+ return [301, {'Location' => entry_path(entry)}, ""]
23
26
  end
24
27
  end
25
28
 
@@ -112,8 +112,10 @@ module Days
112
112
  line = JSON.parse(line)
113
113
 
114
114
  attributes ={}
115
- if Entry.where(id: line['id']).count.zero?
116
- attributes[:id] = line['id']
115
+ if line['id'] && Entry.where(id: line['id']).count.zero?
116
+ new_id = line['id']
117
+ else
118
+ new_id = nil
117
119
  end
118
120
 
119
121
  if line['user']
@@ -138,9 +140,12 @@ module Days
138
140
  attributes[:body] = line['body'] if line['body']
139
141
  attributes[:published_at] = line['published_at'] if line['published_at']
140
142
  attributes[:draft] = line['draft'] if line['draft']
143
+ attributes[:old_path] = line['old_path'] if line['old_path']
141
144
 
142
145
  p attributes[:title]
143
- Entry.create!(attributes)
146
+ entry = Entry.new(attributes)
147
+ entry.id = new_id if new_id
148
+ entry.save!
144
149
  end
145
150
  end
146
151
  end
@@ -22,8 +22,8 @@ module Days
22
22
  Rack::Csrf.csrf_tag(env)
23
23
  end
24
24
 
25
- def entry_path(entry)
26
- return nil unless entry.published?
25
+ def entry_path(entry, allow_draft=false)
26
+ return nil unless allow_draft || entry.published?
27
27
 
28
28
  published_at = entry.published_at
29
29
  hash = {
@@ -0,0 +1,6 @@
1
+ class AddOldPathToEntries < ActiveRecord::Migration
2
+ def change
3
+ add_column :entries, :old_path, :string, default: nil
4
+ add_index :entries, :old_path
5
+ end
6
+ end
@@ -4,7 +4,7 @@ require 'redcarpet'
4
4
 
5
5
  module Days
6
6
  class Entry < ActiveRecord::Base
7
- attr_accessible :title, :body, :slug, :published_at, :categories, :user, :draft
7
+ attr_accessible :title, :body, :slug, :published_at, :categories, :user, :draft, :old_path
8
8
 
9
9
  validates_uniqueness_of :slug
10
10
  validates_presence_of :title, :body, :rendered, :slug
@@ -1,3 +1,3 @@
1
1
  module Days
2
- VERSION = "0.1.7"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,188 @@
1
+ require 'json'
2
+ require 'stringex'
3
+ require 'time'
4
+ require 'open-uri'
5
+
6
+ if ARGV.size < 1 || %w(--help -h).include?(ARGV[0])
7
+ puts "Usage: #{File.basename __FILE__} tumblelog [api_key] [--ignore-ids]"
8
+ puts ""
9
+ puts "This exports your tumblelog for `days import`."
10
+ puts "Exported texts will go STDOUT. Use redirection of your shell to save it."
11
+ puts ""
12
+ puts "When api_key not specified, this will see $TUMBLR_API_KEY, or ask to you."
13
+ puts "Don't know how to Take API key? See here: http://www.tumblr.com/docs/en/api/v2#auth"
14
+ puts ""
15
+ puts "NOTE: This won't save images, and all other external resources. Just save texts, only."
16
+ exit
17
+ end
18
+
19
+ def ask_for_key
20
+ require 'io/console'
21
+ abort "Can't access console, please specify your key via $TUMBLR_API_key or the 2nd argument" unless IO.console
22
+
23
+ IO.console.print "Tumblr API Key: "
24
+ IO.console.gets.chomp
25
+ end
26
+
27
+ def get_posts(tumblelog, key, offset=0)
28
+ response = open("http://api.tumblr.com/v2/blog/#{tumblelog}/posts?api_key=#{key}&offset=#{offset}", 'r', &:read)
29
+ JSON.parse(response)
30
+ end
31
+
32
+ ignore_id = !!ARGV.delete('--ignore-ids')
33
+ tumblelog = ARGV[0]
34
+ api_key = ARGV[1] || ENV["TUMBLR_API_KEY"] || ask_for_key
35
+
36
+ slugs = {}
37
+
38
+ offset = 0
39
+ loop do
40
+ payload = get_posts(tumblelog, api_key, offset)
41
+ break unless payload['response'] && payload['response']['posts']
42
+ posts = payload['response']['posts']
43
+ break if posts.empty?
44
+
45
+ posts.each do |post|
46
+ entry = {id: ignore_id ? post['id'].to_i : nil}
47
+ entry[:title] = post['title']
48
+ entry[:body] = post['body']
49
+ entry[:published_at] = Time.parse(post['date']).localtime
50
+ entry[:draft] = post['state'] != 'published'
51
+ post_uri = URI.parse(post['post_url'])
52
+ entry[:old_path] = post_uri.request_uri
53
+ if %r{\A/post/(\d+?)/(.+)\z} === post_uri.request_uri
54
+ entry[:slug] = $2
55
+ end
56
+
57
+ case post['type']
58
+ when 'text'
59
+ # do nothing
60
+ when 'photo'
61
+ warn "In post #{post['post_url']}, the following external resources won't be saved:"
62
+ post['photos'].each { |_| warn" - #{_['alt_sizes'][0]['url']}" }
63
+
64
+ entry[:title] = post['caption'] ? post['caption'].dup : ''
65
+ entry[:title].prepend('Photos: ')
66
+ entry[:body] = <<-EOF
67
+ <section class="t-photos">
68
+ <div class="t-photos-set">
69
+ #{post['photos'].map { |_| photo = _['alt_sizes'][0]; " <p><img src=\"#{photo['url']}\" width=\"#{_['width']}\" height=\"#{_['height']}\" alt=\"#{_['caption']}\"></p>" }.join("\n")}
70
+ </div>
71
+ <div class="t-photos-caption">
72
+ #{post['caption']}
73
+ </div>
74
+ </div>
75
+ EOF
76
+ when 'quote'
77
+ entry[:title] = post['text'] ? post['text'].dup : ''
78
+ entry[:title].prepend('Quote: ')
79
+ if 20 < entry[:title].size
80
+ entry[:title] = entry[:title][0, 20] + '...'
81
+ end
82
+
83
+ entry[:body] = <<-EOF
84
+ <section class="t-quote">
85
+ <blockquote class="t-quote-text">
86
+ #{post['text']}
87
+ </blockquote>
88
+ <div class="t-source">
89
+ #{(post['source'] && !post['source'].empty?) ? post['source'] : "<a href=\"#{post['source_url']}\">#{post['source_title'] || post['source_url']}</a>"}
90
+ </div>
91
+ </section>
92
+ EOF
93
+ when 'link'
94
+ entry[:title].prepend('Quote: ')
95
+ entry[:body] = <<-EOF
96
+ <section class="t-link">
97
+ <div class="t-link-text">
98
+ <a href="#{post['url']}">#{post['title']}</a>
99
+ </div>
100
+ <div class="t-link-description">
101
+ #{post['description']}
102
+ </div>
103
+ </section>
104
+ EOF
105
+ when 'chat'
106
+ entry[:body] = <<-EOF
107
+ <section class="t-chat">
108
+ #{ post['dialogue'].map { |d|
109
+ " <p><span class=\"t-chat-label\">#{d['label']}</span> <span class=\"t-chat-phrase\">#{d['phrase']}</span></p>"
110
+ }.join("\n") }
111
+ </section>
112
+ EOF
113
+ when 'audio'
114
+ warn "External Resource in #{post['post_url']} will be not saved"
115
+ entry[:title] = post['caption'] ? post['caption'].dup : ''
116
+ entry[:title].prepend('Audio: ')
117
+ if 20 < entry[:title].size
118
+ entry[:title] = entry[:title][0, 20] + '...'
119
+ end
120
+
121
+ entry[:body] = <<-EOF
122
+ <section class="t-audio">
123
+ <div class="t-audio-player">#{post['player']}</div>
124
+ <div class="t-audio-title">#{post['id3_title']}</title>
125
+ <div class="t-source">
126
+ #{(post['source'] && !post['source'].empty?) ? post['source'] : "<a href=\"#{post['source_url']}\">#{post['source_title'] || post['source_url']}</a>"}
127
+ </div>
128
+ <div class="t-caption">
129
+ #{post['caption']}
130
+ </div>
131
+ </section>
132
+ EOF
133
+ when 'video'
134
+ warn "External Resource in #{post['post_url']} will be not saved"
135
+ entry[:title] = post['caption'] ? post['caption'].dup : ''
136
+ entry[:title].prepend('Audio: ')
137
+ if 20 < entry[:title].size
138
+ entry[:title] = entry[:title][0, 20] + '...'
139
+ end
140
+
141
+ entry[:body] = <<-EOF
142
+ <section class="t-video">
143
+ <div class="t-video-player">#{post['player'][-1]['embed_code']}</div>
144
+ <div class="t-source">
145
+ #{(post['source'] && !post['source'].empty?) ? post['source'] : "<a href=\"#{post['source_url']}\">#{post['source_title'] || post['source_url']}</a>"}
146
+ </div>
147
+ <div class="t-caption">
148
+ #{post['caption']}
149
+ </div>
150
+ </section>
151
+ EOF
152
+ when 'answer'
153
+ entry[:title] = post['question'] ? post['question'].dup : ''
154
+ entry[:title].prepend('Answer for: ')
155
+ if 20 < entry[:title].size
156
+ entry[:title] = entry[:title][0, 20] + '...'
157
+ end
158
+
159
+ entry[:body] = <<-EOF
160
+ <section class="t-answer">
161
+ <blockquote class="t-answer-question">#{post['question']}</div>
162
+ <div class="t-source">
163
+ from <a href="#{post['asking_url']}">#{post['asking_name']}</a>
164
+ </div>
165
+ <div class="t-answer-text">
166
+ #{post['answer']}
167
+ </div>
168
+ </section>
169
+ EOF
170
+ end
171
+
172
+ if entry[:title].nil? || entry[:title].empty? || /\A\s*\z/ === entry[:title]
173
+ entry[:title] = "#{(post['type'] || 'Post').capitalize} at #{post['date']}"
174
+ entry[:slug] = "#{post['type'] || 'post'}-#{post['id']}"
175
+ end
176
+
177
+ entry[:slug] ||= entry[:title].to_url
178
+ if slugs[entry[:slug]]
179
+ entry[:slug].prepend "#{post['id']}-"
180
+ end
181
+ slugs[entry[:slug]] = true
182
+
183
+
184
+ puts entry.to_json
185
+ end
186
+
187
+ offset += posts.size
188
+ end
@@ -37,6 +37,31 @@ describe Days::App, type: :controller do
37
37
  end
38
38
  end
39
39
 
40
+ describe "redirection from old path" do
41
+ fixtures :categories, :entries
42
+ let(:path) { nil }
43
+ subject { get path, {}, {} }
44
+
45
+ before do
46
+ Days::App.any_instance.stub(lookup_entry: nil)
47
+ end
48
+
49
+ context "when entry not found" do
50
+ let(:path) { '/post/like-old-but-not-exists' }
51
+
52
+ it { should be_not_found }
53
+ end
54
+
55
+ context "when entry found by old path" do
56
+ let(:path) { '/post/old-path' }
57
+
58
+ it "redirects to present path" do
59
+ expect(subject.status).to eq 301
60
+ expect(subject['Location']).to eq '/2012/11/today-is-a-rainy-day'
61
+ end
62
+ end
63
+ end
64
+
40
65
  describe "GET /:year/:month" do
41
66
  fixtures :categories, :entries
42
67
  subject { get '/2012/12', params }
@@ -6,6 +6,7 @@ entry_one:
6
6
  published_at: 2012-11-15 00:00:00
7
7
  user: blogger
8
8
  categories: daily, rainy
9
+ old_path: '/post/old-path'
9
10
 
10
11
  entry_two:
11
12
  title: "Today was"
metadata CHANGED
@@ -1,180 +1,158 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: days
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Shota Fukumori (sora_h)
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-06 00:00:00.000000000 Z
11
+ date: 2013-10-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: sinatra
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: '1.3'
19
+ version: 1.3.3
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: '1.3'
26
+ version: 1.3.3
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: thor
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ~>
36
32
  - !ruby/object:Gem::Version
37
- version: '0'
33
+ version: 0.16.0
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ~>
44
39
  - !ruby/object:Gem::Version
45
- version: '0'
40
+ version: 0.16.0
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rack_csrf
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ~>
52
46
  - !ruby/object:Gem::Version
53
- version: '0'
47
+ version: 2.4.0
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: '0'
54
+ version: 2.4.0
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: settingslogic
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ~>
68
60
  - !ruby/object:Gem::Version
69
- version: '0'
61
+ version: 2.0.9
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ~>
76
67
  - !ruby/object:Gem::Version
77
- version: '0'
68
+ version: 2.0.9
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: sprockets
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ~>
84
74
  - !ruby/object:Gem::Version
85
- version: '0'
75
+ version: 2.2.2
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ~>
92
81
  - !ruby/object:Gem::Version
93
- version: '0'
82
+ version: 2.2.2
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: haml
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - ~>
100
88
  - !ruby/object:Gem::Version
101
- version: '0'
89
+ version: 3.1.7
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - ~>
108
95
  - !ruby/object:Gem::Version
109
- version: '0'
96
+ version: 3.1.7
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: sass
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - ~>
116
102
  - !ruby/object:Gem::Version
117
- version: '0'
103
+ version: 3.2.5
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - ~>
124
109
  - !ruby/object:Gem::Version
125
- version: '0'
110
+ version: 3.2.5
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: redcarpet
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - ~>
132
116
  - !ruby/object:Gem::Version
133
- version: '0'
117
+ version: 2.2.2
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - ~>
140
123
  - !ruby/object:Gem::Version
141
- version: '0'
124
+ version: 2.2.2
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: builder
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - ~>
148
130
  - !ruby/object:Gem::Version
149
- version: '0'
131
+ version: 3.0.0
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - ~>
156
137
  - !ruby/object:Gem::Version
157
- version: '0'
138
+ version: 3.0.0
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: activerecord
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
143
  - - ~>
164
144
  - !ruby/object:Gem::Version
165
- version: '3.2'
145
+ version: 3.2.14
166
146
  type: :runtime
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
150
  - - ~>
172
151
  - !ruby/object:Gem::Version
173
- version: '3.2'
152
+ version: 3.2.14
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: kaminari
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
157
  - - ~>
180
158
  - !ruby/object:Gem::Version
@@ -182,7 +160,6 @@ dependencies:
182
160
  type: :runtime
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
164
  - - ~>
188
165
  - !ruby/object:Gem::Version
@@ -190,150 +167,132 @@ dependencies:
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: padrino-helpers
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
- - - ! '>='
171
+ - - ~>
196
172
  - !ruby/object:Gem::Version
197
- version: '0'
173
+ version: 0.9.21
198
174
  type: :runtime
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
- - - ! '>='
178
+ - - ~>
204
179
  - !ruby/object:Gem::Version
205
- version: '0'
180
+ version: 0.9.21
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: stringex
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
- - - ! '>='
185
+ - - ~>
212
186
  - !ruby/object:Gem::Version
213
- version: '0'
187
+ version: 1.5.1
214
188
  type: :runtime
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
- - - ! '>='
192
+ - - ~>
220
193
  - !ruby/object:Gem::Version
221
- version: '0'
194
+ version: 1.5.1
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: bcrypt-ruby
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
- - - ! '>='
199
+ - - ~>
228
200
  - !ruby/object:Gem::Version
229
- version: '0'
201
+ version: 3.0.1
230
202
  type: :runtime
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
- - - ! '>='
206
+ - - ~>
236
207
  - !ruby/object:Gem::Version
237
- version: '0'
208
+ version: 3.0.1
238
209
  - !ruby/object:Gem::Dependency
239
210
  name: sqlite3
240
211
  requirement: !ruby/object:Gem::Requirement
241
- none: false
242
212
  requirements:
243
- - - ! '>='
213
+ - - '>='
244
214
  - !ruby/object:Gem::Version
245
215
  version: '0'
246
216
  type: :development
247
217
  prerelease: false
248
218
  version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
219
  requirements:
251
- - - ! '>='
220
+ - - '>='
252
221
  - !ruby/object:Gem::Version
253
222
  version: '0'
254
223
  - !ruby/object:Gem::Dependency
255
224
  name: rspec
256
225
  requirement: !ruby/object:Gem::Requirement
257
- none: false
258
226
  requirements:
259
- - - ! '>='
227
+ - - '>='
260
228
  - !ruby/object:Gem::Version
261
229
  version: '0'
262
230
  type: :development
263
231
  prerelease: false
264
232
  version_requirements: !ruby/object:Gem::Requirement
265
- none: false
266
233
  requirements:
267
- - - ! '>='
234
+ - - '>='
268
235
  - !ruby/object:Gem::Version
269
236
  version: '0'
270
237
  - !ruby/object:Gem::Dependency
271
238
  name: rack-test
272
239
  requirement: !ruby/object:Gem::Requirement
273
- none: false
274
240
  requirements:
275
- - - ! '>='
241
+ - - '>='
276
242
  - !ruby/object:Gem::Version
277
243
  version: '0'
278
244
  type: :development
279
245
  prerelease: false
280
246
  version_requirements: !ruby/object:Gem::Requirement
281
- none: false
282
247
  requirements:
283
- - - ! '>='
248
+ - - '>='
284
249
  - !ruby/object:Gem::Version
285
250
  version: '0'
286
251
  - !ruby/object:Gem::Dependency
287
252
  name: fuubar
288
253
  requirement: !ruby/object:Gem::Requirement
289
- none: false
290
254
  requirements:
291
- - - ! '>='
255
+ - - '>='
292
256
  - !ruby/object:Gem::Version
293
257
  version: '0'
294
258
  type: :development
295
259
  prerelease: false
296
260
  version_requirements: !ruby/object:Gem::Requirement
297
- none: false
298
261
  requirements:
299
- - - ! '>='
262
+ - - '>='
300
263
  - !ruby/object:Gem::Version
301
264
  version: '0'
302
265
  - !ruby/object:Gem::Dependency
303
266
  name: pry
304
267
  requirement: !ruby/object:Gem::Requirement
305
- none: false
306
268
  requirements:
307
- - - ! '>='
269
+ - - '>='
308
270
  - !ruby/object:Gem::Version
309
271
  version: '0'
310
272
  type: :runtime
311
273
  prerelease: false
312
274
  version_requirements: !ruby/object:Gem::Requirement
313
- none: false
314
275
  requirements:
315
- - - ! '>='
276
+ - - '>='
316
277
  - !ruby/object:Gem::Version
317
278
  version: '0'
318
279
  - !ruby/object:Gem::Dependency
319
280
  name: pry-nav
320
281
  requirement: !ruby/object:Gem::Requirement
321
- none: false
322
282
  requirements:
323
- - - ! '>='
283
+ - - '>='
324
284
  - !ruby/object:Gem::Version
325
285
  version: '0'
326
286
  type: :development
327
287
  prerelease: false
328
288
  version_requirements: !ruby/object:Gem::Requirement
329
- none: false
330
289
  requirements:
331
- - - ! '>='
290
+ - - '>='
332
291
  - !ruby/object:Gem::Version
333
292
  version: '0'
334
- description: Simple blog system built up with Sinatra. Under in development
293
+ description: Simple blog system built up with Sinatra.
335
294
  email:
336
- - sorah@tubusu.net
295
+ - her@sorah.jp
337
296
  executables:
338
297
  - days
339
298
  extensions: []
@@ -388,6 +347,7 @@ files:
388
347
  - lib/days/migrate/20121221000000_create_entries.rb
389
348
  - lib/days/migrate/20121221001000_create_users.rb
390
349
  - lib/days/migrate/20121221002000_create_categories.rb
350
+ - lib/days/migrate/20131012011500_add_old_path_to_entries.rb
391
351
  - lib/days/migrator.rb
392
352
  - lib/days/models.rb
393
353
  - lib/days/models/category.rb
@@ -395,6 +355,7 @@ files:
395
355
  - lib/days/models/user.rb
396
356
  - lib/days/version.rb
397
357
  - scripts/lokka_export.rb
358
+ - scripts/tumblr_export.rb
398
359
  - skeleton/days/Gemfile
399
360
  - skeleton/days/config.ru
400
361
  - skeleton/days/config.yml
@@ -419,28 +380,27 @@ files:
419
380
  - tasks
420
381
  homepage: https://github.com/sorah/days
421
382
  licenses: []
383
+ metadata: {}
422
384
  post_install_message:
423
385
  rdoc_options: []
424
386
  require_paths:
425
387
  - lib
426
388
  required_ruby_version: !ruby/object:Gem::Requirement
427
- none: false
428
389
  requirements:
429
- - - ! '>='
390
+ - - '>='
430
391
  - !ruby/object:Gem::Version
431
392
  version: '0'
432
393
  required_rubygems_version: !ruby/object:Gem::Requirement
433
- none: false
434
394
  requirements:
435
- - - ! '>='
395
+ - - '>='
436
396
  - !ruby/object:Gem::Version
437
397
  version: '0'
438
398
  requirements: []
439
399
  rubyforge_project:
440
- rubygems_version: 1.8.23
400
+ rubygems_version: 2.0.3
441
401
  signing_key:
442
- specification_version: 3
443
- summary: Simple blog system built up with Sinatra. Under in development
402
+ specification_version: 4
403
+ summary: Simple blog system built up with Sinatra.
444
404
  test_files:
445
405
  - spec/controllers/admin/categories_spec.rb
446
406
  - spec/controllers/admin/entries_spec.rb
@@ -459,3 +419,4 @@ test_files:
459
419
  - spec/models/entry_spec.rb
460
420
  - spec/shared/admin.rb
461
421
  - spec/spec_helper.rb
422
+ has_rdoc: