qiita_org 0.1.21 → 0.1.35
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.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.yardopts +4 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +40 -1
- data/lib/qiita_org.rb +41 -52
- data/lib/qiita_org/.qiita.conf +7 -6
- data/lib/qiita_org/access_qiita.rb +29 -0
- data/lib/qiita_org/all.rb +50 -0
- data/lib/qiita_org/base.rb +98 -0
- data/lib/qiita_org/config.json +1 -0
- data/lib/qiita_org/config.rb +1 -2
- data/lib/qiita_org/error_message.rb +99 -0
- data/lib/qiita_org/get.rb +15 -53
- data/lib/qiita_org/get_multiple_files.rb +36 -0
- data/lib/qiita_org/get_template.rb +24 -48
- data/lib/qiita_org/list.rb +9 -39
- data/lib/qiita_org/md_converter_for_image.rb +7 -7
- data/lib/qiita_org/{check_pc_os.rb → old_programs/check_pc_os.rb} +0 -0
- data/lib/qiita_org/{decide_option.rb → old_programs/decide_option.rb} +6 -2
- data/lib/qiita_org/old_programs/file_open.rb +15 -0
- data/lib/qiita_org/{get_file_path.rb → old_programs/get_file_path.rb} +0 -0
- data/lib/qiita_org/{get_file_url.rb → old_programs/get_file_url.rb} +12 -14
- data/lib/qiita_org/{search_conf_path.rb → old_programs/search_conf_path.rb} +1 -1
- data/lib/qiita_org/old_programs/select_path.rb +16 -0
- data/lib/qiita_org/old_programs/set_config.rb +30 -0
- data/lib/qiita_org/{show_file_and_url.rb → old_programs/show_file_and_url.rb} +45 -36
- data/lib/qiita_org/post.rb +68 -50
- data/lib/qiita_org/template.org +1 -0
- data/lib/qiita_org/upload.rb +110 -0
- data/lib/qiita_org/version.rb +1 -1
- data/tests/test.org +10 -3
- data/tests/test2.org +3 -1
- data/tests/test3.org +2 -1
- data/tests/test4.org +16 -0
- data/tests/twitter_test.org +14 -0
- metadata +1614 -10
- data/lib/qiita_org/hoge.txt +0 -3
- data/tests/test2.md +0 -6
@@ -1,25 +1,25 @@
|
|
1
1
|
class MdConverter
|
2
|
-
def initialize(
|
3
|
-
|
2
|
+
def initialize()
|
3
|
+
|
4
4
|
end
|
5
5
|
|
6
|
-
def convert_for_image()
|
7
|
-
|
6
|
+
def convert_for_image(lines)
|
7
|
+
lines.each_with_index do |line, i|
|
8
8
|
m = []
|
9
9
|
if m = line.match(/\[\!\[img\]\((.+) "(.+)"\)\]\((.+)\)/)
|
10
10
|
path = File.basename(m[1])
|
11
11
|
url = m[3]
|
12
|
-
|
12
|
+
lines[i] = "\n"
|
13
13
|
elsif m = line.match(/\[\!\[img\]\((.+)\)\]\((.+)\)/)
|
14
14
|
path = File.basename(m[1])
|
15
15
|
url = m[2]
|
16
|
-
|
16
|
+
lines[i] = "\n"
|
17
17
|
else
|
18
18
|
next
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
return
|
22
|
+
return lines
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
File without changes
|
@@ -7,8 +7,12 @@ class DecideOption
|
|
7
7
|
lines = File.readlines(@src)
|
8
8
|
|
9
9
|
lines.each do |line|
|
10
|
-
|
11
|
-
|
10
|
+
m = []
|
11
|
+
if m = line.match(/\#\+qiita_(.+): (.+)/)
|
12
|
+
option = m[1] #line.match(/\#\+qiita_(.+): (.+)/)[1]
|
13
|
+
unless option == "public" || option == "teams" || option == "private"
|
14
|
+
next
|
15
|
+
end
|
12
16
|
return option
|
13
17
|
end
|
14
18
|
end
|
File without changes
|
@@ -3,30 +3,26 @@ require "json"
|
|
3
3
|
require "open-uri"
|
4
4
|
require "io/console"
|
5
5
|
require "colorize"
|
6
|
-
require "qiita_org/
|
6
|
+
require "qiita_org/set_config.rb"
|
7
|
+
require "qiita_org/error_message.rb"
|
8
|
+
require "qiita_org/access_qiita.rb"
|
7
9
|
|
8
10
|
class GetFileUrl
|
9
11
|
def initialize(id, file, mode)
|
10
12
|
@id = id
|
11
13
|
@file = file
|
12
14
|
@mode = (mode == "qiita" || mode == "open")? "public" : mode
|
13
|
-
|
14
|
-
@
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
def set_config()
|
19
|
-
conf_path = File.join(@conf_dir, ".qiita.conf")
|
20
|
-
@conf = JSON.load(File.read(conf_path))
|
21
|
-
@access_token = @conf["access_token"]
|
22
|
-
@teams_url = @conf["teams_url"]
|
15
|
+
@access_token, @teams_url, @display, @ox_qmd_load_path = SetConfig.new().set_config()
|
16
|
+
if @mode == "teams"
|
17
|
+
ErrorMessage.new().teams_url_error(@teams_url)
|
18
|
+
end
|
23
19
|
end
|
24
20
|
|
25
21
|
def get_file_url()
|
26
22
|
qiita = (@mode == "teams")? @teams_url : "https://qiita.com/"
|
27
23
|
path = "api/v2/items/#{@id}"
|
28
24
|
|
29
|
-
items =
|
25
|
+
items = AccessQiita.new(@access_token, qiita, path).access_qiita()
|
30
26
|
|
31
27
|
file_url = items["body"].match(/\!\[#{@file}\]\(((.+))\)/)[2]
|
32
28
|
return file_url
|
@@ -34,6 +30,7 @@ class GetFileUrl
|
|
34
30
|
#File.write("url_text.md", items["body"])
|
35
31
|
end
|
36
32
|
|
33
|
+
=begin
|
37
34
|
def access_qiita(access_token, qiita, path)
|
38
35
|
uri = URI.parse(qiita + path)
|
39
36
|
|
@@ -41,10 +38,11 @@ class GetFileUrl
|
|
41
38
|
"Content-Type" => "application/json" }
|
42
39
|
|
43
40
|
response = URI.open(
|
44
|
-
"#{uri}",
|
45
|
-
"Authorization" => "#{headers["Authorization"]}",
|
41
|
+
"# {uri}",
|
42
|
+
"Authorization" => "# {headers["Authorization"]}",
|
46
43
|
)
|
47
44
|
items = JSON.parse(response.read)
|
48
45
|
return items
|
49
46
|
end
|
47
|
+
=end
|
50
48
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class SelectPath
|
2
|
+
def initialize()
|
3
|
+
end
|
4
|
+
|
5
|
+
def select_path(mode, teams_url)
|
6
|
+
case mode
|
7
|
+
when "teams"
|
8
|
+
qiita = teams_url
|
9
|
+
path = "api/v2/items?page=1&per_page=100"
|
10
|
+
else
|
11
|
+
qiita = "https://qiita.com/"
|
12
|
+
path = "api/v2/authenticated_user/items?page=1&per_page=100"
|
13
|
+
end
|
14
|
+
return qiita, path
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "qiita_org/search_conf_path.rb"
|
2
|
+
require "qiita_org/error_message.rb"
|
3
|
+
|
4
|
+
class SetConfig
|
5
|
+
def initialize()
|
6
|
+
search = SearchConfPath.new(Dir.pwd, Dir.home)
|
7
|
+
@lib = File.expand_path("../../../lib", __FILE__)
|
8
|
+
@conf_dir = search.search_conf_path()
|
9
|
+
if @conf_dir != Dir.home
|
10
|
+
puts "config file path: #{@conf_dir.gsub(Dir.home, "~")}".green
|
11
|
+
else
|
12
|
+
puts "config file path: #{@conf_dir}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def set_config()
|
17
|
+
conf_path = File.join(@conf_dir, ".qiita.conf")
|
18
|
+
conf = JSON.load(File.read(conf_path))
|
19
|
+
access_token = conf["access_token"]
|
20
|
+
teams_url = conf["teams_url"]
|
21
|
+
display = conf["display"]
|
22
|
+
ox_qmd_load_path = File.join(@lib, "qiita_org", "ox-qmd", "ox-qmd")
|
23
|
+
|
24
|
+
ErrorMessage.new().access_token_error(access_token) #== false
|
25
|
+
# puts "Please setting ACCESS_TOKEN".red
|
26
|
+
# exit
|
27
|
+
|
28
|
+
return access_token, teams_url, display, ox_qmd_load_path
|
29
|
+
end
|
30
|
+
end
|
@@ -1,47 +1,48 @@
|
|
1
1
|
require "colorize"
|
2
2
|
require "qiita_org/get_file_url.rb"
|
3
|
+
require "qiita_org/set_config.rb"
|
4
|
+
require "qiita_org/access_qiita.rb"
|
5
|
+
require "qiita_org/file_open.rb"
|
6
|
+
require "qiita_org/error_message.rb"
|
3
7
|
|
4
8
|
class ShowFile
|
5
9
|
def initialize(paths, src, mode, os)
|
6
10
|
@paths = paths
|
7
11
|
@src = src
|
8
|
-
@mode = (mode == "qiita" || mode == "open")? "public" : mode
|
12
|
+
@mode = (mode == "qiita" || mode == "open") ? "public" : mode
|
9
13
|
@os = os
|
10
|
-
|
11
|
-
@conf_dir = search.search_conf_path()
|
12
|
-
end
|
13
|
-
|
14
|
-
def set_config()
|
15
|
-
conf_path = File.join(@conf_dir, ".qiita.conf")
|
16
|
-
@conf = JSON.load(File.read(conf_path))
|
17
|
-
@access_token = @conf["access_token"]
|
18
|
-
@teams_url = @conf["teams_url"]
|
14
|
+
@fileopen = FileOpen.new(@os)
|
19
15
|
end
|
20
16
|
|
21
17
|
def open_file_dir()
|
22
18
|
previous_paths = []
|
23
19
|
previous_paths << File.join(@paths[0].split("/")[0..-2])
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
system "
|
28
|
-
|
29
|
-
system "
|
30
|
-
|
31
|
-
|
20
|
+
@fileopen.file_open(File.join(@paths[0].split("/")[0..-2]))
|
21
|
+
|
22
|
+
# if @os == "mac"
|
23
|
+
# system "open # {File.join(@paths[0].split("/")[0..-2])}"
|
24
|
+
# elsif @os == "windows"
|
25
|
+
# system "explorer.exe # {File.join(@paths[0].split("/")[0..-2])}"
|
26
|
+
# else
|
27
|
+
# system "open # {File.join(@paths[0].split("/")[0..-2])}"
|
28
|
+
# system "xdg-open # {File.join(@paths[0].split("/")[0..-2])}"
|
29
|
+
# end
|
30
|
+
|
32
31
|
@paths.each do |path|
|
33
32
|
dir_path = File.join(path.split("/")[0..-2])
|
34
33
|
unless previous_paths.include?(dir_path)
|
35
34
|
previous_paths << dir_path
|
36
|
-
#system "open #{dir_path}"
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
system "
|
41
|
-
|
42
|
-
system "
|
43
|
-
|
44
|
-
|
35
|
+
#system "open # {dir_path}"
|
36
|
+
@fileopen.file_open(dir_path)
|
37
|
+
|
38
|
+
# if @os == "mac"
|
39
|
+
# system "open # {dir_path}"
|
40
|
+
# elsif @os == "windows"
|
41
|
+
# system "explorer.exe # {dir_path}"
|
42
|
+
# else
|
43
|
+
# system "open # {dir_path}"
|
44
|
+
# system "xdg-open # {dir_path}"
|
45
|
+
# end
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
@@ -50,21 +51,27 @@ class ShowFile
|
|
50
51
|
conts = File.read(@src)
|
51
52
|
id = conts.match(/\#\+qiita_#{@mode}: (.+)/)[1]
|
52
53
|
|
53
|
-
set_config()
|
54
|
+
@access_token, @teams_url, @display, @ox_qmd_load_path = SetConfig.new().set_config()
|
55
|
+
if @mode == "teams"
|
56
|
+
ErrorMessage.new().teams_url_error(@teams_url)
|
57
|
+
end
|
54
58
|
|
55
|
-
qiita = (@mode == "teams")? @teams_url : "https://qiita.com/"
|
59
|
+
qiita = (@mode == "teams") ? @teams_url : "https://qiita.com/"
|
56
60
|
path = "api/v2/items/#{id}"
|
57
61
|
|
58
|
-
items =
|
62
|
+
items = AccessQiita.new(@access_token, qiita, path).access_qiita()
|
59
63
|
|
64
|
+
@fileopen.file_open(items["url"])
|
65
|
+
=begin
|
60
66
|
if @os == "mac"
|
61
|
-
system "open #{items["url"]}"
|
67
|
+
system "open # {items["url"]}"
|
62
68
|
elsif @os == "windows"
|
63
|
-
system "explorer.exe #{items["url"]}"
|
69
|
+
system "explorer.exe # {items["url"]}"
|
64
70
|
else
|
65
|
-
system "open #{items["url"]}"
|
66
|
-
system "xdg-open #{items["url"]}"
|
71
|
+
system "open # {items["url"]}"
|
72
|
+
system "xdg-open # {items["url"]}"
|
67
73
|
end
|
74
|
+
=end
|
68
75
|
end
|
69
76
|
|
70
77
|
def show_file_url()
|
@@ -100,6 +107,7 @@ class ShowFile
|
|
100
107
|
File.write(@src, lines.join)
|
101
108
|
end
|
102
109
|
|
110
|
+
=begin
|
103
111
|
def access_qiita(access_token, qiita, path)
|
104
112
|
uri = URI.parse(qiita + path)
|
105
113
|
|
@@ -107,10 +115,11 @@ class ShowFile
|
|
107
115
|
"Content-Type" => "application/json" }
|
108
116
|
|
109
117
|
response = URI.open(
|
110
|
-
"#{uri}",
|
111
|
-
"Authorization" => "#{headers["Authorization"]}",
|
118
|
+
"# {uri}",
|
119
|
+
"Authorization" => "# {headers["Authorization"]}",
|
112
120
|
)
|
113
121
|
items = JSON.parse(response.read)
|
114
122
|
return items
|
115
123
|
end
|
124
|
+
=end
|
116
125
|
end
|
data/lib/qiita_org/post.rb
CHANGED
@@ -4,29 +4,24 @@ require "net/https"
|
|
4
4
|
require "json"
|
5
5
|
require "command_line/global"
|
6
6
|
require "colorize"
|
7
|
-
require "qiita_org/search_conf_path.rb"
|
8
7
|
require "qiita_org/md_converter_for_image"
|
8
|
+
require "qiita_org/error_message"
|
9
|
+
require "qiita_org/access_qiita.rb"
|
9
10
|
|
10
11
|
class QiitaPost
|
11
12
|
def initialize(file, option, os)
|
12
13
|
@src = file
|
13
14
|
@option = (option == "qiita" || option == "open")? "public" : option
|
14
15
|
@os = os
|
15
|
-
|
16
|
-
@conf_dir = search.search_conf_path()
|
17
|
-
p @conf_dir
|
16
|
+
@base = QiitaBase.new
|
18
17
|
end
|
19
18
|
|
20
19
|
public
|
21
|
-
def get_title_tags()
|
22
|
-
|
23
|
-
m = @conts.match(/\#\+(TITLE|title|Title): (.+)/)
|
20
|
+
def get_title_tags(conts)
|
21
|
+
m = conts.match(/\#\+(TITLE|title|Title): (.+)/)
|
24
22
|
@title = m ? m[2] : "テスト"
|
25
|
-
@tags = if m =
|
26
|
-
|
27
|
-
puts "The maximum number of tag is five. Please delete some tags.".red
|
28
|
-
exit
|
29
|
-
end
|
23
|
+
@tags = if m = conts.match(/\#\+(TAG|tag|Tag|tags|TAGS|Tags): (.+)/)
|
24
|
+
ErrorMessage.new().many_tags_error(m[2])
|
30
25
|
m[2].split(",").inject([]) do |l, c|
|
31
26
|
l << { name: c.strip } #, versions: []}
|
32
27
|
end
|
@@ -34,22 +29,14 @@ class QiitaPost
|
|
34
29
|
[{ name: "hoge" }] #, versions: [] }]
|
35
30
|
end
|
36
31
|
p @tags
|
37
|
-
|
38
|
-
|
39
|
-
def set_config()
|
40
|
-
conf_path = File.join(@conf_dir, ".qiita.conf")
|
41
|
-
@conf = JSON.load(File.read(conf_path))
|
42
|
-
@access_token = @conf["access_token"]
|
43
|
-
@teams_url = @conf["teams_url"]
|
44
|
-
lib = File.expand_path("../../../lib", __FILE__)
|
45
|
-
@ox_qmd_load_path = File.join(lib, "qiita_org", "ox-qmd", "ox-qmd") # @conf["ox_qmd_load_path"]
|
32
|
+
return @title, @tags
|
46
33
|
end
|
47
34
|
|
48
35
|
# src.org -> src.md
|
49
36
|
def convert_org_to_md()
|
50
37
|
command = "emacs #{@src} --batch -l #{@ox_qmd_load_path} -f org-qmd-export-to-markdown --kill"
|
51
38
|
res = command_line command
|
52
|
-
|
39
|
+
ErrorMessage.new().md_file_exists?(@src, res)
|
53
40
|
end
|
54
41
|
|
55
42
|
# add source path in md
|
@@ -60,21 +47,47 @@ class QiitaPost
|
|
60
47
|
end
|
61
48
|
|
62
49
|
# patch or post selector by qiita_id
|
63
|
-
def select_patch_or_post()
|
64
|
-
m = []
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
50
|
+
def select_patch_or_post(src, option)
|
51
|
+
#m = []
|
52
|
+
patch = false
|
53
|
+
qiita_id = @base.get_report_id(src, option)
|
54
|
+
patch = true if qiita_id != nil
|
55
|
+
#if m = conts.match(/\#\+qiita_#{option}: (.+)/)
|
56
|
+
# qiita_id = m[1]
|
57
|
+
#patch = true
|
58
|
+
#else
|
59
|
+
# qiita_id = ""
|
60
|
+
#end
|
61
|
+
return qiita_id, patch
|
62
|
+
end
|
63
|
+
|
64
|
+
def check_change_public(conts, option, id)
|
65
|
+
qiita = "https://qiita.com/"
|
66
|
+
path = "api/v2/items/#{id}"
|
67
|
+
items = AccessQiita.new(@access_token, qiita, path).access_qiita()
|
68
|
+
|
69
|
+
if items["private"]
|
70
|
+
return conts, option
|
69
71
|
else
|
70
|
-
|
72
|
+
option = "public"
|
73
|
+
lines = File.readlines(@src)
|
74
|
+
file = File.open(@src, "w")
|
75
|
+
lines.each_with_index do |line, i|
|
76
|
+
lines[i] = "#+qiita_#{option}: #{id}\n" if line.match(/\#\+qiita_private: (.+)/)
|
77
|
+
file.print(lines[i])
|
78
|
+
end
|
79
|
+
conts = File.read(@src)
|
80
|
+
return conts, option
|
71
81
|
end
|
72
82
|
end
|
73
83
|
|
84
|
+
# check twitter post
|
85
|
+
def select_twitter(conts, option)
|
86
|
+
option == "public" && conts.match?(/^\#\+twitter:\s*on$/i)
|
87
|
+
end
|
88
|
+
|
74
89
|
def select_option(option)
|
75
90
|
qiita = (option == "teams")? @teams_url : "https://qiita.com/"
|
76
|
-
#qiita = (option == "teams")? "https://nishitani.qiita.com/" :
|
77
|
-
# "https://qiita.com/"
|
78
91
|
case option
|
79
92
|
when "teams", "qiita", "public", "open"
|
80
93
|
private = false
|
@@ -93,6 +106,7 @@ class QiitaPost
|
|
93
106
|
"private": @private,
|
94
107
|
"title": @title,
|
95
108
|
"tags": @tags,
|
109
|
+
"tweet": @twitter,
|
96
110
|
}
|
97
111
|
|
98
112
|
if @patch
|
@@ -110,11 +124,16 @@ class QiitaPost
|
|
110
124
|
|
111
125
|
headers = { "Authorization" => "Bearer #{@access_token}",
|
112
126
|
"Content-Type" => "application/json" }
|
127
|
+
|
113
128
|
if @patch
|
114
|
-
|
129
|
+
res = http_req.patch(uri.path, params.to_json, headers)
|
115
130
|
else
|
116
|
-
|
131
|
+
res = http_req.post(uri.path, params.to_json, headers)
|
117
132
|
end
|
133
|
+
|
134
|
+
ErrorMessage.new().qiita_post_error(res, @src.gsub(".org", ".md"))
|
135
|
+
|
136
|
+
return res
|
118
137
|
end
|
119
138
|
|
120
139
|
# qiita return
|
@@ -129,6 +148,9 @@ class QiitaPost
|
|
129
148
|
end
|
130
149
|
print "%20s %s\n" % [key, cont]
|
131
150
|
end
|
151
|
+
#if @display == "suppress"
|
152
|
+
# puts @res_body["url"].green
|
153
|
+
#end
|
132
154
|
end
|
133
155
|
|
134
156
|
# add qiita_id on src.org
|
@@ -139,30 +161,26 @@ class QiitaPost
|
|
139
161
|
end
|
140
162
|
end
|
141
163
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
system "open #{@res_body["url"]}"
|
150
|
-
system "xdg-open #{@res_body["url"]}"
|
164
|
+
def run()
|
165
|
+
@conts = File.read(@src)
|
166
|
+
@title, @tags = get_title_tags(@conts)
|
167
|
+
@access_token, @teams_url, @display, @ox_qmd_load_path = @base.set_config()
|
168
|
+
|
169
|
+
if @option == "teams"
|
170
|
+
ErrorMessage.new().teams_url_error(@teams_url)
|
151
171
|
end
|
152
|
-
end
|
153
172
|
|
154
|
-
def run()
|
155
|
-
get_title_tags()
|
156
|
-
set_config()
|
157
173
|
convert_org_to_md()
|
158
174
|
add_source_path_in_md()
|
159
|
-
@lines = MdConverter.new(
|
160
|
-
select_patch_or_post()
|
175
|
+
@lines = MdConverter.new().convert_for_image(@lines)
|
176
|
+
@qiita_id, @patch = select_patch_or_post(@src, @option)
|
177
|
+
@conts, @option = check_change_public(@conts, @option, @qiita_id) if (@patch and @option == "private")
|
178
|
+
@twitter = select_twitter(@conts, @option)
|
161
179
|
@qiita, @private = select_option(@option)
|
162
|
-
qiita_post()
|
180
|
+
@res = qiita_post()
|
163
181
|
get_and_print_qiita_return()
|
164
182
|
|
165
|
-
|
183
|
+
@base.file_open(@os, @res_body["url"]) if @display != "suppress"
|
166
184
|
|
167
185
|
add_qiita_id_on_org()
|
168
186
|
|