mbrew 0.1.0.pre.dev.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d45f7c902432ff4773ad0948623b47ca2a97ffa1
4
+ data.tar.gz: bfad59bbb9d52702783c6e9c3bb2223d2487429a
5
+ SHA512:
6
+ metadata.gz: d0d8d527d34a34f648ba669339311fd98e004477c3b4d931854a392ebe843028506f81c5789ec55988800b4b387589a6e6c5718b499416182b402a89bf68c0a8
7
+ data.tar.gz: 9ee8375a483366532a53da418489b18407c92939301ace0fa2e040683f5314d40a71f808de437baa3b2db92e626d9973768bcc4b63e09bfd9d8af7444d3787fb
@@ -0,0 +1,2 @@
1
+ .setup
2
+ CHANGELOG-*.txt
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+
2
+ source 'https://rubygems.org'
3
+ gemspec
@@ -0,0 +1,26 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ mbrew (0.1.0.pre.dev.1)
5
+ git (~> 1.2)
6
+ id3lib-ruby (~> 0.6)
7
+ rainbow (~> 2.0)
8
+ thefox-ext (~> 1.0)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ git (1.2.9.1)
14
+ id3lib-ruby (0.6.0)
15
+ rainbow (2.0.0)
16
+ thefox-ext (1.1.0)
17
+
18
+ PLATFORMS
19
+ ruby
20
+
21
+ DEPENDENCIES
22
+ bundler (~> 1.10)
23
+ mbrew!
24
+
25
+ BUNDLED WITH
26
+ 1.10.2
@@ -0,0 +1,4 @@
1
+
2
+ GEM_NAME = mbrew
3
+
4
+ include Makefile.common
@@ -0,0 +1,50 @@
1
+
2
+ # Ruby Common Big
3
+ # 2015-12-07
4
+
5
+ MV = mv -nv
6
+ RM = rm -rf
7
+ MKDIR = mkdir -p
8
+ BUNDLER = bundle
9
+ GEMSPEC_FILE = $(GEM_NAME).gemspec
10
+
11
+ .PHONY: all
12
+ all: setup
13
+
14
+ .PHONY: setup
15
+ setup: .setup
16
+
17
+ .setup:
18
+ $(BUNDLER) install
19
+ touch $@
20
+
21
+ .PHONY: install
22
+ install:
23
+ gem_file=$$(gem build $(GEMSPEC_FILE) | grep 'File:' | tail -1 | awk '{ print $$2 }'); \
24
+ sudo gem install $$gem_file; \
25
+ $(RM) $$gem_file
26
+
27
+ .PHONY: uninstall
28
+ uninstall:
29
+ sudo gem uninstall $(GEM_NAME)
30
+
31
+ .PHONY: update
32
+ update:
33
+ $(BUNDLER) update
34
+
35
+ .PHONY: clean
36
+ clean:
37
+ $(RM) .setup
38
+
39
+ .PHONY: release
40
+ release: | releases
41
+ set -e; \
42
+ gem_file=$$(gem build $(GEMSPEC_FILE) | grep 'File:' | tail -1 | awk '{ print $$2 }'); \
43
+ dst="releases/$$gem_file"; \
44
+ [ ! -f $$dst ]; \
45
+ $(MV) $$gem_file releases; \
46
+ gem push $$dst; \
47
+ echo 'done'
48
+
49
+ releases:
50
+ $(MKDIR) $@
@@ -0,0 +1,25 @@
1
+ # MusicBrew
2
+
3
+ A combination of Spotify and [Homebrew](http://brew.sh/). Like a [package manager](https://en.wikipedia.org/wiki/Package_manager) for software but for music. It's made to use it on the [comand-line](https://en.wikipedia.org/wiki/Command-line_interface). You can install all songs by a specified band, for example from ABBA via `music install ABBA`. The mp3 files will be downloaded from a central server to your local music collection. The search acts like on a traditional package managers, for example via `music search AC/DC`. Like on Homebrew, each song file or band gets a *formula* file. The formula files will be searched locally when the search command is used. On `music update` all formula files will be updated through Git. The `music upgrade` command is used to upgrade all existing bands. New songs will be downloaded.
4
+
5
+ ## Install
6
+
7
+ The preferred method of installation is via RubyGems.org:
8
+ <https://rubygems.org/gems/mbrew>
9
+
10
+ gem install mbrew
11
+
12
+ or via `Gemfile`:
13
+
14
+ gem 'mbrew', '~>0.1.0'
15
+
16
+ Use it in your sources:
17
+
18
+ require 'mbrew'
19
+
20
+ ## License
21
+ Copyright (C) 2015 Christian Mayer <http://fox21.at>
22
+
23
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
24
+
25
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -0,0 +1,370 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: UTF-8
3
+
4
+ raise 'Ruby >=2.2 required' unless RUBY_VERSION.to_f >= 2.2
5
+
6
+ require 'optparse'
7
+ require 'fileutils'
8
+ require 'uri'
9
+ require 'git'
10
+ require 'yaml'
11
+ require 'yaml/store'
12
+ require 'digest/sha1'
13
+ require 'rainbow'
14
+ require 'id3lib'
15
+ require 'thefox-ext'
16
+
17
+
18
+ lib = '/Users/thefox/work/dev/homemusic/lib'
19
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
20
+ require 'mbrew'
21
+
22
+
23
+ if ARGV.count == 0
24
+ puts "Usage: mbrew <command>"
25
+ puts "Version: #{TheFox::MBrew::VERSION}"
26
+ puts
27
+ puts 'Commands:'
28
+ puts "\t clone"
29
+ puts "\t init"
30
+ puts "\t add"
31
+ puts "\t commit"
32
+ puts "\t status"
33
+ puts "\t list"
34
+ puts
35
+ exit 3
36
+ end
37
+
38
+ command1 = ARGV.shift
39
+ case command1
40
+ when 'clone'
41
+ opts = OptionParser.new do |opts|
42
+ opts.banner = "Usage: mbrew #{command1} <url> [<dir>]"
43
+ opts.separator('')
44
+
45
+ opts.on_tail('-h', '--help', 'Show this message.') do
46
+ puts opts
47
+ puts
48
+ exit 3
49
+ end
50
+ end
51
+ ARGV << '-h' if ARGV.count == 0
52
+ opts.parse(ARGV)
53
+
54
+ url = URI(ARGV.shift)
55
+ dir = ARGV.shift ||
56
+ "#{url.host} #{url.path}"
57
+ .gsub('.', '-')
58
+ .gsub('/', ' ')
59
+ .strip
60
+ .gsub(/ +/, '-')
61
+
62
+ puts "url: '#{url}'"
63
+ puts "dir: '#{dir}'"
64
+
65
+ if !Dir.exist?(dir)
66
+ puts "Cloning into library '#{dir}'..."
67
+
68
+ Dir.mkdir(dir)
69
+ Dir.chdir(dir) do
70
+ Dir.mkdir('.mbrew')
71
+ Dir.chdir('.mbrew') do
72
+ grepo = Git.clone(URI, NAME, :path => 'index')
73
+ grepo.config('user.name', 'Mr. Robot')
74
+ grepo.config('user.email', 'robot@example.com')
75
+ end
76
+ end
77
+ else
78
+ raise "Directory '#{dir}' already exist."
79
+ end
80
+ when 'init'
81
+ opts = OptionParser.new do |opts|
82
+ opts.banner = "Usage: mbrew #{command1} <dir>"
83
+ opts.separator('')
84
+
85
+ opts.on_tail('-h', '--help', 'Show this message.') do
86
+ puts opts
87
+ puts
88
+ exit 3
89
+ end
90
+ end
91
+ opts.parse(ARGV)
92
+
93
+ dir = ARGV.shift || '.'
94
+ Dir.chdir(dir) do
95
+ puts Dir.pwd
96
+ if !Dir.exist?('.mbrew')
97
+ Dir.mkdir('.mbrew')
98
+ Dir.chdir('.mbrew') do
99
+ Dir.mkdir('data')
100
+ Dir.mkdir('bin')
101
+ Dir.mkdir('index')
102
+
103
+ Dir.chdir('bin') do
104
+ File.open('push', 'w') do |file|
105
+ file.chmod(0755)
106
+
107
+ file.puts('#!/usr/bin/env bash')
108
+ file.puts
109
+ file.puts('SCRIPT_BASEDIR=$(dirname $0)')
110
+ file.puts('RSYNC_BIN="rsync"')
111
+ file.puts('RSYNC_OPTIONS="-vucr --delete --delete-excluded -h --progress --exclude=.DS_Store"')
112
+ file.puts('RSYNC_REMOTE="user@remote:/path/to/public"')
113
+ file.puts
114
+ file.puts
115
+ file.puts('cd $SCRIPT_BASEDIR/..')
116
+ file.puts
117
+ file.puts('# $RSYNC_BIN $RSYNC_OPTIONS index data $RSYNC_REMOTE')
118
+ end
119
+ end
120
+
121
+ Dir.chdir('index') do
122
+ grepo = Git.init('.')
123
+ grepo.config('user.name', 'Mr. Robot')
124
+ grepo.config('user.email', 'robot@example.com')
125
+
126
+ File.write('.gitkeep', 'keep')
127
+ grepo.add('.gitkeep')
128
+
129
+ grepo.commit('Initial commit.')
130
+ end
131
+
132
+ staged_yaml = YAML::Store.new('staged.yml')
133
+ staged_yaml.transaction do
134
+ staged_yaml['files'] = []
135
+ end
136
+ end
137
+ else
138
+ raise "Directory '#{dir}' is already a mbrew library."
139
+ end
140
+ end
141
+ when 'add'
142
+ raise 'FATAL ERROR: not a mbrew library.' if !Dir.exist?('.mbrew')
143
+
144
+ options = {
145
+ :recursive => false,
146
+ }
147
+ opts = OptionParser.new do |opts|
148
+ opts.banner = "Usage: mbrew #{command1} [<options>] <path...>"
149
+ opts.separator('')
150
+
151
+ opts.on('-R', '--recursive', 'Remove all tags.') do |v|
152
+ options[:recursive] = true
153
+ end
154
+
155
+ opts.on_tail('-h', '--help', 'Show this message.') do
156
+ puts opts
157
+ puts
158
+ exit 3
159
+ end
160
+ end
161
+ ARGV << '-h' if ARGV.count == 0
162
+ paths = opts.parse(ARGV)
163
+
164
+ file_pattern = '*.mp3'
165
+ file_pattern = File.join('**', '*.mp3') if options[:recursive]
166
+
167
+ files_staged = []
168
+ Dir.chdir('.mbrew') do
169
+ files_staged = YAML.load_file('staged.yml')['files']
170
+ end
171
+
172
+ paths.each do |path|
173
+ if File.exist?(path)
174
+ if File.directory?(path)
175
+ Dir.chdir(path) do
176
+ Dir.glob(file_pattern).sort.each do |file_path|
177
+ full_path = File.join(path, file_path)
178
+ puts "Adding file '#{full_path}'"
179
+ files_staged << full_path
180
+ end
181
+ end
182
+ else
183
+ puts "Adding file '#{path}'"
184
+ files_staged << path
185
+ end
186
+ else
187
+ $stderr.puts "WARNING: '#{path}' no such file or directory."
188
+ end
189
+ end
190
+
191
+ files_staged.sort!.uniq!
192
+
193
+ Dir.chdir('.mbrew') do
194
+ staged_yaml = YAML::Store.new('staged.yml')
195
+ staged_yaml.transaction do
196
+ staged_yaml['files'] = files_staged
197
+ end
198
+ end
199
+ when 'commit'
200
+ raise 'FATAL ERROR: not a mbrew library.' if !Dir.exist?('.mbrew')
201
+
202
+ opts = OptionParser.new do |opts|
203
+ opts.banner = "Usage: mbrew #{command1}"
204
+ opts.separator('')
205
+
206
+ opts.on_tail('-h', '--help', 'Show this message.') do
207
+ puts opts
208
+ puts
209
+ exit 3
210
+ end
211
+ end
212
+ opts.parse(ARGV)
213
+
214
+ files_staged = []
215
+ Dir.chdir('.mbrew') do
216
+ files_staged = YAML.load_file('staged.yml')['files']
217
+ end
218
+
219
+ if files_staged.count >= 0
220
+ files_staged.each do |src_file_path|
221
+ if File.exist?(src_file_path)
222
+
223
+
224
+ src_file_basename = File.basename(src_file_path)
225
+ src_file_basename_hex = Digest::SHA256.hexdigest(src_file_basename)
226
+ clone_file_basename = "#{src_file_basename_hex}.mp3"
227
+ clone_file_path = ".mbrew/data/#{clone_file_basename}"
228
+
229
+ FileUtils.cp(src_file_path, clone_file_path)
230
+
231
+ src_file_hex = Digest::SHA256.file(clone_file_path).hexdigest
232
+
233
+ dst_dir_path = "#{src_file_hex[0,2]}/#{src_file_hex[2,2]}/#{src_file_hex[4,2]}"
234
+ dst_file_name = src_file_hex[6,58]
235
+ gpg_file_name = "#{dst_file_name}.gpg"
236
+ gpg_file_path = "#{dst_dir_path}/#{gpg_file_name}"
237
+ yml_file_name = "#{dst_file_name}.yml"
238
+ yml_file_path = "#{dst_dir_path}/#{yml_file_name}"
239
+ gpg_exec = "gpg --no-tty --batch --passphrase supersecret2015 --cipher-algo AES256 -c -o '#{gpg_file_name}' '#{clone_file_basename}'"
240
+
241
+ puts "src_file_basename: '#{src_file_basename}'"
242
+ puts "src_file_basename_hex: '#{src_file_basename_hex}'"
243
+ puts "clone_file_basename: '#{clone_file_basename}'"
244
+ puts "clone_file_path: '#{clone_file_path}'"
245
+ puts
246
+ puts "src_file_hex: '#{src_file_hex}'"
247
+ puts "dst_dir_path: '#{dst_dir_path}'"
248
+ puts "dst_file_name: '#{dst_file_name}'"
249
+ puts "gpg_file_name: '#{gpg_file_name}'"
250
+ puts "gpg_file_path: '#{gpg_file_path}'"
251
+ puts "yml_file_name: '#{yml_file_name}'"
252
+ puts "yml_file_path: '#{yml_file_path}'"
253
+ puts
254
+ puts "gpg_exec: '#{gpg_exec}'"
255
+ puts
256
+
257
+ Dir.chdir('.mbrew') do
258
+ mp3_tag = nil
259
+
260
+ Dir.chdir('data') do
261
+ FileUtils.mkdir_p(dst_dir_path) if !Dir.exist?(dst_dir_path)
262
+ FileUtils.rm(gpg_file_path) if File.exist?(gpg_file_path)
263
+
264
+ if !File.exist?(gpg_file_path)
265
+ FileUtils.mv(clone_file_basename, dst_dir_path)
266
+ Dir.chdir(dst_dir_path) do
267
+ if !system(gpg_exec).nil?
268
+ mp3_tag = ID3Lib::Tag.new(clone_file_basename)
269
+ FileUtils.rm(clone_file_basename)
270
+ else
271
+ FileUtils.rm(clone_file_basename)
272
+ raise 'FATAL ERROR: gpg failed.'
273
+ end
274
+ end
275
+ else
276
+ FileUtils.rm(clone_file_basename)
277
+ raise "FATAL ERROR: '#{gpg_file_path}' file already exist."
278
+ end
279
+ end
280
+
281
+ if !mp3_tag.nil?
282
+ Dir.chdir('index') do
283
+ FileUtils.mkdir_p(dst_dir_path) if !Dir.exist?(dst_dir_path)
284
+
285
+ mp3_tag_artist = mp3_tag.artist.to_s.to_utf8
286
+ mp3_tag_band = mp3_tag.band.to_s.to_utf8
287
+ mp3_tag_composer = mp3_tag.composer.to_s.to_utf8
288
+ mp3_tag_album = mp3_tag.album.to_s.to_utf8
289
+
290
+ mp3_tag_title = mp3_tag.title
291
+ mp3_tag_year = mp3_tag.year.to_i
292
+
293
+ grepo = Git.open('.')
294
+ grepo.config('user.name', 'Mr. Robot')
295
+ grepo.config('user.email', 'robot@example.com')
296
+
297
+ yaml_store = YAML::Store.new(yml_file_path)
298
+ yaml_store.transaction do
299
+ yaml_store['src'] = {
300
+ 'file_path' => src_file_path,
301
+ 'file_name' => src_file_basename,
302
+ 'hash' => src_file_hex,
303
+ }
304
+ yaml_store['id3'] = {
305
+ 'artist' => "#{mp3_tag_artist}",
306
+ 'band' => "#{mp3_tag_band}",
307
+ 'composer' => "#{mp3_tag_composer}",
308
+ 'album' => "#{mp3_tag_album}",
309
+ 'title' => "#{mp3_tag_title}",
310
+ 'year' => mp3_tag_year,
311
+ }
312
+ end
313
+
314
+ puts "composer: '#{mp3_tag_composer}'"
315
+ puts "album: '#{mp3_tag_album}'"
316
+
317
+ puts "Committing file '#{src_file_path}' ('#{mp3_tag_artist}' - '#{mp3_tag_title}')."
318
+
319
+ begin
320
+ grepo.add(yml_file_path)
321
+ grepo.commit("New file: '#{yml_file_path}' ('#{mp3_tag_artist}' - '#{mp3_tag_title}')")
322
+ rescue Exception => e
323
+ end
324
+
325
+ begin
326
+ grepo.add('.')
327
+ grepo.commit('Misc changes.')
328
+ rescue Exception => e
329
+ end
330
+ end
331
+ end
332
+ end
333
+ else
334
+ $stderr.puts "WARNING: '#{file_path}' no such file."
335
+ end
336
+ end
337
+ end
338
+
339
+ Dir.chdir('.mbrew') do
340
+ staged_yaml = YAML::Store.new('staged.yml')
341
+ staged_yaml.transaction do
342
+ staged_yaml['files'] = []
343
+ end
344
+ end
345
+ when 'status'
346
+ raise 'FATAL ERROR: not a mbrew library.' if !Dir.exist?('.mbrew')
347
+
348
+ opts = OptionParser.new do |opts|
349
+ opts.banner = "Usage: mbrew #{command1}"
350
+ opts.separator('')
351
+
352
+ opts.on_tail('-h', '--help', 'Show this message.') do
353
+ puts opts
354
+ puts
355
+ exit 3
356
+ end
357
+ end
358
+ opts.parse(ARGV)
359
+
360
+ Dir.chdir('.mbrew') do
361
+ files_staged = YAML.load_file('staged.yml')['files']
362
+ if files_staged.count > 0
363
+ puts "Files staged for commit: #{files_staged.count}"
364
+ puts
365
+ puts Rainbow("\t" + (files_staged.join("\n\t"))).red
366
+ puts
367
+ end
368
+ end
369
+ when 'list'
370
+ end
@@ -0,0 +1,2 @@
1
+
2
+ require 'mbrew/version'
@@ -0,0 +1,7 @@
1
+
2
+ module TheFox
3
+ module MBrew
4
+ VERSION = '0.1.0-dev.1'
5
+ DATE = '2015-12-07'
6
+ end
7
+ end
@@ -0,0 +1,34 @@
1
+ # coding: UTF-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'mbrew/version'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = 'mbrew'
10
+ spec.version = TheFox::MBrew::VERSION
11
+ spec.date = TheFox::MBrew::DATE
12
+ spec.author = 'Christian Mayer'
13
+ spec.email = 'christian@fox21.at'
14
+
15
+ spec.summary = %q{MusicBrew}
16
+ spec.description = %q{A combination of Spotify and Homebrew.}
17
+ spec.homepage = 'https://github.com/TheFox/homemusic'
18
+ spec.license = 'GPL-3.0'
19
+
20
+ spec.files = `git ls-files -z`.split("\x0").reject{ |f| f.match(%r{^(test|spec|features)/}) }
21
+ spec.bindir = 'bin'
22
+ spec.executables = ['mbrew']
23
+ spec.require_paths = ['lib']
24
+ spec.required_ruby_version = '>=2.2.0'
25
+
26
+ spec.requirements << 'GPG'
27
+
28
+ spec.add_development_dependency 'bundler', '~>1.10'
29
+
30
+ spec.add_dependency 'rainbow', '~>2.0'
31
+ spec.add_dependency 'git', '~>1.2'
32
+ spec.add_dependency 'id3lib-ruby', '~>0.6'
33
+ spec.add_dependency 'thefox-ext', '~>1.0'
34
+ end
@@ -0,0 +1,10 @@
1
+ {
2
+ "folders":[
3
+ {
4
+ "path": ".",
5
+ "name": "MusicBrew",
6
+ "folder_exclude_patterns": [ ],
7
+ "file_exclude_patterns": [ ]
8
+ }
9
+ ]
10
+ }
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mbrew
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.pre.dev.1
5
+ platform: ruby
6
+ authors:
7
+ - Christian Mayer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rainbow
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: git
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: id3lib-ruby
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.6'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: thefox-ext
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ description: A combination of Spotify and Homebrew.
84
+ email: christian@fox21.at
85
+ executables:
86
+ - mbrew
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - Gemfile
92
+ - Gemfile.lock
93
+ - Makefile
94
+ - Makefile.common
95
+ - README.md
96
+ - bin/mbrew
97
+ - lib/mbrew.rb
98
+ - lib/mbrew/version.rb
99
+ - mbrew.gemspec
100
+ - mbrew.sublime-project
101
+ homepage: https://github.com/TheFox/homemusic
102
+ licenses:
103
+ - GPL-3.0
104
+ metadata: {}
105
+ post_install_message:
106
+ rdoc_options: []
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 2.2.0
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">"
117
+ - !ruby/object:Gem::Version
118
+ version: 1.3.1
119
+ requirements:
120
+ - GPG
121
+ rubyforge_project:
122
+ rubygems_version: 2.4.7
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: MusicBrew
126
+ test_files: []
127
+ has_rdoc: