days 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: