path_mapper 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,23 @@
1
+ module PathMapper
2
+ module Node
3
+ module Null
4
+ module Representation
5
+ def to_s
6
+ ''
7
+ end
8
+
9
+ def nil?
10
+ true
11
+ end
12
+
13
+ def empty?
14
+ true
15
+ end
16
+
17
+ def any?
18
+ false
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ module PathMapper
2
+ module Patch
3
+ module Pathname
4
+ module Mixin
5
+ def to_pathmapper
6
+ PathMapper.new(self)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ ::Pathname.send(:include, PathMapper::Patch::Pathname::Mixin)
@@ -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
@@ -1,3 +1,3 @@
1
1
  module PathMapper
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -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 read-only"
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
@@ -1,3 +1,7 @@
1
+ require 'codeclimate-test-reporter'
2
+
3
+ CodeClimate::TestReporter.start
4
+
1
5
  require 'bundler/setup'
2
6
 
3
7
  Bundler.setup
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.2
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-03-02 00:00:00.000000000 Z
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
- description: Map filesystem to ruby objects read-only.
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 read-only
203
+ summary: Map filesystem to ruby objects
124
204
  test_files:
125
205
  - spec/path_mapper_spec.rb
126
206
  - spec/spec_helper.rb