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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OGI0YmU4Y2RiN2E5YzYzNTRlNzJhMDdhMmQ5YzNiY2MwMDg3MWE1Mg==
4
+ ZDc4YjkyZDNlMDAxOGE5MzExOTRlZjk0MjBiMTdmNmE3OWViN2VkMA==
5
5
  data.tar.gz: !binary |-
6
- ZTQ5NDU4ODY5ZmRkMjkyNGJjMjU5MjZjMzIyMTVmYWM2YzMwOTgwOA==
6
+ MjVmZmFlMDA5NTVlZjhkYWNhYzBmZGM4YzdkMmFlYzFhNTE4ODAxZg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NzQxYmFmMjhhYTc5NGRhMzFmMjA1MDRjZmVmMjg4NzJmM2RmZTI0MDA4ZTZi
10
- ODY2Mzg5YWZhMDY1M2MxYjM1YzFmOGYyY2UzNjZhOGMxZGM5MzFmMjQ1MTYz
11
- NGI5ODdkOWJiN2Y2MGQ0Mjk1ZWJiN2IwODI4OGIzZTEyNGIzMGE=
9
+ NDkyMGExNTk4MTI1M2I4OTBlNTlhMjM5ZTA2ZjdkZTQzZTdmMGVkZWY4ZGQ5
10
+ NzNkYzJhNzBiMDU0NTBhNDA5NWQzYzVmZDAwYzgyY2I5NzgxYWY5YjU1ZTUy
11
+ NjQ4M2M3MWQxMGM3MThmN2M1MzUyZDZjYzdmYWZmNTg3YjdkYzM=
12
12
  data.tar.gz: !binary |-
13
- OTgzNWVhZmYwZWM1YjllYzNjMmNlOWZkYTg2OWUzNTVjN2YwMzcwYjY5MDBm
14
- ODIxZDg3ZmIzOWZlMjE1MjkyMDRiZjRkZTZkYjJmNTU2N2Q1MjQyMjRiODM2
15
- N2RlZDY3YTQ0OTk4NmJkOGQxZWRkNDgzNmIzZjA1Y2UwZjMxODA=
13
+ NjM2NmVmMmE3M2MyOTE0NzdhZWZkMDczMDE5MjI0YjQxY2NkZGUzYjE0NDQ1
14
+ OTA3MGRiOThlYTIwZTQwYzI5MmY2MWIxOGM0ODliMTU2NDY4OTk3NjhhNGQ2
15
+ MjlmODQwNGM5OTkzNDYwMGY4NjhlMTgzOThhZTk5ZmQxNjIwN2E=
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
+
4
+ gem 'net_status', git: 'https://github.com/flant/net_status.git'
@@ -0,0 +1,103 @@
1
+ GIT
2
+ remote: https://github.com/flant/net_status.git
3
+ revision: 5a91caf2daaa74985699ede3bc5a9f8ac60a71d8
4
+ specs:
5
+ net_status (0.0.2)
6
+ i18n (~> 0.7)
7
+
8
+ PATH
9
+ remote: .
10
+ specs:
11
+ path_mapper (0.0.3)
12
+ diffy (~> 3.1)
13
+
14
+ GEM
15
+ remote: https://rubygems.org/
16
+ specs:
17
+ addressable (2.4.0)
18
+ backports (3.6.8)
19
+ codeclimate-test-reporter (0.5.0)
20
+ simplecov (>= 0.7.1, < 1.0.0)
21
+ coderay (1.1.1)
22
+ diff-lcs (1.2.5)
23
+ diffy (3.1.0)
24
+ docile (1.1.5)
25
+ ethon (0.8.1)
26
+ ffi (>= 1.3.0)
27
+ faraday (0.9.2)
28
+ multipart-post (>= 1.2, < 3)
29
+ faraday_middleware (0.10.0)
30
+ faraday (>= 0.7.4, < 0.10)
31
+ ffi (1.9.10)
32
+ gh (0.14.0)
33
+ addressable
34
+ backports
35
+ faraday (~> 0.8)
36
+ multi_json (~> 1.0)
37
+ net-http-persistent (>= 2.7)
38
+ net-http-pipeline
39
+ highline (1.7.8)
40
+ i18n (0.7.0)
41
+ json (1.8.3)
42
+ launchy (2.4.3)
43
+ addressable (~> 2.3)
44
+ method_source (0.8.2)
45
+ multi_json (1.11.2)
46
+ multipart-post (2.0.0)
47
+ net-http-persistent (2.9.4)
48
+ net-http-pipeline (1.0.1)
49
+ pry (0.10.3)
50
+ coderay (~> 1.1.0)
51
+ method_source (~> 0.8.1)
52
+ slop (~> 3.4)
53
+ pusher-client (0.6.2)
54
+ json
55
+ websocket (~> 1.0)
56
+ rake (10.5.0)
57
+ rspec (3.4.0)
58
+ rspec-core (~> 3.4.0)
59
+ rspec-expectations (~> 3.4.0)
60
+ rspec-mocks (~> 3.4.0)
61
+ rspec-core (3.4.4)
62
+ rspec-support (~> 3.4.0)
63
+ rspec-expectations (3.4.0)
64
+ diff-lcs (>= 1.2.0, < 2.0)
65
+ rspec-support (~> 3.4.0)
66
+ rspec-mocks (3.4.1)
67
+ diff-lcs (>= 1.2.0, < 2.0)
68
+ rspec-support (~> 3.4.0)
69
+ rspec-support (3.4.1)
70
+ simplecov (0.11.2)
71
+ docile (~> 1.1.0)
72
+ json (~> 1.8)
73
+ simplecov-html (~> 0.10.0)
74
+ simplecov-html (0.10.0)
75
+ slop (3.6.0)
76
+ travis (1.8.2)
77
+ backports
78
+ faraday (~> 0.9)
79
+ faraday_middleware (~> 0.9, >= 0.9.1)
80
+ gh (~> 0.13)
81
+ highline (~> 1.6)
82
+ launchy (~> 2.1)
83
+ pusher-client (~> 0.4)
84
+ typhoeus (~> 0.6, >= 0.6.8)
85
+ typhoeus (0.8.0)
86
+ ethon (>= 0.8.0)
87
+ websocket (1.2.3)
88
+
89
+ PLATFORMS
90
+ ruby
91
+
92
+ DEPENDENCIES
93
+ bundler (~> 1.7)
94
+ codeclimate-test-reporter (>= 0.5.0, < 1.0)
95
+ net_status!
96
+ path_mapper!
97
+ pry (>= 0.10.3, < 1.0)
98
+ rake (~> 10.0)
99
+ rspec (~> 3.4, >= 3.4.0)
100
+ travis (~> 1.8, >= 1.8.2)
101
+
102
+ BUNDLED WITH
103
+ 1.11.2
@@ -1,127 +1,83 @@
1
1
  require 'path_mapper/version'
2
2
 
3
+ require 'net_status'
4
+
5
+ require 'erb'
6
+ require 'ostruct'
7
+ require 'pathname'
8
+ require 'digest/md5'
9
+ require 'diffy'
10
+
11
+ require 'path_mapper/helper/debug'
12
+ require 'path_mapper/helper/logger'
13
+ require 'path_mapper/helper/storage'
14
+ require 'path_mapper/helpers'
15
+
16
+ require 'path_mapper/node/base/file'
17
+ require 'path_mapper/node/base/grep'
18
+ require 'path_mapper/node/base/representation'
19
+ require 'path_mapper/node/dir/inheritance/base'
20
+ require 'path_mapper/node/dir/inheritance/grep'
21
+ require 'path_mapper/node/dir/inheritance'
22
+ require 'path_mapper/node/dir/erb'
23
+ require 'path_mapper/node/dir/file'
24
+ require 'path_mapper/node/dir/grep'
25
+ require 'path_mapper/node/dir/representation'
26
+ require 'path_mapper/node/file/erb'
27
+ require 'path_mapper/node/file/file'
28
+ require 'path_mapper/node/file/representation'
29
+ require 'path_mapper/node/null/file'
30
+ require 'path_mapper/node/null/representation'
31
+ require 'path_mapper/node/base'
32
+ require 'path_mapper/node/dir'
33
+ require 'path_mapper/node/file'
34
+ require 'path_mapper/node/null'
35
+
36
+ require 'path_mapper/reloader'
37
+
3
38
  module PathMapper
4
- def self.new(path)
39
+ extend Helpers
40
+
41
+ def self.new(path, **kwargs)
42
+ path = Pathname(path) unless path.is_a? Pathname
43
+
5
44
  if File.exists? path
6
45
  if File.directory? path
7
- return DirNode.new(path)
46
+ self.with_dry_run {|dry_run| self.storage_tree(path) if !self.storage.key?(path) and dry_run }
47
+ return DirNode.new(path, **kwargs)
8
48
  elsif !File.read(path).strip.empty?
9
- return FileNode.new(path)
49
+ self.with_dry_run {|dry_run| self.storage_file_tree(path) if !self.storage.key?(path) and dry_run }
50
+ return FileNode.new(path, **kwargs)
10
51
  end
11
52
  end
12
- NullNode.new(path)
13
- end
14
-
15
- module BaseNode
16
- attr_reader :_path
17
- attr_reader :_name
18
-
19
- def initialize(path)
20
- @_path = path
21
- @_name = get_file_name(path)
22
- end
23
-
24
- def _grep(reg, recursive=false)
25
- path = "#{@_path}#{'/**' if recursive}/*"
26
- files = Dir[path].select {|f| f =~ reg }
27
- FilesIterator.new(files)
28
- end
29
-
30
- def _grep_dirs(recursive=false)
31
- self._grep(/.*/).select {|n| n.is_a? DirNode }
32
- end
33
-
34
- def _grep_files(recursive=false)
35
- self._grep(/.*/).select {|n| n.is_a? FileNode }
36
- end
37
-
38
- def get_file_name(name)
39
- name.scan(/[^\/]+/).last
40
- end
41
53
 
42
- def to_s
43
- @_path
54
+ self.with_dry_run do |dry_run|
55
+ if self.storage.key? path and !self.deleted_files.include? path
56
+ if self.storage[path].nil?
57
+ return DirNode.new(path, **kwargs)
58
+ elsif !self.storage[path].strip.empty?
59
+ return FileNode.new(path, **kwargs)
60
+ end
61
+ end if dry_run
44
62
  end
45
63
 
46
- def inspect
47
- self.to_s
48
- end
49
-
50
- alias_method :to_str, :to_s
64
+ NullNode.new(path, **kwargs)
51
65
  end
52
66
 
53
67
  class DirNode
54
- include BaseNode
55
-
56
- def method_missing(m, *args, **kwargs, &block)
57
- self.f(m, **kwargs)
58
- end
59
-
60
- def f(m, **kwargs)
61
- obj = PathMapper.new(File.join(@_path, m.to_s))
62
- (obj.empty? and kwargs.key? :default) ? kwargs[:default] : obj
63
- end
68
+ include Node::Dir
69
+ include Node::Dir::Erb
70
+ include Reloader
64
71
  end
65
72
 
66
73
  class FileNode
67
- include BaseNode
68
-
69
- def method_missing(m, *args, &block)
70
- (@content ||= self.to_s).send(m, *args, &block)
71
- end
72
-
73
- def _grep(reg, recursive=false)
74
- []
75
- end
76
-
77
- def to_s
78
- File.read(@_path).strip
79
- end
74
+ include Node::File
75
+ include Node::File::Erb
76
+ include Reloader
80
77
  end
81
78
 
82
- class NullNode < BasicObject
83
- include BaseNode
84
-
85
- def method_missing(m, *args, **kwargs, &block)
86
- if nil.respond_to? m
87
- nil.send m, *args, &block
88
- else
89
- self.f(m, **kwargs)
90
- end
91
- end
92
-
93
- def f(m, **kwargs)
94
- kwargs.key?(:default) ? kwargs[:default] : NullNode.new([@_path, m.to_s].join(::File::SEPARATOR))
95
- end
96
-
97
- def _grep(reg, recursive=false)
98
- []
99
- end
100
-
101
- def nil?
102
- true
103
- end
104
-
105
- def empty
106
- true
107
- end
108
-
109
- def any?
110
- false
111
- end
112
- end
113
-
114
- class FilesIterator
115
- include Enumerable
116
-
117
- def initialize(files)
118
- @files = files
119
- end
120
-
121
- def each
122
- @files.each do |f|
123
- yield PathMapper.new(f)
124
- end
125
- end
79
+ class NullNode
80
+ include Node::Null
81
+ include Reloader
126
82
  end
127
- end
83
+ end
@@ -0,0 +1,20 @@
1
+ module PathMapper
2
+ module Helper
3
+ module Debug
4
+ def dry_run
5
+ Thread.current[:dry_run]
6
+ end
7
+
8
+ def dry_run=(state)
9
+ Thread.current[:dry_run] = state
10
+ end
11
+
12
+ def with_dry_run
13
+ old = self.dry_run
14
+ yield old
15
+ ensure
16
+ self.dry_run = old
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ module PathMapper
2
+ module Helper
3
+ module Logger
4
+ def logger
5
+ Thread.current[:logger]
6
+ end
7
+
8
+ def logger=(state)
9
+ Thread.current[:logger] = state
10
+ end
11
+
12
+ def with_logger(logger: nil)
13
+ old = self.logger
14
+ self.logger = nil if logger.is_a? FalseClass
15
+ yield
16
+ ensure
17
+ self.logger = old
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ module PathMapper
2
+ module Helper
3
+ module Storage
4
+ def storage
5
+ Thread.current[:dry_storage] ||= {}
6
+ end
7
+
8
+ def deleted_files
9
+ self.storage[:deleted_files] ||= []
10
+ end
11
+
12
+ def storage_tree(pathname)
13
+ path = pathname
14
+ while path.to_s != '/'
15
+ self.storage[path] = nil
16
+ path = path.parent
17
+ end
18
+ end
19
+
20
+ def storage_file_tree(pathname)
21
+ self.storage[pathname] = File.read(pathname)
22
+ storage_tree(pathname.parent)
23
+ end
24
+
25
+ def storage_file_delete(pathname)
26
+ self.deleted_files << pathname
27
+ self.storage.delete(pathname)
28
+ end
29
+
30
+ def delete_storage_branch(pathname)
31
+ self.storage_file_delete(pathname)
32
+ self.storage.select {|k,v| k.to_s.start_with? pathname.to_s }.each {|k,v| self.storage_file_delete(k) }
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ module PathMapper
2
+ module Helpers
3
+ include Helper::Debug
4
+ include Helper::Logger
5
+ include Helper::Storage
6
+
7
+ def kwargs(args)
8
+ case args.last
9
+ when Hash then args.pop
10
+ else {}
11
+ end
12
+ end
13
+
14
+ def with_line_separator(arg)
15
+ if arg.is_a? Array
16
+ with_line_separator(arg.join("\n"))
17
+ else
18
+ "#{arg}\n"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,32 @@
1
+ module PathMapper
2
+ module Node
3
+ module Base
4
+ include Grep
5
+ include File
6
+ include Representation
7
+ include Helpers
8
+
9
+ attr_reader :path
10
+ attr_reader :name
11
+
12
+ def initialize(path, **kwargs)
13
+ @path = Pathname.new(path)
14
+ @name = @path.basename.to_s
15
+ end
16
+
17
+ def parent
18
+ self._create_node(@path.parent)
19
+ end
20
+
21
+ protected
22
+
23
+ def _create_node(path)
24
+ PathMapper.new(path, self._general_options)
25
+ end
26
+
27
+ def _general_options
28
+ {}
29
+ end
30
+ end
31
+ end
32
+ end