architecture 5.1.2 → 5.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.
- checksums.yaml +4 -4
- data/lib/architecture/entity.rb +30 -23
- data/lib/architecture/version.rb +1 -1
- data/spec/lib/architecture/entity_spec.rb +160 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a13b0b16285c40a8e6fb806cf4082d6ea08d133b
|
4
|
+
data.tar.gz: 72f0c6f723ec8da993edb4441a455e1f62897e20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4236e2fd2df8210845951609e8a08a4c86bf99c43a63a2676e5f6d57ea131b39e0c17066497304f3f4a6aa4d803d8afb99345db8b71b01aa868ab35f85d8f95b
|
7
|
+
data.tar.gz: b685ed7eeec274978d3f419e75a9f4a4075d1dab5efe537df7b8857b25e4a608affb8e33dc1a9f5d8e946737bdd7392991e421247fdfe3e71432b8d0e76b57e2
|
data/lib/architecture/entity.rb
CHANGED
@@ -1,55 +1,62 @@
|
|
1
1
|
module Architecture
|
2
2
|
class Entity
|
3
|
+
DIRECTORY_MIMETYPE = "application/x-directory"
|
4
|
+
DEFAULT_ENGINE = ::File
|
5
|
+
|
3
6
|
def initialize(path:)
|
4
7
|
@path = path
|
5
8
|
end
|
6
9
|
|
7
|
-
def location
|
8
|
-
|
10
|
+
def location(engine: DEFAULT_ENGINE)
|
11
|
+
if engine.respond_to?("expand_path")
|
12
|
+
engine.expand_path(path)
|
13
|
+
else
|
14
|
+
path
|
15
|
+
end
|
9
16
|
end
|
10
17
|
|
11
|
-
def content
|
12
|
-
if file?
|
13
|
-
|
18
|
+
def content(engine: DEFAULT_ENGINE)
|
19
|
+
if file?(engine: engine)
|
20
|
+
engine.read(location(engine: engine))
|
14
21
|
else
|
15
22
|
""
|
16
23
|
end
|
17
24
|
end
|
18
25
|
|
19
|
-
def write(text:)
|
20
|
-
|
26
|
+
def write(text:, engine: DEFAULT_ENGINE)
|
27
|
+
engine.write(location(engine: engine), text)
|
21
28
|
end
|
22
29
|
|
23
|
-
def copy(entity:)
|
24
|
-
system("cp #{location} #{entity.location}")
|
30
|
+
def copy(entity:, engine: DEFAULT_ENGINE)
|
31
|
+
system("cp #{location(engine: engine)} #{entity.location(engine: engine)}")
|
25
32
|
end
|
26
33
|
|
27
|
-
def move(entity:)
|
28
|
-
system("mv #{location} #{entity.location}")
|
34
|
+
def move(entity:, engine: DEFAULT_ENGINE)
|
35
|
+
system("mv #{location(engine: engine)} #{entity.location(engine: engine)}")
|
29
36
|
end
|
30
37
|
|
31
|
-
def delete
|
32
|
-
system("rm -rf #{location}")
|
38
|
+
def delete(engine: DEFAULT_ENGINE)
|
39
|
+
system("rm -rf #{location(engine: engine)}")
|
33
40
|
end
|
34
41
|
|
35
|
-
def create
|
36
|
-
system("mkdir -p #{location}")
|
42
|
+
def create(engine: DEFAULT_ENGINE)
|
43
|
+
system("mkdir -p #{location(engine: engine)}")
|
37
44
|
end
|
38
45
|
|
39
|
-
|
40
|
-
|
46
|
+
def file?(engine: DEFAULT_ENGINE)
|
47
|
+
!directory?(engine: engine)
|
41
48
|
end
|
42
49
|
|
43
|
-
def
|
44
|
-
|
50
|
+
def directory?(engine: DEFAULT_ENGINE)
|
51
|
+
type(engine: engine) == DIRECTORY_MIMETYPE
|
45
52
|
end
|
46
53
|
|
47
|
-
def
|
48
|
-
|
54
|
+
private def path
|
55
|
+
@path
|
49
56
|
end
|
50
57
|
|
51
|
-
private def type
|
52
|
-
system("file --mime-type --brief #{location}")
|
58
|
+
private def type(engine: DEFAULT_ENGINE)
|
59
|
+
system("file --mime-type --brief #{location(engine: engine)}")
|
53
60
|
end
|
54
61
|
|
55
62
|
private def system(command)
|
data/lib/architecture/version.rb
CHANGED
@@ -0,0 +1,160 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Architecture::Entity do
|
4
|
+
let("path") do
|
5
|
+
"foo/bar/baz"
|
6
|
+
end
|
7
|
+
|
8
|
+
let("entity") do
|
9
|
+
described_class.new(path: path)
|
10
|
+
end
|
11
|
+
|
12
|
+
let("engine") do
|
13
|
+
double(File)
|
14
|
+
end
|
15
|
+
|
16
|
+
before("each") do
|
17
|
+
allow(entity).to receive("system")
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#directory?" do
|
21
|
+
let("directory?") do
|
22
|
+
entity.directory?
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when path points to a directory" do
|
26
|
+
it "returns true" do
|
27
|
+
allow(entity).to receive("type").and_return("application/x-directory")
|
28
|
+
expect(directory?).to be(true)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when path points to a file" do
|
33
|
+
it "returns false" do
|
34
|
+
allow(entity).to receive("type").and_return("application/x-file")
|
35
|
+
expect(directory?).to be(false)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#file?" do
|
41
|
+
let("file?") do
|
42
|
+
entity.file?
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when path points to a file" do
|
46
|
+
it "returns true" do
|
47
|
+
allow(entity).to receive("type").and_return("application/x-file")
|
48
|
+
expect(file?).to be(true)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "when path points to a directory" do
|
53
|
+
it "returns false" do
|
54
|
+
allow(entity).to receive("type").and_return("application/x-directory")
|
55
|
+
expect(file?).to be(false)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "#create" do
|
61
|
+
let("create") do
|
62
|
+
entity.create(engine: engine)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "calls the system" do
|
66
|
+
allow(engine).to receive("expand_path").and_return(path)
|
67
|
+
expect(entity).to receive("system")
|
68
|
+
create
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#delete" do
|
73
|
+
let("delete") do
|
74
|
+
entity.delete
|
75
|
+
end
|
76
|
+
|
77
|
+
it "calls the system" do
|
78
|
+
allow(engine).to receive("expand_path").and_return(path)
|
79
|
+
expect(entity).to receive("system")
|
80
|
+
delete
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "#move" do
|
85
|
+
let("move") do
|
86
|
+
entity.move(entity: entity)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "calls the system" do
|
90
|
+
allow(engine).to receive("expand_path").and_return(path)
|
91
|
+
expect(entity).to receive("system")
|
92
|
+
move
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#copy" do
|
97
|
+
let("copy") do
|
98
|
+
entity.copy(entity: entity)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "calls the system" do
|
102
|
+
allow(engine).to receive("expand_path").and_return(path)
|
103
|
+
expect(entity).to receive("system")
|
104
|
+
copy
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "#write" do
|
109
|
+
let("write") do
|
110
|
+
entity.write(text: "foo", engine: engine)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "writes to the engine" do
|
114
|
+
allow(engine).to receive("expand_path").and_return(path)
|
115
|
+
expect(engine).to receive("write")
|
116
|
+
write
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "#content" do
|
121
|
+
let("content") do
|
122
|
+
entity.content(engine: engine)
|
123
|
+
end
|
124
|
+
|
125
|
+
context "with a path that points to a file" do
|
126
|
+
it "reads from the engine" do
|
127
|
+
allow(entity).to receive("type").and_return("application/x-file")
|
128
|
+
allow(engine).to receive("expand_path").and_return(path)
|
129
|
+
expect(engine).to receive("read")
|
130
|
+
content
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context "with a path that points to a directory" do
|
135
|
+
it "returns a empty string" do
|
136
|
+
allow(entity).to receive("type").and_return("application/x-directory")
|
137
|
+
expect(content).to eq("")
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe "#location" do
|
143
|
+
let("location") do
|
144
|
+
entity.location(engine: engine)
|
145
|
+
end
|
146
|
+
|
147
|
+
context "if engine responds to expand_path" do
|
148
|
+
it "calls expand_path on the engine" do
|
149
|
+
expect(engine).to receive("expand_path")
|
150
|
+
location
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context "if engine doesn't respond to expand_path" do
|
155
|
+
it "returns the path" do
|
156
|
+
expect(location).to eq(path)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: architecture
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kurtis Rainbolt-Greene
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- spec/lib/architecture/copy_spec.rb
|
135
135
|
- spec/lib/architecture/create_spec.rb
|
136
136
|
- spec/lib/architecture/delete_spec.rb
|
137
|
+
- spec/lib/architecture/entity_spec.rb
|
137
138
|
- spec/lib/architecture/move_spec.rb
|
138
139
|
- spec/lib/architecture/overwrite_spec.rb
|
139
140
|
- spec/lib/architecture/prepend_spec.rb
|
@@ -170,6 +171,7 @@ test_files:
|
|
170
171
|
- spec/lib/architecture/copy_spec.rb
|
171
172
|
- spec/lib/architecture/create_spec.rb
|
172
173
|
- spec/lib/architecture/delete_spec.rb
|
174
|
+
- spec/lib/architecture/entity_spec.rb
|
173
175
|
- spec/lib/architecture/move_spec.rb
|
174
176
|
- spec/lib/architecture/overwrite_spec.rb
|
175
177
|
- spec/lib/architecture/prepend_spec.rb
|