imba 0.0.1 → 0.0.2

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
  !binary "U0hBMQ==":
3
- metadata.gz: bd680e374b7adf954363d9a63828cc7b638dee0c
4
- data.tar.gz: 7f49bcb6f01f8430670b1461967a28474824c846
3
+ metadata.gz: d46dce5c9679657e961bfb660b18661c9a45e146
4
+ data.tar.gz: 04b2ed0090f31ead4f8bef3a211c7036c4de4034
5
5
  SHA512:
6
- metadata.gz: 6696504a63e52038ad7b7877afd0a4f9da24f1e28c9d1b8ab69fd2c2828028cee9240a289cd03f61ee4a6d0f9dc90c12bc5c2f408041dd331e617d71d53a728a
7
- data.tar.gz: aba298d79aa8d819122eed1d61e4e6a0c13359825938ee90150bea59320706124eb64ae09f86e030c85e20b710d5cda40787fc5e868b1d60d9ed58b28ddbcabf
6
+ metadata.gz: ae8243cc64ffc7fd59df8bde92e3bdac4b24b5d2346622fb7c56da27ab6b3742a017fbe4e7021e58dce2bf1ed0d9c7f481c8339e62fed303fec402fed37ee9ce
7
+ data.tar.gz: 0fcea6c4f8c47860980bf2c31676ecee1faed54cd982edca030bbb11aa2188983901979aaff7430d0120194c85ab0ff73f47007e79c9a1b4c27d11703e578d64
data/.gitignore CHANGED
@@ -15,4 +15,6 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
- .imba/*
18
+ .imba/*
19
+ *.log
20
+ *.sqlite3
data/README.md CHANGED
@@ -5,21 +5,33 @@
5
5
 
6
6
  ## Todo:
7
7
 
8
+ - [x] build a mess and refactor later :)
8
9
  - [x] init .imba-store
9
10
  - [x] persistence datastore
10
11
  - [x] sync: get current directory list (movie names)
11
- - [ ] rescue ".imba does not exist (PStore::Error)"
12
- - [ ] place names in queue w/o .imba-meta
13
- - [ ] pop movie and search imdb
14
- - [ ] get first item
15
12
  - [x] ask for updating movie
16
- - [x] rename file
17
- - [ ] place .imba-meta file with id, title, genre, rating, year
18
- - [ ] write .imba-meta into imba-store
13
+ - [x] rename directory
14
+ - [x] cleanup movie titles, remove crap like (I)
15
+ - [x] synching stuff with progressbar (downloading all the movies)
16
+ - [x] refactor to use active_record instead of datastore for movies
17
+ - [ ] underscore all the symbols
18
+ - [ ] catch errors in cli
19
+ - [ ] get/send different name when false match
20
+ - [ ] add possibility to update
21
+ - [ ] what's up with folders which were deleted but are still in the db?
22
+ - [ ] add tags to handle genres
23
+ - [ ] database cleaner
24
+ - [ ] fix utf-8 issues
19
25
  - [ ] list movies by rating | genre | etc
20
26
  - [ ] print imba-store
21
- - [ ] play movie # on ATV
22
27
  - [ ] maybe document code with yard
28
+ - [ ] decouple movie (objectify representation)
29
+ - [ ] play movie # on ATV (at least open folder or send to vlc)
30
+
31
+
32
+ ## Impression
33
+
34
+ ![example](/screens/example.png)
23
35
 
24
36
 
25
37
  ## Installation
data/Rakefile CHANGED
@@ -1,5 +1,8 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
+ require 'active_record'
4
+ require 'yaml'
5
+ require 'logger'
3
6
 
4
7
  RSpec::Core::RakeTask.new(:spec)
5
8
 
@@ -10,3 +13,13 @@ task check: :spec do
10
13
  system 'rubocop'
11
14
  system 'flog lib'
12
15
  end
16
+
17
+ desc 'migrate database'
18
+ task migrate: :environment do
19
+ ActiveRecord::Migrator.migrate('db/migrate', ENV['VERSION'] ? ENV['VERSION'].to_i : nil)
20
+ end
21
+
22
+ task :environment do
23
+ ActiveRecord::Base.establish_connection(YAML.load(File.open('db/database.yml')))
24
+ ActiveRecord::Base.logger = Logger.new(File.open('db/database.log', 'a'))
25
+ end
@@ -0,0 +1,4 @@
1
+ adapter: sqlite3
2
+ database: db/data.sqlite3
3
+ pool: 5
4
+ timeout: 5000
@@ -0,0 +1,15 @@
1
+ class CreateMovies < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :movies do |t|
4
+ t.integer :uniq_id
5
+ t.string :name
6
+ t.string :year
7
+ t.text :genres
8
+ t.float :rating
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table :movies
14
+ end
15
+ end
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'rake'
24
24
  spec.add_development_dependency 'rspec', '~> 2.14.1'
25
25
  spec.add_development_dependency 'rspec-pride', '~> 2.2.0'
26
+ spec.add_development_dependency 'database_cleaner', '~> 1.2.0'
26
27
  spec.add_development_dependency 'guard-rspec', '~> 4.2.3'
27
28
  spec.add_development_dependency 'pry', '~> 0.9.12.4'
28
29
  spec.add_development_dependency 'pry-rescue', '~> 1.2.0'
@@ -31,4 +32,7 @@ Gem::Specification.new do |spec|
31
32
  spec.add_development_dependency 'flog'
32
33
 
33
34
  spec.add_runtime_dependency 'imdb', '~> 0.8.0'
35
+ spec.add_runtime_dependency 'activerecord', '~> 4.0.1'
36
+ spec.add_runtime_dependency 'sqlite3', '~> 1.3.8'
37
+ spec.add_runtime_dependency 'ruby-progressbar', '~> 1.4.0'
34
38
  end
@@ -1,3 +1,6 @@
1
+ # encoding: utf-8
2
+ require 'active_record'
3
+ require 'yaml'
1
4
  require 'imba/version'
2
5
  require 'imba/cli'
3
6
  require 'imba/colors'
@@ -9,4 +12,11 @@ require 'imdb'
9
12
  module Imba
10
13
  PATH ||= Dir.pwd
11
14
  DIRECTORY = "#{PATH}/.imba"
15
+
16
+ ActiveRecord::Base.establish_connection(
17
+ adapter: 'sqlite3',
18
+ database: "#{DIRECTORY}/data.sqlite3",
19
+ pool: 5,
20
+ timeout: 5000
21
+ )
12
22
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'optparse'
2
3
 
3
4
  module Imba
@@ -14,6 +15,7 @@ module Imba
14
15
  else
15
16
  "#{PATH}/.imba".tap { |dir| FileUtils.mkdir_p(dir) }
16
17
  Imba::DataStore.init
18
+ Imba::DataStore.migrate
17
19
  end
18
20
  exit
19
21
  end
@@ -28,6 +30,16 @@ module Imba
28
30
  exit
29
31
  end
30
32
 
33
+ opts.on('-s', '--synch', 'Scan movies and update database') do
34
+ Imba::MovieList.new.synch
35
+ exit
36
+ end
37
+
38
+ opts.on('-l', '--list', 'List all your movies') do
39
+ stdout.puts Imba::Movie.list
40
+ exit
41
+ end
42
+
31
43
  opts.on('-v', '--version', 'Show current version') do
32
44
  stdout.puts "IMBA #{Imba::VERSION}"
33
45
  exit
@@ -38,7 +50,7 @@ module Imba
38
50
  exit
39
51
  end
40
52
 
41
- opts.on('-e', 'execute raw ruby in the "Imba::*" scope') do
53
+ opts.on('-e', 'execute raw ruby in the "Imba::*" scope (just for dev purpose, will be removed soon!)') do
42
54
  stdout.puts eval("Imba::#{argv[0]}")
43
55
  exit
44
56
  end
@@ -1,82 +1,26 @@
1
- require 'pstore'
2
-
3
1
  module Imba
4
2
  module DataStore
5
3
  class << self
6
- attr_reader :data
7
- attr_writer :path
8
-
9
4
  def init
10
- @data = PStore.new(path, true)
11
- @data.ultra_safe = true
12
- @data.transaction { @data.commit }
13
- @data
14
- end
15
-
16
- def path
17
- @path ||= "#{Imba::DIRECTORY}/data.pstore"
18
- end
19
-
20
- def data_store
21
- data || init
22
- end
23
-
24
- def [](key)
25
- data_store.transaction(true) { @data[key] }
26
- end
27
-
28
- def []=(key, value)
29
- data_store.transaction { @data[key] = value }
30
- end
31
-
32
- def all
33
- data_store.transaction(true) { @data.roots }
34
- end
35
-
36
- def to_hash
37
- Imba::DataStore.all.each_with_object({}) { |id, hsh| hsh[id] = Imba::DataStore[id] }
38
- end
39
-
40
- def to_a
41
- Imba::DataStore.all.each_with_object([]) { |id, ary| ary << "#{id}: #{Imba::DataStore[id]}" }
42
- end
43
-
44
- def transaction
45
- data_store.transaction do
46
- yield @data
47
- @data.commit
48
- end
49
- end
50
-
51
- def key?(key)
52
- data_store.transaction(true) { @data.root?(key) }
53
- end
54
-
55
- def delete(*keys)
56
- data_store.transaction do
57
- keys.flatten.each { |key| @data.delete(key) }
58
- @data.commit
5
+ ActiveRecord::Base.establish_connection(
6
+ adapter: 'sqlite3',
7
+ database: "#{DIRECTORY}/data.sqlite3",
8
+ pool: 5,
9
+ timeout: 5000
10
+ )
11
+ end
12
+
13
+ def migrate
14
+ ActiveRecord::Schema.define do
15
+ create_table :movies do |t|
16
+ t.integer :uniq_id
17
+ t.string :name
18
+ t.string :year
19
+ t.text :genres
20
+ t.float :rating
21
+ end
59
22
  end
60
23
  end
61
-
62
- def clear
63
- delete(all)
64
- end
65
-
66
- def inspect
67
- data_store
68
- "#<#{name}:#{ruby_like_object_id} #{instance_vars}>"
69
- end
70
-
71
- private
72
-
73
- def ruby_like_object_id
74
- "0x#{(object_id << 1).to_s(16)}"
75
- end
76
-
77
- def instance_vars
78
- instance_variables.map { |v| "#{v}=#{instance_variable_get(v).inspect}" }.join(', ')
79
- end
80
24
  end
81
25
  end
82
26
  end
@@ -1,7 +1,24 @@
1
1
  module Imba
2
- class Movie
3
- def self.all
4
- Imba::DataStore[:movies] || []
2
+ class Movie < ActiveRecord::Base
3
+ include Colors
4
+ serialize :genres, Array
5
+
6
+ scope :list, -> { order(name: :asc) }
7
+ scope :top, ->(n = 25) { order(rating: :desc).limit(n) }
8
+ scope :year, ->(year = Time.now.year) { where(year: year) }
9
+ scope :genre, ->(genre = nil) { where('genres LIKE ?', "%#{genre}%") }
10
+
11
+ def to_s
12
+ terminal_width = `tput cols`
13
+ column = terminal_width.to_i / 2
14
+
15
+ ''.tap do |s|
16
+ s << "#{sprintf('%-9s', uniq_id)} #{green(name)}".ljust(column)
17
+ s << ' ' + magenta("(#{year})")
18
+ s << ' ' + red("#{rating}/10")
19
+ s << ' ' + yellow(genres)
20
+ s.rjust(column)
21
+ end
5
22
  end
6
23
  end
7
24
  end
@@ -1,52 +1,83 @@
1
+ # encoding: utf-8
2
+ require 'thread'
3
+ require 'ruby-progressbar'
4
+
1
5
  module Imba
2
6
  class MovieList
3
7
  include Colors
4
8
  attr_reader :movies
9
+ attr_accessor :directory_queue, :movie_queue
10
+
11
+ Diff = Struct.new(:directory_name, :movie_title, :result)
5
12
 
6
13
  def initialize
7
14
  @movies = Movie.all
15
+ @directory_queue = Queue.new
16
+ @movie_queue = Queue.new
8
17
  end
9
18
 
10
19
  def movie_dirs
11
- # don't belong here...
12
- # get movie names (dirs)
13
20
  @movie_dirs ||= Dir['*'].select { |f| File.directory? f }
14
21
  end
15
22
 
16
- def add
17
- Imba::DataStore[:movies] = movie_dirs
18
- end
19
- # @movie_dirs.each { |d| FileUtils.cd(d) { FileUtils.touch ".hello" } }
20
-
23
+ #
24
+ # TODO: make it work first, refactor later (for even more fun!)
25
+ #
21
26
  def synch
22
27
  prompt = '(enter "y" to confirm or anything else to continue)'
23
- # for each movie
28
+ indexed_movies = Movie.pluck(:uniq_id)
29
+ p = ProgressBar.create(title: 'Scanning your movies', total: movie_dirs.length)
30
+ skipped = []
31
+
32
+ # populate queue
24
33
  movie_dirs.each do |directory_name|
25
- # check movie name on imdb
26
- result = Imdb::Movie.search(directory_name).first # needs rescue?
27
- movie_title = result.title.gsub(/\(\d+\)/, '').strip
28
- movie = "#{movie_title} (#{result.year}) #{result.genres} #{result.rating}/10"
34
+ FileUtils.cd(directory_name) do
35
+ if File.exist?('.imba') && File.open('.imba') { |f| indexed_movies.include?(f.read.to_i) }
36
+ skipped << directory_name
37
+ p.increment
38
+ else
39
+ directory_queue.push(directory_name)
40
+ end
41
+ end
42
+ end
43
+
44
+ # download all the movies
45
+ until directory_queue.empty?
46
+ directory_name = directory_queue.pop
47
+ result = Imdb::Movie.search(directory_name).first
48
+ movie_title = result.title.gsub(/\(\d+\)|\(.*\)/, '').strip.force_encoding('UTF-8')
49
+ movie_queue.push Diff.new(directory_name, movie_title, result)
50
+ p.increment
51
+ end
29
52
 
30
- # puts foundings
53
+ # puts foundings
54
+ until movie_queue.empty?
55
+ diff = movie_queue.pop
31
56
  # update movie name? (folder)
32
- if directory_name != movie_title
33
- puts "change #{red(directory_name)} => #{green(movie_title)}? \n#{prompt}"
34
- FileUtils.mv(directory_name, movie_title) if STDIN.gets.strip.downcase == 'y'
57
+ if diff.directory_name != diff.movie_title
58
+ STDOUT.puts "change #{red(diff.directory_name)} => #{green(diff.movie_title)}? \n#{prompt}"
59
+ FileUtils.mv(diff.directory_name, movie_title) if STDIN.gets.strip.downcase == 'y'
35
60
  end
36
61
 
37
- if Imba::DataStore.key?(result.id) && Imba::DataStore[result.id] != movie
38
- puts "update?\n- #{red(Imba::DataStore[result.id])} \n+ #{green(movie)} \n#{prompt}"
39
- Imba::DataStore[result.id] = movie if STDIN.gets.strip.downcase == 'y'
40
- else
41
- Imba::DataStore[result.id] = movie
62
+ # create movie from result
63
+ STDOUT.puts "save #{green(diff.movie_title)}? \n#{prompt}"
64
+ if STDIN.gets.strip.downcase == 'y'
65
+ movie = Movie.create(
66
+ uniq_id: diff.result.id,
67
+ name: diff.movie_title,
68
+ year: diff.result.year,
69
+ genres: diff.result.genres.map { |g| g.downcase.to_sym },
70
+ rating: Float(diff.result.rating)
71
+ )
72
+ FileUtils.cd(diff.movie_title) do
73
+ File.open('.imba', 'w+') { |f| f.write(movie.uniq_id) }
74
+ end
75
+ STDOUT.puts cyan("#{movie.to_s}\n")
42
76
  end
43
-
44
- # ask if founding is correct
45
- # write .imdb_uniq_id in movie folder
46
- # save movie name and imdb_uniq_id in DataStore[:movies]
47
- # or serialize hole imdb movie object?!
48
77
  end
49
- STDOUT.puts 'done'
78
+
79
+ skipped.each { |skip| STDOUT.puts yellow("skipped: #{skip}") }
80
+ STDOUT.puts "\ndone"
50
81
  end
51
82
  end
52
83
  end
@@ -1,3 +1,3 @@
1
1
  module Imba
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
Binary file
@@ -3,46 +3,5 @@ require 'spec_helper'
3
3
  module Imba
4
4
  describe DataStore do
5
5
 
6
- describe '#inspect' do
7
- subject { Imba::DataStore.inspect }
8
- it { expect(subject).to include('#<Imba::DataStore:0x') }
9
- it { expect(subject).to include(Imba::DataStore.path) }
10
- it { expect(subject).to include('/tmp/.imba_test/test_data.pstore') }
11
- it { expect(subject).to include('@data=#<PStore:') }
12
- it { expect(subject).to include('@ultra_safe=true') }
13
- it { expect(subject).to include('@thread_safe=true') }
14
- it { expect(subject).to include('@table={}') }
15
- end
16
-
17
- describe 'read/write something in/from the data store' do
18
- before { Imba::DataStore[:something] = { foo: 'bar' } }
19
- it { expect(Imba::DataStore[:something]).to eql(foo: 'bar') }
20
- it { expect(Imba::DataStore.all).to eql([:something]) }
21
- it { expect(Imba::DataStore.key?(:something)).to be_true }
22
- end
23
-
24
- describe 'delete something from the data store' do
25
- before do
26
- Imba::DataStore[:stay_my_friend] = { foo: 'bar' }
27
- Imba::DataStore[:delete_me] = 'can\'t wait'
28
- Imba::DataStore.delete(:delete_me)
29
- end
30
- it { expect(Imba::DataStore.key?(:delete_me)).to be_false }
31
- it { expect(Imba::DataStore.all).to eql([:stay_my_friend]) }
32
- end
33
-
34
- describe 'multi transactions' do
35
- before do
36
- Imba::DataStore.transaction do |data|
37
- data[:number] = 42
38
- data[:foo] = 'bar bazly'
39
- data[:words] = %w[amazing stuff inside transaction]
40
- end
41
- end
42
-
43
- it { expect(Imba::DataStore.all).to eql([:number, :foo, :words]) }
44
- it { expect(Imba::DataStore[:words]).to eql(%w[amazing stuff inside transaction]) }
45
- end
46
-
47
6
  end
48
7
  end
@@ -2,13 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  module Imba
4
4
  describe MovieList do
5
- # it { binding.pry }
6
-
7
- # movie_dirs = Dir['*'].select {|f| File.directory? f}
8
- #
9
- # require "find"
10
- # imba_files = []
11
- # Find.find(".") {|path| imba_files << path if path =~ /\.imba$/}
12
5
 
13
6
  end
14
7
  end
@@ -2,6 +2,12 @@ require 'spec_helper'
2
2
 
3
3
  module Imba
4
4
  describe Movie do
5
- it { expect(Movie.all).to eql([]) }
5
+ let!(:sneakers) { Movie.create(name: 'Sneakers', uniq_id: 1, year: 2012, genres: [:foo, :hackers], rating: 7.0) }
6
+ let!(:war_games) { Movie.create(name: 'War Games', uniq_id: 2, year: 2012, genres: [:foo, :war], rating: 8.0) }
7
+ let!(:tron) { Movie.create(name: 'Tron: Legacy', uniq_id: 3, year: 2012, genres: [:foo, :tron], rating: 9.0) }
8
+
9
+ it { expect(Movie.list).to match_array([sneakers, tron, war_games]) }
10
+ it { expect(Movie.top(5).first).to eql(tron) }
11
+ it { expect(Movie.top(5).last).to eql(sneakers) }
6
12
  end
7
13
  end
@@ -1,17 +1,34 @@
1
1
  require 'rspec/pride'
2
+ require 'database_cleaner'
2
3
  require 'pry'
3
4
  require_relative '../lib/imba'
4
5
 
6
+ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ":memory:")
7
+
5
8
  RSpec.configure do |config|
6
9
  config.color = true
7
10
  config.order = 'random'
8
11
 
9
- config.before(:all) do
10
- FileUtils.mkdir_p("../tmp/.imba_test")
11
- Imba::DataStore.path = "../tmp/.imba_test/test_data.pstore"
12
- Imba::DataStore.init
12
+ config.before(:suite) do
13
+ ActiveRecord::Schema.define do
14
+ self.verbose = false
15
+ create_table :movies, force: true do |t|
16
+ t.integer :uniq_id
17
+ t.string :name
18
+ t.string :year
19
+ t.text :genres
20
+ t.float :rating
21
+ end
22
+ end
23
+ DatabaseCleaner.strategy = :transaction
24
+ DatabaseCleaner.clean_with(:truncation)
25
+ end
26
+
27
+ config.before(:each) do
28
+ DatabaseCleaner.start
13
29
  end
14
30
 
15
- config.before(:each) { Imba::DataStore.clear }
16
- config.after(:all) { Imba::DataStore.clear }
31
+ config.after(:each) do
32
+ DatabaseCleaner.clean
33
+ end
17
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Schaden
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-11 00:00:00.000000000 Z
11
+ date: 2014-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: 2.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: database_cleaner
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 1.2.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.0
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: guard-rspec
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +178,48 @@ dependencies:
164
178
  - - ~>
165
179
  - !ruby/object:Gem::Version
166
180
  version: 0.8.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: activerecord
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ~>
186
+ - !ruby/object:Gem::Version
187
+ version: 4.0.1
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ~>
193
+ - !ruby/object:Gem::Version
194
+ version: 4.0.1
195
+ - !ruby/object:Gem::Dependency
196
+ name: sqlite3
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ~>
200
+ - !ruby/object:Gem::Version
201
+ version: 1.3.8
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ~>
207
+ - !ruby/object:Gem::Version
208
+ version: 1.3.8
209
+ - !ruby/object:Gem::Dependency
210
+ name: ruby-progressbar
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ~>
214
+ - !ruby/object:Gem::Version
215
+ version: 1.4.0
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ~>
221
+ - !ruby/object:Gem::Version
222
+ version: 1.4.0
167
223
  description: With Imba you can manage your movies by meta information (like rating,
168
224
  genre, year) from IMDB.
169
225
  email:
@@ -183,6 +239,8 @@ files:
183
239
  - README.md
184
240
  - Rakefile
185
241
  - bin/imba
242
+ - db/database.yml
243
+ - db/migrate/001_create_movies.rb
186
244
  - imba.gemspec
187
245
  - lib/imba.rb
188
246
  - lib/imba/cli.rb
@@ -191,6 +249,7 @@ files:
191
249
  - lib/imba/movie.rb
192
250
  - lib/imba/movie_list.rb
193
251
  - lib/imba/version.rb
252
+ - screens/example.png
194
253
  - spec/data_store_spec.rb
195
254
  - spec/imba_spec.rb
196
255
  - spec/movie_list_spec.rb