sicily 0.1.2 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 627871cf9d13982e121dc7eb192bbf7d58adfe97
4
- data.tar.gz: 316a52b9f5cafdd37eb9a7ffdd04effdc27807d4
3
+ metadata.gz: 24bffd7625f941daf5ce70d26b13e2e125e357ae
4
+ data.tar.gz: 60915840c1a95a889b11fa1025846c1a83507b96
5
5
  SHA512:
6
- metadata.gz: 1ad452ca08562748cf97ee25c353b1e8bb047523aac5ee0230bfa043f88e121d061e6007f4d7957842db87c096e42b3b101f9afbe64c3094bb28840bec1552ee
7
- data.tar.gz: 95ad6d42958198863c9469b6a6811a604391484860c11c55a90551d653af6ba30be04164e204fb957f59bf420f1d9a7a2984b73084370b7b2dde5b7b99c69c5c
6
+ metadata.gz: 3628311381543b604a85d12c2e5ce1a824c9111c168d3512d37c01ee5c0270a19d45ccd438d88b983a15b264c15e45eaf2ca1d66dd960f4208a49b56610e7778
7
+ data.tar.gz: f8c1ef202d59a65ecc9063a507eb88f8b73f5ded2d359a832539086d7c18b48e707a2c609c894c57dc6d345ba38074c293fae8f718115b8a8abf50ab83f74630
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.3
4
+ * It's now easy to create new task.
5
+
3
6
  ## 0.1.2
4
7
  * Add `rm`
5
8
 
data/Gemfile.lock CHANGED
@@ -1,29 +1,36 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sicily (0.1.2)
4
+ sicily (0.1.3)
5
5
  concurrent-ruby (~> 1.0.5)
6
6
  exifr (~> 1.3.3)
7
+ fastimage (~> 2.1.1)
8
+ fastimage_resize (~> 2.0.3)
7
9
  god (~> 0.13.7)
8
10
  listen (~> 3.1.5)
9
- mini_magick (~> 4.8.0)
10
11
  terminal-notifier (~> 2.0.0)
11
12
  whenever (~> 0.10.0)
12
13
 
13
14
  GEM
14
15
  remote: https://rubygems.org/
15
16
  specs:
17
+ RubyInline (3.12.4)
18
+ ZenTest (~> 4.3)
19
+ ZenTest (4.11.1)
16
20
  chronic (0.10.2)
17
21
  concurrent-ruby (1.0.5)
18
22
  diff-lcs (1.3)
19
23
  exifr (1.3.3)
24
+ fastimage (2.1.1)
25
+ fastimage_resize (2.0.3)
26
+ RubyInline (>= 3.8.2)
27
+ fastimage (>= 1.2.9)
20
28
  ffi (1.9.21)
21
29
  god (0.13.7)
22
30
  listen (3.1.5)
23
31
  rb-fsevent (~> 0.9, >= 0.9.4)
24
32
  rb-inotify (~> 0.9, >= 0.9.7)
25
33
  ruby_dep (~> 1.2)
26
- mini_magick (4.8.0)
27
34
  rake (10.5.0)
28
35
  rb-fsevent (0.10.2)
29
36
  rb-inotify (0.9.10)
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Gem Version](https://badge.fury.io/rb/sicily.svg)](https://badge.fury.io/rb/sicily)
2
+
1
3
  # Sicily
2
4
 
3
5
  A rule-based photo organizer written in Ruby
@@ -51,6 +53,14 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
51
53
 
52
54
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
53
55
 
56
+ ### Adding a New Task
57
+
58
+ Refer to `lib/sicily/task/` and `spec/sicily/task/`.
59
+
60
+ You create any task as you want.
61
+
62
+ TaskLoader(`lib/sicily/task_loader.rb`) will load it automatically.
63
+
54
64
  ## TODO
55
65
  * error handling
56
66
  * logging
data/lib/sicily.rb CHANGED
@@ -2,10 +2,13 @@ require "sicily/version"
2
2
  require "sicily/config"
3
3
  require "sicily/monitor"
4
4
  require "sicily/util/file_util"
5
+ require "sicily/task_loader"
5
6
 
6
7
  module Sicily
7
8
  @monitored_paths = []
8
9
 
10
+ TaskLoader.new.load_all_tasks
11
+
9
12
  def self.on(path, &block)
10
13
  if self.can_monitor?(@monitored_paths, path)
11
14
  self.start_monitor!(path, &block)
data/lib/sicily/config.rb CHANGED
@@ -1,20 +1,12 @@
1
- require "singleton"
2
-
3
1
  module Sicily
4
- def self.configure_google(&block)
5
- return if block.nil?
6
- block.call GoogleCredential.instance
7
- end
8
-
9
- def self.config
10
- Config.instance
2
+ class << self
3
+ attr_accessor :config
11
4
  end
12
5
 
13
6
  class Config
14
- include Singleton
15
- attr_accessor :forbid_new_file_in_subfolder,
16
- :notify_when_done,
17
- :num_thread_pool
7
+ attr_reader :forbid_new_file_in_subfolder,
8
+ :notify_when_done,
9
+ :num_thread_pool
18
10
 
19
11
  def initialize
20
12
  @forbid_new_file_in_subfolder = true
@@ -23,8 +15,5 @@ module Sicily
23
15
  end
24
16
  end
25
17
 
26
- class GoogleCredential
27
- include Singleton
28
- attr_accessor :id, :pw
29
- end
18
+ Sicily.config = Config.new
30
19
  end
@@ -1,50 +1,7 @@
1
- require "sicily/task/resize_task"
2
- require "sicily/task/google_photo_task"
3
- require "sicily/task/file_task"
4
- require "sicily/util/file_util"
5
-
6
1
  module Sicily
7
2
  class FileProcessor
8
3
  def initialize(path)
9
4
  @path = path
10
5
  end
11
-
12
- def fit_if_photo(width, height)
13
- Task::ResizeTask.fit_if_photo @path, width, height
14
- end
15
-
16
- def google_photo
17
- Task::GooglePhotoTask.upload @path
18
- end
19
-
20
- def mv(dest_path)
21
- file_task_op :mv, dest_path
22
- end
23
-
24
- def cp(dest_path)
25
- file_task_op :cp, dest_path
26
- end
27
-
28
- def rm
29
- Task::FileTask.rm @path
30
- end
31
-
32
- private
33
- def file_task_op(op, dest_path)
34
- cannot_op = Sicily.config.forbid_new_file_in_subfolder &&
35
- Util::FileUtil.is_related?(@path, dest_path)
36
-
37
- if cannot_op
38
- raise [
39
- "Cannot #{op} to child folder",
40
- " src : #{@path}",
41
- " dest : #{dest_path}",
42
- ].join("\n")
43
- return
44
- end
45
-
46
- final_dest_path = Util::FileUtil.eval_dest_path(@path, dest_path)
47
- Task::FileTask.public_send op, @path, final_dest_path
48
- end
49
6
  end
50
7
  end
@@ -0,0 +1,10 @@
1
+ module Sicily
2
+ module Task
3
+ module DummyTask
4
+ def dummy
5
+ puts "This does nothing"
6
+ @path
7
+ end
8
+ end
9
+ end
10
+ end
@@ -3,26 +3,41 @@ require "sicily/config"
3
3
 
4
4
  module Sicily
5
5
  module Task
6
- class FileTask
7
- def self.mv(path_src, path_dest)
8
- file_op :mv, path_src, path_dest
9
- end
6
+ class Base
7
+ def self.prepare_dest_path(path_src, path_dest)
8
+ cannot_op = Sicily.config.forbid_new_file_in_subfolder &&
9
+ Util::FileUtil.is_related?(path_src, path_dest)
10
+
11
+ if cannot_op
12
+ raise [
13
+ "Cannot do file operation to child folder",
14
+ " src : #{path_src}",
15
+ " dest : #{path_dest}",
16
+ ].join("\n")
17
+ return
18
+ end
19
+
20
+ final_dest_path = Util::FileUtil.eval_dest_path(path_src, path_dest)
21
+ final_dest_path = File.expand_path final_dest_path
22
+ FileUtils.mkdir_p final_dest_path
10
23
 
11
- def self.cp(path_src, path_dest)
12
- file_op :cp, path_src, path_dest
24
+ final_dest_path
13
25
  end
26
+ end
14
27
 
15
- def self.rm(path)
16
- FileUtils.rm path
28
+ module FileTask
29
+ def mv(path_dest)
30
+ path_dest = Base.prepare_dest_path(@path, path_dest)
31
+ FileUtils.mv @path, path_dest
17
32
  end
18
33
 
19
- private
20
- def self.file_op(op, path_src, path_dest)
21
- path_src = File.expand_path path_src
22
- path_dest = File.expand_path path_dest
34
+ def cp(path_dest)
35
+ path_dest = Base.prepare_dest_path(@path, path_dest)
36
+ FileUtils.cp @path, path_dest
37
+ end
23
38
 
24
- FileUtils.mkdir_p path_dest
25
- FileUtils.public_send op, path_src, path_dest
39
+ def rm
40
+ FileUtils.rm @path
26
41
  end
27
42
  end
28
43
  end
@@ -1,16 +1,31 @@
1
1
  require "sicily/config"
2
2
 
3
3
  module Sicily
4
+ class << self
5
+ attr_accessor :config_google
6
+ end
7
+
8
+ class GoogleCredential
9
+ attr_accessor :id, :pw
10
+ end
11
+
12
+ Sicily.config_google = GoogleCredential.new
13
+
14
+ def self.configure_google(&block)
15
+ return if block.nil?
16
+ block.call Sicily.config_google
17
+ end
18
+
4
19
  module Task
5
- class GooglePhotoTask
6
- def self.upload(path)
7
- id = GoogleCredential.instance.id
8
- pw = GoogleCredential.instance.pw
20
+ module GooglePhotoTask
21
+ def google_photo
22
+ id = Sicily.config_google.id
23
+ pw = Sicily.config_google.pw
9
24
 
10
25
  if id.to_s.empty? or pw.to_s.empty?
11
26
  raise "no google credential"
12
27
  else
13
- cmd = "upload-gphotos \"#{path}\" -u #{id} -p #{pw}"
28
+ cmd = "upload-gphotos \"#{@path}\" -u #{id} -p #{pw}"
14
29
  `#{cmd}`
15
30
  end
16
31
  end
@@ -1,14 +1,27 @@
1
- require "mini_magick"
1
+ require "sicily/util/image_util"
2
+ require "fastimage_resize"
2
3
 
3
4
  module Sicily
4
5
  module Task
5
- class ResizeTask
6
- def self.fit_if_photo(path, width, height)
7
- image = MiniMagick::Image.new(path)
8
- if image.valid?
9
- image.resize "#{width}x#{height}>"
6
+ class SizeCalculator
7
+ def self.size_to_fit(container_width, container_height, image_width, image_height)
8
+ if container_width*image_height > container_height*image_width
9
+ [(image_width*container_height/image_height).to_i, container_height]
10
+ else
11
+ [container_width, (image_height*container_width/image_width).to_i]
10
12
  end
11
13
  end
12
14
  end
15
+
16
+ module ResizeTask
17
+ def fit_if_photo(container_width, container_height)
18
+ size = Util::ImageUtil.get_size(@path)
19
+ image_width = size[0]
20
+ image_height = size[1]
21
+
22
+ dest_size = SizeCalculator.size_to_fit container_width, container_height, image_width, image_height
23
+ FastImage.resize(@path, dest_size[0], dest_size[1], :outfile => @path)
24
+ end
25
+ end
13
26
  end
14
27
  end
@@ -0,0 +1,20 @@
1
+ module Sicily
2
+ class TaskLoader
3
+ def load_all_tasks
4
+ Dir["#{File.dirname(__FILE__)}/task/*.rb"].each {|file|
5
+ require file
6
+
7
+ module_name = camelize(File.basename(file, ".*"))
8
+ maybe_module = Task.const_get(module_name)
9
+ if maybe_module.class.name == "Module"
10
+ FileProcessor.send(:include, maybe_module)
11
+ end
12
+ }
13
+ end
14
+
15
+ private
16
+ def camelize(str)
17
+ str.split('_').map {|w| w.capitalize}.join
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ require "fastimage"
2
+
3
+ module Sicily
4
+ module Util
5
+ class ImageUtil
6
+ def self.get_size(path)
7
+ size = FastImage.size(path)
8
+ [size[0], size[1]]
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Sicily
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/sicily.gemspec CHANGED
@@ -14,11 +14,17 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/eunjae-lee/sicily"
15
15
  spec.license = "MIT"
16
16
 
17
+ spec.metadata = {
18
+ 'changelog_uri' => "https://github.com/eunjae-lee/sicily/blob/master/CHANGELOG.md"
19
+ }
20
+
17
21
  spec.post_install_message = %q{
18
22
 
19
23
  To finish installation, please execute the following:
20
24
  $ npm install -g upload-gphotos
21
25
 
26
+ And Libgd is required for this gem. Please install it like the following:
27
+ $ brew install gd
22
28
 
23
29
  }
24
30
 
@@ -29,13 +35,14 @@ Gem::Specification.new do |spec|
29
35
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
36
  spec.require_paths = ["lib"]
31
37
 
32
- spec.add_dependency "mini_magick", "~> 4.8.0"
33
38
  spec.add_dependency "listen", "~> 3.1.5"
34
39
  spec.add_dependency "god", "~> 0.13.7"
35
40
  spec.add_dependency "whenever", "~> 0.10.0"
36
41
  spec.add_dependency "terminal-notifier", "~> 2.0.0"
37
42
  spec.add_dependency "concurrent-ruby", "~> 1.0.5"
38
43
  spec.add_dependency "exifr", "~> 1.3.3"
44
+ spec.add_dependency "fastimage", "~> 2.1.1"
45
+ spec.add_dependency "fastimage_resize", "~> 2.0.3"
39
46
 
40
47
  spec.add_development_dependency "bundler", "~> 1.16"
41
48
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sicily
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Lee
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-15 00:00:00.000000000 Z
11
+ date: 2018-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: mini_magick
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 4.8.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 4.8.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: listen
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +94,34 @@ dependencies:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
96
  version: 1.3.3
97
+ - !ruby/object:Gem::Dependency
98
+ name: fastimage
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.1.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.1.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: fastimage_resize
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 2.0.3
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 2.0.3
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: bundler
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -176,24 +190,30 @@ files:
176
190
  - lib/sicily/config.rb
177
191
  - lib/sicily/file_processor.rb
178
192
  - lib/sicily/monitor.rb
193
+ - lib/sicily/task/dummy_task.rb
179
194
  - lib/sicily/task/file_task.rb
180
195
  - lib/sicily/task/google_photo_task.rb
181
196
  - lib/sicily/task/resize_task.rb
197
+ - lib/sicily/task_loader.rb
182
198
  - lib/sicily/util/exif_util.rb
183
199
  - lib/sicily/util/file_util.rb
200
+ - lib/sicily/util/image_util.rb
184
201
  - lib/sicily/util/notification_util.rb
185
202
  - lib/sicily/version.rb
186
203
  - sicily.gemspec
187
204
  homepage: https://github.com/eunjae-lee/sicily
188
205
  licenses:
189
206
  - MIT
190
- metadata: {}
207
+ metadata:
208
+ changelog_uri: https://github.com/eunjae-lee/sicily/blob/master/CHANGELOG.md
191
209
  post_install_message: |2+
192
210
 
193
211
 
194
212
  To finish installation, please execute the following:
195
213
  $ npm install -g upload-gphotos
196
214
 
215
+ And Libgd is required for this gem. Please install it like the following:
216
+ $ brew install gd
197
217
 
198
218
  rdoc_options: []
199
219
  require_paths:
@@ -210,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
230
  version: '0'
211
231
  requirements: []
212
232
  rubyforge_project:
213
- rubygems_version: 2.6.8
233
+ rubygems_version: 2.6.11
214
234
  signing_key:
215
235
  specification_version: 4
216
236
  summary: A rule-based photo organizer written in Ruby