path_mapper 0.0.2 → 0.0.3
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 +8 -8
- data/.gitignore +0 -1
- data/Gemfile +2 -0
- data/Gemfile.lock +103 -0
- data/lib/path_mapper.rb +63 -107
- data/lib/path_mapper/helper/debug.rb +20 -0
- data/lib/path_mapper/helper/logger.rb +21 -0
- data/lib/path_mapper/helper/storage.rb +36 -0
- data/lib/path_mapper/helpers.rb +22 -0
- data/lib/path_mapper/node/base.rb +32 -0
- data/lib/path_mapper/node/base/file.rb +132 -0
- data/lib/path_mapper/node/base/grep.rb +19 -0
- data/lib/path_mapper/node/base/representation.rb +73 -0
- data/lib/path_mapper/node/dir.rb +31 -0
- data/lib/path_mapper/node/dir/erb.rb +25 -0
- data/lib/path_mapper/node/dir/file.rb +41 -0
- data/lib/path_mapper/node/dir/grep.rb +38 -0
- data/lib/path_mapper/node/dir/inheritance.rb +10 -0
- data/lib/path_mapper/node/dir/inheritance/base.rb +54 -0
- data/lib/path_mapper/node/dir/inheritance/grep.rb +22 -0
- data/lib/path_mapper/node/dir/representation.rb +18 -0
- data/lib/path_mapper/node/file.rb +15 -0
- data/lib/path_mapper/node/file/erb.rb +27 -0
- data/lib/path_mapper/node/file/file.rb +60 -0
- data/lib/path_mapper/node/file/representation.rb +37 -0
- data/lib/path_mapper/node/null.rb +20 -0
- data/lib/path_mapper/node/null/file.rb +46 -0
- data/lib/path_mapper/node/null/representation.rb +23 -0
- data/lib/path_mapper/patch/pathname.rb +13 -0
- data/lib/path_mapper/reloader.rb +26 -0
- data/lib/path_mapper/version.rb +1 -1
- data/path_mapper.gemspec +4 -1
- data/spec/spec_helper.rb +4 -0
- metadata +84 -4
@@ -0,0 +1,18 @@
|
|
1
|
+
module PathMapper
|
2
|
+
module Node
|
3
|
+
module Dir
|
4
|
+
module Representation
|
5
|
+
def empty?
|
6
|
+
self.with_dry_run do |dry_run|
|
7
|
+
if dry_run
|
8
|
+
empty = self.storage.select {|k,v| k.to_s.start_with? @path.to_s }.count == 1
|
9
|
+
@path.directory? ? (@path.children - self.deleted_files).empty? : empty
|
10
|
+
else
|
11
|
+
@path.children.empty?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module PathMapper
|
2
|
+
module Node
|
3
|
+
module File
|
4
|
+
include Base
|
5
|
+
include File
|
6
|
+
include Representation
|
7
|
+
include Grep
|
8
|
+
|
9
|
+
def method_missing(m, *args, &block)
|
10
|
+
resp = (@content ||= self.value).send(m, *args, &block) if (resp = super).is_a? NilClass # Base::File
|
11
|
+
resp
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module PathMapper
|
2
|
+
module Node
|
3
|
+
module File
|
4
|
+
module Erb
|
5
|
+
include Dir::Erb
|
6
|
+
|
7
|
+
def erb_options=(options)
|
8
|
+
@erb_options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def erb(script)
|
12
|
+
ERB.new(script).result(OpenStruct.new(self.erb_options).instance_eval { binding })
|
13
|
+
rescue Exception => e
|
14
|
+
raise NetStatus::Exception, { code: :erb_error, data: { error: "#{e.backtrace.first.sub! '(erb)', self.path.to_s}: #{e.message}" } }
|
15
|
+
end
|
16
|
+
|
17
|
+
def value
|
18
|
+
if self.name.end_with?('.erb')
|
19
|
+
self.erb(super)
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module PathMapper
|
2
|
+
module Node
|
3
|
+
module File
|
4
|
+
module File
|
5
|
+
def _put!(content)
|
6
|
+
if self.compare_with(content)
|
7
|
+
{ d: { result: self }, code: :ok }
|
8
|
+
else
|
9
|
+
old_value = self.raw_value
|
10
|
+
{ d: { result: self._file_puts(content), diff: self.diff(old_value) }, code: :modified }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def _append_line!(line)
|
15
|
+
if self.check(line)
|
16
|
+
{ d: { result: self }, code: :ok }
|
17
|
+
else
|
18
|
+
old_value = self.raw_value
|
19
|
+
{ d: { result: self._file_puts(line, 'a+'), diff: self.diff(old_value) }, code: :modified }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def _remove_line!(line)
|
24
|
+
if self.check(line)
|
25
|
+
lines = self.lines.select {|l| l !~ Regexp.new(line) and l }
|
26
|
+
old_value = self.raw_value
|
27
|
+
if lines.empty?
|
28
|
+
{ d: { result: self.delete!(logger: false), diff: self.custom_diff(old_value, nil) }, code: :deleted }
|
29
|
+
else
|
30
|
+
{ d: { result: self._file_puts(lines), diff: self.diff(old_value) }, code: :modified }
|
31
|
+
end
|
32
|
+
else
|
33
|
+
{ d: { result: self }, code: :ok }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def _delete!(full: false)
|
38
|
+
old_value = self.raw_value
|
39
|
+
|
40
|
+
self.with_dry_run do |dry_run|
|
41
|
+
if dry_run
|
42
|
+
self.delete_storage_branch(@path)
|
43
|
+
else
|
44
|
+
@path.delete
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
if full and (dir_node = self.parent).empty?
|
49
|
+
dir_node.delete!(full: full)
|
50
|
+
end
|
51
|
+
{ d: { result: self._create_node(@path), diff: self.custom_diff(old_value, nil) }, code: :deleted }
|
52
|
+
end
|
53
|
+
|
54
|
+
def check(line)
|
55
|
+
self.lines.any? { |l| l =~ Regexp.new(line) }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module PathMapper
|
2
|
+
module Node
|
3
|
+
module File
|
4
|
+
module Representation
|
5
|
+
def empty?
|
6
|
+
false
|
7
|
+
end
|
8
|
+
|
9
|
+
def value
|
10
|
+
self.raw_value.strip
|
11
|
+
end
|
12
|
+
|
13
|
+
def raw_value
|
14
|
+
with_dry_run do |dry_run|
|
15
|
+
if dry_run
|
16
|
+
self.storage[@path].to_s
|
17
|
+
else
|
18
|
+
::File.read(@path)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def bool
|
24
|
+
value == 'yes'
|
25
|
+
end
|
26
|
+
|
27
|
+
def lines
|
28
|
+
self.value.lines.map {|l| l.strip }
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
self.value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module PathMapper
|
2
|
+
module Node
|
3
|
+
module Null
|
4
|
+
include Base
|
5
|
+
include File
|
6
|
+
include Representation
|
7
|
+
|
8
|
+
def method_missing(m, *args, &block)
|
9
|
+
resp = nil.send m, *args, &block if (resp = super).is_a? NilClass # Base::File
|
10
|
+
resp
|
11
|
+
rescue ::NoMethodError
|
12
|
+
self.f(m, self.kwargs(args))
|
13
|
+
end
|
14
|
+
|
15
|
+
def f(m, **kwargs)
|
16
|
+
kwargs.key?(:default) ? kwargs[:default] : NullNode.new(@path.join(m.to_s))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module PathMapper
|
2
|
+
module Node
|
3
|
+
module Null
|
4
|
+
module File
|
5
|
+
def _create!
|
6
|
+
self.with_dry_run do |dry_run|
|
7
|
+
if dry_run
|
8
|
+
self.storage_tree(@path)
|
9
|
+
else
|
10
|
+
@path.mkpath
|
11
|
+
end
|
12
|
+
end
|
13
|
+
{ d: { result: self._create_node(@path) }, code: :created }
|
14
|
+
end
|
15
|
+
|
16
|
+
def _put!(content)
|
17
|
+
{ d: { result: self._file_puts(content), diff: self.custom_diff(nil, with_line_separator(content)) }, code: :created }
|
18
|
+
end
|
19
|
+
|
20
|
+
def _safe_put!(content)
|
21
|
+
{ d: { result: self.put!(content, logger: false), diff: self.custom_diff(nil, with_line_separator(content)) }, code: :created }
|
22
|
+
end
|
23
|
+
|
24
|
+
def _append_line!(line)
|
25
|
+
{ d: { result: self.put!(line, logger: false), diff: self.custom_diff(nil, with_line_separator(line)) }, code: :created }
|
26
|
+
end
|
27
|
+
|
28
|
+
def _delete!(full: false)
|
29
|
+
{ d: { result: self }, code: :ok }
|
30
|
+
end
|
31
|
+
|
32
|
+
def _remove!(content)
|
33
|
+
{ d: { result: self }, code: :ok }
|
34
|
+
end
|
35
|
+
|
36
|
+
def _rename!(new_path)
|
37
|
+
{ d: { result: self._create_node(new_path) }, code: :ok }
|
38
|
+
end
|
39
|
+
|
40
|
+
def md5
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module PathMapper
|
2
|
+
module Reloader
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
methods = base.public_instance_methods - Object.public_instance_methods
|
6
|
+
methods.each do |name|
|
7
|
+
with = :"#{name}_with_reload"
|
8
|
+
without = :"#{name}_without_reload"
|
9
|
+
@__last_methods_added = [name, with, without]
|
10
|
+
|
11
|
+
define_method with do |*args, &block|
|
12
|
+
obj = self._create_node(@path)
|
13
|
+
if obj.is_a? self.class
|
14
|
+
self.send(without, *args, &block)
|
15
|
+
else
|
16
|
+
obj.send(without, *args, &block)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
alias_method without, name
|
21
|
+
alias_method name, with
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/path_mapper/version.rb
CHANGED
data/path_mapper.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.version = PathMapper::VERSION
|
8
8
|
spec.authors = ["Alexey Igrychev"]
|
9
9
|
spec.email = ["alexey.igrychev@flant.ru"]
|
10
|
-
spec.summary = "Map filesystem to ruby objects
|
10
|
+
spec.summary = "Map filesystem to ruby objects"
|
11
11
|
spec.description = "#{spec.summary}."
|
12
12
|
spec.license = "MIT"
|
13
13
|
spec.homepage = "https://github.com/flant/path_mapper"
|
@@ -18,9 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
20
|
spec.required_ruby_version = '>= 2.2.1'
|
21
|
+
spec.add_dependency 'diffy', '~> 3.1'
|
21
22
|
|
22
23
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
23
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
24
25
|
spec.add_development_dependency 'rspec', '~> 3.4', '>= 3.4.0'
|
25
26
|
spec.add_development_dependency 'travis', '~> 1.8', '>= 1.8.2'
|
27
|
+
spec.add_development_dependency 'pry', '>= 0.10.3', '< 1.0'
|
28
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '>= 0.5.0', '< 1.0'
|
26
29
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: path_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Igrychev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: diffy
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.1'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,7 +92,47 @@ dependencies:
|
|
78
92
|
- - ! '>='
|
79
93
|
- !ruby/object:Gem::Version
|
80
94
|
version: 1.8.2
|
81
|
-
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: pry
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.10.3
|
102
|
+
- - <
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '1.0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 0.10.3
|
112
|
+
- - <
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '1.0'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: codeclimate-test-reporter
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ! '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 0.5.0
|
122
|
+
- - <
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.0'
|
125
|
+
type: :development
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.5.0
|
132
|
+
- - <
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '1.0'
|
135
|
+
description: Map filesystem to ruby objects.
|
82
136
|
email:
|
83
137
|
- alexey.igrychev@flant.ru
|
84
138
|
executables: []
|
@@ -89,10 +143,36 @@ files:
|
|
89
143
|
- .rspec
|
90
144
|
- .travis.yml
|
91
145
|
- Gemfile
|
146
|
+
- Gemfile.lock
|
92
147
|
- LICENSE.txt
|
93
148
|
- README.md
|
94
149
|
- Rakefile
|
95
150
|
- lib/path_mapper.rb
|
151
|
+
- lib/path_mapper/helper/debug.rb
|
152
|
+
- lib/path_mapper/helper/logger.rb
|
153
|
+
- lib/path_mapper/helper/storage.rb
|
154
|
+
- lib/path_mapper/helpers.rb
|
155
|
+
- lib/path_mapper/node/base.rb
|
156
|
+
- lib/path_mapper/node/base/file.rb
|
157
|
+
- lib/path_mapper/node/base/grep.rb
|
158
|
+
- lib/path_mapper/node/base/representation.rb
|
159
|
+
- lib/path_mapper/node/dir.rb
|
160
|
+
- lib/path_mapper/node/dir/erb.rb
|
161
|
+
- lib/path_mapper/node/dir/file.rb
|
162
|
+
- lib/path_mapper/node/dir/grep.rb
|
163
|
+
- lib/path_mapper/node/dir/inheritance.rb
|
164
|
+
- lib/path_mapper/node/dir/inheritance/base.rb
|
165
|
+
- lib/path_mapper/node/dir/inheritance/grep.rb
|
166
|
+
- lib/path_mapper/node/dir/representation.rb
|
167
|
+
- lib/path_mapper/node/file.rb
|
168
|
+
- lib/path_mapper/node/file/erb.rb
|
169
|
+
- lib/path_mapper/node/file/file.rb
|
170
|
+
- lib/path_mapper/node/file/representation.rb
|
171
|
+
- lib/path_mapper/node/null.rb
|
172
|
+
- lib/path_mapper/node/null/file.rb
|
173
|
+
- lib/path_mapper/node/null/representation.rb
|
174
|
+
- lib/path_mapper/patch/pathname.rb
|
175
|
+
- lib/path_mapper/reloader.rb
|
96
176
|
- lib/path_mapper/version.rb
|
97
177
|
- path_mapper.gemspec
|
98
178
|
- spec/path_mapper_spec.rb
|
@@ -120,7 +200,7 @@ rubyforge_project:
|
|
120
200
|
rubygems_version: 2.4.5
|
121
201
|
signing_key:
|
122
202
|
specification_version: 4
|
123
|
-
summary: Map filesystem to ruby objects
|
203
|
+
summary: Map filesystem to ruby objects
|
124
204
|
test_files:
|
125
205
|
- spec/path_mapper_spec.rb
|
126
206
|
- spec/spec_helper.rb
|