scene-toolkit 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.3
@@ -56,8 +56,10 @@ class SceneToolkit::CLI
56
56
  invalid_releases += 1
57
57
  puts release.name.foreground(:red)
58
58
  puts release.path
59
- release.errors.each do |error|
60
- puts " - #{error}"
59
+ release.errors.each do |validation, errors|
60
+ errors.each do |error|
61
+ puts " - #{error}"
62
+ end
61
63
  end
62
64
 
63
65
  puts
@@ -97,7 +99,6 @@ class SceneToolkit::CLI
97
99
  raise ArgumentError("#{source} is not a directory") unless File.directory?(source)
98
100
 
99
101
  releases = []
100
- uids = {}
101
102
 
102
103
  Dir.glob(File.join(source, "**", "*.mp3")).each do |file|
103
104
  release_path = File.expand_path(File.dirname(file))
@@ -106,12 +107,6 @@ class SceneToolkit::CLI
106
107
  release = SceneToolkit::Release.new(release_path, @cache)
107
108
  releases << release_path
108
109
  yield(release)
109
-
110
- if uids.has_key?(release.uid)
111
- release.errors << "Duplicate release of #{uids[release.uid]}"
112
- else
113
- uids[release.uid] = release.path
114
- end
115
110
  end
116
111
  end
117
112
  end
@@ -4,46 +4,46 @@ require 'zlib'
4
4
  class SceneToolkit::Release
5
5
  REQUIRED_FILES = [:sfv, :nfo, :m3u]
6
6
  VALIDATIONS = [:name, :required_files, :checksum]
7
-
7
+
8
8
  attr_accessor :name, :path, :uid
9
9
  attr_accessor :errors
10
10
 
11
- class << self
12
- def has_files_with_extension(*exts)
13
- exts.each do |ext|
14
- define_method "#{ext}_files" do
15
- files.select { |f| File.extname(f).downcase.eql?(".#{ext}") }
16
- end
17
- end
18
- end
19
- end
20
- has_files_with_extension :mp3, :sfv, :nfo, :m3u
21
-
22
11
  def initialize(path, cache)
23
12
  @cache = cache
24
13
  @path = path
25
14
  @name = File.basename(path)
26
15
  @uid = Digest::MD5.hexdigest(@name.downcase.gsub(/[^A-Z0-9]/i, ' ').gsub(/\s+/, ' '))
27
16
  @errors = {}
28
- VALIDATIONS.each do |validation|
29
- @errors[validation] = []
30
- end
31
17
  end
32
18
 
33
19
  def valid?(validations = VALIDATIONS)
20
+ @errors = {}
21
+
34
22
  if @cache.releases.modified?(self)
35
- @errors = []
23
+ # if release was modified, invalidate all cached validations
24
+ @cache.releases.flush(self)
36
25
  validations.each do |validation|
37
26
  send("valid_#{validation}?")
38
27
  end
39
- @cache.releases.store(self)
40
28
  else
41
- @errors = @cache.releases.errors(self, validations)
29
+ validations.each do |validation|
30
+ validation_errors = @cache.releases.errors(self, [validation])
31
+ if validation_errors.nil?
32
+ # execute validation if release was catched but this particular validation was not executed
33
+ send("valid_#{validation}?")
34
+ else
35
+ @errors.merge!(validation_errors)
36
+ end
37
+ end
42
38
  end
43
- @errors.none?
39
+
40
+ @cache.releases.store(self)
41
+
42
+ @errors.sum { |validation, errors| errors.size }.zero?
44
43
  end
45
44
 
46
45
  def valid_required_files?
46
+ @errors[:required_files] = []
47
47
  REQUIRED_FILES.each do |ext|
48
48
  file_count = send("#{ext}_files")
49
49
  @errors[:required_files] << "No #{ext} found." if file_count.none?
@@ -51,11 +51,9 @@ class SceneToolkit::Release
51
51
  end
52
52
  end
53
53
 
54
- def files
55
- Dir.glob(File.join(@path, "*"))
56
- end
57
-
58
54
  def valid_checksum?
55
+ @errors[:checksum] = []
56
+
59
57
  sfv_file = sfv_files.first
60
58
 
61
59
  return if sfv_file.nil?
@@ -88,9 +86,27 @@ class SceneToolkit::Release
88
86
  end
89
87
 
90
88
  def valid_name?
89
+ @errors[:name] = []
91
90
  @errors[:name] << "Release name is not a valid scene release name" unless @name =~ /^([A-Z0-9\-_.()&]+)\-(\d{4}|\d{3}x|\d{2}xx)\-([A-Z0-9_]+)$/i
92
91
  @errors[:name] << "Release name is lowercased" if @name.eql?(@name.downcase)
93
92
  @errors[:name] << "Release name is uppercased" if @name.eql?(@name.upcase)
94
93
  end
94
+
95
+ def files
96
+ Dir.glob(File.join(@path, "*"))
97
+ end
98
+
99
+ class << self
100
+ protected
101
+
102
+ def has_files_with_extension(*exts)
103
+ exts.each do |ext|
104
+ define_method "#{ext}_files" do
105
+ files.select { |f| File.extname(f).downcase.eql?(".#{ext}") }
106
+ end
107
+ end
108
+ end
109
+ end
110
+ has_files_with_extension :mp3, :sfv, :nfo, :m3u
95
111
  end
96
112
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scene-toolkit
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - "V\xC3\xADctor Mart\xC3\xADnez"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-18 00:00:00 +02:00
18
+ date: 2010-08-19 00:00:00 +02:00
19
19
  default_executable: scene-toolkit
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency