dynalist 0.1.0 → 1.0.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/Gemfile.lock +11 -1
- data/dynalist.gemspec +1 -0
- data/lib/dynalist.rb +8 -0
- data/lib/dynalist/base_api_client.rb +2 -2
- data/lib/dynalist/base_file.rb +33 -0
- data/lib/dynalist/document.rb +7 -0
- data/lib/dynalist/file_api_client.rb +60 -0
- data/lib/dynalist/file_tree.rb +47 -0
- data/lib/dynalist/folder.rb +17 -0
- data/lib/dynalist/node.rb +11 -5
- data/lib/dynalist/node_api_client.rb +76 -2
- data/lib/dynalist/node_tree.rb +1 -2
- data/lib/dynalist/version.rb +1 -1
- metadata +21 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4b14867d776bec71831858f2f35e74e09c2e47b626aefef877de2116f3b72f41
|
|
4
|
+
data.tar.gz: 25bb283e5c407ac1fa7e4fc60534fc4fedf9971a6fe52cab9ae5b6b0ae3eb28a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 168ff6b9e3f821f49a64daa0c4750ac2ede8ee1c39e6407545f3505eea8e2b0fead70ecccb6d681f3b0aa36199ecec5965fd302ecc4ed7b23a6e5452b7f328dc
|
|
7
|
+
data.tar.gz: 672fa7e84b6634390f1fb9217c1c13c44d0e5ef24eb89b13dcfcb34b0fd722fc96a51be194ef447a285c2ce1c0a0b971c0e72e6c244224a77868f18bdfe39131
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
dynalist (
|
|
4
|
+
dynalist (1.0.0)
|
|
5
5
|
faraday
|
|
6
6
|
|
|
7
7
|
GEM
|
|
@@ -9,6 +9,8 @@ GEM
|
|
|
9
9
|
specs:
|
|
10
10
|
addressable (2.7.0)
|
|
11
11
|
public_suffix (>= 2.0.2, < 5.0)
|
|
12
|
+
byebug (11.0.1)
|
|
13
|
+
coderay (1.1.2)
|
|
12
14
|
crack (0.4.3)
|
|
13
15
|
safe_yaml (~> 1.0.0)
|
|
14
16
|
diff-lcs (1.3)
|
|
@@ -16,7 +18,14 @@ GEM
|
|
|
16
18
|
faraday (0.16.1)
|
|
17
19
|
multipart-post (>= 1.2, < 3)
|
|
18
20
|
hashdiff (1.0.0)
|
|
21
|
+
method_source (0.9.2)
|
|
19
22
|
multipart-post (2.1.1)
|
|
23
|
+
pry (0.12.2)
|
|
24
|
+
coderay (~> 1.1.0)
|
|
25
|
+
method_source (~> 0.9.0)
|
|
26
|
+
pry-byebug (3.7.0)
|
|
27
|
+
byebug (~> 11.0)
|
|
28
|
+
pry (~> 0.10)
|
|
20
29
|
public_suffix (4.0.1)
|
|
21
30
|
rake (10.5.0)
|
|
22
31
|
rspec (3.8.0)
|
|
@@ -46,6 +55,7 @@ DEPENDENCIES
|
|
|
46
55
|
bundler
|
|
47
56
|
dotenv
|
|
48
57
|
dynalist!
|
|
58
|
+
pry-byebug
|
|
49
59
|
rake
|
|
50
60
|
rspec
|
|
51
61
|
vcr
|
data/dynalist.gemspec
CHANGED
data/lib/dynalist.rb
CHANGED
|
@@ -3,9 +3,17 @@ require 'faraday'
|
|
|
3
3
|
require "dynalist/version"
|
|
4
4
|
require "dynalist/node"
|
|
5
5
|
require "dynalist/node_tree"
|
|
6
|
+
require "dynalist/base_file"
|
|
7
|
+
require "dynalist/file_tree"
|
|
8
|
+
require "dynalist/document"
|
|
9
|
+
require "dynalist/folder"
|
|
6
10
|
require "dynalist/base_api_client"
|
|
11
|
+
require "dynalist/file_api_client"
|
|
7
12
|
require "dynalist/node_api_client"
|
|
8
13
|
|
|
14
|
+
require "dotenv"
|
|
15
|
+
Dotenv.load
|
|
16
|
+
|
|
9
17
|
module Dynalist
|
|
10
18
|
class Error < StandardError; end
|
|
11
19
|
# Your code goes here...
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class BaseFile
|
|
4
|
+
PERMISSION = {
|
|
5
|
+
0 => :no_access,
|
|
6
|
+
1 => :read_only,
|
|
7
|
+
2 => :edit_rights,
|
|
8
|
+
3 => :manage,
|
|
9
|
+
4 => :owner
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
attr_reader :id, :title, :type
|
|
13
|
+
|
|
14
|
+
def initialize(id: nil, title: nil, type: nil, permission: nil)
|
|
15
|
+
@id = id
|
|
16
|
+
@title = title
|
|
17
|
+
@type = type
|
|
18
|
+
@permission_number = permission
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def permission
|
|
22
|
+
PERMISSION[@permission_number]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def include(**query)
|
|
26
|
+
query.each do |key, value|
|
|
27
|
+
next if instance_variable_get("@#{key}") == value
|
|
28
|
+
return false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
return true
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'json'
|
|
3
|
+
|
|
4
|
+
class FileApiClient < BaseApiClient
|
|
5
|
+
def get_file
|
|
6
|
+
response = @conn.post "#{@base}file/list", {token: @token}.to_json
|
|
7
|
+
json = JSON.parse(response.body, symbolize_names: true)
|
|
8
|
+
FileTree.instance.root_id = json[:root_file_id]
|
|
9
|
+
json[:files].map do |file|
|
|
10
|
+
instance = if file[:type] == 'folder'
|
|
11
|
+
Folder.new(file)
|
|
12
|
+
else
|
|
13
|
+
Document.new(file)
|
|
14
|
+
end
|
|
15
|
+
FileTree.add(instance)
|
|
16
|
+
|
|
17
|
+
instance
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def move_file(queries)
|
|
22
|
+
changes = queries.map(&:to_query)
|
|
23
|
+
response = @conn.post "#{@base}file/edit", {token: @token, changes: changes}.to_json
|
|
24
|
+
JSON.parse(response.body)["results"]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class Edit
|
|
28
|
+
def initialize(file, title)
|
|
29
|
+
@file = file
|
|
30
|
+
@title = title
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def to_query
|
|
34
|
+
{
|
|
35
|
+
action: "edit",
|
|
36
|
+
type: @file.type,
|
|
37
|
+
file_id: @file.id,
|
|
38
|
+
title: @title
|
|
39
|
+
}
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Move
|
|
44
|
+
def initialize(file, parent_file, index: 0)
|
|
45
|
+
@file = file
|
|
46
|
+
@parent_file = parent_file
|
|
47
|
+
@index = index
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def to_query
|
|
51
|
+
{
|
|
52
|
+
action: "move",
|
|
53
|
+
type: @file.type,
|
|
54
|
+
file_id: @file.id,
|
|
55
|
+
parent_id: @parent_file.id,
|
|
56
|
+
index: @index
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'singleton'
|
|
4
|
+
|
|
5
|
+
class FileTree
|
|
6
|
+
include Singleton
|
|
7
|
+
|
|
8
|
+
@@files = []
|
|
9
|
+
@@root_id = nil
|
|
10
|
+
|
|
11
|
+
def root_id=(root_id)
|
|
12
|
+
@@root_id = root_id
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def root_id
|
|
16
|
+
@@root_id
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def files
|
|
20
|
+
@@files
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.clear
|
|
24
|
+
@@files = []
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.add(files)
|
|
28
|
+
@@files << files
|
|
29
|
+
@@files.flatten!
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.find_by(**query)
|
|
33
|
+
@@files.find { |file| file.include(**query) }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.where(**query)
|
|
37
|
+
@@files.select do |file|
|
|
38
|
+
query.all? do |key, value|
|
|
39
|
+
if value.kind_of? Array
|
|
40
|
+
value.any? { |v| file.include(**{key => v}) }
|
|
41
|
+
else
|
|
42
|
+
file.include(**{key => value})
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Folder < BaseFile
|
|
4
|
+
def initialize(id: nil, title: nil, type: nil, permission: nil, collapsed: false, children: [])
|
|
5
|
+
@collapsed = collapsed
|
|
6
|
+
@children_ids = children
|
|
7
|
+
super(id: id, title: title, type: 'folder', permission: permission)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def collapsed?
|
|
11
|
+
@collapsed
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def children
|
|
15
|
+
FileTree.where(id: @children_ids)
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/dynalist/node.rb
CHANGED
|
@@ -11,11 +11,11 @@ class Node
|
|
|
11
11
|
6 => :purple
|
|
12
12
|
}.freeze
|
|
13
13
|
|
|
14
|
-
attr_reader :
|
|
14
|
+
attr_reader :file_id, :node_id, :content, :note, :children, :checked, :checkbox, :heading
|
|
15
15
|
|
|
16
|
-
def initialize(
|
|
17
|
-
@
|
|
18
|
-
@
|
|
16
|
+
def initialize(file_id: nil, id: nil, content: nil, note: nil, created: nil, modified: nil, children: [], checked: false, checkbox: false, heading: 0, color: 0)
|
|
17
|
+
@file_id = file_id
|
|
18
|
+
@node_id = id
|
|
19
19
|
@content = content
|
|
20
20
|
@note = note
|
|
21
21
|
@created = created
|
|
@@ -49,7 +49,13 @@ class Node
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def children
|
|
52
|
-
NodeTree.where(
|
|
52
|
+
NodeTree.where(node_id: @children_ids)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def attributes
|
|
56
|
+
instance_variables.map do |key|
|
|
57
|
+
[key[1..-1].to_sym, instance_variable_get(key)]
|
|
58
|
+
end.to_h
|
|
53
59
|
end
|
|
54
60
|
|
|
55
61
|
private
|
|
@@ -2,7 +2,81 @@
|
|
|
2
2
|
require 'json'
|
|
3
3
|
|
|
4
4
|
class NodeApiClient < BaseApiClient
|
|
5
|
-
def
|
|
6
|
-
@conn.post "#{@base}
|
|
5
|
+
def read(document)
|
|
6
|
+
res = @conn.post "#{@base}doc/read", {token: @token, file_id: document.id}.to_json
|
|
7
|
+
JSON.parse(res.body, symbolize_names: true)[:nodes].map{ |node| node }
|
|
8
|
+
nodes = JSON.parse(res.body, symbolize_names: true)[:nodes].map{ |node| Node.new(node.merge(file_id: document.id)) }
|
|
9
|
+
NodeTree.add(nodes)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def check_updates(documents)
|
|
13
|
+
document_ids = documents.map(&:id)
|
|
14
|
+
res = @conn.post "#{@base}doc/check_for_updates", {token: @token, file_ids: document_ids}.to_json
|
|
15
|
+
JSON.parse(res.body, symbolize_names: true)[:versions]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def edit(document, queries)
|
|
19
|
+
changes = queries.map(&:to_query)
|
|
20
|
+
res = @conn.post "#{@base}doc/edit", {token: @token, file_id: document.id, changes: changes}.to_json
|
|
21
|
+
JSON.parse(res.body, symbolize_names: true)[:new_node_ids]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class Insert
|
|
25
|
+
def initialize(parent_node, node, index = 0)
|
|
26
|
+
@parent_node = parent_node
|
|
27
|
+
@node = node
|
|
28
|
+
@index = index
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def to_query
|
|
32
|
+
{
|
|
33
|
+
action: "insert",
|
|
34
|
+
parent_id: @parent_node.node_id,
|
|
35
|
+
index: @index
|
|
36
|
+
}.merge(@node.attributes)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class Edit
|
|
41
|
+
def initialize(node)
|
|
42
|
+
@node = node
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def to_query
|
|
46
|
+
{
|
|
47
|
+
action: "edit",
|
|
48
|
+
node_id: @node.node_id
|
|
49
|
+
}.merge(@node.attributes)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class Move
|
|
54
|
+
def initialize(parent_node, node, index = 0)
|
|
55
|
+
@parent_node = parent_node
|
|
56
|
+
@node = node
|
|
57
|
+
@index = index
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def to_query
|
|
61
|
+
{
|
|
62
|
+
action: "move",
|
|
63
|
+
parent_id: @parent_node.node_id,
|
|
64
|
+
node_id: @node.node_id,
|
|
65
|
+
index: @index
|
|
66
|
+
}
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
class Delete
|
|
71
|
+
def initialize(node)
|
|
72
|
+
@node = node
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def to_query
|
|
76
|
+
{
|
|
77
|
+
action: "delete",
|
|
78
|
+
node_id: @node.node_id
|
|
79
|
+
}
|
|
80
|
+
end
|
|
7
81
|
end
|
|
8
82
|
end
|
data/lib/dynalist/node_tree.rb
CHANGED
|
@@ -7,7 +7,7 @@ class NodeTree
|
|
|
7
7
|
|
|
8
8
|
@@nodes = []
|
|
9
9
|
|
|
10
|
-
def nodes
|
|
10
|
+
def self.nodes
|
|
11
11
|
@@nodes
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -30,7 +30,6 @@ class NodeTree
|
|
|
30
30
|
if value.kind_of? Array
|
|
31
31
|
value.any? { |v| node.include(**{key => v}) }
|
|
32
32
|
else
|
|
33
|
-
p node.include(**{key => value})
|
|
34
33
|
node.include(**{key => value})
|
|
35
34
|
end
|
|
36
35
|
end
|
data/lib/dynalist/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dynalist
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- 4geru
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-10-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -94,6 +94,20 @@ dependencies:
|
|
|
94
94
|
- - ">="
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: pry-byebug
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
97
111
|
- !ruby/object:Gem::Dependency
|
|
98
112
|
name: faraday
|
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -129,6 +143,11 @@ files:
|
|
|
129
143
|
- dynalist.gemspec
|
|
130
144
|
- lib/dynalist.rb
|
|
131
145
|
- lib/dynalist/base_api_client.rb
|
|
146
|
+
- lib/dynalist/base_file.rb
|
|
147
|
+
- lib/dynalist/document.rb
|
|
148
|
+
- lib/dynalist/file_api_client.rb
|
|
149
|
+
- lib/dynalist/file_tree.rb
|
|
150
|
+
- lib/dynalist/folder.rb
|
|
132
151
|
- lib/dynalist/node.rb
|
|
133
152
|
- lib/dynalist/node_api_client.rb
|
|
134
153
|
- lib/dynalist/node_tree.rb
|