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.
@@ -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