serverkit 0.4.8 → 0.4.9
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/.rubocop.yml +6 -0
- data/CHANGELOG.md +4 -0
- data/lib/serverkit/command.rb +1 -1
- data/lib/serverkit/resources/base.rb +24 -0
- data/lib/serverkit/resources/line.rb +116 -16
- data/lib/serverkit/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b8c984c3c718fe947082f6f4d09ae7a22ff289e
|
4
|
+
data.tar.gz: a3e1fdf09683e2a563be79a689558245de424532
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ec23d869a2e19605833366e7fb211f5aeb1d60342350e8173c5160a9055329e2f8437d1ea334902a9bef239ebf7cd02a3466543e688b37de4f32b42b796494a
|
7
|
+
data.tar.gz: 2e8a2d2e52e428de9cab8071e3aa74a7be137bac4216559b3faff5156328f862cba039c295cda6d0e037a68f0aee0caf64895d0604414b4b9d1dca578c41a803
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/lib/serverkit/command.rb
CHANGED
@@ -46,7 +46,7 @@ module Serverkit
|
|
46
46
|
else
|
47
47
|
raise Errors::UnknownActionNameError, action_name
|
48
48
|
end
|
49
|
-
rescue Errors::Base, Slop::MissingArgumentError, Slop::MissingOptionError => exception
|
49
|
+
rescue Errors::Base, Psych::SyntaxError, Slop::MissingArgumentError, Slop::MissingOptionError => exception
|
50
50
|
abort "Error: #{exception}"
|
51
51
|
end
|
52
52
|
|
@@ -134,6 +134,17 @@ module Serverkit
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
|
+
# Create a file on remote side
|
138
|
+
# @param [String] content
|
139
|
+
# @param [String] path
|
140
|
+
def create_remote_file(content: nil, path: nil)
|
141
|
+
::Tempfile.open("") do |file|
|
142
|
+
file.write(content)
|
143
|
+
file.close
|
144
|
+
backend.send_file(file.path, path)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
137
148
|
# @note For override
|
138
149
|
# @return [String]
|
139
150
|
def default_id
|
@@ -168,6 +179,19 @@ module Serverkit
|
|
168
179
|
send(required_attribute_name)
|
169
180
|
end
|
170
181
|
end
|
182
|
+
|
183
|
+
# Update remote file content on given path with given content
|
184
|
+
# @param [String] content
|
185
|
+
# @param [String] path
|
186
|
+
def update_remote_file_content(content: nil, path: nil)
|
187
|
+
group = run_command_from_identifier(:get_file_owner_group, path).stdout.rstrip
|
188
|
+
mode = run_command_from_identifier(:get_file_mode, path).stdout.rstrip
|
189
|
+
owner = run_command_from_identifier(:get_file_owner_user, path).stdout.rstrip
|
190
|
+
create_remote_file(content: content, path: path)
|
191
|
+
run_command_from_identifier(:change_file_group, path, group)
|
192
|
+
run_command_from_identifier(:change_file_mode, path, mode)
|
193
|
+
run_command_from_identifier(:change_file_owner, path, owner)
|
194
|
+
end
|
171
195
|
end
|
172
196
|
end
|
173
197
|
end
|
@@ -11,13 +11,19 @@ module Serverkit
|
|
11
11
|
DEFAULT_STATE = "present"
|
12
12
|
|
13
13
|
attribute :path, required: true, type: String
|
14
|
+
attribute :insert_after, type: String
|
15
|
+
attribute :insert_before, type: String
|
14
16
|
attribute :line, required: true, type: String
|
17
|
+
attribute :pattern, type: String
|
15
18
|
attribute :state, default: DEFAULT_STATE, inclusion: %w[absent present], type: String
|
16
19
|
|
17
20
|
# @note Override
|
18
21
|
def apply
|
19
22
|
if has_correct_file?
|
20
|
-
|
23
|
+
update_remote_file_content(
|
24
|
+
content: applied_remote_file_content,
|
25
|
+
path: path,
|
26
|
+
)
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
@@ -28,41 +34,135 @@ module Serverkit
|
|
28
34
|
|
29
35
|
private
|
30
36
|
|
37
|
+
def absent?
|
38
|
+
state == "absent"
|
39
|
+
end
|
40
|
+
|
31
41
|
# @return [String]
|
32
42
|
def applied_remote_file_content
|
33
|
-
|
34
|
-
|
43
|
+
case
|
44
|
+
when absent?
|
45
|
+
content.delete(line).to_s
|
46
|
+
when insert_after
|
47
|
+
content.insert_after(Regexp.new(insert_after), line).to_s
|
48
|
+
when insert_before
|
49
|
+
content.insert_before(Regexp.new(insert_before), line).to_s
|
35
50
|
else
|
36
|
-
(
|
51
|
+
content.append(line).to_s
|
37
52
|
end
|
38
53
|
end
|
39
54
|
|
55
|
+
# @return [Serverkit::Resources::Line::Content]
|
56
|
+
def content
|
57
|
+
Content.new(get_remote_file_content)
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String]
|
61
|
+
def get_remote_file_content
|
62
|
+
run_command_from_identifier(:get_file_content, path).stdout
|
63
|
+
end
|
64
|
+
|
40
65
|
def has_correct_file?
|
41
66
|
check_command_from_identifier(:check_file_is_file, path)
|
42
67
|
end
|
43
68
|
|
44
69
|
def has_correct_line?
|
45
|
-
|
70
|
+
case
|
71
|
+
when present? && !has_matched_line?
|
72
|
+
false
|
73
|
+
when !present? && has_matched_line?
|
74
|
+
false
|
75
|
+
else
|
76
|
+
true
|
77
|
+
end
|
46
78
|
end
|
47
79
|
|
48
|
-
def
|
49
|
-
|
80
|
+
def has_matched_line?
|
81
|
+
if pattern
|
82
|
+
content.match(Regexp.new(pattern))
|
83
|
+
else
|
84
|
+
content.match(line)
|
85
|
+
end
|
50
86
|
end
|
51
87
|
|
52
88
|
def present?
|
53
89
|
state == "present"
|
54
90
|
end
|
55
91
|
|
56
|
-
#
|
57
|
-
|
58
|
-
|
59
|
-
|
92
|
+
# Wrapper class to easily manage lines in remote file content.
|
93
|
+
class Content
|
94
|
+
# @param [String] raw
|
95
|
+
def initialize(raw)
|
96
|
+
@raw = raw
|
97
|
+
end
|
98
|
+
|
99
|
+
# @param [String] line
|
100
|
+
# @return [Serverkit::Resources::Line::Content]
|
101
|
+
def append(line)
|
102
|
+
self.class.new([*lines, line, ""].join("\n"))
|
103
|
+
end
|
104
|
+
|
105
|
+
# @param [String] line
|
106
|
+
# @return [Serverkit::Resources::Line::Content]
|
107
|
+
def delete(line)
|
108
|
+
self.class.new(@raw.gsub(/^#{line}$/, ""))
|
109
|
+
end
|
110
|
+
|
111
|
+
# Insert the line after the last matched line or EOF
|
112
|
+
# @param [Regexp] regexp
|
113
|
+
# @param [String] line
|
114
|
+
# @return [Serverkit::Resources::Line::Content]
|
115
|
+
def insert_after(regexp, line)
|
116
|
+
if index = lines.rindex { |line| line =~ regexp }
|
117
|
+
insert(index + 1, line)
|
118
|
+
else
|
119
|
+
append(line)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# Insert the line before the last matched line or BOF
|
124
|
+
# @param [Regexp] regexp
|
125
|
+
# @param [String] line
|
126
|
+
# @return [Serverkit::Resources::Line::Content]
|
127
|
+
def insert_before(regexp, line)
|
128
|
+
if index = lines.rindex { |line| line =~ regexp }
|
129
|
+
insert(index, line)
|
130
|
+
else
|
131
|
+
prepend(line)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# @param [Regexp, String] pattern
|
136
|
+
# @return [false, true] True if any line matches given pattern
|
137
|
+
def match(pattern)
|
138
|
+
lines.lazy.grep(pattern).any?
|
139
|
+
end
|
140
|
+
|
141
|
+
# @note Override
|
142
|
+
def to_s
|
143
|
+
@raw.dup
|
144
|
+
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
# @return [Array<String>]
|
149
|
+
def lines
|
150
|
+
@lines ||= @raw.each_line.map do |line|
|
151
|
+
line.gsub(/\n$/, "")
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# @param [Integer] index
|
156
|
+
# @param [String] line
|
157
|
+
# @return [Serverkit::Resources::Line::Content]
|
158
|
+
def insert(index, line)
|
159
|
+
self.class.new([*lines.dup.insert(index, line), ""].join("\n"))
|
160
|
+
end
|
60
161
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
backend.send_file(file.path, path)
|
162
|
+
# @param [String] line
|
163
|
+
# @return [Serverkit::Resources::Line::Content]
|
164
|
+
def prepend(line)
|
165
|
+
self.class.new("#{line}\n#{@raw}")
|
66
166
|
end
|
67
167
|
end
|
68
168
|
end
|
data/lib/serverkit/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serverkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|