dropcaster 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -146
- data/.ruby-version +1 -1
- data/.travis.yml +9 -3
- data/Gemfile.lock +130 -133
- data/README.markdown +16 -0
- data/Rakefile +1 -1
- data/bin/dropcaster +10 -8
- data/bin/lstags +10 -8
- data/dropcaster.gemspec +1 -1
- data/lib/dropcaster/channel.rb +4 -4
- data/lib/dropcaster/item.rb +2 -2
- data/lib/dropcaster/version.rb +1 -1
- data/templates/channel.html.erb +3 -6
- data/templates/channel.rss.erb +5 -5
- data/test/bin/vagrant-status +1 -1
- data/test/fixtures/test_template.json.erb +3 -4
- data/test/unit/test_itunes_item.rb +1 -4
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00f46163bcbe9e5dab46ecb8d13f1ffd0d98ad34515c0f6b69ee7bb7717cf151
|
4
|
+
data.tar.gz: d110b3a0c424ad88bc4e20811f45edb03dbe13f8f12bfb1da2017f5652a39a96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2557829bc673bfe5ee58a6135534b5381d9909679414015e6ac56d999fbd203066930f05f2903c01aa98bedfd036f79c49cfe41187eecf31000f93a411e4123a
|
7
|
+
data.tar.gz: 61b47cec9dbcca537c56ed1c78c85b230d0b628a8e01c65b098d61370a82651b1cc5eca208eb9de7bde53faa14fae24cbb91379807e15ca56742a2bf52d8f68e
|
data/.rubocop.yml
CHANGED
@@ -24,151 +24,9 @@ Naming/FileName:
|
|
24
24
|
|
25
25
|
Metrics/BlockLength:
|
26
26
|
Exclude:
|
27
|
-
-
|
27
|
+
- test/**/*
|
28
28
|
|
29
|
-
|
30
|
-
Enabled: false
|
31
|
-
|
32
|
-
Lint/HandleExceptions:
|
33
|
-
Enabled: true
|
34
|
-
|
35
|
-
Lint/UnusedBlockArgument:
|
36
|
-
Enabled: false
|
37
|
-
|
38
|
-
Lint/UnusedMethodArgument:
|
39
|
-
Enabled: false
|
40
|
-
|
41
|
-
Metrics/AbcSize:
|
42
|
-
Enabled: false
|
43
|
-
|
44
|
-
Metrics/ClassLength:
|
45
|
-
Enabled: false
|
46
|
-
|
47
|
-
Metrics/CyclomaticComplexity:
|
48
|
-
Max: 12
|
49
|
-
|
50
|
-
Metrics/LineLength:
|
29
|
+
Layout/LineLength:
|
51
30
|
Max: 180
|
52
|
-
|
53
|
-
|
54
|
-
Max: 60
|
55
|
-
|
56
|
-
Metrics/ModuleLength:
|
57
|
-
Enabled: false
|
58
|
-
|
59
|
-
Metrics/ParameterLists:
|
60
|
-
Enabled: false
|
61
|
-
|
62
|
-
Metrics/PerceivedComplexity:
|
63
|
-
Enabled: false
|
64
|
-
|
65
|
-
Performance/Casecmp:
|
66
|
-
Enabled: false
|
67
|
-
|
68
|
-
Performance/Sample:
|
69
|
-
Enabled: false
|
70
|
-
|
71
|
-
Style/Alias:
|
72
|
-
EnforcedStyle: prefer_alias_method
|
73
|
-
|
74
|
-
Layout/AlignParameters:
|
75
|
-
Enabled: false
|
76
|
-
|
77
|
-
Style/BlockDelimiters:
|
78
|
-
Enabled: false
|
79
|
-
|
80
|
-
Style/BracesAroundHashParameters:
|
81
|
-
Enabled: false
|
82
|
-
|
83
|
-
Style/ClassAndModuleChildren:
|
84
|
-
Enabled: false
|
85
|
-
|
86
|
-
Layout/ClosingParenthesisIndentation:
|
87
|
-
Enabled: false
|
88
|
-
|
89
|
-
Style/Documentation:
|
90
|
-
Enabled: false
|
91
|
-
|
92
|
-
Layout/DotPosition:
|
93
|
-
EnforcedStyle: trailing
|
94
|
-
|
95
|
-
Style/DoubleNegation:
|
96
|
-
Enabled: false
|
97
|
-
|
98
|
-
Style/EachWithObject:
|
99
|
-
Enabled: false
|
100
|
-
|
101
|
-
Style/FormatString:
|
102
|
-
EnforcedStyle: sprintf
|
103
|
-
|
104
|
-
Style/GuardClause:
|
105
|
-
Enabled: false
|
106
|
-
|
107
|
-
Style/IfUnlessModifier:
|
108
|
-
Enabled: false
|
109
|
-
|
110
|
-
Layout/IndentArray:
|
111
|
-
EnforcedStyle: consistent
|
112
|
-
|
113
|
-
Layout/IndentHash:
|
114
|
-
Enabled: false
|
115
|
-
|
116
|
-
Style/Lambda:
|
117
|
-
Enabled: false
|
118
|
-
|
119
|
-
Style/MultilineBlockChain:
|
120
|
-
Enabled: false
|
121
|
-
|
122
|
-
Layout/MultilineBlockLayout:
|
123
|
-
Enabled: false
|
124
|
-
|
125
|
-
Layout/MultilineOperationIndentation:
|
126
|
-
Enabled: false
|
127
|
-
|
128
|
-
Style/NegatedIf:
|
129
|
-
Enabled: false
|
130
|
-
|
131
|
-
Style/Next:
|
132
|
-
Enabled: false
|
133
|
-
|
134
|
-
Style/NumericLiterals:
|
135
|
-
Enabled: false
|
136
|
-
|
137
|
-
Naming/PredicateName:
|
138
|
-
Enabled: false
|
139
|
-
|
140
|
-
Style/RaiseArgs:
|
141
|
-
EnforcedStyle: compact
|
142
|
-
|
143
|
-
Style/RedundantSelf:
|
144
|
-
Enabled: false
|
145
|
-
|
146
|
-
Style/RescueModifier:
|
147
|
-
Enabled: false
|
148
|
-
|
149
|
-
Style/SignalException:
|
150
|
-
Enabled: false
|
151
|
-
|
152
|
-
Style/SingleLineBlockParams:
|
153
|
-
Enabled: false
|
154
|
-
|
155
|
-
Layout/SpaceAroundEqualsInParameterDefault:
|
156
|
-
EnforcedStyle: no_space
|
157
|
-
|
158
|
-
Style/StructInheritance:
|
159
|
-
Enabled: false
|
160
|
-
|
161
|
-
Style/TrailingCommaInArguments:
|
162
|
-
Enabled: false
|
163
|
-
|
164
|
-
Style/TrailingUnderscoreVariable:
|
165
|
-
Enabled: false
|
166
|
-
|
167
|
-
Style/TrivialAccessors:
|
168
|
-
Enabled: false
|
169
|
-
|
170
|
-
Style/WordArray:
|
171
|
-
Enabled: false
|
172
|
-
|
173
|
-
Style/ZeroLengthPredicate:
|
174
|
-
Enabled: false
|
31
|
+
Exclude:
|
32
|
+
- test/**/*
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.5
|
1
|
+
2.6.5
|
data/.travis.yml
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
3
|
rvm:
|
4
|
-
- 2.5.
|
4
|
+
- 2.5.7
|
5
|
+
- 2.6.5
|
6
|
+
- 2.7.0-rc2
|
7
|
+
|
8
|
+
matrix:
|
9
|
+
allow_failures:
|
10
|
+
- rvm: 2.7.0-rc2
|
5
11
|
|
6
12
|
before_install:
|
7
|
-
|
8
|
-
|
13
|
+
# https://github.com/travis-ci/travis-ci/issues/8978#issuecomment-377680126
|
14
|
+
- gem install bundler
|
9
15
|
|
10
16
|
script:
|
11
17
|
- bundle exec rake
|
data/Gemfile.lock
CHANGED
@@ -1,73 +1,73 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dropcaster (1.
|
4
|
+
dropcaster (1.1.0)
|
5
5
|
activesupport
|
6
6
|
bundler
|
7
|
-
nokogiri
|
7
|
+
nokogiri
|
8
8
|
null-logger
|
9
9
|
ruby-mp3info
|
10
10
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
activesupport (
|
15
|
-
|
14
|
+
activesupport (6.0.2.1)
|
15
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
|
+
i18n (>= 0.7, < 2)
|
16
17
|
minitest (~> 5.1)
|
17
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
18
18
|
tzinfo (~> 1.1)
|
19
|
-
|
20
|
-
|
19
|
+
zeitwerk (~> 2.2)
|
20
|
+
addressable (2.7.0)
|
21
|
+
public_suffix (>= 2.0.2, < 5.0)
|
21
22
|
ast (2.4.0)
|
22
|
-
byebug (
|
23
|
+
byebug (11.0.1)
|
23
24
|
coderay (1.1.2)
|
24
25
|
coffee-script (2.4.1)
|
25
26
|
coffee-script-source
|
26
27
|
execjs
|
27
28
|
coffee-script-source (1.11.1)
|
28
29
|
colorator (1.1.0)
|
29
|
-
commonmarker (0.17.
|
30
|
+
commonmarker (0.17.13)
|
30
31
|
ruby-enum (~> 0.5)
|
31
|
-
concurrent-ruby (1.
|
32
|
-
dnsruby (1.61.
|
32
|
+
concurrent-ruby (1.1.5)
|
33
|
+
dnsruby (1.61.3)
|
33
34
|
addressable (~> 2.5)
|
34
35
|
em-websocket (0.5.1)
|
35
36
|
eventmachine (>= 0.12.9)
|
36
37
|
http_parser.rb (~> 0.6.0)
|
37
|
-
ethon (0.
|
38
|
+
ethon (0.12.0)
|
38
39
|
ffi (>= 1.3.0)
|
39
40
|
eventmachine (1.2.7)
|
40
41
|
eventmachine (1.2.7-x86-mingw32)
|
41
42
|
execjs (2.7.0)
|
42
|
-
faraday (0.
|
43
|
+
faraday (0.17.1)
|
43
44
|
multipart-post (>= 1.2, < 3)
|
44
|
-
ffi (1.
|
45
|
-
ffi (1.
|
45
|
+
ffi (1.11.3)
|
46
|
+
ffi (1.11.3-x86-mingw32)
|
46
47
|
formatador (0.2.5)
|
47
48
|
forwardable-extended (2.6.0)
|
48
|
-
gemoji (3.0.
|
49
|
-
github-pages (
|
50
|
-
|
51
|
-
|
52
|
-
jekyll (=
|
53
|
-
jekyll-avatar (= 0.6.0)
|
49
|
+
gemoji (3.0.1)
|
50
|
+
github-pages (203)
|
51
|
+
github-pages-health-check (= 1.16.1)
|
52
|
+
jekyll (= 3.8.5)
|
53
|
+
jekyll-avatar (= 0.7.0)
|
54
54
|
jekyll-coffeescript (= 1.1.1)
|
55
|
-
jekyll-commonmark-ghpages (= 0.1.
|
55
|
+
jekyll-commonmark-ghpages (= 0.1.6)
|
56
56
|
jekyll-default-layout (= 0.1.4)
|
57
|
-
jekyll-feed (= 0.
|
57
|
+
jekyll-feed (= 0.13.0)
|
58
58
|
jekyll-gist (= 1.5.0)
|
59
|
-
jekyll-github-metadata (= 2.
|
60
|
-
jekyll-mentions (= 1.
|
61
|
-
jekyll-optional-front-matter (= 0.3.
|
59
|
+
jekyll-github-metadata (= 2.12.1)
|
60
|
+
jekyll-mentions (= 1.5.1)
|
61
|
+
jekyll-optional-front-matter (= 0.3.2)
|
62
62
|
jekyll-paginate (= 1.1.0)
|
63
|
-
jekyll-readme-index (= 0.
|
64
|
-
jekyll-redirect-from (= 0.
|
65
|
-
jekyll-relative-links (= 0.
|
66
|
-
jekyll-remote-theme (= 0.
|
63
|
+
jekyll-readme-index (= 0.3.0)
|
64
|
+
jekyll-redirect-from (= 0.15.0)
|
65
|
+
jekyll-relative-links (= 0.6.1)
|
66
|
+
jekyll-remote-theme (= 0.4.1)
|
67
67
|
jekyll-sass-converter (= 1.5.2)
|
68
|
-
jekyll-seo-tag (= 2.
|
69
|
-
jekyll-sitemap (= 1.
|
70
|
-
jekyll-swiss (= 0.
|
68
|
+
jekyll-seo-tag (= 2.6.1)
|
69
|
+
jekyll-sitemap (= 1.4.0)
|
70
|
+
jekyll-swiss (= 1.0.0)
|
71
71
|
jekyll-theme-architect (= 0.1.1)
|
72
72
|
jekyll-theme-cayman (= 0.1.1)
|
73
73
|
jekyll-theme-dinky (= 0.1.1)
|
@@ -77,27 +77,26 @@ GEM
|
|
77
77
|
jekyll-theme-midnight (= 0.1.1)
|
78
78
|
jekyll-theme-minimal (= 0.1.1)
|
79
79
|
jekyll-theme-modernist (= 0.1.1)
|
80
|
-
jekyll-theme-primer (= 0.5.
|
80
|
+
jekyll-theme-primer (= 0.5.4)
|
81
81
|
jekyll-theme-slate (= 0.1.1)
|
82
82
|
jekyll-theme-tactile (= 0.1.1)
|
83
83
|
jekyll-theme-time-machine (= 0.1.1)
|
84
|
-
jekyll-titles-from-headings (= 0.5.
|
85
|
-
jemoji (= 0.
|
86
|
-
kramdown (= 1.
|
87
|
-
liquid (= 4.0.
|
88
|
-
listen (= 3.1.5)
|
84
|
+
jekyll-titles-from-headings (= 0.5.3)
|
85
|
+
jemoji (= 0.11.1)
|
86
|
+
kramdown (= 1.17.0)
|
87
|
+
liquid (= 4.0.3)
|
89
88
|
mercenary (~> 0.3)
|
90
|
-
minima (= 2.5.
|
91
|
-
nokogiri (>= 1.
|
92
|
-
rouge (=
|
89
|
+
minima (= 2.5.1)
|
90
|
+
nokogiri (>= 1.10.4, < 2.0)
|
91
|
+
rouge (= 3.13.0)
|
93
92
|
terminal-table (~> 1.4)
|
94
|
-
github-pages-health-check (1.
|
93
|
+
github-pages-health-check (1.16.1)
|
95
94
|
addressable (~> 2.3)
|
96
95
|
dnsruby (~> 1.60)
|
97
96
|
octokit (~> 4.0)
|
98
|
-
public_suffix (~>
|
97
|
+
public_suffix (~> 3.0)
|
99
98
|
typhoeus (~> 1.3)
|
100
|
-
guard (2.
|
99
|
+
guard (2.16.1)
|
101
100
|
formatador (>= 0.2.4)
|
102
101
|
listen (>= 2.7, < 4.0)
|
103
102
|
lumberjack (>= 1.0.12, < 2.0)
|
@@ -106,22 +105,22 @@ GEM
|
|
106
105
|
pry (>= 0.9.12)
|
107
106
|
shellany (~> 0.0)
|
108
107
|
thor (>= 0.18.1)
|
109
|
-
guard-bundler (
|
110
|
-
bundler (
|
108
|
+
guard-bundler (3.0.0)
|
109
|
+
bundler (>= 2.1, < 3)
|
111
110
|
guard (~> 2.2)
|
112
111
|
guard-compat (~> 1.1)
|
113
112
|
guard-compat (1.2.1)
|
114
113
|
guard-minitest (2.4.6)
|
115
114
|
guard-compat (~> 1.2)
|
116
115
|
minitest (>= 3.0)
|
117
|
-
html-pipeline (2.
|
116
|
+
html-pipeline (2.12.3)
|
118
117
|
activesupport (>= 2)
|
119
118
|
nokogiri (>= 1.4)
|
120
119
|
http_parser.rb (0.6.0)
|
121
120
|
i18n (0.9.5)
|
122
121
|
concurrent-ruby (~> 1.0)
|
123
|
-
jaro_winkler (1.5.
|
124
|
-
jekyll (3.
|
122
|
+
jaro_winkler (1.5.4)
|
123
|
+
jekyll (3.8.5)
|
125
124
|
addressable (~> 2.4)
|
126
125
|
colorator (~> 1.0)
|
127
126
|
em-websocket (~> 0.5)
|
@@ -134,49 +133,50 @@ GEM
|
|
134
133
|
pathutil (~> 0.9)
|
135
134
|
rouge (>= 1.7, < 4)
|
136
135
|
safe_yaml (~> 1.0)
|
137
|
-
jekyll-avatar (0.
|
138
|
-
jekyll (
|
136
|
+
jekyll-avatar (0.7.0)
|
137
|
+
jekyll (>= 3.0, < 5.0)
|
139
138
|
jekyll-coffeescript (1.1.1)
|
140
139
|
coffee-script (~> 2.2)
|
141
140
|
coffee-script-source (~> 1.11.1)
|
142
|
-
jekyll-commonmark (1.
|
141
|
+
jekyll-commonmark (1.3.1)
|
143
142
|
commonmarker (~> 0.14)
|
144
|
-
jekyll (>= 3.
|
145
|
-
jekyll-commonmark-ghpages (0.1.
|
143
|
+
jekyll (>= 3.7, < 5.0)
|
144
|
+
jekyll-commonmark-ghpages (0.1.6)
|
146
145
|
commonmarker (~> 0.17.6)
|
147
|
-
jekyll-commonmark (~> 1)
|
148
|
-
rouge (
|
146
|
+
jekyll-commonmark (~> 1.2)
|
147
|
+
rouge (>= 2.0, < 4.0)
|
149
148
|
jekyll-default-layout (0.1.4)
|
150
149
|
jekyll (~> 3.0)
|
151
|
-
jekyll-feed (0.
|
152
|
-
jekyll (
|
150
|
+
jekyll-feed (0.13.0)
|
151
|
+
jekyll (>= 3.7, < 5.0)
|
153
152
|
jekyll-gist (1.5.0)
|
154
153
|
octokit (~> 4.2)
|
155
|
-
jekyll-github-metadata (2.
|
156
|
-
jekyll (~> 3.
|
154
|
+
jekyll-github-metadata (2.12.1)
|
155
|
+
jekyll (~> 3.4)
|
157
156
|
octokit (~> 4.0, != 4.4.0)
|
158
|
-
jekyll-mentions (1.
|
157
|
+
jekyll-mentions (1.5.1)
|
159
158
|
html-pipeline (~> 2.3)
|
160
|
-
jekyll (
|
161
|
-
jekyll-optional-front-matter (0.3.
|
162
|
-
jekyll (
|
159
|
+
jekyll (>= 3.7, < 5.0)
|
160
|
+
jekyll-optional-front-matter (0.3.2)
|
161
|
+
jekyll (>= 3.0, < 5.0)
|
163
162
|
jekyll-paginate (1.1.0)
|
164
|
-
jekyll-readme-index (0.
|
165
|
-
jekyll (
|
166
|
-
jekyll-redirect-from (0.
|
167
|
-
jekyll (
|
168
|
-
jekyll-relative-links (0.
|
169
|
-
jekyll (
|
170
|
-
jekyll-remote-theme (0.
|
171
|
-
|
172
|
-
|
163
|
+
jekyll-readme-index (0.3.0)
|
164
|
+
jekyll (>= 3.0, < 5.0)
|
165
|
+
jekyll-redirect-from (0.15.0)
|
166
|
+
jekyll (>= 3.3, < 5.0)
|
167
|
+
jekyll-relative-links (0.6.1)
|
168
|
+
jekyll (>= 3.3, < 5.0)
|
169
|
+
jekyll-remote-theme (0.4.1)
|
170
|
+
addressable (~> 2.0)
|
171
|
+
jekyll (>= 3.5, < 5.0)
|
172
|
+
rubyzip (>= 1.3.0)
|
173
173
|
jekyll-sass-converter (1.5.2)
|
174
174
|
sass (~> 3.4)
|
175
|
-
jekyll-seo-tag (2.
|
176
|
-
jekyll (
|
177
|
-
jekyll-sitemap (1.
|
178
|
-
jekyll (
|
179
|
-
jekyll-swiss (0.
|
175
|
+
jekyll-seo-tag (2.6.1)
|
176
|
+
jekyll (>= 3.3, < 5.0)
|
177
|
+
jekyll-sitemap (1.4.0)
|
178
|
+
jekyll (>= 3.7, < 5.0)
|
179
|
+
jekyll-swiss (1.0.0)
|
180
180
|
jekyll-theme-architect (0.1.1)
|
181
181
|
jekyll (~> 3.5)
|
182
182
|
jekyll-seo-tag (~> 2.0)
|
@@ -204,8 +204,8 @@ GEM
|
|
204
204
|
jekyll-theme-modernist (0.1.1)
|
205
205
|
jekyll (~> 3.5)
|
206
206
|
jekyll-seo-tag (~> 2.0)
|
207
|
-
jekyll-theme-primer (0.5.
|
208
|
-
jekyll (
|
207
|
+
jekyll-theme-primer (0.5.4)
|
208
|
+
jekyll (> 3.5, < 5.0)
|
209
209
|
jekyll-github-metadata (~> 2.9)
|
210
210
|
jekyll-seo-tag (~> 2.0)
|
211
211
|
jekyll-theme-slate (0.1.1)
|
@@ -217,96 +217,93 @@ GEM
|
|
217
217
|
jekyll-theme-time-machine (0.1.1)
|
218
218
|
jekyll (~> 3.5)
|
219
219
|
jekyll-seo-tag (~> 2.0)
|
220
|
-
jekyll-titles-from-headings (0.5.
|
221
|
-
jekyll (
|
222
|
-
jekyll-watch (2.
|
220
|
+
jekyll-titles-from-headings (0.5.3)
|
221
|
+
jekyll (>= 3.3, < 5.0)
|
222
|
+
jekyll-watch (2.2.1)
|
223
223
|
listen (~> 3.0)
|
224
|
-
jemoji (0.
|
224
|
+
jemoji (0.11.1)
|
225
225
|
gemoji (~> 3.0)
|
226
226
|
html-pipeline (~> 2.2)
|
227
|
-
jekyll (
|
228
|
-
kramdown (1.
|
227
|
+
jekyll (>= 3.0, < 5.0)
|
228
|
+
kramdown (1.17.0)
|
229
229
|
libnotify (0.9.4)
|
230
230
|
ffi (>= 1.0.11)
|
231
231
|
libxml-ruby (3.1.0)
|
232
|
-
liquid (4.0.
|
233
|
-
listen (3.1
|
234
|
-
rb-fsevent (~> 0.
|
235
|
-
rb-inotify (~> 0.9, >= 0.9.
|
236
|
-
ruby_dep (~> 1.2)
|
232
|
+
liquid (4.0.3)
|
233
|
+
listen (3.2.1)
|
234
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
235
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
237
236
|
lumberjack (1.0.13)
|
238
237
|
mercenary (0.3.6)
|
239
|
-
method_source (0.9.
|
240
|
-
mini_portile2 (2.
|
241
|
-
minima (2.5.
|
242
|
-
jekyll (
|
238
|
+
method_source (0.9.2)
|
239
|
+
mini_portile2 (2.4.0)
|
240
|
+
minima (2.5.1)
|
241
|
+
jekyll (>= 3.5, < 5.0)
|
243
242
|
jekyll-feed (~> 0.9)
|
244
243
|
jekyll-seo-tag (~> 2.1)
|
245
|
-
minitest (5.
|
246
|
-
multipart-post (2.
|
244
|
+
minitest (5.13.0)
|
245
|
+
multipart-post (2.1.1)
|
247
246
|
nenv (0.3.0)
|
248
|
-
nokogiri (1.
|
249
|
-
mini_portile2 (~> 2.
|
250
|
-
nokogiri (1.
|
251
|
-
mini_portile2 (~> 2.
|
252
|
-
notiffany (0.1.
|
247
|
+
nokogiri (1.10.7)
|
248
|
+
mini_portile2 (~> 2.4.0)
|
249
|
+
nokogiri (1.10.7-x86-mingw32)
|
250
|
+
mini_portile2 (~> 2.4.0)
|
251
|
+
notiffany (0.1.3)
|
253
252
|
nenv (~> 0.1)
|
254
253
|
shellany (~> 0.0)
|
255
254
|
null-logger (0.1.5)
|
256
|
-
octokit (4.
|
255
|
+
octokit (4.14.0)
|
257
256
|
sawyer (~> 0.8.0, >= 0.5.3)
|
258
|
-
parallel (1.
|
259
|
-
parser (2.5.
|
257
|
+
parallel (1.19.1)
|
258
|
+
parser (2.6.5.0)
|
260
259
|
ast (~> 2.4.0)
|
261
|
-
pathutil (0.16.
|
260
|
+
pathutil (0.16.2)
|
262
261
|
forwardable-extended (~> 2.6)
|
263
|
-
|
264
|
-
pry (0.11.3)
|
262
|
+
pry (0.12.2)
|
265
263
|
coderay (~> 1.1.0)
|
266
264
|
method_source (~> 0.9.0)
|
267
|
-
pry-byebug (3.
|
268
|
-
byebug (~>
|
265
|
+
pry-byebug (3.7.0)
|
266
|
+
byebug (~> 11.0)
|
269
267
|
pry (~> 0.10)
|
270
|
-
public_suffix (
|
268
|
+
public_suffix (3.1.1)
|
271
269
|
rainbow (3.0.0)
|
272
|
-
rake (
|
270
|
+
rake (13.0.1)
|
273
271
|
rb-fsevent (0.10.3)
|
274
|
-
rb-inotify (0.
|
275
|
-
ffi (
|
276
|
-
rouge (
|
277
|
-
rubocop (0.
|
272
|
+
rb-inotify (0.10.1)
|
273
|
+
ffi (~> 1.0)
|
274
|
+
rouge (3.13.0)
|
275
|
+
rubocop (0.78.0)
|
278
276
|
jaro_winkler (~> 1.5.1)
|
279
277
|
parallel (~> 1.10)
|
280
|
-
parser (>= 2.
|
281
|
-
powerpack (~> 0.1)
|
278
|
+
parser (>= 2.6)
|
282
279
|
rainbow (>= 2.2.2, < 4.0)
|
283
280
|
ruby-progressbar (~> 1.7)
|
284
|
-
unicode-display_width (
|
281
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
285
282
|
ruby-enum (0.7.2)
|
286
283
|
i18n
|
287
284
|
ruby-mp3info (0.8.10)
|
288
|
-
ruby-progressbar (1.
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
sass (3.5.6)
|
285
|
+
ruby-progressbar (1.10.1)
|
286
|
+
rubyzip (2.0.0)
|
287
|
+
safe_yaml (1.0.5)
|
288
|
+
sass (3.7.4)
|
293
289
|
sass-listen (~> 4.0.0)
|
294
290
|
sass-listen (4.0.0)
|
295
291
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
296
292
|
rb-inotify (~> 0.9, >= 0.9.7)
|
297
|
-
sawyer (0.8.
|
298
|
-
addressable (>= 2.3.5
|
299
|
-
faraday (
|
293
|
+
sawyer (0.8.2)
|
294
|
+
addressable (>= 2.3.5)
|
295
|
+
faraday (> 0.8, < 2.0)
|
300
296
|
shellany (0.0.1)
|
301
297
|
terminal-table (1.8.0)
|
302
298
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
303
|
-
thor (0.
|
299
|
+
thor (1.0.1)
|
304
300
|
thread_safe (0.3.6)
|
305
|
-
typhoeus (1.3.
|
301
|
+
typhoeus (1.3.1)
|
306
302
|
ethon (>= 0.9.0)
|
307
|
-
tzinfo (1.2.
|
303
|
+
tzinfo (1.2.6)
|
308
304
|
thread_safe (~> 0.1)
|
309
|
-
unicode-display_width (1.
|
305
|
+
unicode-display_width (1.6.0)
|
306
|
+
zeitwerk (2.2.2)
|
310
307
|
|
311
308
|
PLATFORMS
|
312
309
|
ruby
|
@@ -329,4 +326,4 @@ DEPENDENCIES
|
|
329
326
|
rubocop
|
330
327
|
|
331
328
|
BUNDLED WITH
|
332
|
-
1.
|
329
|
+
2.1.2
|
data/README.markdown
CHANGED
@@ -24,6 +24,16 @@ To get started, use RubyGems to install Dropcaster:
|
|
24
24
|
|
25
25
|
Once installed, you can use the `dropcaster` command to generate a new podcast feed document.
|
26
26
|
|
27
|
+
## Troubleshooting
|
28
|
+
|
29
|
+
`libxml-ruby` is a frequent offender with installation problems. As usual, [Stack Overflow](https://stackoverflow.com/questions/38129330/libxml-ruby-failed-to-build-gem-native-extension#comment98572516_55162900) has the answer (at least for macOS with Homebrew):
|
30
|
+
|
31
|
+
```
|
32
|
+
$ gem install --no-document libxml-ruby -- --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config"
|
33
|
+
```
|
34
|
+
|
35
|
+
For Ruby 2.5, add `-v '3.1.0'`.
|
36
|
+
|
27
37
|
# Basic Usage
|
28
38
|
|
29
39
|
Once Dropcaster is installed, the only two other things you will need are a channel definition and one or more mp3 files to publish.
|
@@ -146,6 +156,12 @@ The generated XML file contains all elements required for iTunes. However, Dropc
|
|
146
156
|
|
147
157
|
The whole concept of Dropcaster works perfectly fine without Dropbox. Just run the Dropcaster script in a directory of mp3 files and upload the files as well as the generated index.rss to a web server. Leave the relative position of the index and mp3 files as is, otherwise the path to the mp3 files in index.rss will become invalid.
|
148
158
|
|
159
|
+
## Using Dropcaster With S3 or Digital Ocean Spaces
|
160
|
+
|
161
|
+
If you set up an S3 bucket or Digital Ocean Space (or any other s3 compatible static asset host), you can easily sync your local podcast directory using a command line tool like [s3cmd](https://github.com/s3tools/s3cmd).
|
162
|
+
|
163
|
+
After installing s3cmd, make sure you have the right credentials to write to your bucket/space. Add your mp3 files to your folder, run `dropcaster > index.rss` and then `s3cmd sync ./ s3://$your-bucket-name --acl public-read`. S3cmd will now upload any new or changed files to your bucket.
|
164
|
+
|
149
165
|
## Episode Identifier (uuid)
|
150
166
|
|
151
167
|
Dropcaster uses a rather simple approach to uniquely identify the episodes. It simply generates a SHA1 hash of the mp3 file. If it changes, for whatever reason (even if only a tag was changed), the episode will get a new UUID, and any podcatcher will fetch the episode again (which is what you want, in most cases).
|
data/Rakefile
CHANGED
@@ -26,7 +26,7 @@ namespace :web do
|
|
26
26
|
end
|
27
27
|
CLOBBER << 'website/vision.markdown'
|
28
28
|
|
29
|
-
file 'website/contributors.markdown' do
|
29
|
+
file 'website/contributors.markdown' do
|
30
30
|
require 'dropcaster/contributors'
|
31
31
|
File.write('website/contributors.markdown', Dropcaster.contributors)
|
32
32
|
end
|
data/bin/dropcaster
CHANGED
@@ -41,22 +41,24 @@ end
|
|
41
41
|
OptionParser.new do |opts|
|
42
42
|
opts.banner = help
|
43
43
|
|
44
|
-
opts.on('--verbose', 'Verbose mode - displays additional diagnostic information') do
|
44
|
+
opts.on('--verbose', 'Verbose mode - displays additional diagnostic information') do
|
45
45
|
logger.level = Logger::INFO
|
46
46
|
end
|
47
47
|
|
48
|
-
opts.on('--trace', 'Verbose mode - displays additional diagnostic information') do
|
48
|
+
opts.on('--trace', 'Verbose mode - displays additional diagnostic information') do
|
49
49
|
logger.level = Logger::DEBUG
|
50
50
|
end
|
51
51
|
|
52
52
|
opts.on('--channel FILE', 'Read the channel definition from FILE instead of channel.yml in the current directory.') do |file|
|
53
53
|
logger.info "Reading channel definition from #{file}"
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
54
|
+
begin
|
55
|
+
options = YAML.load_file(file).merge(options)
|
56
|
+
options[:auto_detect_channel_file] = false
|
57
|
+
rescue StandardError
|
58
|
+
logger.error "Could not load channel definition. #{$ERROR_INFO.message}"
|
59
|
+
logger.info $ERROR_INFO.backtrace
|
60
|
+
exit(1)
|
61
|
+
end
|
60
62
|
end
|
61
63
|
|
62
64
|
opts.on('--title STRING', "Use STRING as the channel's title. Overrides settings read from channel definition file.") do |title|
|
data/bin/lstags
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
unless ARGV.size == 1
|
5
|
-
|
5
|
+
warn "#{File.basename(__FILE__)}: Missing required parameter for the mp3 file to process"
|
6
6
|
exit(1)
|
7
7
|
end
|
8
8
|
|
@@ -16,12 +16,12 @@ begin
|
|
16
16
|
# rubocop:disable Lint/EmptyWhen
|
17
17
|
Mp3Info.open(file_name) do |mp3info|
|
18
18
|
puts 'ID3v1 tags:'
|
19
|
-
mp3info.tag.each_key
|
19
|
+
mp3info.tag.each_key do |key|
|
20
20
|
puts " #{key} => #{mp3info.tag.send(key)}"
|
21
|
-
|
21
|
+
end
|
22
22
|
puts
|
23
23
|
puts 'ID3v2 tags:'
|
24
|
-
mp3info.tag2.each_key
|
24
|
+
mp3info.tag2.each_key do |key|
|
25
25
|
case key
|
26
26
|
when 'PIC'
|
27
27
|
when 'APIC'
|
@@ -29,20 +29,22 @@ begin
|
|
29
29
|
when 'ULT'
|
30
30
|
print ' ULT => '
|
31
31
|
block_counter = 0
|
32
|
-
mp3info.tag2.ULT.bytes
|
33
|
-
|
32
|
+
mp3info.tag2.ULT.bytes do |b|
|
33
|
+
# rubocop:disable Style/FormatStringToken
|
34
|
+
print format('0x%02x ', b.to_i)
|
35
|
+
# rubocop:enable Style/FormatStringToken
|
34
36
|
print b > 31 ? " '#{b.chr}' " : ' ' * 5
|
35
37
|
if (block_counter += 1) > 7 # display in blocks of 8 bytes
|
36
38
|
puts
|
37
39
|
print ' ' * 9
|
38
40
|
block_counter = 0
|
39
41
|
end
|
40
|
-
|
42
|
+
end
|
41
43
|
puts
|
42
44
|
else
|
43
45
|
puts " #{key} => #{mp3info.tag2.send(key)}"
|
44
46
|
end
|
45
|
-
|
47
|
+
end
|
46
48
|
end
|
47
49
|
# rubocop:enable Metrics/BlockLength
|
48
50
|
# rubocop:enable Lint/EmptyWhen
|
data/dropcaster.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_dependency 'activesupport'
|
24
24
|
spec.add_dependency 'bundler'
|
25
|
-
spec.add_dependency 'nokogiri'
|
25
|
+
spec.add_dependency 'nokogiri'
|
26
26
|
spec.add_dependency 'null-logger'
|
27
27
|
spec.add_dependency 'ruby-mp3info'
|
28
28
|
|
data/lib/dropcaster/channel.rb
CHANGED
@@ -63,7 +63,7 @@ module Dropcaster
|
|
63
63
|
channel_template = @attributes[:channel_template] || File.join(File.dirname(__FILE__), '..', '..', 'templates', 'channel.rss.erb')
|
64
64
|
|
65
65
|
begin
|
66
|
-
@erb_template = ERB.new(IO.read(channel_template)
|
66
|
+
@erb_template = ERB.new(IO.read(channel_template))
|
67
67
|
rescue Errno::ENOENT => e
|
68
68
|
raise TemplateNotFoundError.new(e.message)
|
69
69
|
end
|
@@ -89,7 +89,7 @@ module Dropcaster
|
|
89
89
|
logger.debug("Adding new item from file #{src}")
|
90
90
|
|
91
91
|
# set author and image_url from channel if empty
|
92
|
-
if item.artist.blank?
|
92
|
+
if item.tag.artist.blank?
|
93
93
|
logger.info("#{src} has no artist, using the channel's author")
|
94
94
|
item.tag.artist = @attributes[:author]
|
95
95
|
end
|
@@ -145,7 +145,7 @@ module Dropcaster
|
|
145
145
|
# rubocop:disable Style/MethodMissing
|
146
146
|
def method_missing(meth, *args)
|
147
147
|
m = meth.id2name
|
148
|
-
if
|
148
|
+
if m =~ /=$/
|
149
149
|
@attributes[m.chop.to_sym] = (args.length < 2 ? args[0] : args)
|
150
150
|
else
|
151
151
|
@attributes[m.to_sym]
|
@@ -154,7 +154,7 @@ module Dropcaster
|
|
154
154
|
# rubocop:enable Style/MethodMissing
|
155
155
|
|
156
156
|
def respond_to_missing?(meth, *)
|
157
|
-
|
157
|
+
(meth.id2name =~ /=$/) || super
|
158
158
|
end
|
159
159
|
|
160
160
|
private
|
data/lib/dropcaster/item.rb
CHANGED
@@ -10,7 +10,7 @@ module Dropcaster
|
|
10
10
|
include Logging
|
11
11
|
|
12
12
|
attr_reader :file_path, :tag, :tag2, :duration, :file_size, :uuid, :pub_date, :lyrics
|
13
|
-
attr_accessor :
|
13
|
+
attr_accessor :image_url, :url, :keywords
|
14
14
|
|
15
15
|
def initialize(file_path, options=nil)
|
16
16
|
Mp3Info.open(file_path) { |mp3info|
|
@@ -27,7 +27,7 @@ module Dropcaster
|
|
27
27
|
@file_size = File.new(file_path).stat.size
|
28
28
|
@uuid = Digest::SHA1.hexdigest(File.read(file_path))
|
29
29
|
|
30
|
-
if tag2.
|
30
|
+
if tag2.TRD.blank?
|
31
31
|
logger.info("#{file_path} has no pub date set, using the file's modification time")
|
32
32
|
@pub_date = Time.parse(File.new(file_path).mtime.to_s)
|
33
33
|
else
|
data/lib/dropcaster/version.rb
CHANGED
data/templates/channel.html.erb
CHANGED
@@ -26,12 +26,9 @@
|
|
26
26
|
<h1>Episodes</h1>
|
27
27
|
<% items.each{|item| %>
|
28
28
|
<div class="item" id="<%= h(item.uuid) %>">
|
29
|
-
<h1><%= h(item.tag.title || item.
|
30
|
-
<% unless item.tag2.
|
31
|
-
<
|
32
|
-
<% end %>
|
33
|
-
<% unless item.tag2.TT3.blank? %>
|
34
|
-
<p><%= h(item.tag2.TT3) %></p>
|
29
|
+
<h1><%= h(item.tag.title || item.file_path.to_s) %></h1>
|
30
|
+
<% unless item.tag2.TT3.blank? && item.tag2.TIT3.blank? %>
|
31
|
+
<p><%= h(item.tag2.TT3 || item.tag2.TIT3) %></p>
|
35
32
|
<% end %>
|
36
33
|
<img src="<%= item.image_url %>"/>
|
37
34
|
<p>Download: <a href="<%= item.url %>">MP3</a> (<%= humanize_time(item.duration.to_i) %>, <%= humanize_size(item.file_size) %>)</p>
|
data/templates/channel.rss.erb
CHANGED
@@ -45,11 +45,11 @@
|
|
45
45
|
<% end %>
|
46
46
|
<% items.each{|item| %>
|
47
47
|
<item>
|
48
|
-
<title><%= h(item.tag.title || item.
|
49
|
-
<itunes:author><%= h(item.
|
50
|
-
<% unless item.tag2.TT3.blank? %>
|
51
|
-
<itunes:subtitle><%= h(truncate(item.tag2.TT3, 50)) %></itunes:subtitle>
|
52
|
-
<itunes:summary><%= h(item.tag2.TT3) %></itunes:summary>
|
48
|
+
<title><%= h(item.tag.title || item.file_path.to_s) %></title>
|
49
|
+
<itunes:author><%= h(item.tag.artist) %></itunes:author>
|
50
|
+
<% unless item.tag2.TT3.blank? && item.tag2.TIT3.blank? %>
|
51
|
+
<itunes:subtitle><%= h(truncate(item.tag2.TT3 || item.tag2.TIT3, 50)) %></itunes:subtitle>
|
52
|
+
<itunes:summary><%= h(item.tag2.TT3 || item.tag2.TIT3) %></itunes:summary>
|
53
53
|
<% end %>
|
54
54
|
<itunes:image href="<%= item.image_url %>"/>
|
55
55
|
<enclosure url="<%= item.url %>" length="<%= item.file_size %>" type="audio/mp3"/>
|
data/test/bin/vagrant-status
CHANGED
@@ -24,7 +24,7 @@ TYPES = [
|
|
24
24
|
'provider-name', # The provider name of the target machine. targeted
|
25
25
|
'state', # The state ID of the target machine. targeted
|
26
26
|
'state-human-long', # Human-readable description of the state of the machine. This is the long version, and may be a paragraph or longer. targeted
|
27
|
-
'state-human-short'
|
27
|
+
'state-human-short' # Human-readable description of the state of the machine. This is the short version, limited to at most a sentence. targeted
|
28
28
|
].freeze
|
29
29
|
|
30
30
|
module Vagrant
|
@@ -19,10 +19,9 @@
|
|
19
19
|
"categories": ["<% categories.join('\",\"') %>"],
|
20
20
|
"explicit" : "<%= explicit %>",
|
21
21
|
"items" : [<% items.collect{|item| %>{
|
22
|
-
"title" : "<%= item.tag.title
|
23
|
-
"author" : "<%= item.
|
24
|
-
"
|
25
|
-
"summary" : "<%= item.tag2.TT3 %>",
|
22
|
+
"title" : "<%= item.tag.title %>",
|
23
|
+
"author" : "<%= item.tag.artist %>",
|
24
|
+
"summary" : "<%= item.tag2.TT3 || item.tag2.TIT3 %>",
|
26
25
|
"image" : "<%= item.image_url %>",
|
27
26
|
"enclosure" : {
|
28
27
|
"url" : "<%= item.url %>",
|
@@ -40,14 +40,11 @@ class TestItunesItem < MiniTest::Test
|
|
40
40
|
assert_equal('iTunes Grouping', @item.tag2.TT1)
|
41
41
|
assert_equal('iTunes Description (Video Pane)', @item.tag2.TT3)
|
42
42
|
assert_equal('iTunes Composer', @item.tag2.TCM)
|
43
|
+
assert_equal('iTunes Comments (Info Pane)', @item.tag2.COM[1])
|
43
44
|
end
|
44
45
|
|
45
46
|
def test_lyrics
|
46
47
|
assert_equal(1, @item.lyrics.size)
|
47
48
|
assert_equal("iTunes Lyrics Line 1\niTunes Lyrics Line 2", @item.lyrics['eng'])
|
48
49
|
end
|
49
|
-
|
50
|
-
def test_tag2_comment
|
51
|
-
assert_equal('iTunes Comments (Info Pane)', @item.tag2.COM[1])
|
52
|
-
end
|
53
50
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dropcaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nicholas E. Rabenau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-12-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: null-logger
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -361,8 +361,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
361
361
|
- !ruby/object:Gem::Version
|
362
362
|
version: '0'
|
363
363
|
requirements: []
|
364
|
-
|
365
|
-
rubygems_version: 2.7.6
|
364
|
+
rubygems_version: 3.1.2
|
366
365
|
signing_key:
|
367
366
|
specification_version: 4
|
368
367
|
summary: Simple Podcast Publishing with Dropbox
|