organo 0.3.5 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/doc/anime.md +30 -8
  3. data/doc/readme.md +2 -2
  4. data/lib/organo/commands/anime/anime_add.rb +27 -24
  5. data/lib/organo/commands/anime/anime_find_broken_links.rb +31 -0
  6. data/lib/organo/commands/anime/anime_remove.rb +10 -14
  7. data/lib/organo/commands/anime/anime_set_sequel.rb +49 -0
  8. data/lib/organo/commands/anime/anime_show.rb +9 -15
  9. data/lib/organo/commands/anime/anime_update_image.rb +16 -35
  10. data/lib/organo/commands/anime/anime_update_query.rb +16 -21
  11. data/lib/organo/commands/api/api_get_anime.rb +3 -6
  12. data/lib/organo/commands/api/api_get_season.rb +3 -4
  13. data/lib/organo/commands/api/api_get_sequels.rb +1 -3
  14. data/lib/organo/commands/init.rb +30 -8
  15. data/lib/organo/commands/remote/remote_add.rb +6 -10
  16. data/lib/organo/commands/remote/remote_download.rb +5 -6
  17. data/lib/organo/commands/remote/remote_remove.rb +0 -2
  18. data/lib/organo/commands/remote/remote_upload.rb +1 -2
  19. data/lib/organo/commands/statistics.rb +6 -21
  20. data/lib/organo/query.rb +0 -1
  21. data/lib/organo/tools/string_utils.rb +28 -0
  22. data/lib/organo/tools/writer.rb +0 -5
  23. data/lib/organo/version.rb +1 -1
  24. data/lib/organo.rb +33 -43
  25. metadata +36 -17
  26. data/lib/organo/commands/anime/anime_add_sequel.rb +0 -52
  27. data/lib/organo/commands/anime/anime_get_broken_links.rb +0 -32
  28. data/lib/organo/commands/anime/anime_search.rb +0 -25
  29. data/lib/organo/commands/api/api_search_anime.rb +0 -29
  30. data/lib/organo/commands/merge.rb +0 -24
  31. data/lib/organo/model/search_show.rb +0 -58
  32. data/lib/organo/model/sequel.rb +0 -39
  33. data/lib/organo/model/show.rb +0 -36
  34. data/lib/organo/show_list.rb +0 -32
  35. data/lib/organo/tools/check.rb +0 -12
  36. data/lib/organo/tools/local_search.rb +0 -49
  37. data/lib/organo/tools/reader.rb +0 -38
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'net/ftp'
4
- require_relative '../../tools/check'
5
4
 
6
5
  module Organo
7
6
  module CLI
@@ -13,7 +12,6 @@ module Organo
13
12
  argument :env, type: :string, required: true, desc: 'Environment'
14
13
 
15
14
  def call(env:, **)
16
- Check.init?
17
15
  config = File.exist?(Config::DEFAULT_FILE) ? JSON.parse(File.read(Config::DEFAULT_FILE)) : nil
18
16
  section = config.find { |option| option['section'] == 'remotes' }
19
17
  if section.nil?
@@ -25,6 +23,7 @@ module Organo
25
23
  else
26
24
  local_files = Dir['./*.{data,config}.json']
27
25
  local_files.push('./schedule.json')
26
+ local_files.push('./dkb_edited.db')
28
27
  Net::FTP.open(credentials['url']) do |ftp|
29
28
  ftp.login(credentials['username'], credentials['password'])
30
29
  ftp.chdir(credentials['directory'])
@@ -1,34 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../tools/reader'
4
- require_relative '../tools/check'
3
+ require 'sequel'
5
4
 
6
5
  module Organo
7
6
  module CLI
8
7
  module Commands
9
8
 
10
9
  class Statistics < Dry::CLI::Command
11
- desc 'Merge edited seasonal files into one main file'
10
+ desc 'Get statistics from data'
12
11
 
13
12
  def call(*)
14
- Check.init?
15
- shows_num = 0
16
- total_size = 0
17
- sequels_num = 0
18
- Dir["#{Config::DEFAULT_DIR}/*.json"].each do |file_path|
19
- shows = Reader.read_file(file_path)
20
- file_size = File.size(file_path)
21
- puts "#{File.basename(file_path)}: #{shows.count} (#{file_size.to_f / 1000} KB)"
22
- shows_num += shows.count
23
- shows.each do |show|
24
- sequels_num += show.sequels.size
25
- end
26
- total_size += file_size
27
- end
28
- puts '------------------------------'
29
- puts "Shows count: #{shows_num}"
30
- puts "Sequels count: #{sequels_num}"
31
- puts "Total file size: #{total_size.to_f / 1000} KB"
13
+ db = Sequel.sqlite('dkb_edited.db')
14
+ puts "Total show count: #{db.from(:shows).count}"
15
+ puts "Non-sequel show count #{db.from(:shows).where(is_sequel: false).count}"
16
+ puts "Sequel show count: #{db.from(:sequels).count}"
32
17
  end
33
18
  end
34
19
 
data/lib/organo/query.rb CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require_relative 'jikan_api'
4
4
  require_relative 'request'
5
- require_relative 'model/search_show'
6
5
 
7
6
  module Organo
8
7
  class Query
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Organo
4
+ class StringUtils
5
+ def self.create_slug(title)
6
+ # strip the string
7
+ ret = title.strip
8
+
9
+ # blow away apostrophes
10
+ ret.gsub!(/['`]/, '')
11
+
12
+ # @ --> at, and & --> and
13
+ ret.gsub!(/\s*@\s*/, ' at ')
14
+ ret.gsub!(/\s*&\s*/, ' and ')
15
+
16
+ # replace all non alphanumeric with dash
17
+ ret.gsub!(/\s*[^A-Za-z0-9]\s*/, '-')
18
+
19
+ # convert double underscores to single
20
+ ret.gsub!(/-+/, '-')
21
+
22
+ # strip off leading/trailing dash
23
+ ret.gsub!(/\A-+|-+\z/, '')
24
+
25
+ ret.downcase
26
+ end
27
+ end
28
+ end
@@ -4,11 +4,6 @@ require 'json'
4
4
 
5
5
  module Organo
6
6
  class Writer
7
- def self.to_data_file(obj, file_name)
8
- file_path = "./#{file_name}.data.json"
9
- File.write(file_path, JSON.pretty_generate(obj))
10
- end
11
-
12
7
  def self.to_file(obj, file_path)
13
8
  File.write(file_path, JSON.pretty_generate(obj))
14
9
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Organo
4
- VERSION = '0.3.5'
4
+ VERSION = '0.4.2'
5
5
  end
data/lib/organo.rb CHANGED
@@ -1,63 +1,53 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'dry/cli'
2
4
 
5
+ require_relative 'organo/commands/version'
3
6
  require_relative 'organo/commands/init'
7
+ require_relative 'organo/commands/statistics'
8
+ require_relative 'organo/commands/anime/anime_show'
4
9
  require_relative 'organo/commands/anime/anime_add'
5
- require_relative 'organo/commands/anime/anime_add_sequel'
6
- require_relative 'organo/commands/anime/anime_get_broken_links'
7
10
  require_relative 'organo/commands/anime/anime_remove'
8
- require_relative 'organo/commands/anime/anime_show'
9
- require_relative 'organo/commands/anime/anime_search'
11
+ require_relative 'organo/commands/anime/anime_set_sequel'
12
+ require_relative 'organo/commands/anime/anime_find_broken_links'
10
13
  require_relative 'organo/commands/anime/anime_update_image'
11
14
  require_relative 'organo/commands/anime/anime_update_query'
12
- require_relative 'organo/commands/api/api_get_anime'
13
- require_relative 'organo/commands/api/api_get_sequels'
14
- require_relative 'organo/commands/api/api_get_season'
15
- require_relative 'organo/commands/api/api_search_anime'
16
- require_relative 'organo/commands/api/api_get_schedule'
17
15
  require_relative 'organo/commands/remote/remote_add'
18
16
  require_relative 'organo/commands/remote/remote_remove'
19
17
  require_relative 'organo/commands/remote/remote_download'
20
18
  require_relative 'organo/commands/remote/remote_upload'
21
- require_relative 'organo/commands/merge'
22
- require_relative 'organo/commands/version'
23
- require_relative 'organo/commands/statistics'
24
- require_relative 'organo/commands/schedule/schedule_create'
19
+ require_relative 'organo/commands/api/api_get_anime'
20
+ require_relative 'organo/commands/api/api_get_season'
21
+ require_relative 'organo/commands/api/api_get_sequels'
25
22
 
26
23
  module Organo
27
24
  module CLI
28
25
  module Commands
29
26
  extend Dry::CLI::Registry
27
+ # Misc commands
28
+ register 'version', Organo::CLI::Commands::Version, aliases: %w[v -v --version]
29
+ register 'init', Organo::CLI::Commands::Init
30
+ register 'stats', Organo::CLI::Commands::Statistics
31
+
32
+ # Anime commands
33
+ register 'anime show', Organo::CLI::Commands::Anime::ShowEntry
34
+ register 'anime add', Organo::CLI::Commands::Anime::AddEntry
35
+ register 'anime remove', Organo::CLI::Commands::Anime::RemoveEntry
36
+ register 'anime set_sequel', Organo::CLI::Commands::Anime::SequelEntry
37
+ register 'anime find_broken_links', Organo::CLI::Commands::Anime::FindBrokenLinks
38
+ register 'anime update image', Organo::CLI::Commands::Anime::UpdateImage
39
+ register 'anime update search_query', Organo::CLI::Commands::Anime::UpdateSearchQuery
40
+
41
+ # Remote commands
42
+ register 'remote add', Organo::CLI::Commands::Remote::AddEntry
43
+ register 'remote remove', Organo::CLI::Commands::Remote::Remove
44
+ register 'remote download', Organo::CLI::Commands::Remote::Download
45
+ register 'remote download', Organo::CLI::Commands::Remote::Upload
30
46
 
31
- register 'version', Version, aliases: %w[v -v --version]
32
- register 'init', Init
33
- register 'anime' do |prefix|
34
- prefix.register 'add', Anime::Add::AnimeEntry
35
- prefix.register 'add sequel', Anime::Add::SequelEntry
36
- prefix.register 'remove', Anime::Remove
37
- prefix.register 'show', Anime::Show
38
- prefix.register 'search', Anime::Search
39
- prefix.register 'update image', Anime::Update::Image
40
- prefix.register 'update search_query', Anime::Update::SearchQuery
41
- prefix.register 'get broken_links', Anime::Get::BrokenLinks
42
- end
43
- register 'api' do |prefix|
44
- prefix.register 'get anime', API::Get::Anime
45
- prefix.register 'get season', API::Get::Season
46
- prefix.register 'get sequels', API::Get::Sequels
47
- prefix.register 'search anime', API::Search::Anime
48
- prefix.register 'get schedule', API::Get::Schedule
49
- end
50
- register 'merge', Merge
51
- register 'statistics', Statistics
52
- register 'remote' do |prefix|
53
- prefix.register 'add', Remote::Add
54
- prefix.register 'remove', Remote::Remove
55
- prefix.register 'download', Remote::Download
56
- prefix.register 'upload', Remote::Upload
57
- end
58
- register 'schedule' do |prefix|
59
- prefix.register 'create', Schedule::Create
60
- end
47
+ # API commands
48
+ register 'api get anime', Organo::CLI::Commands::API::Get::Anime
49
+ register 'api get season', Organo::CLI::Commands::API::Get::Season
50
+ register 'api get sequels', Organo::CLI::Commands::API::Get::Sequels
61
51
  end
62
52
  end
63
53
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: organo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Louis-Philippe Fortin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-27 00:00:00.000000000 Z
11
+ date: 2023-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-cli
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sequel
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.74'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.74'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.6'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.6'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rubocop
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,8 +94,8 @@ dependencies:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
96
  version: '1.44'
69
- description: Get JSON data from Jikan, an unofficial MyAnimeList API, that can be
70
- used on an anime website
97
+ description: Gets JSON data from different APIs to build a local database that can
98
+ be used in other applications
71
99
  email:
72
100
  - timemaster.lpf@gmail.com
73
101
  executables:
@@ -87,10 +115,9 @@ files:
87
115
  - lib/organo.rb
88
116
  - lib/organo/animeschedule_api.rb
89
117
  - lib/organo/commands/anime/anime_add.rb
90
- - lib/organo/commands/anime/anime_add_sequel.rb
91
- - lib/organo/commands/anime/anime_get_broken_links.rb
118
+ - lib/organo/commands/anime/anime_find_broken_links.rb
92
119
  - lib/organo/commands/anime/anime_remove.rb
93
- - lib/organo/commands/anime/anime_search.rb
120
+ - lib/organo/commands/anime/anime_set_sequel.rb
94
121
  - lib/organo/commands/anime/anime_show.rb
95
122
  - lib/organo/commands/anime/anime_update_image.rb
96
123
  - lib/organo/commands/anime/anime_update_query.rb
@@ -98,9 +125,7 @@ files:
98
125
  - lib/organo/commands/api/api_get_schedule.rb
99
126
  - lib/organo/commands/api/api_get_season.rb
100
127
  - lib/organo/commands/api/api_get_sequels.rb
101
- - lib/organo/commands/api/api_search_anime.rb
102
128
  - lib/organo/commands/init.rb
103
- - lib/organo/commands/merge.rb
104
129
  - lib/organo/commands/remote/remote_add.rb
105
130
  - lib/organo/commands/remote/remote_download.rb
106
131
  - lib/organo/commands/remote/remote_remove.rb
@@ -110,15 +135,9 @@ files:
110
135
  - lib/organo/commands/version.rb
111
136
  - lib/organo/config.rb
112
137
  - lib/organo/jikan_api.rb
113
- - lib/organo/model/search_show.rb
114
- - lib/organo/model/sequel.rb
115
- - lib/organo/model/show.rb
116
138
  - lib/organo/query.rb
117
139
  - lib/organo/request.rb
118
- - lib/organo/show_list.rb
119
- - lib/organo/tools/check.rb
120
- - lib/organo/tools/local_search.rb
121
- - lib/organo/tools/reader.rb
140
+ - lib/organo/tools/string_utils.rb
122
141
  - lib/organo/tools/writer.rb
123
142
  - lib/organo/version.rb
124
143
  homepage: https://gitlab.com/dkb-weeblets/organo
@@ -146,5 +165,5 @@ requirements: []
146
165
  rubygems_version: 3.2.33
147
166
  signing_key:
148
167
  specification_version: 4
149
- summary: Tool to build dataset from Jikan API
168
+ summary: Tool to build dataset from Anime database APIs
150
169
  test_files: []
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../config'
4
- require_relative '../../tools/writer'
5
- require_relative '../../tools/reader'
6
- require_relative '../../tools/local_search'
7
- require_relative '../../tools/check'
8
-
9
- module Organo
10
- module CLI
11
- module Commands
12
- module Anime
13
- module Add
14
-
15
- class SequelEntry < Dry::CLI::Command
16
- desc 'Add anime sequel entry to anime in file'
17
- argument :anime_mal_id, type: :integer, required: true, desc: 'Anime MyAnimeList ID'
18
- argument :sequel_mal_id, type: :integer, required: true, desc: 'Sequel MyAnimeList ID'
19
- argument :season_num, type: :integer, required: false, default: 0, desc: 'Season number'
20
- argument :type, type: :string, required: false, default: '', values: %w[part movie special], desc: 'Type of sequel (part, movie, special)'
21
- argument :type_num, type: :integer, required: false, default: 0, desc: 'The sequel type number'
22
-
23
- def call(anime_mal_id:, sequel_mal_id:, season_num:, type:, type_num:, **)
24
- Check.init?
25
- if LocalSearch.find_anime_by_id(sequel_mal_id).nil?
26
- json_obj = Query.get_anime_by_id(sequel_mal_id)
27
- sequel = Sequel.new(
28
- json_obj['mal_id'],
29
- json_obj['title'],
30
- json_obj['images']['jpg']['image_url'],
31
- season_num,
32
- type,
33
- type_num
34
- )
35
- file_path = LocalSearch.find_file_by_anime_id(anime_mal_id)
36
- show_list = Reader.read_file(file_path).each do |show|
37
- show.sequels.push(sequel) if show.id == anime_mal_id.to_i
38
- end
39
- show_info = show_list.find { |show| show.id == anime_mal_id.to_i }
40
- Writer.to_file(show_list, file_path)
41
- puts "Added sequel \"#{sequel.title}\" (#{sequel.id}) to anime \"#{show_info.title}\" (#{anime_mal_id}) in #{file_path}."
42
- else
43
- puts 'This sequel already exists.'
44
- end
45
- end
46
- end
47
-
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,32 +0,0 @@
1
- require 'httparty'
2
- require_relative '../../tools/reader'
3
- require_relative '../../tools/check'
4
-
5
- module Organo
6
- module CLI
7
- module Commands
8
- module Anime
9
- module Get
10
-
11
- class BrokenLinks < Dry::CLI::Command
12
- desc 'Get list of anime IDs that have broken links'
13
-
14
- def call(*)
15
- Check.init?
16
- show_list = Reader.read_all_files
17
- broken_list = []
18
- show_list.each do |show|
19
- response = HTTParty.get(show.image_url)
20
- next unless response.code == 404
21
-
22
- broken_list.push(show.id)
23
- end
24
- puts broken_list.join(' ') unless broken_list.empty?
25
- end
26
- end
27
-
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../config'
4
- require_relative '../../tools/local_search'
5
- require_relative '../../tools/check'
6
-
7
- module Organo
8
- module CLI
9
- module Commands
10
- module Anime
11
-
12
- class Search < Dry::CLI::Command
13
- desc 'Search anime by query from files'
14
- argument :query, type: :string, required: true, desc: 'Search query'
15
-
16
- def call(query:, **)
17
- Check.init?
18
- puts (LocalSearch.find_anime_by_query(query).map{ |anime| anime.to_json} )
19
- end
20
- end
21
-
22
- end
23
- end
24
- end
25
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../query'
4
- require_relative '../../show_list'
5
-
6
- module Organo
7
- module CLI
8
- module Commands
9
- module API
10
- module Search
11
-
12
- class Anime < Dry::CLI::Command
13
- desc 'Get a list anime from query'
14
- argument :query, type: :string, required: true, desc: 'Search query'
15
- option :type, type: :string, required: false, default: '', values: %w[tv movie ova special ona music], desc: 'Type of anime'
16
- option :limit, type: :integer, required: false, default: 5, desc: 'Limit number of results'
17
-
18
- def call(query:, type:, limit:, **)
19
- json_obj = Query.search_anime(query, { 'type' => type, 'limit' => limit})
20
- show_list = ShowList.create_search_show_list(json_obj)
21
- puts show_list.to_json
22
- end
23
- end
24
-
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../tools/reader'
4
- require_relative '../tools/writer'
5
- require_relative '../tools/check'
6
-
7
- module Organo
8
- module CLI
9
- module Commands
10
-
11
- class Merge < Dry::CLI::Command
12
- desc 'Merge edited seasonal files into one main file'
13
-
14
- def call(*)
15
- Check.init?
16
- show_list = Reader.read_all_files
17
- Writer.to_data_file(show_list, 'shows')
18
- puts 'Edited files have been merged.'
19
- end
20
- end
21
-
22
- end
23
- end
24
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Organo
6
- class SearchShow
7
- attr_accessor :id, :title, :image_url, :search_query
8
-
9
- def initialize(id, title, image_url)
10
- @id = id
11
- @slug = create_slug(title)
12
- @title = title.to_s
13
- @image_url = image_url
14
- @search_query = title
15
- end
16
-
17
- def create_slug(title)
18
- # strip the string
19
- ret = title.strip
20
-
21
- # blow away apostrophes
22
- ret.gsub!(/['`]/, '')
23
-
24
- # @ --> at, and & --> and
25
- ret.gsub!(/\s*@\s*/, ' at ')
26
- ret.gsub!(/\s*&\s*/, ' and ')
27
-
28
- # replace all non alphanumeric with dash
29
- ret.gsub!(/\s*[^A-Za-z0-9]\s*/, '-')
30
-
31
- # convert double underscores to single
32
- ret.gsub!(/-+/, '-')
33
-
34
- # strip off leading/trailing dash
35
- ret.gsub!(/\A-+|-+\z/, '')
36
-
37
- ret.downcase
38
- end
39
-
40
- def to_s
41
- "title: #{@title}, synopsis: #{@description}, image_url: #{@image_url}"
42
- end
43
-
44
- def as_json(_options = {})
45
- {
46
- id: @id,
47
- slug: @slug,
48
- title: @title,
49
- image_url: @image_url,
50
- search_query: @search_query
51
- }
52
- end
53
-
54
- def to_json(*options)
55
- as_json(*options).to_json(*options)
56
- end
57
- end
58
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Organo
6
- class Sequel
7
- attr_accessor :id, :type, :title, :image_url, :selector
8
-
9
- def initialize(id, title, image_url, season_num = 0, type = "", type_num = 0, selector = -1)
10
- @id = id
11
- @title = title.to_s
12
- @image_url = image_url
13
- @season_num = season_num
14
- @type = type.to_s
15
- @type_num = type_num
16
- @selector = selector
17
- end
18
-
19
- def to_s
20
- "id: #{@id}, title: #{@title}, image_url: #{@image_url}"
21
- end
22
-
23
- def as_json(_options = {})
24
- {
25
- id: @id,
26
- title: @title,
27
- image_url: @image_url,
28
- season_num: @season_num.to_i,
29
- type: @type,
30
- type_num: @type_num.to_i,
31
- selector: @selector.to_i
32
- }
33
- end
34
-
35
- def to_json(*options)
36
- as_json(*options).to_json(*options)
37
- end
38
- end
39
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- class Show
6
- attr_accessor :id, :slug, :title, :image_url, :search_query, :sequels
7
-
8
- def initialize(id, slug, title, image_url, search_query, links = [], sequels = [])
9
- @id = id
10
- @slug = slug
11
- @title = title.to_s
12
- @image_url = image_url
13
- @search_query = search_query.empty? ? title : search_query
14
- @links = links.nil? ? [] : links
15
- @sequels = sequels.nil? ? [] : sequels
16
- end
17
-
18
- def to_s
19
- "id: #{@id}, title: #{@title}, image_url: #{@image_url}"
20
- end
21
-
22
- def as_json(_options = {})
23
- {
24
- id: @id,
25
- slug: @slug,
26
- title: @title,
27
- image_url: @image_url,
28
- sequels: @sequels,
29
- search_query: @search_query
30
- }
31
- end
32
-
33
- def to_json(*options)
34
- as_json(*options).to_json(*options)
35
- end
36
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
- require_relative 'model/search_show'
5
- require_relative 'model/sequel'
6
- require_relative 'query'
7
-
8
- module Organo
9
- class ShowList
10
- def self.create_search_show_list(json_obj)
11
- show_list = []
12
- json_obj.each do |entry|
13
- show = SearchShow.new(entry['mal_id'], entry['title'], entry['images']['jpg']['image_url'])
14
- show_list.push show
15
- end
16
- show_list.sort_by(&:title)
17
- end
18
-
19
- def self.create_search_sequel_list(json_obj)
20
- sequel_list = []
21
- json_obj.each do |relations|
22
- next unless relations['relation'] == 'Sequel'
23
-
24
- relations['entry'].each do |entry|
25
- image_url = Query.get_anime_image(entry['mal_id'])
26
- sequel_list.push Sequel.new(entry['mal_id'], entry['name'], image_url)
27
- end
28
- end
29
- sequel_list.sort_by(&:title)
30
- end
31
- end
32
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Organo
4
- class Check
5
- def self.init?
6
- unless Dir.exist?('.organo')
7
- puts "Directory is not initialized.\nYou can initialize the current directory with the following command:\n$ organo init"
8
- exit
9
- end
10
- end
11
- end
12
- end