gast 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Guardfile +2 -1
- data/lib/gast/base.rb +5 -3
- data/lib/gast/helper.rb +21 -0
- data/lib/gast/memo.rb +73 -40
- data/lib/gast/repository.rb +29 -14
- data/lib/gast/templates/edit.haml +1 -1
- data/lib/gast/templates/view.haml +1 -1
- data/lib/gast/version.rb +1 -1
- data/lib/gast.rb +3 -0
- data/spec/controller_spec.rb +4 -8
- data/spec/feature/index_spec.rb +22 -5
- data/spec/memo_spec.rb +2 -5
- data/spec/repository_spec.rb +2 -8
- data/spec/spec_helper.rb +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c76e56576ccffbd53ce37ad4435ff10fb77dbfe
|
4
|
+
data.tar.gz: 480980571d4a12a68d4039b1572a3297073d627f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6743a9590249e60d166f427eaeeb0f2b300cb8368ad17630d46a5d5117e1275dcc4cde464f9e98c6a5012f9e1c24c5040bcbbb59dbc70e3e528a60f64a799ea
|
7
|
+
data.tar.gz: 492009ee035e492695fb47ba31fa8ad451026029fcafd97898feeab88c38917071dda5a685d5488d46d99a14072272d5f629d5e17197faaa650aea5730f34f07
|
data/Guardfile
CHANGED
@@ -13,9 +13,10 @@ end
|
|
13
13
|
guard :rspec, cmd: 'bundle ex rspec' do
|
14
14
|
watch(%r{^spec/.+_spec\.rb$})
|
15
15
|
watch('spec/spec_helper.rb') { "spec" }
|
16
|
-
watch(%r{spec/feature
|
16
|
+
watch(%r{spec/feature/.+_spec\.rb$})
|
17
17
|
|
18
18
|
watch(%r{^lib/gast/app.rb$}) { |m| "spec/controller_spec.rb" }
|
19
|
+
watch(%r{^lib/gast/helper.rb$}) { "spec" }
|
19
20
|
watch(%r{^lib/gast/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
20
21
|
end
|
21
22
|
|
data/lib/gast/base.rb
CHANGED
@@ -62,8 +62,8 @@ module Gast
|
|
62
62
|
})
|
63
63
|
end
|
64
64
|
|
65
|
-
result = Gast::Memo.
|
66
|
-
@content_id = result
|
65
|
+
result = Gast::Memo.create(@content, @language)
|
66
|
+
@content_id = result.content_id
|
67
67
|
end
|
68
68
|
|
69
69
|
before '/list' do
|
@@ -88,7 +88,9 @@ module Gast
|
|
88
88
|
end
|
89
89
|
|
90
90
|
before '/update/:content_id' do
|
91
|
-
Gast::Memo.
|
91
|
+
if Gast::Memo.changed?(@content_id, @content)
|
92
|
+
Gast::Memo.update(@content_id, @content, @language)
|
93
|
+
end
|
92
94
|
end
|
93
95
|
end
|
94
96
|
end
|
data/lib/gast/helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'gast'
|
2
|
+
|
3
|
+
module Gast
|
4
|
+
module Helper
|
5
|
+
def escape_html
|
6
|
+
CGI.escapeHTML(yield.to_s) if block_given?
|
7
|
+
end
|
8
|
+
|
9
|
+
def unescape_html
|
10
|
+
CGI.unescapeHTML(yield.to_s) if block_given?
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_content(id)
|
14
|
+
File.read(File.expand_path(Gast::PATH + "/#{id}/content"))
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_language(id)
|
18
|
+
File.read(File.expand_path(Gast::PATH + "/#{id}/language"))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/gast/memo.rb
CHANGED
@@ -1,57 +1,90 @@
|
|
1
1
|
require 'gast'
|
2
2
|
|
3
3
|
module Gast
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
4
|
+
module Memo
|
5
|
+
extend Helper
|
6
|
+
|
7
|
+
class Response
|
8
|
+
attr_reader :content_id, :language, :content
|
9
|
+
|
10
|
+
def initialize(content_id, language, content)
|
11
|
+
@content_id = content_id
|
12
|
+
@language = language
|
13
|
+
@content = content
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Request
|
18
|
+
attr_reader :content_id, :language, :content
|
19
|
+
|
20
|
+
def initialize(content_id, language, content)
|
21
|
+
@content_id = content_id
|
22
|
+
@language = language
|
23
|
+
@content = content
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def response(content_id, language, content)
|
28
|
+
Response.new(content_id, language, content)
|
29
|
+
end
|
30
|
+
module_function :response
|
31
|
+
|
32
|
+
def request(content_id, language, content)
|
33
|
+
Request.new(content_id, language, content)
|
34
|
+
end
|
35
|
+
module_function :request
|
36
|
+
|
37
|
+
def repository(content, language, content_id = nil)
|
38
|
+
repo = Repository.new
|
39
|
+
repo.dir_name = content_id
|
40
|
+
repo.create
|
41
|
+
repo.content = unescape_html { content }
|
42
|
+
repo.language = unescape_html { language }
|
43
|
+
repo.write
|
44
|
+
repo.commit!
|
45
|
+
|
46
|
+
repo.dir_name
|
47
|
+
end
|
48
|
+
|
49
|
+
def create(content, language = DEFAULT_HIGHLIGHT)
|
50
|
+
content_id = repository(content, language)
|
51
|
+
response(content_id, language, content)
|
52
|
+
end
|
53
|
+
module_function :create
|
54
|
+
|
55
|
+
def update(content_id, content, language = DEFAULT_HIGHLIGHT)
|
56
|
+
content_id = repository(content, language, content_id)
|
57
|
+
response(content_id, language, content)
|
58
|
+
end
|
59
|
+
module_function :update
|
60
|
+
|
61
|
+
def changed?(content_id, content)
|
62
|
+
content.to_s.chomp != item(content_id).chomp
|
63
|
+
end
|
64
|
+
module_function :changed?
|
65
|
+
|
66
|
+
def number
|
34
67
|
lists.length
|
35
68
|
end
|
69
|
+
module_function :number
|
36
70
|
|
37
|
-
def
|
71
|
+
def lists
|
38
72
|
Dir.glob(File.expand_path(Gast::PATH + '/**')).map do |dir|
|
39
73
|
dir.split('/').last
|
40
74
|
end
|
41
75
|
end
|
76
|
+
module_function :lists
|
42
77
|
|
43
|
-
def
|
44
|
-
|
45
|
-
File.read(File.expand_path(Gast::PATH + "/#{id}/content"))
|
46
|
-
)
|
78
|
+
def item(id)
|
79
|
+
escape_html { get_content(id) }
|
47
80
|
end
|
81
|
+
module_function :item
|
48
82
|
|
49
|
-
def
|
50
|
-
|
51
|
-
File.read(File.expand_path(Gast::PATH + "/#{id}/language"))
|
52
|
-
)
|
83
|
+
def language(id)
|
84
|
+
escape_html { get_language(id) }
|
53
85
|
end
|
86
|
+
module_function :language
|
54
87
|
|
55
|
-
|
88
|
+
extend Memo
|
56
89
|
end
|
57
90
|
end
|
data/lib/gast/repository.rb
CHANGED
@@ -9,15 +9,15 @@ module Gast
|
|
9
9
|
def initialize; end
|
10
10
|
|
11
11
|
def create
|
12
|
-
|
13
|
-
|
12
|
+
new_name_of_repository
|
13
|
+
path_of_repository
|
14
14
|
create_dir
|
15
|
-
|
15
|
+
setup_repository
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
18
|
+
def write
|
19
|
+
write_content
|
20
|
+
write_language
|
21
21
|
end
|
22
22
|
|
23
23
|
def remove!
|
@@ -25,13 +25,11 @@ module Gast
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def save!
|
28
|
-
|
29
|
-
@git.commit_all("commit: #{DateTime.now}")
|
28
|
+
commit_all
|
30
29
|
end
|
31
30
|
|
32
31
|
def commit!
|
33
|
-
return save!
|
34
|
-
return save! if @git.status.changed.length != 0
|
32
|
+
return save! unless changed_of_contents?
|
35
33
|
end
|
36
34
|
|
37
35
|
private
|
@@ -42,7 +40,7 @@ module Gast
|
|
42
40
|
FileUtils.chmod(0755, @path)
|
43
41
|
end
|
44
42
|
|
45
|
-
def
|
43
|
+
def write_content
|
46
44
|
path = File.expand_path(@path + '/content')
|
47
45
|
open(path, 'w', 0644) do |io|
|
48
46
|
io.flock(File::LOCK_EX)
|
@@ -51,7 +49,7 @@ module Gast
|
|
51
49
|
end
|
52
50
|
end
|
53
51
|
|
54
|
-
def
|
52
|
+
def write_language
|
55
53
|
path = File.expand_path(@path + '/language')
|
56
54
|
open(path, 'w', 0644) do |io|
|
57
55
|
io.flock(File::LOCK_EX)
|
@@ -61,11 +59,28 @@ module Gast
|
|
61
59
|
end
|
62
60
|
|
63
61
|
def new_name_of_repository
|
64
|
-
|
62
|
+
if @dir_name.nil?
|
63
|
+
@dir_name = Digest::SHA512.new.update(rand.to_s).to_s[0..30]
|
64
|
+
end
|
65
65
|
end
|
66
66
|
|
67
67
|
def path_of_repository
|
68
|
-
File.expand_path(File.join(Gast::PATH, @dir_name))
|
68
|
+
@path = File.expand_path(File.join(Gast::PATH, @dir_name))
|
69
|
+
end
|
70
|
+
|
71
|
+
def setup_repository
|
72
|
+
@git = Git.init(@path)
|
73
|
+
end
|
74
|
+
|
75
|
+
def changed_of_contents?
|
76
|
+
return false if @git.ls_files.length == 0
|
77
|
+
return false if @git.status.changed.length != 0
|
78
|
+
return true
|
79
|
+
end
|
80
|
+
|
81
|
+
def commit_all
|
82
|
+
@git.add(all: true)
|
83
|
+
@git.commit_all("commit: #{DateTime.now}")
|
69
84
|
end
|
70
85
|
end
|
71
86
|
end
|
data/lib/gast/version.rb
CHANGED
data/lib/gast.rb
CHANGED
@@ -5,6 +5,7 @@ require 'sinatra/contrib'
|
|
5
5
|
require 'sinatra/namespace'
|
6
6
|
require 'sprockets'
|
7
7
|
require 'sprockets-helpers'
|
8
|
+
require 'gast/helper'
|
8
9
|
require 'gast/memo'
|
9
10
|
require 'gast/app'
|
10
11
|
require 'gast/repository'
|
@@ -25,4 +26,6 @@ module Gast
|
|
25
26
|
LANGUAGES = YAML.load_file(
|
26
27
|
File.expand_path('../config/languages.yml', __dir__)
|
27
28
|
)
|
29
|
+
|
30
|
+
DEFAULT_HIGHLIGHT = 'no-highlight'
|
28
31
|
end
|
data/spec/controller_spec.rb
CHANGED
@@ -1,22 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
def app
|
4
|
-
Gast::App
|
5
|
-
end
|
6
|
-
|
7
3
|
describe Gast::App do
|
8
4
|
|
9
|
-
|
10
|
-
|
5
|
+
def app
|
6
|
+
Gast::App
|
11
7
|
end
|
12
8
|
|
13
9
|
let(:hello_world) { 'Hello World' }
|
14
10
|
let(:welcome_to_underground) { 'Welcome to underground' }
|
15
11
|
let(:inline_html) { "<script>alert('Hello world!');</script>" }
|
16
12
|
let(:sample_of_code_ruby) { get_fixture('sample_of_code.rb') }
|
17
|
-
|
18
13
|
let(:view_path) { %r{.+/posts/view/[a-z0-9]+} }
|
19
14
|
|
15
|
+
after(:each) { cleanup_in_the_dir }
|
16
|
+
|
20
17
|
it 'should be get index' do
|
21
18
|
get '/'
|
22
19
|
expect(last_response).to be_ok
|
@@ -121,5 +118,4 @@ describe Gast::App do
|
|
121
118
|
expect(latest_content).to eq sample_of_code_ruby
|
122
119
|
expect(latest_language_of_content).to eq 'python'
|
123
120
|
end
|
124
|
-
|
125
121
|
end
|
data/spec/feature/index_spec.rb
CHANGED
@@ -1,10 +1,27 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'the index page', type: :feature do
|
4
|
+
it 'get index in' do
|
3
5
|
visit '/'
|
4
6
|
|
5
|
-
|
6
|
-
find(
|
7
|
+
Gast::LANGUAGES.each_with_index do |language, idx|
|
8
|
+
find("//select/option[#{idx+1}]").text eq language
|
7
9
|
end
|
8
10
|
end
|
9
|
-
|
11
|
+
|
12
|
+
it 'should be able to selected of multi language' do
|
13
|
+
visit '/'
|
14
|
+
|
15
|
+
find('//select').select('python')
|
16
|
+
find('//select').text eq 'python'
|
17
|
+
find('//select').select('ruby')
|
18
|
+
find('//select').text eq 'ruby'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should be able to write text on the textarea' do
|
22
|
+
visit '/'
|
23
|
+
|
24
|
+
find('//textarea').set 'Hello world'
|
25
|
+
find('//textarea').text eq 'Hello world'
|
26
|
+
end
|
10
27
|
end
|
data/spec/memo_spec.rb
CHANGED
@@ -3,15 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Gast::Memo do
|
4
4
|
let(:welcome_to_underground) { 'Welcome to underground' }
|
5
5
|
|
6
|
-
after(:each)
|
7
|
-
FileUtils.rm_r(Dir.glob(Gast::PATH + '/**'), secure: true)
|
8
|
-
end
|
6
|
+
after(:each) { cleanup_in_the_dir }
|
9
7
|
|
10
8
|
it 'should be get list of directory' do
|
11
9
|
10.times do |i|
|
12
|
-
Gast::Memo.
|
10
|
+
Gast::Memo.create(welcome_to_underground)
|
13
11
|
end
|
14
12
|
expect(Gast::Memo.number).to eq 10
|
15
13
|
end
|
16
|
-
|
17
14
|
end
|
data/spec/repository_spec.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Gast::Repository do
|
4
|
-
|
5
4
|
let(:repo) { Gast::Repository.new }
|
6
|
-
|
7
5
|
let(:git) { Git.init(repo.path) }
|
8
|
-
|
9
6
|
let(:user_content) { 'Hello World' }
|
10
7
|
let(:selected_language) { 'ruby' }
|
11
8
|
|
@@ -13,13 +10,11 @@ describe Gast::Repository do
|
|
13
10
|
repo.content = user_content
|
14
11
|
repo.language = selected_language
|
15
12
|
repo.create
|
16
|
-
repo.
|
13
|
+
repo.write
|
17
14
|
repo.commit!
|
18
15
|
end
|
19
16
|
|
20
|
-
after(:each)
|
21
|
-
FileUtils.rm_r(Dir.glob(Gast::PATH + '/**'), secure: true)
|
22
|
-
end
|
17
|
+
after(:each) { cleanup_in_the_dir }
|
23
18
|
|
24
19
|
it 'should be create of repository' do
|
25
20
|
expect(FileTest.exists?(repo.path)).to be_true
|
@@ -38,5 +33,4 @@ describe Gast::Repository do
|
|
38
33
|
expect(git.log.first.message).to eq "commit: #{DateTime.now}"
|
39
34
|
Timecop.return
|
40
35
|
end
|
41
|
-
|
42
36
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- futoase
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -244,6 +244,7 @@ files:
|
|
244
244
|
- lib/gast.rb
|
245
245
|
- lib/gast/app.rb
|
246
246
|
- lib/gast/base.rb
|
247
|
+
- lib/gast/helper.rb
|
247
248
|
- lib/gast/memo.rb
|
248
249
|
- lib/gast/repository.rb
|
249
250
|
- lib/gast/templates/edit.haml
|