chillfile 0.0.3 → 0.1.0

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.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{chillfile}
8
- s.version = "0.0.3"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["dpree"]
12
- s.date = %q{2010-12-08}
12
+ s.date = %q{2011-01-09}
13
13
  s.default_executable = %q{chillfile}
14
14
  s.description = %q{Let your files chill on the couch}
15
15
  s.email = %q{whiterabbit.init@gmail.com}
@@ -32,9 +32,10 @@ Gem::Specification.new do |s|
32
32
  "lib/chillfile/cli.rb",
33
33
  "lib/chillfile/config.rb",
34
34
  "lib/chillfile/database_server.rb",
35
+ "lib/chillfile/helper/sync_helper.rb",
35
36
  "lib/chillfile/model.rb",
37
+ "lib/chillfile/model/asset.rb",
36
38
  "lib/chillfile/model/base.rb",
37
- "lib/chillfile/model/sync_file.rb",
38
39
  "lib/chillfile/sync.rb",
39
40
  "spec/filesystem_after/bar.1.moved.untouched",
40
41
  "spec/filesystem_after/bar.2.moved.copy",
@@ -55,7 +56,7 @@ Gem::Specification.new do |s|
55
56
  "spec/filesystem_before/wuu.deleted",
56
57
  "spec/fixtures/filesystem_after.json",
57
58
  "spec/fixtures/filesystem_before.json",
58
- "spec/lib/chillfile/model/sync_file_spec.rb",
59
+ "spec/lib/chillfile/model/asset_spec.rb",
59
60
  "spec/lib/chillfile_spec.rb",
60
61
  "spec/spec_helper.rb",
61
62
  "spec/support/db_helper.rb",
@@ -69,7 +70,7 @@ Gem::Specification.new do |s|
69
70
  s.rubygems_version = %q{1.3.7}
70
71
  s.summary = %q{Tiny tool to sync filesystem with couchdb}
71
72
  s.test_files = [
72
- "spec/lib/chillfile/model/sync_file_spec.rb",
73
+ "spec/lib/chillfile/model/asset_spec.rb",
73
74
  "spec/lib/chillfile_spec.rb",
74
75
  "spec/spec_helper.rb",
75
76
  "spec/support/db_helper.rb",
@@ -14,14 +14,17 @@ require "progressbar"
14
14
 
15
15
  require File.join(File.dirname(__FILE__), "chillfile/config")
16
16
  require File.join(File.dirname(__FILE__), "chillfile/cli")
17
+
18
+ require File.join(File.dirname(__FILE__), "chillfile/helper/sync_helper")
19
+
17
20
  require File.join(File.dirname(__FILE__), "chillfile/database_server")
18
21
  require File.join(File.dirname(__FILE__), "chillfile/sync")
19
22
  require File.join(File.dirname(__FILE__), "chillfile/model")
20
23
 
21
24
  module Chillfile
22
25
  get_version = lambda do
23
- v = YAML.parse_file(File.join(File.dirname(__FILE__), "../version.yml"))
24
- "#{v[:major].value}.#{v[:minor].value}.#{v[:patch].value}"
26
+ v = YAML.load_file(File.join(File.dirname(__FILE__), "../version.yml"))
27
+ "#{v[:major]}.#{v[:minor]}.#{v[:patch]}"
25
28
  end
26
29
  VERSION = get_version.call
27
30
 
@@ -55,7 +58,7 @@ module Chillfile
55
58
 
56
59
  # databse
57
60
  def db_list
58
- Chillfile::Model::SyncFile.by_filesystem_raw
61
+ Chillfile::Asset.by_filesystem_raw
59
62
  end
60
63
  end
61
64
  end
@@ -0,0 +1,53 @@
1
+ module Chillfile::SyncHelper
2
+ # CREATED
3
+ def create_doc(checksum, path)
4
+ doc = Chillfile::Asset.new(:checksum => checksum, :path => path)
5
+ doc.save
6
+ begin
7
+ file = File.open(path)
8
+ doc.create_attachment(:file => file, :name => "master")
9
+ ensure
10
+ file.close
11
+ end
12
+ doc
13
+ end
14
+
15
+ # DELETED
16
+ def delete_doc(doc)
17
+ doc.deleted = true
18
+ doc.save
19
+ doc
20
+ end
21
+
22
+ # COPIED
23
+ def copy_doc(doc, path)
24
+ doc = create_doc(doc.checksum, path)
25
+
26
+ # TODO keep metadata => make a deep clone here...
27
+
28
+ doc
29
+ end
30
+
31
+ # MOVED
32
+ def update_doc_path(doc, new_path)
33
+ doc.path = new_path
34
+ doc
35
+ end
36
+
37
+ # MODIFIED
38
+ def update_doc_attachment(doc, new_checksum)
39
+ doc.checksum = new_checksum
40
+ begin
41
+ file = File.open(doc.path)
42
+ doc.update_attachment(:file => file, :name => "master")
43
+ ensure
44
+ file.close
45
+ end
46
+ doc
47
+ end
48
+
49
+ # FINALIZER
50
+ def doc_save!(doc)
51
+ doc.save
52
+ end
53
+ end
@@ -5,7 +5,7 @@ module Chillfile
5
5
 
6
6
  # all models
7
7
  require File.join(File.dirname(__FILE__), "model/base")
8
- require File.join(File.dirname(__FILE__), "model/sync_file")
8
+ require File.join(File.dirname(__FILE__), "model/asset")
9
9
  end
10
10
 
11
11
  private
@@ -0,0 +1,24 @@
1
+ class Chillfile::Asset < Chillfile::Base
2
+ timestamps!
3
+ property :checksum, String
4
+ property :path, String
5
+
6
+ property :deleted, TrueClass, :default => false
7
+
8
+ view_by :checksum
9
+ view_by :path
10
+
11
+ view_by :filesystem, :map => "
12
+ function(doc) {
13
+ if (doc['type'] == 'Chillfile::Asset' && !doc['deleted']) {
14
+ emit(null, [doc['checksum'], doc['path']]);
15
+ }
16
+ }
17
+ "
18
+
19
+ def self.by_filesystem_raw
20
+ self.by_filesystem(:include_docs => false)["rows"].map do |f|
21
+ f["value"]
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
- class Chillfile::Model::Base < CouchRest::Model::Base
1
+ class Chillfile::Base < CouchRest::Model::Base
2
2
  use_database Chillfile.db
3
3
  end
@@ -1,138 +1,90 @@
1
- module Chillfile
2
- module Sync
3
- class << self
4
- def process!(comparator, progressbar = nil)
5
- @progressbar = progressbar
6
-
7
- # deleted
8
- process_list(comparator.deleted, "Delete") do |checksum, path|
9
- for_doc_with(checksum) do |doc|
10
- if doc.paths.size > 1
11
- update_doc_paths(doc, [path])
12
- else
13
- delete_doc(doc)
14
- end
15
- end
16
- end
17
-
18
- # moved files
19
- process_list(comparator.moved, "Move") do |checksum, paths|
20
- for_doc_with(checksum) do |doc|
21
- update_doc_paths(doc, paths[:old_paths], paths[:new_paths])
22
- end
23
- end
1
+ module Chillfile::Sync
2
+ class << self
3
+ include Chillfile::SyncHelper
4
+
5
+ def process!(comparator, progressbar = nil)
6
+ @progressbar = progressbar
24
7
 
25
- # modified files
26
- process_list(comparator.modified, "Modify") do |path, checksums|
27
- for_doc_with(checksums[:old_checksum]) do |doc|
28
-
29
- # split it up if there is more than one path
30
- if doc.paths.size > 1
31
-
32
- # remove the old path from the list
33
- base_doc = update_doc_paths(doc, [path])
34
-
35
- # new forked doc
36
- fork_doc = create_doc(checksums[:new_checksum], path)
37
-
38
- [base_doc, fork_doc]
39
- else
40
- update_doc_attachment(doc, checksums[:new_checksum])
41
- end
42
- end
8
+ process_deleted(comparator)
9
+ process_moved(comparator)
10
+ process_modified(comparator)
11
+ process_created(comparator)
12
+
13
+ true
14
+ end
15
+
16
+ private
17
+
18
+ # deleted
19
+ def process_deleted(comparator)
20
+ process_list(comparator.deleted, "Delete") do |checksum, path|
21
+ for_doc_with(checksum) do |doc|
22
+ delete_doc(doc)
43
23
  end
44
-
45
- # created files
46
- process_list(comparator.created, "Create") do |checksum, path|
47
- for_doc_with(checksum) do |doc|
48
- if doc
49
- update_doc_add_path(doc, path)
50
- else
51
- create_doc(checksum, path)
24
+ end
25
+ end
26
+
27
+ # moved files
28
+ def process_moved(comparator)
29
+ process_list(comparator.moved, "Move") do |checksum, paths|
30
+ for_doc_with(checksum) do |doc|
31
+ if paths[:new_paths].size > 1
32
+ delete_doc(doc)
33
+ docs = paths[:new_paths].map do |new_path|
34
+ copy_doc(doc, new_path)
52
35
  end
36
+ docs
37
+ else
38
+ update_doc_path(doc, paths[:new_paths].first)
53
39
  end
54
40
  end
55
41
  end
42
+ end
56
43
 
57
- private
58
-
59
- # CREATED
60
- def create_doc(checksum, path)
61
- doc = Chillfile::Model::SyncFile.new(:checksum => checksum, :paths => [path])
62
- doc.save
63
- begin
64
- file = File.open(path)
65
- doc.create_attachment(:file => file, :name => "master")
66
- ensure
67
- file.close
44
+ def process_modified(comparator)
45
+ # modified files
46
+ process_list(comparator.modified, "Modify") do |path, checksums|
47
+ for_doc_with(checksums[:old_checksum]) do |doc|
48
+ update_doc_attachment(doc, checksums[:new_checksum])
68
49
  end
69
- doc
70
- end
71
-
72
- # COPIED
73
- def update_doc_add_path(doc, path)
74
- update_doc_paths(doc, [], [path])
75
50
  end
51
+ end
76
52
 
77
- # MOVED/COPIED
78
- def update_doc_paths(doc, del_paths = [], add_paths = [])
79
- # del old paths
80
- del_paths.each do |path|
81
- doc.paths.delete(path)
53
+ def process_created(comparator)
54
+ # created files
55
+ process_list(comparator.created, "Create") do |checksum, path|
56
+ for_doc_with(checksum) do |doc|
57
+ create_doc(checksum, path)
82
58
  end
83
-
84
- # add new paths
85
- doc.paths = doc.paths + add_paths
86
-
87
- doc
88
59
  end
60
+ end
89
61
 
90
- # MODIFIED
91
- def update_doc_attachment(doc, new_checksum)
92
- doc.checksum = new_checksum
93
- begin
94
- file = File.open(doc.paths.first)
95
- doc.update_attachment(:file => file, :name => "master")
96
- ensure
97
- file.close
62
+ # wrapper outer
63
+ def process_list(list, title, &block)
64
+ return true if list.empty?
65
+
66
+ list_iterator = lambda do |notifier|
67
+ list.each do |args|
68
+ block.call(*args)
69
+ notifier.call if notifier
98
70
  end
99
- doc
100
- end
101
-
102
- # DELETED
103
- def delete_doc(doc)
104
- doc.deleted = true
105
- doc.paths = []
106
- doc
107
71
  end
108
72
 
109
- # wrapper outer
110
- def process_list(list, title, &block)
111
- return true if list.empty?
112
-
113
- list_iterator = lambda do |notifier|
114
- list.each do |args|
115
- block.call(*args)
116
- notifier.call if notifier
117
- end
118
- end
119
-
120
- if @progressbar
121
- @progressbar.call({:name => title, :size => list.size}, list_iterator)
122
- else
123
- list_iterator.call(nil)
124
- end
73
+ if @progressbar
74
+ @progressbar.call({:name => title, :size => list.size}, list_iterator)
75
+ else
76
+ list_iterator.call(nil)
125
77
  end
126
-
127
- # wrapper
128
- def for_doc_with(checksum, &block)
129
- old_doc = Chillfile::Model::SyncFile.by_checksum(:key => checksum).first
130
- new_doc_or_docs = block.call(old_doc)
131
- if new_doc_or_docs.is_a? Array
132
- new_doc_or_docs.each{|d| d.save}
133
- else
134
- new_doc_or_docs.save
135
- end
78
+ end
79
+
80
+ # wrapper
81
+ def for_doc_with(checksum, &block)
82
+ old_doc = Chillfile::Asset.by_checksum(:key => checksum).first
83
+ new_doc_or_docs = block.call(old_doc)
84
+ if new_doc_or_docs.is_a? Array
85
+ new_doc_or_docs.each{|d| doc_save!(d)}
86
+ else
87
+ doc_save!(new_doc_or_docs)
136
88
  end
137
89
  end
138
90
  end
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe Chillfile::Asset do
4
+ include DbHelper
5
+
6
+ before(:each) do
7
+ reset_db!
8
+ end
9
+
10
+ it "should be possible create a file" do
11
+ Chillfile::Asset.new(:path => "./foo/bar.baz", :checksum => "13123f6casdd03480be5f781ee12312asdasd232").save.persisted?.should be_true
12
+ end
13
+
14
+ it "should be possible to find using a checksum" do
15
+ Chillfile::Asset.new(:path => "./foo/bar.baz", :checksum => "13123f6casdd03480be5f781ee12312asdasd232").save
16
+ Chillfile::Asset.new(:path => "./woo_lands", :checksum => "13123f6casdd03480be5f781ee12312asdasd232").save
17
+ paths = Chillfile::Asset.by_checksum(:key => "13123f6casdd03480be5f781ee12312asdasd232").map{|a| a.path}
18
+ paths.size.should == 2
19
+ paths.include?("./foo/bar.baz").should be_true
20
+ paths.include?("./woo_lands").should be_true
21
+ end
22
+ end
@@ -21,7 +21,7 @@ describe Chillfile do
21
21
  end
22
22
 
23
23
  it "should be possible to list from db" do
24
- Chillfile::Model::SyncFile.new(:paths => ["./foo/bar.baz"], :checksum => "13123f6casdd03480be5f781ee12312asdasd232").save
24
+ Chillfile::Asset.new(:path => "./foo/bar.baz", :checksum => "13123f6casdd03480be5f781ee12312asdasd232").save
25
25
  Chillfile.db_list.should == [["13123f6casdd03480be5f781ee12312asdasd232", "./foo/bar.baz"]]
26
26
  end
27
27
 
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 0
4
- :patch: 3
3
+ :minor: 1
4
+ :patch: 0
5
5
  :build:
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 3
9
- version: 0.0.3
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - dpree
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-08 00:00:00 +01:00
17
+ date: 2011-01-09 00:00:00 +01:00
18
18
  default_executable: chillfile
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -195,9 +195,10 @@ files:
195
195
  - lib/chillfile/cli.rb
196
196
  - lib/chillfile/config.rb
197
197
  - lib/chillfile/database_server.rb
198
+ - lib/chillfile/helper/sync_helper.rb
198
199
  - lib/chillfile/model.rb
200
+ - lib/chillfile/model/asset.rb
199
201
  - lib/chillfile/model/base.rb
200
- - lib/chillfile/model/sync_file.rb
201
202
  - lib/chillfile/sync.rb
202
203
  - spec/filesystem_after/bar.1.moved.untouched
203
204
  - spec/filesystem_after/bar.2.moved.copy
@@ -218,7 +219,7 @@ files:
218
219
  - spec/filesystem_before/wuu.deleted
219
220
  - spec/fixtures/filesystem_after.json
220
221
  - spec/fixtures/filesystem_before.json
221
- - spec/lib/chillfile/model/sync_file_spec.rb
222
+ - spec/lib/chillfile/model/asset_spec.rb
222
223
  - spec/lib/chillfile_spec.rb
223
224
  - spec/spec_helper.rb
224
225
  - spec/support/db_helper.rb
@@ -259,7 +260,7 @@ signing_key:
259
260
  specification_version: 3
260
261
  summary: Tiny tool to sync filesystem with couchdb
261
262
  test_files:
262
- - spec/lib/chillfile/model/sync_file_spec.rb
263
+ - spec/lib/chillfile/model/asset_spec.rb
263
264
  - spec/lib/chillfile_spec.rb
264
265
  - spec/spec_helper.rb
265
266
  - spec/support/db_helper.rb
@@ -1,28 +0,0 @@
1
- class Chillfile::Model::SyncFile < Chillfile::Model::Base
2
- timestamps!
3
- property :checksum, String
4
- property :paths, [String]
5
-
6
- # alternative to paths.empty?
7
- property :deleted, TrueClass, :default => false
8
-
9
- validates_uniqueness_of :checksum
10
-
11
- view_by :checksum
12
-
13
- view_by :filesystem, :map => "
14
- function(doc) {
15
- if (doc['type'] == 'Chillfile::Model::SyncFile') {
16
- for (var i = 0; i < doc['paths'].length; i++) {
17
- emit(null, [doc['checksum'], doc['paths'][i]]);
18
- }
19
- }
20
- }
21
- "
22
-
23
- def self.by_filesystem_raw
24
- self.by_filesystem(:include_docs => false)["rows"].map do |f|
25
- f["value"]
26
- end
27
- end
28
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Chillfile::Model::SyncFile do
4
- include DbHelper
5
-
6
- before(:each) do
7
- reset_db!
8
- end
9
-
10
- it "should be possible create a file" do
11
- Chillfile::Model::SyncFile.new(:paths => ["./foo/bar.baz"], :checksum => "13123f6casdd03480be5f781ee12312asdasd232").save.persisted?.should be_true
12
- end
13
-
14
- it "should be possible to find using a checksum" do
15
- Chillfile::Model::SyncFile.new(:paths => ["./foo/bar.baz", "./woo_lands"], :checksum => "13123f6casdd03480be5f781ee12312asdasd232").save
16
- Chillfile::Model::SyncFile.by_checksum(:key => "13123f6casdd03480be5f781ee12312asdasd232").first[:paths].should == ["./foo/bar.baz", "./woo_lands"]
17
- end
18
- end