social_snippet-supports-mongoid 0.0.0 → 0.0.1

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YjcwYTJkNThjMmU3MzQ3NWJiMWE1NzI4MGY2NTIzNTI4YjZjOWQwZQ==
4
+ N2EyYjgzYjgzYTVmZjFlOWJlNmFmNzVlNmNlYjQyMWFmNjI3MDk1NA==
5
5
  data.tar.gz: !binary |-
6
- OTUzZTc2NDI1YzUzZDJmZjMwNTRjYTBhMTA3ZDQyYmNkZTE0ZGY2Mw==
6
+ MWUwZmU3OWYyZWNjMmYxMWU2M2M0N2NiZTNhNGQ3MDFjOTdlZGY4YQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTMyZGFhZDgxYmY5NTUyMzQzZTM5N2ZmNTlhMjBlNzQ0M2IwODNiOTQ3OGJk
10
- OTE4NDViOWQ5OGE2ZDI1ODdkMTU5Y2FjNzhkNmFmMGIyYjY1MTZlMTRhYWZl
11
- OTIyYTllMWRmMGQ2NzQwNDRiNmIzYzNhYTNhOTUwNGYxMDM0NWQ=
9
+ MGRmOTMwMzI2NmJlMzg5OTU3ZTg3ZDYyY2FiZDM2ODIwMWExNTE0OGQ0Y2Fh
10
+ NTg3YmRkMmJmN2RlMDdiNGI3Nzc1YzU2YjVmZGIxYmNkYTc4Yzg1NjgzOGMz
11
+ NTY5ZmZkYjg0MmVhYjQ0MjVhMmQxNTdmM2Y2NTk3MGU2ZDJiYjM=
12
12
  data.tar.gz: !binary |-
13
- OWZkOTYxY2NlZjZlZjdmNDdmZmNkYjNkMGMyMGI1Y2I0OTIxZTIwY2JiYzM3
14
- MTEyNDAzY2I1ZDIzMDdhMWVlOTVlZjY2MjM5NTNjM2I0NDRhN2MzNzJlYWZl
15
- ZGVmNmI0YThiN2UwMWI0ODlhN2UyZmM4MGI5YjAzZjllYmIwNGM=
13
+ YmY4YmZmMmFlYWJlZDNiNDhkYjlkZmJlZDk5N2NjMmExZjlhZGEyMzgxOWY1
14
+ ZDc5YWE3ZjA5MGNkMDIwODE0MDhjMTZjZDdiZDFmMTViZjcwMWZiNDM1NTdm
15
+ ZDRkYmRkNWVhNmU3NmU1OWJiYTE3ZjdkZjMyOTIyMmFkYWNlNjQ=
@@ -0,0 +1,133 @@
1
+ module SocialSnippet::StorageBackend
2
+
3
+ class MongoidStorage
4
+
5
+ require_relative "mongoid_storage/file"
6
+ require_relative "mongoid_storage/model"
7
+
8
+ attr_reader :paths
9
+ attr_reader :workdir
10
+
11
+ def initialize
12
+ @workdir = "/"
13
+ @paths = ::SortedSet.new
14
+ end
15
+
16
+ def cd(path)
17
+ if absolute?(path)
18
+ @workdir = normalize(path)
19
+ else
20
+ @workdir = resolve(path)
21
+ end
22
+ end
23
+
24
+ def touch(path)
25
+ realpath = resolve(path)
26
+ paths.add realpath
27
+ end
28
+
29
+ def write(path, content)
30
+ realpath = resolve(path)
31
+ raise ::Errno::EISDIR if directory?(path)
32
+ paths.add realpath
33
+ file = File.find_or_create_by(:path => realpath)
34
+ file.update_attributes(
35
+ :content => content,
36
+ )
37
+ end
38
+
39
+ def read(path)
40
+ realpath = resolve(path)
41
+ raise ::Errno::EISDIR if directory?(path)
42
+ file = File.find_by(
43
+ :path => realpath,
44
+ )
45
+ file.content
46
+ end
47
+
48
+ def mkdir(path)
49
+ realpath = resolve(path)
50
+ raise ::Errno::EEXIST if exists?(realpath)
51
+ mkdir_p path
52
+ end
53
+
54
+ def mkdir_p(path)
55
+ realpath = resolve(path)
56
+ raise ::Errno::EEXIST if file?(realpath)
57
+ paths.add realpath
58
+ paths.add dirpath(realpath)
59
+ end
60
+
61
+ def exists?(path)
62
+ realpath = resolve(path)
63
+ paths.include?(realpath) ||
64
+ paths.include?(dirpath realpath)
65
+ end
66
+
67
+ def rm(path)
68
+ realpath = resolve(path)
69
+ paths.delete realpath
70
+ end
71
+
72
+ def rm_r(path)
73
+ realpath = resolve(path)
74
+ paths.reject! do |tmp_path|
75
+ tmp_path.start_with? realpath
76
+ end
77
+ end
78
+
79
+ def directory?(path)
80
+ realpath = resolve(path)
81
+ paths.include? dirpath(realpath)
82
+ end
83
+
84
+ def file?(path)
85
+ return false if directory?(path)
86
+ realpath = resolve(path)
87
+ paths.include? realpath
88
+ end
89
+
90
+ def glob(pattern)
91
+ realpattern = resolve(pattern)
92
+ paths.select do |path|
93
+ ::File.fnmatch realpattern, path, ::File::FNM_PATHNAME
94
+ end
95
+ end
96
+
97
+ def pwd
98
+ workdir
99
+ end
100
+
101
+ def self.activate!
102
+ ::SocialSnippet.class_eval do
103
+ remove_const :Storage if defined?(::SocialSnippet::Storage)
104
+ const_set :Storage, ::SocialSnippet::StorageBackend::MongoidStorage
105
+ end
106
+ end
107
+
108
+ private
109
+
110
+ def absolute?(path)
111
+ ::Pathname.new(path).absolute?
112
+ end
113
+
114
+ def resolve(path)
115
+ if absolute?(path)
116
+ normalize(path)
117
+ else
118
+ normalize(::File.join workdir, path)
119
+ end
120
+ end
121
+
122
+ def dirpath(path)
123
+ path + "/"
124
+ end
125
+
126
+ def normalize(path)
127
+ ::Pathname.new(path).cleanpath.to_s
128
+ end
129
+
130
+ end
131
+
132
+ end
133
+
@@ -0,0 +1,13 @@
1
+ module ::SocialSnippet::StorageBackend
2
+
3
+ class MongoidStorage::File
4
+
5
+ include ::Mongoid::Document
6
+
7
+ field :path, :type => String
8
+ field :content, :type => String
9
+
10
+ end
11
+
12
+ end
13
+
@@ -0,0 +1,12 @@
1
+ module SocialSnippet::StorageBackend
2
+
3
+ class MongoidStorage::Model
4
+
5
+ include ::Mongoid::Document
6
+
7
+ field :paths, :type => Array
8
+
9
+ end
10
+
11
+ end
12
+
@@ -1,6 +1,8 @@
1
1
  require "mongoid"
2
+ require "pathname"
2
3
  require "social_snippet/supports/mongoid/version"
3
4
  require "social_snippet/document_backend/mongoid_document"
5
+ require "social_snippet/storage_backend/mongoid_storage"
4
6
 
5
7
  module SocialSnippet::Supports
6
8
 
@@ -8,6 +10,7 @@ module SocialSnippet::Supports
8
10
 
9
11
  def self.activate!
10
12
  ::SocialSnippet::DocumentBackend::MongoidDocument.activate!
13
+ ::SocialSnippet::StorageBackend::MongoidStorage.activate!
11
14
  end
12
15
 
13
16
  end
@@ -1,7 +1,7 @@
1
1
  module SocialSnippet
2
2
  module Supports
3
3
  module Mongoid
4
- VERSION = "0.0.0"
4
+ VERSION = "0.0.1"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_snippet-supports-mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroyuki Sano
@@ -164,6 +164,9 @@ files:
164
164
  - Rakefile
165
165
  - config/database.rb
166
166
  - lib/social_snippet/document_backend/mongoid_document.rb
167
+ - lib/social_snippet/storage_backend/mongoid_storage.rb
168
+ - lib/social_snippet/storage_backend/mongoid_storage/file.rb
169
+ - lib/social_snippet/storage_backend/mongoid_storage/model.rb
167
170
  - lib/social_snippet/supports/mongoid.rb
168
171
  - lib/social_snippet/supports/mongoid/version.rb
169
172
  - social_snippet-supports-mongoid.gemspec