classifile 0.1.0 → 0.2.0

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
  SHA256:
3
- metadata.gz: c188cda8d916ed432b19c5d81cf714248cdaebfb0ef07a94d0c4d7daf0f06387
4
- data.tar.gz: 0aa717603eb6e0c4db4414af494b9dd451c1a720d28d9bc72f4279e7b9adb639
3
+ metadata.gz: 0cce93eb73710a688753be83c9cb3d8e4b52b53b0d2331fc5e0a8089189da42b
4
+ data.tar.gz: aea6312d952170098e7137d37fe1ca71ee3e2431081f29f57bf1d10cb3bbf8f9
5
5
  SHA512:
6
- metadata.gz: 5f243782cc523bc87873eefbb8d9f76c1bbe46d3efc08ad25903853294af3635f31f6610d5370bb078e492e920bb7b6a77b7b9edbeeb820de36681fdb6bc4e56
7
- data.tar.gz: 9c7e972a8c91fdb3323a70ee150d8fdaec571eeefba044423ef98f1e1c3953e987aa1d247fc32a25f70bb643e50d54745a4b31da677b981183a8cd363810611c
6
+ metadata.gz: 8d1c5ef63757218780334243155a69fe0eda53b5f0c11a23c14ecb378265797c4481e65959b7581a1cbbc8e9288aea0ec4ad8046479052e9251540e854e3d9a7
7
+ data.tar.gz: e6f80dd7ef81e0922adcfa2e93d54d2d9ee03b1a00f98f9013b72254b6ccd0705b40bc525c78764757f99b26241fd3334ea97b053ace996b1cb272d315337553
data/.idea/classifile.iml CHANGED
@@ -13,22 +13,60 @@
13
13
  <orderEntry type="sourceFolder" forTests="false" />
14
14
  <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, ruby-3.0.2-p107) [gem]" level="application" />
15
15
  <orderEntry type="library" scope="PROVIDED" name="bundler (v2.2.27, ruby-3.0.2-p107) [gem]" level="application" />
16
- <orderEntry type="library" scope="PROVIDED" name="minitest (v5.14.2, ruby-3.0.2-p107) [gem]" level="application" />
16
+ <orderEntry type="library" scope="PROVIDED" name="docile (v1.4.0, ruby-3.0.2-p107) [gem]" level="application" />
17
+ <orderEntry type="library" scope="PROVIDED" name="minitest (v5.14.4, ruby-3.0.2-p107) [gem]" level="application" />
17
18
  <orderEntry type="library" scope="PROVIDED" name="parallel (v1.20.1, ruby-3.0.2-p107) [gem]" level="application" />
18
19
  <orderEntry type="library" scope="PROVIDED" name="parser (v3.0.2.0, ruby-3.0.2-p107) [gem]" level="application" />
19
20
  <orderEntry type="library" scope="PROVIDED" name="rainbow (v3.0.0, ruby-3.0.2-p107) [gem]" level="application" />
20
- <orderEntry type="library" scope="PROVIDED" name="rake (v13.0.3, ruby-3.0.2-p107) [gem]" level="application" />
21
+ <orderEntry type="library" scope="PROVIDED" name="rake (v13.0.6, ruby-3.0.2-p107) [gem]" level="application" />
21
22
  <orderEntry type="library" scope="PROVIDED" name="rbs (v1.0.4, ruby-3.0.2-p107) [gem]" level="application" />
22
23
  <orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.1.1, ruby-3.0.2-p107) [gem]" level="application" />
23
24
  <orderEntry type="library" scope="PROVIDED" name="rexml (v3.2.5, ruby-3.0.2-p107) [gem]" level="application" />
24
25
  <orderEntry type="library" scope="PROVIDED" name="rubocop (v1.20.0, ruby-3.0.2-p107) [gem]" level="application" />
25
26
  <orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.11.0, ruby-3.0.2-p107) [gem]" level="application" />
26
27
  <orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.11.0, ruby-3.0.2-p107) [gem]" level="application" />
28
+ <orderEntry type="library" scope="PROVIDED" name="simplecov (v0.21.2, ruby-3.0.2-p107) [gem]" level="application" />
29
+ <orderEntry type="library" scope="PROVIDED" name="simplecov-html (v0.12.3, ruby-3.0.2-p107) [gem]" level="application" />
30
+ <orderEntry type="library" scope="PROVIDED" name="simplecov_json_formatter (v0.1.3, ruby-3.0.2-p107) [gem]" level="application" />
27
31
  <orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v2.0.0, ruby-3.0.2-p107) [gem]" level="application" />
28
32
  </component>
29
33
  <component name="RakeTasksCache">
30
34
  <option name="myRootTask">
31
- <RakeTaskImpl id="rake" />
35
+ <RakeTaskImpl id="rake">
36
+ <subtasks>
37
+ <RakeTaskImpl description="Build classifile-0.1.0.gem into the pkg directory" fullCommand="build" id="build" />
38
+ <RakeTaskImpl id="build">
39
+ <subtasks>
40
+ <RakeTaskImpl description="Generate SHA512 checksum if classifile-0.1.0.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
41
+ </subtasks>
42
+ </RakeTaskImpl>
43
+ <RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
44
+ <RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
45
+ <RakeTaskImpl description="Build and install classifile-0.1.0.gem into system gems" fullCommand="install" id="install" />
46
+ <RakeTaskImpl id="install">
47
+ <subtasks>
48
+ <RakeTaskImpl description="Build and install classifile-0.1.0.gem into system gems without network access" fullCommand="install:local" id="local" />
49
+ </subtasks>
50
+ </RakeTaskImpl>
51
+ <RakeTaskImpl description="Create tag v0.1.0 and build and push classifile-0.1.0.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
52
+ <RakeTaskImpl description="Run RuboCop" fullCommand="rubocop" id="rubocop" />
53
+ <RakeTaskImpl id="rubocop">
54
+ <subtasks>
55
+ <RakeTaskImpl description="Auto-correct RuboCop offenses" fullCommand="rubocop:auto_correct" id="auto_correct" />
56
+ </subtasks>
57
+ </RakeTaskImpl>
58
+ <RakeTaskImpl description="Run tests" fullCommand="test" id="test" />
59
+ <RakeTaskImpl description="" fullCommand="default" id="default" />
60
+ <RakeTaskImpl description="" fullCommand="release" id="release" />
61
+ <RakeTaskImpl id="release">
62
+ <subtasks>
63
+ <RakeTaskImpl description="" fullCommand="release:guard_clean" id="guard_clean" />
64
+ <RakeTaskImpl description="" fullCommand="release:rubygem_push" id="rubygem_push" />
65
+ <RakeTaskImpl description="" fullCommand="release:source_control_push" id="source_control_push" />
66
+ </subtasks>
67
+ </RakeTaskImpl>
68
+ </subtasks>
69
+ </RakeTaskImpl>
32
70
  </option>
33
71
  </component>
34
72
  </module>
data/Gemfile CHANGED
@@ -10,3 +10,5 @@ gem "rake", "~> 13.0"
10
10
  gem "minitest", "~> 5.0"
11
11
 
12
12
  gem "rubocop", "~> 1.7"
13
+
14
+ gem "simplecov", "~> 0.21"
data/README.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # Classifile
2
2
 
3
+ [![status](https://github.com/kurehajime/classifile/actions/workflows/main_test.yml/badge.svg?branch=main)](https://github.com/kurehajime/classifile/actions/workflows/main_test.yml)
4
+
3
5
  Classifile is a tool for classifying files by Ruby DSL.
4
6
 
5
7
  ## Installation
8
+ Ruby 3.0.0 or higher is required.
6
9
 
7
10
  $ gem install classifile
8
11
 
@@ -68,6 +71,19 @@ temp/
68
71
    └─dancing_cat.mpg
69
72
  ```
70
73
 
74
+ ## Options
75
+
76
+ Command line options are here.
77
+
78
+ | Sort option | Long option | Description |
79
+ | ---- | ---- |---- |
80
+ | -d *PATH* | --dsl *PATH* |DSL path |
81
+ | -f *PATH* | --from *PATH* |Source directory path |
82
+ | -t *PATH* | --to *PATH* |Output directory path |
83
+ | -p | --preview |Preview Mode(don't move,don't copy) |
84
+ | -c | --copy |Copy Mode(don't move) |
85
+ | -h | --help |Show this help |
86
+
71
87
  ## Syntax
72
88
 
73
89
  ### Classifile rules.
@@ -108,6 +124,18 @@ end
108
124
 
109
125
  `dog.png -> /Dogs/dog.png`
110
126
 
127
+ #### del block
128
+
129
+ `del` block deletes the file.
130
+
131
+ ```ruby
132
+ del do
133
+ end_with? ".tmp"
134
+ end
135
+ ```
136
+
137
+ `temp.tmp will be deleted.`
138
+
111
139
  ### Check methods
112
140
 
113
141
  The check method checks if the file should be stored in that directory.
data/classifile.gemspec CHANGED
@@ -34,6 +34,7 @@ Gem::Specification.new do |spec|
34
34
 
35
35
  spec.add_development_dependency "rake", ">= 13.0"
36
36
  spec.add_development_dependency "rubocop", ">= 1.7"
37
+ spec.add_development_dependency "simplecov", ">= 0.21"
37
38
 
38
39
  # For more information and examples about making a new gem, checkout our
39
40
  # guide at: "https://github.com/kurehajime/classifile"
@@ -36,6 +36,7 @@ module Classifile
36
36
  end
37
37
 
38
38
  def respond_to_missing?(sym, *)
39
+ @assert = Asserter.new if @assert.nil?
39
40
  if sym.to_s.include?("assert")
40
41
  @assert.respond_to?(sym) ? true : super
41
42
  else
@@ -4,6 +4,6 @@
4
4
  # extension
5
5
  module Classifile
6
6
  FILE_TYPE_IMAGE = %w[.gif .jpg .jpeg .jpe .jfif .png .bmp .dib .rle .ico .ai .art .psd .tif .tiff .nsk .webp].freeze
7
- FILE_TYPE_SOUND = %w[.mp3 .wma .asf .3gp .3g2 .aac .ogg .oga .mov .m4a .alac .flac .wav].freeze
8
- FILE_TYPE_MOVIE = %w[.avi .flv .mpg .mpeg .mp4 .mkv .mov .qt .wmv .asf .m2ts .ts .m4a .webm .ogm].freeze
7
+ FILE_TYPE_SOUND = %w[.mp3 .wma .3gp .3g2 .aac .ogg .oga .m4a .alac .flac .wav].freeze
8
+ FILE_TYPE_MOVIE = %w[.avi .flv .mpg .mpeg .mp4 .mkv .mov .qt .wmv .asf .m2ts .ts .webm .ogm].freeze
9
9
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Classifile
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -9,17 +9,24 @@ module Classifile
9
9
  # However, it does not actually move the file,
10
10
  # but outputs the mv command as a string.
11
11
  def test(dsl_path, from_paths, to_path)
12
- classify(dsl_path, from_paths, to_path).each do |ft|
13
- puts "mv \"#{ft.from}\" \"#{ft.to}\" "
12
+ classify(dsl_path, from_paths, to_path).each do |result|
13
+ puts "mv \"#{result.from}\" \"#{result.to}\" " if result.is_a? MoveFile
14
+ puts "rm \"#{result.from}\" " if result.is_a? RemoveFile
14
15
  end
15
16
  end
16
17
 
17
18
  ##
18
19
  # Classify the files by DSL.
19
20
  def move(dsl_path, from_paths, to_path)
20
- classify(dsl_path, from_paths, to_path).each do |ft|
21
- FileTools.move(ft.from, ft.to)
22
- ft.after_save_procs.each(&:call)
21
+ classify(dsl_path, from_paths, to_path).each do |result|
22
+ if result.is_a? MoveFile
23
+ FileTools.move(result.from, result.to)
24
+ result.after_save_procs.each(&:call)
25
+ end
26
+ if result.is_a? RemoveFile
27
+ FileUtils.remove(result.from)
28
+ result.after_save_procs.each(&:call)
29
+ end
23
30
  end
24
31
  end
25
32
 
@@ -27,14 +34,17 @@ module Classifile
27
34
  # Classify the files by DSL.
28
35
  # However, the original file will remain.
29
36
  def copy(dsl_path, from_paths, to_path)
30
- classify(dsl_path, from_paths, to_path).each do |ft|
31
- FileTools.move(ft.from, ft.to, copy: true)
32
- ft.after_save_procs.each(&:call)
37
+ classify(dsl_path, from_paths, to_path).each do |result|
38
+ if result.is_a? MoveFile
39
+ FileTools.move(result.from, result.to, copy: true)
40
+ result.after_save_procs.each(&:call)
41
+ end
42
+ result.after_save_procs.each(&:call) if result.is_a? RemoveFile
33
43
  end
34
44
  end
35
45
 
36
46
  ##
37
- # Classify files by DSL and return an array of FromTo classes.
47
+ # Classify files by DSL and return an array of MoveFile classes.
38
48
  def classify(dsl_path, from_paths, to_path)
39
49
  arr = []
40
50
  dsl = FileTools.read_dsl(dsl_path)
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Classifile
4
+ ##
5
+ # Source and destination classes for file
6
+ class MoveFile < Result
7
+ attr_accessor :to
8
+
9
+ def initialize(from, to)
10
+ @to = to
11
+ super from
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Classifile
4
+ ##
5
+ # Source and destination classes for file
6
+ class RemoveFile < Result
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Classifile
4
+ ##
5
+ # Result for classify
6
+ class Result
7
+ attr_accessor :from, :after_save_procs
8
+
9
+ def initialize(from)
10
+ @from = from
11
+ @after_save_procs = []
12
+ end
13
+ end
14
+ end
@@ -33,21 +33,30 @@ module Classifile
33
33
  return if @gotcha
34
34
 
35
35
  child = make_child dir_name
36
- child.instance_exec(@file, &block)
36
+ child_run!(child, block) do
37
+ @gotcha = MoveFile.new(File.expand_path(@file.full_path),
38
+ File.expand_path(File.join(child.to_path, child.save_name)))
39
+ sets_after_save_proc(child)
40
+ end
41
+ end
37
42
 
38
- if child.gotcha
39
- @gotcha = child.gotcha
40
- else
41
- raise Failed if dir_name.empty? || child.empty?
43
+ def group(_group_name = "", &block)
44
+ return if @gotcha
42
45
 
43
- gotcha_child(child)
46
+ child = make_child ""
47
+ child_run!(child, block) do
48
+ # Ignored
44
49
  end
45
- rescue Failed
46
- # Ignored
47
50
  end
48
51
 
49
- def group(_group_name = "", &block)
50
- dir("", &block)
52
+ def del(&block)
53
+ return if @gotcha
54
+
55
+ child = make_child ""
56
+ child_run!(child, block) do
57
+ @gotcha = RemoveFile.new(File.expand_path(@file.full_path))
58
+ sets_after_save_proc(child)
59
+ end
51
60
  end
52
61
 
53
62
  def empty_dir!
@@ -60,9 +69,21 @@ module Classifile
60
69
 
61
70
  private
62
71
 
63
- def gotcha_child(child)
64
- @gotcha = FromTo.new(File.expand_path(@file.full_path),
65
- File.expand_path(File.join(child.to_path, child.save_name)))
72
+ def child_run!(child, proc)
73
+ child.instance_exec(@file, &proc)
74
+
75
+ if child.gotcha
76
+ @gotcha = child.gotcha
77
+ else
78
+ raise Failed if child.empty?
79
+
80
+ yield
81
+ end
82
+ rescue Failed
83
+ # Ignored
84
+ end
85
+
86
+ def sets_after_save_proc(child)
66
87
  child.after_save_syms.each do |sym|
67
88
  @gotcha.after_save_procs << child.method(sym)
68
89
  end
data/lib/classifile.rb CHANGED
@@ -7,7 +7,9 @@ require_relative "classifile/checker/name_checker"
7
7
  require_relative "classifile/checker/extension_checker"
8
8
  require_relative "classifile/checker/assert_checker"
9
9
  require_relative "classifile/io/file_tools"
10
- require_relative "classifile/from_to"
10
+ require_relative "classifile/result/result"
11
+ require_relative "classifile/result/remove_file"
12
+ require_relative "classifile/result/move_file"
11
13
  require_relative "classifile/classify"
12
14
  require_relative "classifile/target_file"
13
15
  require_relative "classifile/state"
data/sandbox/dsl/dsl.rb CHANGED
@@ -60,3 +60,7 @@ dir "Markdown" do |_file|
60
60
  puts "Please read #{file.to_path}"
61
61
  end
62
62
  end
63
+
64
+ del do
65
+ end_with? ".tmp"
66
+ end
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: classifile
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kurehajime
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-12 00:00:00.000000000 Z
11
+ date: 2021-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0.21'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0.21'
55
69
  description: classify file by ruby DSL.
56
70
  email:
57
71
  - xiidec@gmail.com
@@ -82,12 +96,15 @@ files:
82
96
  - lib/classifile/const/version.rb
83
97
  - lib/classifile/error/failed.rb
84
98
  - lib/classifile/execute.rb
85
- - lib/classifile/from_to.rb
86
99
  - lib/classifile/io/file_tools.rb
100
+ - lib/classifile/result/move_file.rb
101
+ - lib/classifile/result/remove_file.rb
102
+ - lib/classifile/result/result.rb
87
103
  - lib/classifile/state.rb
88
104
  - lib/classifile/target_file.rb
89
105
  - sandbox/dsl/dsl.rb
90
106
  - sandbox/from/hello.md
107
+ - sandbox/from/remove.tmp
91
108
  - sandbox/from/test.txt
92
109
  - sandbox/from/xyz.txt
93
110
  - sandbox/from/zzz.ini
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # Source and destination classes for file
5
- class FromTo
6
- attr_accessor :from, :to, :after_save_procs
7
-
8
- def initialize(from, to)
9
- @from = from
10
- @to = to
11
- @after_save_procs = []
12
- end
13
- end