imba 0.0.1 → 0.0.2

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.
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