cdb-crawlr 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/cdb CHANGED
@@ -7,27 +7,48 @@ require 'optparse'
7
7
  $cli = CDB::CLI.new
8
8
 
9
9
  def print_help(opt = @global, error=nil)
10
- puts error if error
10
+ puts(error.to_s+"\n\n") if error
11
11
  puts opt
12
12
  exit 1
13
13
  end
14
14
 
15
15
  @global = OptionParser.new do |opts|
16
- opts.banner = "Usage: cdb [-h|--help] [-v|--version] <command> [<args>]"
16
+ opts.banner = "Usage: cdb [-h|--help] [-v|--version] <COMMAND> <TYPE> [<ARGS>]"
17
+
17
18
  opts.on("-h", "--help", "Display this screen"){ print_help }
18
19
  opts.on("-v", "--version", "Show version information") do
19
20
  puts "cdb #{CDB::VERSION}"; exit
20
21
  end
22
+
23
+ opts.separator "\nCOMMANDS:"
24
+ opts.separator " search Search for entries of a given TYPE matching QUERY"
25
+ opts.separator " show Show details of an entry using a CDB_ID obtained from search"
21
26
  end
22
27
 
23
28
  @search = OptionParser.new do |opts|
24
- opts.banner = "Usage: cdb search [-h|--help] <type> <query>"
29
+ opts.banner = "Search for entries of a given TYPE matching QUERY\n"+
30
+ "Usage: cdb search [-h|--help] <TYPE> <QUERY>"
31
+
25
32
  opts.on("-h", "--help", "Display this screen"){ print_help opts }
33
+
34
+ opts.separator "\nTYPES:"
35
+ opts.separator " issue Search comic issue names for given QUERY"
36
+ opts.separator " series Search comic series names for given QUERY"
37
+ end
38
+
39
+ @show = OptionParser.new do |opts|
40
+ opts.banner = "Show details of an entry using a CDB_ID obtained from search\n"+
41
+ "Usage: cdb show [-h|--help] <TYPE> <CDB_ID>"
42
+
43
+ opts.on("-h", "--help", "Display this screen"){ print_help opts }
44
+
45
+ opts.separator "\nTYPES:"
46
+ opts.separator " series Get all available details of a comic series"
26
47
  end
27
48
 
28
49
  @command_opts = {
29
50
  'search' => @search,
30
- 'show' => nil # stub
51
+ 'show' => @show
31
52
  }
32
53
 
33
54
  # Parse global flags
@@ -43,7 +64,7 @@ begin
43
64
  $cli[:command] = command
44
65
  command_opt = @command_opts[$cli[:command]]
45
66
  rescue
46
- error = "invalid_command: #{command}" unless command.to_s.empty?
67
+ error = "invalid COMMAND: #{command}" unless command.to_s.empty?
47
68
  print_help @global, error
48
69
  end
49
70
 
@@ -59,7 +80,7 @@ begin
59
80
  type = ARGV.shift
60
81
  $cli[:type] = type
61
82
  rescue
62
- error = "invalid type: #{type}" unless type.to_s.empty?
83
+ error = "invalid TYPE: #{type}" unless type.to_s.empty?
63
84
  print_help command_opt, error
64
85
  end
65
86
 
@@ -10,7 +10,7 @@ require 'cdb/issue'
10
10
  require 'cdb/series'
11
11
 
12
12
  module CDB
13
- VERSION = '0.2.0'
13
+ VERSION = '0.2.1'
14
14
 
15
15
  BASE_URL = 'http://www.comicbookdb.com'
16
16
  REQUEST_HEADERS = {'Connection' => 'keep-alive'}
@@ -2,7 +2,7 @@ require 'pp'
2
2
 
3
3
  module CDB
4
4
  class CLI
5
- COMMANDS = %w[search]
5
+ COMMANDS = %w[search show]
6
6
  TYPES = %w[series issue issues]
7
7
 
8
8
  def initialize(options={})
@@ -20,12 +20,15 @@ module CDB
20
20
  v = v.downcase
21
21
  raise unless COMMANDS.include?(v)
22
22
  when :type
23
- v = v.downcase.gsub(/^=/, '')
24
- raise unless TYPES.include?(v)
25
- when :args
26
- if self[:command] == 'search'
27
- raise "invalid search query" if v.empty?
23
+ v = v.downcase
24
+ if self[:command] == 'show'
25
+ # remove when "show issue" is supported
26
+ raise unless v == 'series'
27
+ else
28
+ raise unless TYPES.include?(v)
28
29
  end
30
+ when :args
31
+ raise "invalid args" if v.empty?
29
32
  end
30
33
  @options[k] = v
31
34
  end
@@ -45,5 +48,14 @@ module CDB
45
48
  end
46
49
  end
47
50
 
51
+ def show
52
+ case self[:type]
53
+ when 'series'
54
+ res = CDB::Series.show(self[:args])
55
+ res.issues.each{|i| i.series=nil}
56
+ puts res.to_json(array_nl:"\n", object_nl:"\n", indent:' ')
57
+ end
58
+ end
59
+
48
60
  end
49
61
  end
@@ -1,5 +1,5 @@
1
1
  module CDB
2
- class Series < Struct.new(:cdb_id, :name, :issues, :publisher, :imprint, :start_date, :end_date, :country, :language)
2
+ class Series < Struct.new(:cdb_id, :name, :publisher, :imprint, :start_date, :end_date, :issues, :country, :language)
3
3
  FORM_SEARCHTYPE = 'Title'
4
4
  WEB_PATH = 'title.php'
5
5
 
@@ -9,13 +9,19 @@ module CDB
9
9
  end
10
10
 
11
11
  def as_json(*)
12
- members.inject({}){|map, m|
12
+ members.each_with_object({}){|m, map|
13
13
  next map unless self[m]
14
- map[m] = self[m]; map
14
+ case self[m]
15
+ when Array
16
+ map[m] = self[m].collect(&:as_json)
17
+ else
18
+ map[m] = self[m]
19
+ end
15
20
  }
16
21
  end
17
22
 
18
- def to_json(opts={})
23
+ def to_json(opts={}, depth=0)
24
+ opts = opts.to_h rescue opts
19
25
  opts = {space:' ', object_nl:' '}.merge(opts)
20
26
  self.as_json.to_json(opts)
21
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cdb-crawlr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-03 00:00:00.000000000Z
12
+ date: 2012-11-04 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &18869830 !ruby/object:Gem::Requirement
16
+ requirement: &25288420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *18869830
24
+ version_requirements: *25288420
25
25
  description: cdb-crawlr is a Ruby gem and command-line tool for querying ComicBookDB.com
26
26
  email:
27
27
  - sgt.floydpepper@gmail.com