classifile 0.1.0 → 0.2.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.
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