carraway 0.12.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/carraway/file.rb +18 -3
- data/lib/carraway/file_repository.rb +9 -3
- data/lib/carraway/post.rb +45 -24
- data/lib/carraway/server.rb +8 -3
- data/lib/carraway/version.rb +1 -1
- data/lib/carraway/views/file_edit.erb +6 -0
- data/lib/carraway/views/files.erb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d55ca828b081c8af517e0428c2e6b4f24fa424415ad58da906ed1cb033dff9f
|
4
|
+
data.tar.gz: 28018ed8298581837bdb3e8084592d6ed1568d6d226d3e2898382440a1fd7022
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10031f4a10f37eeccf44a5aae91417e5919649a8bb50bb7651b9ecd40389ec8e0d80fe54971c561277b0e6460d573080da0ca306427497b4d20c87984a11cfd7
|
7
|
+
data.tar.gz: ace24608943448fc411f2cd7e7a29d1e3e6f86f63607b290ec7d2a95b67c5208b13e1b5e06147053e525014225e4eea4cac498ffbac315bf12a7c35e2c69b898
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## [v0.12.0](https://github.com/adorechic/carraway/tree/v0.12.0) (2019-02-15)
|
4
|
+
[Full Changelog](https://github.com/adorechic/carraway/compare/v0.11.0...v0.12.0)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Support labels on file [\#9](https://github.com/adorechic/carraway/pull/9) ([adorechic](https://github.com/adorechic))
|
9
|
+
|
3
10
|
## [v0.11.0](https://github.com/adorechic/carraway/tree/v0.11.0) (2019-02-15)
|
4
11
|
[Full Changelog](https://github.com/adorechic/carraway/compare/v0.10.0...v0.11.0)
|
5
12
|
|
data/lib/carraway/file.rb
CHANGED
@@ -3,15 +3,17 @@ require 'aws-sdk-s3'
|
|
3
3
|
|
4
4
|
module Carraway
|
5
5
|
class File
|
6
|
-
attr_reader :uid, :created, :file
|
7
|
-
attr_accessor :title, :labels
|
6
|
+
attr_reader :uid, :created, :file, :published
|
7
|
+
attr_accessor :title, :labels, :category
|
8
8
|
|
9
|
-
def initialize(title:, file: nil, uid: nil, created:
|
9
|
+
def initialize(title:, file: nil, uid: nil, created: Time.now.to_i, labels: nil, published: nil, category: nil)
|
10
10
|
@title = title
|
11
11
|
@file = file
|
12
12
|
@uid = uid || generate_uid
|
13
13
|
@created = created
|
14
14
|
@labels = labels
|
15
|
+
@published = published || created
|
16
|
+
@category = category || Category.all.first # FIXME validation
|
15
17
|
end
|
16
18
|
|
17
19
|
%i(created).each do |col|
|
@@ -27,6 +29,19 @@ module Carraway
|
|
27
29
|
[Config.file_backend['prefix'], '/', @uid, ext].join
|
28
30
|
end
|
29
31
|
|
32
|
+
def to_h
|
33
|
+
{
|
34
|
+
uid: @uid,
|
35
|
+
title: @title,
|
36
|
+
path: path,
|
37
|
+
labels: @labels,
|
38
|
+
record_type: 'file',
|
39
|
+
created: @created.to_i,
|
40
|
+
published: @published && @published.to_i,
|
41
|
+
category: @category.key,
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
30
45
|
private
|
31
46
|
|
32
47
|
# FIXME duplicate impl on Post
|
@@ -14,7 +14,9 @@ module Carraway
|
|
14
14
|
uid: item['uid'],
|
15
15
|
title: item['title'],
|
16
16
|
created: item['created'],
|
17
|
-
labels: item['labels']
|
17
|
+
labels: item['labels'],
|
18
|
+
published: item['published'],
|
19
|
+
category: Carraway::Category.find(item['category'])
|
18
20
|
)
|
19
21
|
end
|
20
22
|
end
|
@@ -31,7 +33,9 @@ module Carraway
|
|
31
33
|
uid: item['uid'],
|
32
34
|
title: item['title'],
|
33
35
|
created: item['created'],
|
34
|
-
labels: item['labels']
|
36
|
+
labels: item['labels'],
|
37
|
+
published: item['published'],
|
38
|
+
category: Carraway::Category.find(item['category'])
|
35
39
|
)
|
36
40
|
end
|
37
41
|
end
|
@@ -54,7 +58,9 @@ module Carraway
|
|
54
58
|
record_type: 'file',
|
55
59
|
title: file.title,
|
56
60
|
created: file.created || at.to_i,
|
57
|
-
labels: file.labels
|
61
|
+
labels: file.labels,
|
62
|
+
published: file.published,
|
63
|
+
category: file.category.key
|
58
64
|
}
|
59
65
|
)
|
60
66
|
if file.file
|
data/lib/carraway/post.rb
CHANGED
@@ -44,35 +44,56 @@ module Carraway
|
|
44
44
|
post
|
45
45
|
end
|
46
46
|
|
47
|
-
def all(published_only: false)
|
48
|
-
|
47
|
+
def all(published_only: false, include_file: false)
|
48
|
+
filter_expressions = []
|
49
|
+
expression_attribute_values = {}
|
50
|
+
|
51
|
+
unless include_file
|
52
|
+
filter_expressions << 'record_type = :type'
|
53
|
+
expression_attribute_values.merge!(':type' => 'post')
|
54
|
+
end
|
55
|
+
|
49
56
|
if published_only
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
AND published < :now
|
55
|
-
FILTER
|
56
|
-
query[:expression_attribute_values] = { ':t' => 'NULL', ':now' => Time.now.to_i, ':type' => 'post' }
|
57
|
-
else
|
58
|
-
query[:filter_expression] = <<~FILTER
|
59
|
-
record_type = :type
|
60
|
-
FILTER
|
61
|
-
query[:expression_attribute_values] = { ':type' => 'post' }
|
57
|
+
filter_expressions << 'attribute_exists(published)'
|
58
|
+
filter_expressions << '(NOT attribute_type(published, :t))'
|
59
|
+
filter_expressions << 'published < :now'
|
60
|
+
expression_attribute_values.merge!(':t' => 'NULL', ':now' => Time.now.to_i)
|
62
61
|
end
|
63
62
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
labels: item['labels'],
|
70
|
-
category: Category.find(item['category']),
|
71
|
-
created: Time.at(item['created']),
|
72
|
-
updated: Time.at(item['updated']),
|
73
|
-
published: item['published'] && Time.at(item['published'])
|
63
|
+
query = { table_name: Config.backend['table_name'] }
|
64
|
+
unless filter_expressions.empty?
|
65
|
+
query.merge!(
|
66
|
+
filter_expression: filter_expressions.join(' AND '),
|
67
|
+
expression_attribute_values: expression_attribute_values
|
74
68
|
)
|
75
69
|
end
|
70
|
+
|
71
|
+
client.scan(query).items.map do |item|
|
72
|
+
case item['record_type']
|
73
|
+
when 'post'
|
74
|
+
new(
|
75
|
+
uid: item['uid'],
|
76
|
+
title: item['title'],
|
77
|
+
body: item['body'],
|
78
|
+
labels: item['labels'],
|
79
|
+
category: Category.find(item['category']),
|
80
|
+
created: Time.at(item['created']),
|
81
|
+
updated: Time.at(item['updated']),
|
82
|
+
published: item['published'] && Time.at(item['published'])
|
83
|
+
)
|
84
|
+
when 'file'
|
85
|
+
Carraway::File.new(
|
86
|
+
uid: item['uid'],
|
87
|
+
title: item['title'],
|
88
|
+
created: item['created'],
|
89
|
+
labels: item['labels'],
|
90
|
+
published: item['published'],
|
91
|
+
category: Category.find(item['category']),
|
92
|
+
)
|
93
|
+
else
|
94
|
+
raise 'Unknown record_type'
|
95
|
+
end
|
96
|
+
end
|
76
97
|
end
|
77
98
|
|
78
99
|
def find(uid)
|
data/lib/carraway/server.rb
CHANGED
@@ -25,8 +25,7 @@ module Carraway
|
|
25
25
|
end
|
26
26
|
|
27
27
|
get '/carraway/api/posts' do
|
28
|
-
posts = Post.all(published_only: true).map(&:to_h)
|
29
|
-
|
28
|
+
posts = Post.all(published_only: true, include_file: true).map(&:to_h)
|
30
29
|
# HACK Expand plugin
|
31
30
|
transformed = params[:view] == 'html'
|
32
31
|
if transformed
|
@@ -140,6 +139,7 @@ module Carraway
|
|
140
139
|
# FIXME validation
|
141
140
|
file.title = params[:title]
|
142
141
|
file.labels = params[:labels]
|
142
|
+
file.category = Category.find(params[:category])
|
143
143
|
repository.save(file)
|
144
144
|
redirect "/carraway/files/#{file.uid}"
|
145
145
|
end
|
@@ -153,7 +153,12 @@ module Carraway
|
|
153
153
|
end
|
154
154
|
|
155
155
|
post '/carraway/files' do
|
156
|
-
file = File.new(
|
156
|
+
file = File.new(
|
157
|
+
title: params[:title],
|
158
|
+
file: params[:file],
|
159
|
+
labels: params[:labels],
|
160
|
+
category: Category.find(params[:category]),
|
161
|
+
)
|
157
162
|
# FIXME validation and error
|
158
163
|
FileRepository.new.save(file)
|
159
164
|
flash[:message] = "Saved #{file.path}"
|
data/lib/carraway/version.rb
CHANGED
@@ -9,6 +9,12 @@
|
|
9
9
|
<label for="title">ファイルタイトル</label>
|
10
10
|
</div>
|
11
11
|
</div>
|
12
|
+
<label>記事カテゴリー</label>
|
13
|
+
<select name="category" class="browser-default">
|
14
|
+
<% Carraway::Category.all.each do |category| %>
|
15
|
+
<option value="<%= category.key %>"<%= category == @file.category ? 'selected' : nil%>><%= category.title %></option>
|
16
|
+
<% end %>
|
17
|
+
</select>
|
12
18
|
<% Carraway::Config.labels.each do |key, title| %>
|
13
19
|
<p>
|
14
20
|
<label>
|
@@ -9,6 +9,13 @@
|
|
9
9
|
<div class="input-field col s12">
|
10
10
|
<input type="file" id="file" name="file" placeholder="ファイル">
|
11
11
|
</div>
|
12
|
+
<label>記事カテゴリー</label>
|
13
|
+
<select name="category" class="browser-default">
|
14
|
+
<option value="" disabled selected>記事カテゴリーを選択</option>
|
15
|
+
<% Carraway::Category.all.each do |category| %>
|
16
|
+
<option value="<%= category.key %>"><%= category.title %></option>
|
17
|
+
<% end %>
|
18
|
+
</select>
|
12
19
|
<% Carraway::Config.labels.each do |key, title| %>
|
13
20
|
<p>
|
14
21
|
<label>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carraway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- adorechic
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|