dropcaster 0.0.5.rc1 → 0.0.5.rc3

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: f4e905930e1f1dc2001966418faab10c4c7a4ac3
4
- data.tar.gz: d9167156b2e41e7b3e3c340dedb8cbdcc0ba845a
3
+ metadata.gz: d01ad09f1151c57baf7349a1893b8619a6b56c92
4
+ data.tar.gz: 47106a0c706d6f6dac8594c77e3e0d4c1634b015
5
5
  SHA512:
6
- metadata.gz: 687de91b7d1b129b62adbe848fa307717d0f1aa02a7151397dd1885af86f1733d9e3d8c01f38986f2918616e8c92244d83701f166b68a42c41db8eeaad41673c
7
- data.tar.gz: b2d4220b02472c4a23dcc3b803cb1ffab514731333116cb236840868ff7cf7133907de84f0e04e8c135d7f923f214f9eb2010ee6f51515938fec59df4e2cdf05
6
+ metadata.gz: 90630400d639e97de96e25751eaa3921b3a4c1163b56c7fbe886a1c8daed6d61b3838c1a11c3a31d6b3944b6d268fd201ef6fe7aea5cc426c83a0de431e17c56
7
+ data.tar.gz: 62f5a563b371b9cb370bd29fe5fc249482a99753c5a1f55ad497e8b3071d8ffc8cfcee4a8b891d4de4a4c5d620e3ee2cc6db54a31839c6bf7feda8d76ace1e0d
data/.gitignore CHANGED
@@ -12,3 +12,5 @@ rdoc/
12
12
 
13
13
  # jeweler generated
14
14
  pkg
15
+ .DS_Store
16
+ .vagrant
data/.travis.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  language: ruby
2
- bundler_args: --without development
2
+ #bundler_args: --without development
3
3
  rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
6
  - 2.1.0
7
+ - 2.2.0
data/Gemfile.lock CHANGED
@@ -1,77 +1,91 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dropcaster (0.0.5.rc1)
5
- activesupport (~> 3.2)
6
- ruby-mp3info (~> 0.8)
4
+ dropcaster (0.0.5.rc3)
5
+ activesupport
6
+ ruby-mp3info
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (3.2.17)
12
- i18n (~> 0.6, >= 0.6.4)
13
- multi_json (~> 1.0)
11
+ activesupport (4.2.0)
12
+ i18n (~> 0.7)
13
+ json (~> 1.7, >= 1.7.7)
14
+ minitest (~> 5.1)
15
+ thread_safe (~> 0.3, >= 0.3.4)
16
+ tzinfo (~> 1.1)
14
17
  binding_of_caller (0.7.2)
15
18
  debug_inspector (>= 0.0.1)
16
- celluloid (0.15.2)
17
- timers (~> 1.1.0)
18
- celluloid-io (0.15.0)
19
- celluloid (>= 0.15.0)
20
- nio4r (>= 0.5.0)
19
+ celluloid (0.16.0)
20
+ timers (~> 4.0.0)
21
21
  coderay (1.1.0)
22
22
  debug_inspector (0.0.2)
23
- ffi (1.9.3)
24
- formatador (0.2.4)
25
- guard (2.4.0)
23
+ ffi (1.9.6)
24
+ ffi (1.9.6-x86-mingw32)
25
+ formatador (0.2.5)
26
+ guard (2.11.1)
26
27
  formatador (>= 0.2.4)
27
- listen (~> 2.1)
28
+ listen (~> 2.7)
28
29
  lumberjack (~> 1.0)
30
+ nenv (~> 0.1)
31
+ notiffany (~> 0.0)
29
32
  pry (>= 0.9.12)
33
+ shellany (~> 0.0)
30
34
  thor (>= 0.18.1)
31
- guard-bundler (2.0.0)
35
+ guard-bundler (2.1.0)
32
36
  bundler (~> 1.0)
33
37
  guard (~> 2.2)
34
- guard-minitest (2.2.0)
35
- guard (~> 2.0)
38
+ guard-compat (~> 1.1)
39
+ guard-compat (1.2.1)
40
+ guard-minitest (2.4.3)
41
+ guard-compat (~> 1.2)
36
42
  minitest (>= 3.0)
37
- i18n (0.6.9)
38
- libnotify (0.8.2)
43
+ hitimes (1.2.2)
44
+ hitimes (1.2.2-x86-mingw32)
45
+ i18n (0.7.0)
46
+ json (1.8.2)
47
+ libnotify (0.9.1)
39
48
  ffi (>= 1.0.11)
40
- libxml-ruby (2.7.0)
41
- libxml-ruby (2.7.0-x86-mingw32)
42
- listen (2.5.0)
49
+ libxml-ruby (2.8.0)
50
+ listen (2.8.5)
43
51
  celluloid (>= 0.15.2)
44
- celluloid-io (>= 0.15.0)
45
52
  rb-fsevent (>= 0.9.3)
46
53
  rb-inotify (>= 0.9)
47
- lumberjack (1.0.4)
54
+ lumberjack (1.0.9)
48
55
  method_source (0.8.2)
49
- minitest (5.2.3)
50
- multi_json (1.8.4)
51
- nio4r (1.0.0)
52
- pry (0.9.12.4)
53
- coderay (~> 1.0)
54
- method_source (~> 0.8)
56
+ minitest (5.5.1)
57
+ nenv (0.2.0)
58
+ notiffany (0.0.4)
59
+ nenv (~> 0.1)
60
+ shellany (~> 0.0)
61
+ pry (0.10.1)
62
+ coderay (~> 1.1.0)
63
+ method_source (~> 0.8.1)
55
64
  slop (~> 3.4)
56
- pry (0.9.12.4-x86-mingw32)
57
- coderay (~> 1.0)
58
- method_source (~> 0.8)
65
+ pry (0.10.1-x86-mingw32)
66
+ coderay (~> 1.1.0)
67
+ method_source (~> 0.8.1)
59
68
  slop (~> 3.4)
60
69
  win32console (~> 1.3)
61
- pry-nav (0.2.3)
62
- pry (~> 0.9.10)
70
+ pry-nav (0.2.4)
71
+ pry (>= 0.9.10, < 0.11.0)
63
72
  pry-stack_explorer (0.4.9.1)
64
73
  binding_of_caller (>= 0.7)
65
74
  pry (>= 0.9.11)
66
- rake (10.1.1)
75
+ rake (10.4.2)
67
76
  rb-fsevent (0.9.4)
68
- rb-inotify (0.9.3)
77
+ rb-inotify (0.9.5)
69
78
  ffi (>= 0.5.0)
70
- rb-readline (0.5.1)
71
- ruby-mp3info (0.8.2)
72
- slop (3.4.7)
73
- thor (0.18.1)
74
- timers (1.1.0)
79
+ rb-readline (0.5.2)
80
+ ruby-mp3info (0.8.5)
81
+ shellany (0.0.1)
82
+ slop (3.6.0)
83
+ thor (0.19.1)
84
+ thread_safe (0.3.4)
85
+ timers (4.0.1)
86
+ hitimes
87
+ tzinfo (1.2.2)
88
+ thread_safe (~> 0.1)
75
89
  win32console (1.3.2-x86-mingw32)
76
90
 
77
91
  PLATFORMS
@@ -79,16 +93,17 @@ PLATFORMS
79
93
  x86-mingw32
80
94
 
81
95
  DEPENDENCIES
82
- bundler (~> 1.5)
96
+ bundler
83
97
  dropcaster!
84
- guard-bundler (~> 2.0)
85
- guard-minitest (~> 2.2)
86
- libnotify (~> 0.8)
87
- libxml-ruby (~> 2.7)
88
- pry (~> 0.9)
89
- pry-nav (~> 0.2)
90
- pry-stack_explorer (~> 0.4)
91
- rake (~> 10.1)
92
- rb-fsevent (~> 0.9)
93
- rb-inotify (~> 0.9)
94
- rb-readline (~> 0.5)
98
+ guard-bundler
99
+ guard-minitest
100
+ libnotify
101
+ libxml-ruby
102
+ minitest
103
+ pry
104
+ pry-nav
105
+ pry-stack_explorer
106
+ rake
107
+ rb-fsevent
108
+ rb-inotify
109
+ rb-readline
data/README.markdown CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/nerab/dropcaster.png?branch=master)](https://travis-ci.org/nerab/dropcaster)
4
4
 
5
+ _This project is developed with the [readme-driven development](http://tom.preston-werner.com/2010/08/23/readme-driven-development.html) method. This file describes the functionality that is actually implemented, whereas the [VISION](VISION.md) reflects the vision where the tool should go._
6
+
5
7
  [Dropcaster](http://rubydoc.info/gems/dropcaster/file/README.md) is a podcast feed generator for the command line. It is most simple to use with Dropbox, but works equally well with any other hoster.
6
8
 
7
9
  Author: Nicolas E. Rabenau <nerab@gmx.at>
@@ -136,12 +138,6 @@ As discussed above, the output of this command can be written to a file, too:
136
138
 
137
139
  Dropcaster works exactly the same, whether it generates an RSS feed or a HTML page. Therefore, all options discussed before also apply when generating HTML.
138
140
 
139
- ## Sidecar files
140
-
141
- You may override the meta data for any episode by providing a YAML file with the same name as the mp3 file, but with an extension of yml or yaml (ususally refered to as [sidecar file](http://en.wikipedia.org/wiki/Sidecar_file)). Any attributes specified in this file override the ID tags in the mp3 file.
142
-
143
- Dropcaster will only write the sidecar file if the appropriate command line option was passed, and it will use the information in it only for generating new files like the index.rss. It will not write back to mp3 files.
144
-
145
141
  ## A Note on iTunes
146
142
 
147
143
  The generated XML file contains all elements required for iTunes. However, Dropcaster will not notify the iTunes store about new episodes.
data/VISION.markdown ADDED
@@ -0,0 +1,189 @@
1
+ # Dropcaster - Simple Podcast Publishing with Dropbox
2
+
3
+ [![Build Status](https://travis-ci.org/nerab/dropcaster.png?branch=master)](https://travis-ci.org/nerab/dropcaster)
4
+
5
+ _This project is developed with the [readme-driven development](http://tom.preston-werner.com/2010/08/23/readme-driven-development.html) method. This file contains the vision, whereas the [README](README.md) reflects the functionality that is actually implemented._
6
+
7
+ [Dropcaster](http://rubydoc.info/gems/dropcaster/file/README.md) is a podcast feed generator for the command line. It is most simple to use with Dropbox, but works equally well with any other hoster.
8
+
9
+ Author: Nicolas E. Rabenau <nerab@gmx.at>
10
+
11
+ # What is the problem Dropcaster is trying to solve?
12
+
13
+ You have a number of podcast episodes that you would like to publish as a feed. Nothing else - no fancy website, no stats, nothing but the pure podcast.
14
+
15
+ With Dropcaster, you simply put the mp3 files into the Public folder of your [Dropbox](http://www.dropbox.com/). Then run the Dropcaster script that generates the feed, writing it to a file in your Dropbox, e.g. index.rss. All mp3 files in the Public folder of your Dropbox are already accessible via HTTP, and so will the RSS file. You can then take the RSS file's URL and publish it (again, this is because any file in the Public folder of a Dropbox automatically gets a public, HTTP-accessible URL).
16
+
17
+ The feed URL can be consumed by any podcatcher, e.g. [iTunes](http://www.apple.com/itunes/) or [Juice](http://juicereceiver.sourceforge.net/).
18
+
19
+ # Installation
20
+
21
+ To get started, use RubyGems to install Dropcaster:
22
+
23
+ $ gem install dropcaster
24
+
25
+ With Dropcaster installed, you can use the `dropcaster` command to generate a new podcast feed document.
26
+
27
+ # Basic Usage
28
+
29
+ Once Dropcaster is installed, the only two other things you will need are a channel definition and one or more mp3 files to publish.
30
+
31
+ Let's start with the channel definition. It is a simple [YAML](http://yaml.org/) file that holds the general information about your podcast channel. According to the [RSS 2.0 spec](http://feedvalidator.org/docs/rss2.html#requiredChannelElements), the only mandatory information that your channel absolutely needs are a title, a description and a link to a web site where the channel belongs to.
32
+
33
+ The simplest channel file looks like this:
34
+
35
+ :title: 'All About Everything'
36
+ :subtitle: 'A show about everything'
37
+ :url: 'http://www.example.com/podcasts/everything/index.html'
38
+
39
+ Store this file as channel.yml in the same directory where the mp3 files of your podcast reside. The channel definition is expected to be present in the same directory as your mp3 files, but this can be overridden using a command line switch. You can find a [more elaborate example](http://github.com/nerab/dropcaster/blob/master/doc/sample-channel.yml) for the channel definition in the doc folder of the Dropcaster gem. You can find it by running `gem open dropcaster`.
40
+
41
+ Now that we have the podcast channel defined, we need at least one episode (an audio file) in it. From Dropcaster's perspective, it does not matter how the episode was produced, but the critical information is the meta data in the mp3 file, because that is the authoritative source for the episode information. Almost all audio editors can write metadata, usually called ID3 tags. Dropcaster reads these tags from the mp3 files and fills the item element in the feed (that's how an episode is defined, technically) from it.
42
+
43
+ With all required pieces in place, we could generate the podcast feed. Just before we do that, we will inspect the feed by running the following commands:
44
+
45
+ $ cd ~/Dropbox/Public
46
+ $ dropcaster
47
+
48
+ (The above lines assume that you are using Dropbox, and that there is at least one mp3 file in ~/Dropbox/Public).
49
+
50
+ Dropcaster will print the feed to standard-out, without writing it to disk. When you are happy with the results, call Dropcaster again, but redirect the output to a file, this time:
51
+
52
+ $ dropcaster > index.rss
53
+
54
+ If all went well, you will now have a valid podcast feed in your Dropbox, listing all mp3 files as podcast episodes. Please see the section [Publish Your Feed] for details on how to find the public URL of your feed.
55
+
56
+ # Use Cases
57
+
58
+ ## Publish a New Episode
59
+
60
+ 1. Drop the mp3 file into the Dropbox Public folder (e.g. ~/Dropbox/Public), and then run the following command in the directory where the mp3 files reside:
61
+
62
+ $ dropcaster > index.rss
63
+
64
+ 1. Dropbox will sync the updated index.rss file to its web server and any podcast client will download the new episode as soon as it has loaded the updated index.rss.
65
+
66
+ ## Delete an Episode
67
+
68
+ Remove the mp3 you want to delete from the Dropbox Public folder, and then run the following command in the directory where the remaining mp3 files reside:
69
+
70
+ $ dropcaster > index.rss
71
+
72
+ ## Replace an Episode With an Updated File
73
+
74
+ In the Dropbox Public folder, replace the mp3 you want to update with a new version, and then run the following command in the directory where the mp3 files reside:
75
+
76
+ $ dropcaster > index.rss
77
+
78
+ ## Publish Your Feed
79
+
80
+ 1. Re-generate the feed to make sure the it is up to date (see above):
81
+
82
+ $ dropcaster > index.rss
83
+
84
+ 1. In your Dropbox Public folder, right-click the index.rss and select "Dropbox / Copy public link". This copies the public, HTTP-addressable link to your podcast into the clipboard.
85
+ 1. Publish this link and tell people to subscribe to it.
86
+
87
+ ## Generate a Podcast Feed for a Subset of the Available MP3 Files
88
+
89
+ Dropcaster accepts any number of files or directories as episodes. For directories, all files ending in .mp3 will be included. For advanced filtering, you can use regular shell patterns to further specify which files will be included. These patterns will be resolved by the shell itself (e.g. bash), and not by Dropcaster.
90
+
91
+ For example, in order to generate a feed that only publishes MP3 files where the name starts with 'A', call Dropcaster like this:
92
+
93
+ $ dropcaster A*.mp3 > index.rss
94
+
95
+ ## Publish More than One Feed
96
+
97
+ $ dropcaster project1 > project1.rss
98
+ $ dropcaster project2 > project2.rss
99
+
100
+ or
101
+
102
+ $ cd project1
103
+ $ dropcaster > index.rss
104
+ $ cd ../project2
105
+ $ dropcaster > index.rss
106
+
107
+ ## Include Episodes From Two Subdirectories Into a Single Feed
108
+
109
+ $ dropcaster project1 project2 > index.rss
110
+
111
+ # Advanced features
112
+
113
+ ## Overriding defaults
114
+
115
+ Dropcaster is opinionated software. That means, it makes a number of assumptions about names, files, and directory structures. Dropcaster will be most simple to use if these assumptions and opinions apply to your way of using the program.
116
+
117
+ However, it is still possible to override Dropcaster's behavior in many ways. You can, for instance, host your episode files on a different URL than the channel. Instead of writing title, subtitle, etc. to a channel.yml, you may also spedify them on the command line.
118
+
119
+ In order to find out about all the options, simply run
120
+
121
+ $ dropcaster --help
122
+
123
+ ## Using custom channel templates
124
+
125
+ Dropcaster generates a feed that is suitable for most podcast clients, especially iTunes. By default, dropcaster follows [Apple's podcast specs / recommendations](http://www.apple.com/itunes/podcasts/specs.html).
126
+
127
+ It is also possible to customize the channel by supplying an alternative channel template on the command line. Start your own template by copying the default template, or look at the test directory of the dropcaster gem. You can get there by running `gem open dropcaster`.
128
+
129
+ ## Generate a HTML page for your podcast
130
+
131
+ Besides generating an RSS feed, dropcaster can also generate HTML that can be used as a home page for your podcast. The template directory contains a sample template that can be used to get started:
132
+
133
+ $ dropcaster --channel-template templates/channel.html.erb
134
+
135
+ As discussed above, the output of this command can be written to a file, too:
136
+
137
+ $ dropcaster --channel-template templates/channel.html.erb > ~/Dropbox/Public/allabouteverything.html
138
+
139
+ Dropcaster works exactly the same, whether it generates an RSS feed or a HTML page. Therefore, all options discussed before also apply when generating HTML.
140
+
141
+ ## Sidecar files
142
+
143
+ You may override the meta data for any episode by providing a YAML file with the same name as the mp3 file, but with an extension of yml or yaml (ususally refered to as [sidecar file](http://en.wikipedia.org/wiki/Sidecar_file)). Any attributes specified in this file override the ID tags in the mp3 file.
144
+
145
+ Dropcaster will only write the sidecar file if the appropriate command line option was passed, and it will use the information in it only for generating new files like the index.rss. It will not write back to mp3 files.
146
+
147
+ Sidecar files are also useful for referencing a (remote) enclosure without re-hosting it (which, besides wasted bandwidth, could also create copyright issues). If a sidecar file is present and it points to a remote media URL, dropcaster will generate an item in the feed, even if the media is not available locally.
148
+
149
+ ## A Note on iTunes
150
+
151
+ The generated XML file contains all elements required for iTunes. However, Dropcaster will not notify the iTunes store about new episodes.
152
+
153
+ ## Using Dropcaster Without Dropbox
154
+
155
+ 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.
156
+
157
+ ## Episode Identifier (uuid)
158
+
159
+ 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).
160
+
161
+ Modifying the sidecar file does not change the UUID, because it only affects the feed and not the episode itself.
162
+
163
+ ## I Don't Like the Output Format that Dropcaster produces
164
+
165
+ Dropcaster uses an ERB template to generate the XML feed. The template was written so that it is easy to understand, but not necessarily in a way that would make the output rather nice-looking. That should not be an issue, as long as the XML is correct.
166
+
167
+ It you prefer a more aesthetically pleasing output, just pipe the output of Dropcaster through `xmllint`, which is part of [libxml](http://xmlsoft.org/), which in turn is one of the prerequisites of the Dropcaster gem, and, as such, installed with Dropcaster):
168
+
169
+ dropcaster | xmllint --format -
170
+
171
+ For writing the output to a file, just redirect the ouput of the above command:
172
+
173
+ dropcaster | xmllint --format - > index.rss
174
+
175
+ # Contributing to Dropcaster
176
+
177
+ Dropcaster is hosted at [Github](http://github.com/nerab/dropcaster):
178
+
179
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
180
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
181
+ * Fork the project
182
+ * Start a feature/bugfix branch
183
+ * Commit and push until you are happy with your contribution
184
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
185
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
186
+
187
+ # Copyright
188
+
189
+ Copyright (c) 2011-2014 Nicolas E. Rabenau. See [LICENSE.txt](https://raw.github.com/nerab/dropcaster/master/LICENSE.txt) for further details.
data/dropcaster.gemspec CHANGED
@@ -18,19 +18,20 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'ruby-mp3info', '~> 0.8'
22
- spec.add_dependency 'activesupport', '~> 3.2'
21
+ spec.add_dependency 'ruby-mp3info'
22
+ spec.add_dependency 'activesupport'
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 1.5'
25
- spec.add_development_dependency 'rake', '~> 10.1'
26
- spec.add_development_dependency 'libxml-ruby', '~> 2.7'
27
- spec.add_development_dependency 'guard-minitest', '~> 2.2'
28
- spec.add_development_dependency 'guard-bundler', '~> 2.0'
29
- spec.add_development_dependency 'libnotify', '~> 0.8'
30
- spec.add_development_dependency 'rb-inotify', '~> 0.9'
31
- spec.add_development_dependency 'rb-fsevent', '~> 0.9'
32
- spec.add_development_dependency 'pry', '~> 0.9'
33
- spec.add_development_dependency 'pry-nav', '~> 0.2'
34
- spec.add_development_dependency 'pry-stack_explorer', '~> 0.4'
35
- spec.add_development_dependency 'rb-readline', '~> 0.5'
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'minitest'
26
+ spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'libxml-ruby'
28
+ spec.add_development_dependency 'guard-minitest'
29
+ spec.add_development_dependency 'guard-bundler'
30
+ spec.add_development_dependency 'libnotify'
31
+ spec.add_development_dependency 'rb-inotify'
32
+ spec.add_development_dependency 'rb-fsevent'
33
+ spec.add_development_dependency 'pry'
34
+ spec.add_development_dependency 'pry-nav'
35
+ spec.add_development_dependency 'pry-stack_explorer'
36
+ spec.add_development_dependency 'rb-readline'
36
37
  end
@@ -97,7 +97,7 @@ module Dropcaster
97
97
  end
98
98
 
99
99
  # construct absolute URL, based on the channel's enclosures_url attribute
100
- item.url = (URI.parse(enclosures_url) + item.file_name)
100
+ item.url = (URI.parse(enclosures_url) + URI.encode(item.file_name))
101
101
 
102
102
  # Warn if keyword count is larger than recommended
103
103
  assert_keyword_count(item.keywords)
@@ -12,6 +12,10 @@ module Dropcaster
12
12
  @tag = mp3info.tag
13
13
  @tag2 = mp3info.tag2
14
14
  @duration = mp3info.length
15
+ if @tag2["ULT"]
16
+ @lyrics = {};
17
+ @tag2["ULT"].split(/\x00/).drop(1).each_slice(2) { |k, v| @lyrics[k] = v }
18
+ end
15
19
  }
16
20
 
17
21
  @file_size = File.new(@file_name).stat.size
@@ -1,3 +1,3 @@
1
1
  module Dropcaster
2
- VERSION = '0.0.5.rc1'
2
+ VERSION = '0.0.5.rc3'
3
3
  end
data/lib/dropcaster.rb CHANGED
@@ -7,13 +7,13 @@ require 'active_support/core_ext/object/blank'
7
7
  require 'active_support/core_ext/module/attribute_accessors'
8
8
 
9
9
  require 'logger'
10
- require 'active_support/core_ext/logger'
11
10
 
12
11
  require 'dropcaster/errors'
13
12
  require 'dropcaster/log_formatter'
14
13
  require 'dropcaster/channel'
15
14
  require 'dropcaster/item'
16
15
  require 'dropcaster/channel_file_locator'
16
+ require 'dropcaster/version'
17
17
 
18
18
  module Dropcaster
19
19
  CHANNEL_YML = 'channel.yml'
data/test/Vagrantfile ADDED
@@ -0,0 +1,18 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ Vagrant.configure(2) do |config|
5
+ config.vm.box = 'ubuntu/trusty64'
6
+ config.vm.synced_folder '..', '/dropcaster'
7
+
8
+ config.vm.provider 'virtualbox' do |vb|
9
+ vb.memory = '256'
10
+ end
11
+
12
+ config.vm.provision 'shell', inline: <<-SHELL
13
+ sudo add-apt-repository ppa:brightbox/ruby-ng-experimental
14
+ sudo apt-get update
15
+ sudo apt-get install -y ruby2.2 git ruby2.2-dev libxml2-dev zlib1g-dev
16
+ sudo gem install bundler
17
+ SHELL
18
+ end
@@ -2,15 +2,15 @@
2
2
  :subtitle: A show about everything
3
3
  :url: http://www.example.com/podcasts/everything/
4
4
  :language: en-us
5
- :copyright: © 2011 John Doe and Family
5
+ :copyright: 2011 John Doe and Family
6
6
  :author: John Doe
7
7
  :description: All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our Podcast in the iTunes Store!
8
8
  :owner:
9
9
  :name: John Doe
10
10
  :email: john.doe@example.com
11
11
  :image_url: AllAboutEverything.jpg
12
- :keywords: [bumm, zack, return]
13
- :categories:
12
+ :keywords: [bumm, zack, return]
13
+ :categories:
14
14
  - [Technology, Gadgets]
15
15
  - TV & Film
16
16
  :explicit: No
@@ -1,4 +1,4 @@
1
- {
1
+ {
2
2
  "generator" : {
3
3
  "name" : "Dropcaster",
4
4
  "version" : "<%= Dropcaster::VERSION%>"
data/test/helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ gem 'minitest'
1
2
  require 'minitest/autorun'
2
3
  require 'dropcaster'
3
4
 
@@ -24,7 +24,7 @@ class TestChannelXML < MiniTest::Test
24
24
  # constructing the XML string in a different way
25
25
  #
26
26
  def channel_rss
27
- Dropcaster::Channel.new(FIXTURES_DIR, @options).to_rss
27
+ Dropcaster::Channel.new(FIXTURES_DIR, @options.dup).to_rss
28
28
  end
29
29
 
30
30
  def test_item
@@ -47,7 +47,7 @@ class TestChannelXML < MiniTest::Test
47
47
  assert_equal('false', guid['isPermaLink'])
48
48
  assert_equal('77bf84447c0f69ce4a33a18b0ae1e030b82010de', guid.content)
49
49
 
50
- assert_equal('Wed, 05 Oct 2011 13:32:26 -0600', item.find('pubDate').first.content)
50
+ assert_equal(File.mtime(FIXTURE_ITUNES_MP3).rfc2822, item.find('pubDate').first.content)
51
51
  assert_equal('3', item.find('itunes:duration', NS_ITUNES).first.content)
52
52
  end
53
53
 
@@ -8,10 +8,10 @@ class TestItem < MiniTest::Test
8
8
  end
9
9
 
10
10
  def test_basics
11
- assert_in_delta(3, @item.duration, 0.005)
11
+ assert_in_delta(3, @item.duration, 0.05)
12
12
  assert_equal(58119, @item.file_size)
13
13
  assert_equal('77bf84447c0f69ce4a33a18b0ae1e030b82010de', @item.uuid)
14
- assert_equal(1392932984, @item.pub_date.to_i)
14
+ assert_equal(File.mtime(FIXTURE_ITUNES_MP3).to_i, @item.pub_date.to_i)
15
15
  assert_equal('test/fixtures/iTunes.mp3', @item.file_name)
16
16
  end
17
17
 
metadata CHANGED
@@ -1,211 +1,225 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dropcaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5.rc1
4
+ version: 0.0.5.rc3
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: 2014-02-24 00:00:00.000000000 Z
11
+ date: 2015-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-mp3info
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.8'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0.8'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3.2'
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '3.2'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.5'
47
+ version: '0'
48
48
  type: :development
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: '1.5'
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ~>
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: '10.1'
75
+ version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ~>
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
- version: '10.1'
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: libxml-ruby
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
- version: '2.7'
89
+ version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
- version: '2.7'
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: guard-minitest
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ~>
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
- version: '2.2'
103
+ version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ~>
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
- version: '2.2'
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: guard-bundler
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - ~>
115
+ - - ">="
102
116
  - !ruby/object:Gem::Version
103
- version: '2.0'
117
+ version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - ~>
122
+ - - ">="
109
123
  - !ruby/object:Gem::Version
110
- version: '2.0'
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: libnotify
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - ~>
129
+ - - ">="
116
130
  - !ruby/object:Gem::Version
117
- version: '0.8'
131
+ version: '0'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - ~>
136
+ - - ">="
123
137
  - !ruby/object:Gem::Version
124
- version: '0.8'
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rb-inotify
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - ~>
143
+ - - ">="
130
144
  - !ruby/object:Gem::Version
131
- version: '0.9'
145
+ version: '0'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - ~>
150
+ - - ">="
137
151
  - !ruby/object:Gem::Version
138
- version: '0.9'
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rb-fsevent
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - ~>
157
+ - - ">="
144
158
  - !ruby/object:Gem::Version
145
- version: '0.9'
159
+ version: '0'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - ~>
164
+ - - ">="
151
165
  - !ruby/object:Gem::Version
152
- version: '0.9'
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: pry
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
- - - ~>
171
+ - - ">="
158
172
  - !ruby/object:Gem::Version
159
- version: '0.9'
173
+ version: '0'
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
- - - ~>
178
+ - - ">="
165
179
  - !ruby/object:Gem::Version
166
- version: '0.9'
180
+ version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: pry-nav
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
- - - ~>
185
+ - - ">="
172
186
  - !ruby/object:Gem::Version
173
- version: '0.2'
187
+ version: '0'
174
188
  type: :development
175
189
  prerelease: false
176
190
  version_requirements: !ruby/object:Gem::Requirement
177
191
  requirements:
178
- - - ~>
192
+ - - ">="
179
193
  - !ruby/object:Gem::Version
180
- version: '0.2'
194
+ version: '0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: pry-stack_explorer
183
197
  requirement: !ruby/object:Gem::Requirement
184
198
  requirements:
185
- - - ~>
199
+ - - ">="
186
200
  - !ruby/object:Gem::Version
187
- version: '0.4'
201
+ version: '0'
188
202
  type: :development
189
203
  prerelease: false
190
204
  version_requirements: !ruby/object:Gem::Requirement
191
205
  requirements:
192
- - - ~>
206
+ - - ">="
193
207
  - !ruby/object:Gem::Version
194
- version: '0.4'
208
+ version: '0'
195
209
  - !ruby/object:Gem::Dependency
196
210
  name: rb-readline
197
211
  requirement: !ruby/object:Gem::Requirement
198
212
  requirements:
199
- - - ~>
213
+ - - ">="
200
214
  - !ruby/object:Gem::Version
201
- version: '0.5'
215
+ version: '0'
202
216
  type: :development
203
217
  prerelease: false
204
218
  version_requirements: !ruby/object:Gem::Requirement
205
219
  requirements:
206
- - - ~>
220
+ - - ">="
207
221
  - !ruby/object:Gem::Version
208
- version: '0.5'
222
+ version: '0'
209
223
  description: Dropcaster is a podcast feed generator for the command line. It is most
210
224
  simple to use with Dropbox, but works equally well with any other hoster.
211
225
  email:
@@ -216,9 +230,9 @@ executables:
216
230
  extensions: []
217
231
  extra_rdoc_files: []
218
232
  files:
219
- - .document
220
- - .gitignore
221
- - .travis.yml
233
+ - ".document"
234
+ - ".gitignore"
235
+ - ".travis.yml"
222
236
  - Gemfile
223
237
  - Gemfile.lock
224
238
  - Guardfile
@@ -226,6 +240,7 @@ files:
226
240
  - README.markdown
227
241
  - Rakefile
228
242
  - TODO
243
+ - VISION.markdown
229
244
  - bin/dropcaster
230
245
  - bin/lstags
231
246
  - doc/infoPane.png
@@ -243,6 +258,7 @@ files:
243
258
  - lib/dropcaster/version.rb
244
259
  - templates/channel.html.erb
245
260
  - templates/channel.rss.erb
261
+ - test/Vagrantfile
246
262
  - test/extensions/windows.rb
247
263
  - test/fixtures/channel.yml
248
264
  - test/fixtures/iTunes.mp3
@@ -263,21 +279,22 @@ require_paths:
263
279
  - lib
264
280
  required_ruby_version: !ruby/object:Gem::Requirement
265
281
  requirements:
266
- - - '>='
282
+ - - ">="
267
283
  - !ruby/object:Gem::Version
268
284
  version: '0'
269
285
  required_rubygems_version: !ruby/object:Gem::Requirement
270
286
  requirements:
271
- - - '>'
287
+ - - ">"
272
288
  - !ruby/object:Gem::Version
273
289
  version: 1.3.1
274
290
  requirements: []
275
291
  rubyforge_project:
276
- rubygems_version: 2.0.3
292
+ rubygems_version: 2.4.3
277
293
  signing_key:
278
294
  specification_version: 4
279
295
  summary: Simple Podcast Publishing with Dropbox
280
296
  test_files:
297
+ - test/Vagrantfile
281
298
  - test/extensions/windows.rb
282
299
  - test/fixtures/channel.yml
283
300
  - test/fixtures/iTunes.mp3