sicily 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
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