sicily 0.1.6 → 0.1.7

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: 5f6d06dfcf656ff02bef26a923b9684d5a28851e
4
- data.tar.gz: 5ead2b24d7137cd9eafe16b7f43df83997ec4e0f
3
+ metadata.gz: 7094d97b1de208a0611c56df43b83fd88e4c8b13
4
+ data.tar.gz: f53c938f8af3acb212eeb532b673bb7deeec62e9
5
5
  SHA512:
6
- metadata.gz: f1faa2887227d90898a5efa500d2933bd6e6915621d46db189e7038bb292bae273bc1956f306c17b6789dae943d3ef9dae925db41794efa140afec3693574bff
7
- data.tar.gz: 8987884e10095901ddccf3ede93d061f97796d8fbe280304ede4afead9843e098972f90534eb43c4e07f202da32cf413f4fae8a082ec258b224b357f39d3d8bb
6
+ metadata.gz: caa5b53a90727e9df8300b7ad288dd865c58f6e82f0b0f664d550d400adbee72c4c1d101ded387f03c05887760325dda7e9ccee8381699a13851a3c031418731
7
+ data.tar.gz: 7c6dd99942a135234e7ba9392f30daca58c422cd2402d7a6d1b4aff42149b9fb40a396c5de54c92027a0fb56f980467c5ec8758f8a2809a54657f07bb7376426
data/.rubocop.yml CHANGED
@@ -14,4 +14,7 @@ Metrics/MethodLength:
14
14
  Metrics/ParameterLists:
15
15
  Max: 4
16
16
  Style/GlobalVars:
17
- AllowedVariables: ['$SICILY_LOG_TO_FILE']
17
+ AllowedVariables: ['$SICILY_LOG_TO_FILE', '$SICILY_LOAD_USER_CONFIGS']
18
+ Lint/RescueException:
19
+ Exclude:
20
+ - 'lib/sicily/batch_processor.rb'
data/CHANGELOG.md CHANGED
@@ -1,25 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.7
4
+ * Fix a bug that getting wrong creation time of file.
5
+
3
6
  ## 0.1.6
4
7
  * It consumes already existing files on start-up.
5
8
 
6
9
  ## 0.1.5
7
- * It waits 10 seconds before taking actions in case when file is still changing
10
+ * It waits 10 seconds before taking actions in case when file is still changing.
8
11
 
9
12
  ## 0.1.4
10
- * Add required ruby version
13
+ * Add required ruby version.
11
14
  * It's now easy to add new generator.
12
15
 
13
16
  ## 0.1.3
14
17
  * It's now easy to create new task.
15
18
 
16
19
  ## 0.1.2
17
- * Add `rm`
20
+ * Add `rm`.
18
21
 
19
22
  ## 0.1.1
20
- * Extract time and use it for evaluating dest path
23
+ * Extract time and use it for evaluating dest path.
21
24
  * ex> `~/dest_folder/%Y/%m/%d`
22
- * Add `cp`
25
+ * Add `cp`.
23
26
 
24
27
  ## 0.1.0
25
- Initial deployment
28
+ Initial deployment.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sicily (0.1.6)
4
+ sicily (0.1.7)
5
5
  concurrent-ruby (~> 1.0.5)
6
6
  exifr (~> 1.3.3)
7
7
  fastimage (~> 2.1.1)
data/exe/sicily CHANGED
@@ -5,18 +5,15 @@
5
5
  $SICILY_LOG_TO_FILE = (ENV['SICILY_LOG'] == 'file')
6
6
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), ['..', 'lib'])
7
7
 
8
- require 'sicily'
9
-
10
8
  command = ARGV[0]
11
9
 
10
+ $SICILY_LOAD_USER_CONFIGS = (command == 'monitor')
11
+
12
+ require 'sicily'
13
+
12
14
  case command
13
15
  when 'generate'
14
16
  require 'fileutils'
15
- require 'sicily/generator'
16
-
17
- Dir['./generator/*.rb'].each do |file|
18
- require file
19
- end
20
17
 
21
18
  FileUtils.rm_rf './config'
22
19
  FileUtils.mkdir_p './config'
@@ -40,23 +37,7 @@ when 'generate'
40
37
  puts messages_to_display.join('\n')
41
38
  end
42
39
  when 'monitor'
43
- `echo test >> monitor.log`
44
- necessary_config_files = ['rules.rb']
45
- config_files_to_load = ['google_photo.rb', 'rules.rb']
46
-
47
- necessary_config_files.each do |file|
48
- next if File.exist? "./config/#{file}"
49
-
50
- puts "./config/#{file} is missing!"
51
- puts ' Type: `sicily generate`'
52
- exit
53
- end
54
-
55
- config_files_to_load.each do |filename|
56
- path = "./config/#{filename}"
57
- load(path) if File.exist?(path)
58
- end
59
-
40
+ load './config/rules.rb'
60
41
  sleep
61
42
  when 'start'
62
43
  command1 = 'whenever --load-file ./config/.schedule.rb --update-crontab'
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sicily
4
+ Sicily.register_generator do |generator|
5
+ generator.filename = '.application.rb'
6
+ generator.load_on_start = true
7
+ generator.content = <<~CONTENT
8
+ Sicily.configure do |config|
9
+ config.forbid_new_file_in_subfolder = true
10
+ config.num_thread_pool = 10
11
+ config.delay_on_file_monitoring = 10
12
+ config.consume_on_start = true
13
+ end
14
+ CONTENT
15
+ end
16
+ end
@@ -3,9 +3,8 @@
3
3
  module Sicily
4
4
  Sicily.register_generator do |generator|
5
5
  generator.filename = 'google_photo.rb'
6
+ generator.load_on_start = true
6
7
  generator.content = <<~CONTENT
7
- # frozen_string_literal: true
8
-
9
8
  Sicily.configure_google do |config|
10
9
  config.id = 'your id'
11
10
  config.pw = 'your pw'
data/generator/rules.rb CHANGED
@@ -4,8 +4,6 @@ module Sicily
4
4
  Sicily.register_generator do |generator|
5
5
  generator.filename = 'rules.rb'
6
6
  generator.content = <<~CONTENT
7
- # frozen_string_literal: true
8
-
9
7
  Sicily.on '~/your_folder' do
10
8
  fit_if_photo 2000, 2000
11
9
  google_photo
data/lib/sicily.rb CHANGED
@@ -4,54 +4,15 @@ require 'sicily/version'
4
4
  require 'sicily/logger'
5
5
  require 'sicily/config'
6
6
  require 'sicily/monitor'
7
+ require 'sicily/monitor_wrapper'
8
+ require 'sicily/generator'
7
9
  require 'sicily/util/file_util'
8
10
  require 'sicily/task_loader'
9
11
  require 'sicily/error/monitor_error'
10
12
 
11
13
  module Sicily
12
- TaskLoader.new.load_all_tasks
13
-
14
- class MonitorWrapper
15
- @monitored_paths = []
16
-
17
- def self.on(path, &user_rule_block)
18
- if can_monitor?(@monitored_paths, path)
19
- store_path_and_start_monitor(path, &user_rule_block)
20
- else
21
- Sicily.logger.error "Monitor Failed. Path duplicated : #{path}"
22
- end
23
- end
24
-
25
- def self.store_path_and_start_monitor(path, &user_rule_block)
26
- store_monitored_path(path)
27
- start_monitor!(path, &user_rule_block)
28
- end
29
-
30
- def self.start_monitor!(path, &user_rule_block)
31
- Monitor.new.on(path, &user_rule_block)
32
- rescue MonitorError => e
33
- Sicily.logger.error e.message
34
- end
35
-
36
- def self.store_monitored_path(path)
37
- @monitored_paths << File.expand_path(path)
38
- end
39
-
40
- def self.can_monitor?(prev_paths, new_path)
41
- prev_paths.each do |prev_path|
42
- return false if somehow_related?(prev_path, new_path)
43
- end
44
-
45
- true
46
- end
47
-
48
- def self.somehow_related?(path1, path2)
49
- parent_child_relationship = Util::FileUtil.related?(path1, path2)
50
- child_parent_relationship = Util::FileUtil.related?(path2, path1)
51
-
52
- parent_child_relationship || child_parent_relationship
53
- end
54
- end
14
+ Sicily.load_all_tasks
15
+ Sicily.load_all_configs
55
16
 
56
17
  def self.on(path, &user_rule_block)
57
18
  MonitorWrapper.on path, &user_rule_block
@@ -48,8 +48,8 @@ module Sicily
48
48
  file_processor = FileProcessor.new(file)
49
49
  file_processor.instance_eval(&user_rule_block)
50
50
  file_processor.info 'Done'
51
- rescue RuntimeError => e
52
- Sicily.logger.error e.message
51
+ rescue Exception => e
52
+ Sicily.logger.error e.inspect
53
53
  end
54
54
 
55
55
  def notify_done
data/lib/sicily/config.rb CHANGED
@@ -6,18 +6,34 @@ module Sicily
6
6
  end
7
7
 
8
8
  class Config
9
- attr_reader :forbid_new_file_in_subfolder,
10
- :num_thread_pool,
11
- :delay_on_file_monitoring,
12
- :consume_on_start
9
+ attr_accessor :forbid_new_file_in_subfolder,
10
+ :num_thread_pool,
11
+ :delay_on_file_monitoring,
12
+ :consume_on_start
13
13
 
14
14
  def initialize
15
15
  @forbid_new_file_in_subfolder = true
16
- @num_thread_pool = 50
16
+ @num_thread_pool = 10
17
17
  @delay_on_file_monitoring = 10
18
18
  @consume_on_start = true
19
19
  end
20
20
  end
21
21
 
22
22
  Sicily.config = Config.new
23
+
24
+ def self.configure(&block)
25
+ block.call Sicily.config if block_given?
26
+ end
27
+
28
+ def self.load_all_configs
29
+ return unless $SICILY_LOAD_USER_CONFIGS
30
+
31
+ Sicily.logger.debug "#{Sicily.generators.size} generators found."
32
+ Sicily.generators.each do |generator|
33
+ path = File.expand_path "#{File.dirname(__FILE__)}/../../config/#{generator.filename}"
34
+ next unless generator.load_on_start
35
+ Sicily.logger.debug "ConfigLoader : #{path}"
36
+ load path
37
+ end
38
+ end
23
39
  end
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sicily
4
- class Generator
5
- attr_accessor :filename, :content, :post_generate_message
6
- end
7
-
8
4
  class << self
9
5
  attr_accessor :generators
10
6
  end
7
+
11
8
  Sicily.generators = []
12
9
 
10
+ class Generator
11
+ attr_accessor :filename, :content, :post_generate_message, :load_on_start
12
+ end
13
+
13
14
  def self.register_generator(&block)
14
15
  return unless block_given?
15
16
 
@@ -17,4 +18,14 @@ module Sicily
17
18
  block.call generator
18
19
  Sicily.generators << generator
19
20
  end
21
+
22
+ def self.load_generators
23
+ Dir["#{File.dirname(__FILE__)}/../../generator/*.rb"].each do |file|
24
+ file = File.expand_path file
25
+ Sicily.logger.debug "Load generator : #{file}"
26
+ require file
27
+ end
28
+ end
29
+
30
+ load_generators
20
31
  end
@@ -8,8 +8,8 @@ require 'sicily/error/monitor_error'
8
8
  module Sicily
9
9
  class Monitor
10
10
  def on(path, &user_rule_block)
11
- consume_all(path, &user_rule_block)
12
11
  attach_monitor(path, &user_rule_block)
12
+ consume_all(path, &user_rule_block)
13
13
  end
14
14
 
15
15
  private
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sicily
4
+ class MonitorWrapper
5
+ @monitored_paths = []
6
+
7
+ def self.on(path, &user_rule_block)
8
+ if can_monitor?(@monitored_paths, path)
9
+ store_path_and_start_monitor(path, &user_rule_block)
10
+ else
11
+ Sicily.logger.error "Monitor Failed. Path duplicated : #{path}"
12
+ end
13
+ end
14
+
15
+ def self.store_path_and_start_monitor(path, &user_rule_block)
16
+ store_monitored_path(path)
17
+ start_monitor!(path, &user_rule_block)
18
+ end
19
+
20
+ def self.start_monitor!(path, &user_rule_block)
21
+ Monitor.new.on(path, &user_rule_block)
22
+ rescue MonitorError => e
23
+ Sicily.logger.error e.inspect
24
+ end
25
+
26
+ def self.store_monitored_path(path)
27
+ @monitored_paths << File.expand_path(path)
28
+ end
29
+
30
+ def self.can_monitor?(prev_paths, new_path)
31
+ prev_paths.each do |prev_path|
32
+ return false if somehow_related?(prev_path, new_path)
33
+ end
34
+
35
+ true
36
+ end
37
+
38
+ def self.somehow_related?(path1, path2)
39
+ parent_child_relationship = Util::FileUtil.related?(path1, path2)
40
+ child_parent_relationship = Util::FileUtil.related?(path2, path1)
41
+
42
+ parent_child_relationship || child_parent_relationship
43
+ end
44
+ end
45
+ end
@@ -37,12 +37,14 @@ module Sicily
37
37
  def mv(path_dest)
38
38
  info "mv to #{path_dest}"
39
39
  path_dest = Base.prepare_dest_path(@path, path_dest)
40
+ info " #{path_dest}"
40
41
  FileUtils.mv @path, path_dest
41
42
  end
42
43
 
43
44
  def cp(path_dest)
44
45
  info "cp to #{path_dest}"
45
46
  path_dest = Base.prepare_dest_path(@path, path_dest)
47
+ info " #{path_dest}"
46
48
  FileUtils.cp @path, path_dest
47
49
  end
48
50
 
@@ -37,4 +37,8 @@ module Sicily
37
37
  str.split('_').map(&:capitalize).join
38
38
  end
39
39
  end
40
+
41
+ def self.load_all_tasks
42
+ TaskLoader.new.load_all_tasks
43
+ end
40
44
  end
@@ -19,12 +19,18 @@ module Sicily
19
19
  end
20
20
 
21
21
  def self.extract_time(path)
22
- if %w[.jpg .jpeg].include? File.extname(path).downcase
23
- time_from_exif = ExifUtil.extract_time_from_jpeg(path)
24
- return time_from_exif unless time_from_exif.nil?
25
- end
22
+ exif_time = jpeg?(path) && ExifUtil.extract_time_from_jpeg(path)
23
+ exif_time || extract_time_from_file_stat(path)
24
+ end
25
+
26
+ def self.jpeg?(path)
27
+ %w[.jpg .jpeg].include? File.extname(path).downcase
28
+ end
26
29
 
27
- File.ctime(path)
30
+ def self.extract_time_from_file_stat(path)
31
+ File.birthtime(path)
32
+ rescue NotImplementedError
33
+ File.mtime(path)
28
34
  end
29
35
  end
30
36
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sicily
4
- VERSION = '0.1.6'
4
+ VERSION = '0.1.7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sicily
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Eunjae Lee
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-27 00:00:00.000000000 Z
11
+ date: 2018-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -187,6 +187,7 @@ files:
187
187
  - bin/console
188
188
  - bin/setup
189
189
  - exe/sicily
190
+ - generator/application.rb
190
191
  - generator/god.rb
191
192
  - generator/google_photo.rb
192
193
  - generator/rules.rb
@@ -199,6 +200,7 @@ files:
199
200
  - lib/sicily/generator.rb
200
201
  - lib/sicily/logger.rb
201
202
  - lib/sicily/monitor.rb
203
+ - lib/sicily/monitor_wrapper.rb
202
204
  - lib/sicily/task/dummy_task.rb
203
205
  - lib/sicily/task/file_task.rb
204
206
  - lib/sicily/task/google_photo_task.rb