booklist 0.0.7 → 0.0.9

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
  SHA1:
3
- metadata.gz: aa6eb403053898f7677b45118fb2ae78fe33c6fe
4
- data.tar.gz: 3c3a141cbb261f36115e67b51253ccf597534445
3
+ metadata.gz: 9563af51bd960512923c640e4d09d280703dcc78
4
+ data.tar.gz: ec4cfca402e541297d083911f8ab966df32247df
5
5
  SHA512:
6
- metadata.gz: 6f765a2a23c68fefe682ccae5c9665879f4a68fc44f7a28a46961e6cb5f263e024d4f2c84ee8e180072778658ab31a1065acaa90417def68ca4aea5af3ecac97
7
- data.tar.gz: f4cbc5aa0b7cac9be2f71bc174f8a0b29e8140c37ee6de592ecb5dfa45cd2c98b1be42069ab7f2fca2ca23bcf32c49f48cd3c5e029d6e1baa841a965059f5753
6
+ metadata.gz: 31294702b7174bcc5cb7a6a5f0917c8b1a6ed8ed7d59bf28314d46975f63e1f1c01d661b153d9fda20caa27a901e46fdce9b49e3534544a8d7924328cb521d31
7
+ data.tar.gz: 385d1e7333062b05f40ddc174f7e050174e02c13481bdfd1752d00b6d6102579be7eab627f6132358d7dcae0ab3096f46d5d50255fe6511d047c17a40768aca7
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ booklist*gem
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in panoptimon.gemspec
4
3
  gemspec
data/bin/booklist CHANGED
@@ -32,188 +32,132 @@ require 'pathname'
32
32
  require 'booklist'
33
33
  require 'date'
34
34
 
35
- module Booklist
36
- options = OpenStruct.new
37
- options.act_num = 0
38
- usage = nil
39
- OptionParser.new do |opts|
40
- opts.banner = "Usage: booklist [options]"
41
-
42
- opts.separator "Actions:"
43
- opts.on("-a", "--add", "Add a book record", "(--title is required)") do
44
- options.act_num += 1
45
- options.action = :add
46
- end
47
-
48
- opts.on("-e", "--edit [ID]", Integer, "Edit a book record") do |id|
49
- options.act_num += 1
50
- options.id = id if id
51
- options.action = :edit
52
- end
53
-
54
- opts.on("-d", "--delete [ID]", Integer, "Delete a book record") do |id|
55
- options.act_num += 1
56
- options.id = id if id
57
- options.action = :delete
58
- end
59
-
60
- opts.on("-s", "--search", "Search for a book") do
61
- options.act_num += 1
62
- options.action = :search
63
- end
64
-
65
- opts.on("-r", "--read [ID]", Integer, "Show a book record's details") do |id|
66
- options.act_num += 1
67
- options.id = id if id
68
- options.action = :read
69
- end
70
-
71
- opts.on("--list", "List all books in the database") do
72
- options.act_num += 1
73
- options.action = :list
74
- end
75
-
76
- opts.separator ""
77
- opts.separator "Book details:"
78
-
79
- # Book details
80
- opts.on("--title TITLE", "Book title") do |title|
81
- options.title = title
82
- end
83
-
84
- opts.on("--state STATE", "What state the book is in (read, to-read, reading, abandoned)") do |state|
85
- options.state = state
86
- end
87
-
88
- opts.on("--author AUTHOR", "Book author") do |author|
89
- options.author = author
90
- end
91
-
92
- opts.on("--addn_authors ADDN_AUTHORS", "Additional authors") do |aa|
93
- options.addn_authors = aa
94
- end
95
-
96
- opts.on("--tags X,Y,Z", Array, "List of tags") do |tags|
97
- options.tags = tags
98
- end
99
-
100
- opts.on("--date_read DATE", Date, "Date read (eg 2014-02-14)") do |dr|
101
- options.date_read = dr
102
- end
103
-
104
- opts.on("--id ID", Integer, "Book ID number") do |id|
105
- options.id = id
106
- end
107
-
108
- opts.separator ""
109
- opts.separator "Common options:"
110
-
111
- # TODO - configurable booklist path
112
- #opts.on("-c", "--config FILE", "Use configuration file") do |file|
113
- # options.config_file = file
114
- #end
115
-
116
- opts.on("--debug", "Debug mode") do
117
- options.debug = true
118
- end
119
-
120
- opts.on("--updatedb", "Update the book database schema") do
121
- options.update_schema = true
122
- end
123
-
124
- opts.on_tail("--version", "Get the booklist version") do
125
- puts Booklist::VERSION
126
- exit
127
- end
128
-
129
- opts.on_tail("-h", "--help", "Show this message") do
130
- puts opts
131
- exit
132
- end
133
-
134
- usage = opts
135
- end.parse!
136
-
137
- if options.act_num > 1
138
- puts "Please only use one action."
139
- puts usage
35
+ options = OpenStruct.new
36
+ options.action = nil
37
+ usage = nil
38
+ OptionParser.new do |opts|
39
+ opts.banner = "Usage: booklist [options]"
40
+
41
+ opts.separator "Actions:"
42
+ opts.on("-a", "--add", "Add a book record", "(--title is required)") do
43
+ options.action = :add
44
+ end
45
+
46
+ opts.on("-e", "--edit [ID]", Integer, "Edit a book record") do |id|
47
+ options.id = id if id
48
+ options.action = :edit
49
+ end
50
+
51
+ opts.on("-d", "--delete [ID]", Integer, "Delete a book record") do |id|
52
+ options.id = id if id
53
+ options.action = :delete
54
+ end
55
+
56
+ opts.on("-s", "--search", "Search for a book") do
57
+ options.action = :search
58
+ end
59
+
60
+ opts.on("-r", "--read [ID]", Integer, "Show a book record's details") do |id|
61
+ options.id = id if id
62
+ options.action = :read
63
+ end
64
+
65
+ opts.on("--list", "List all books in the database") do
66
+ options.action = :list
67
+ end
68
+
69
+ opts.separator ""
70
+ opts.separator "Book details:"
71
+
72
+ # Book details
73
+ opts.on("--title TITLE", "Book title") do |title|
74
+ options.title = title
75
+ end
76
+
77
+ opts.on("--state STATE", "What state the book is in (read, to-read, reading, abandoned)") do |state|
78
+ options.state = state
79
+ end
80
+
81
+ opts.on("--author AUTHOR", "Book author") do |author|
82
+ options.author = author
83
+ end
84
+
85
+ opts.on("--addn_authors ADDN_AUTHORS", "Additional authors") do |aa|
86
+ options.addn_authors = aa
87
+ end
88
+
89
+ opts.on("--tags X,Y,Z", Array, "List of tags") do |tags|
90
+ options.tags = tags
91
+ end
92
+
93
+ opts.on("--date_read DATE", Date, "Date read (eg 2014-02-14)") do |dr|
94
+ options.date_read = dr
95
+ end
96
+
97
+ opts.on("--id ID", Integer, "Book ID number") do |id|
98
+ options.id = id
99
+ end
100
+
101
+ opts.separator ""
102
+ opts.separator "Common options:"
103
+
104
+ # TODO - configurable booklist path
105
+ #opts.on("-c", "--config FILE", "Use configuration file") do |file|
106
+ # options.config_file = file
107
+ #end
108
+
109
+ opts.on("--debug", "Debug mode") do
110
+ options.debug = true
111
+ end
112
+
113
+ opts.on("--updatedb", "Update the book database schema") do
114
+ options.update_schema = true
115
+ end
116
+
117
+ opts.on_tail("--version", "Get the booklist version") do
118
+ puts Booklist::VERSION
140
119
  exit
141
120
  end
142
121
 
143
- # TODO Create configuration directory if it doesn't exist
144
- # mkdir ~/.booklist
145
-
146
- # TODO configurable booklist path
147
- booklist_db_path = File.join(Dir.home, '.booklist', 'booklist.db')
148
-
149
- ActiveRecord::Base.establish_connection(
150
- :adapter => 'sqlite3',
151
- :database => booklist_db_path.to_s)
152
- ActiveRecord::Base.logger = Logger.new(STDERR) if options.debug
153
-
154
- if options.update_schema || !File.exist?(booklist_db_path)
155
- ActiveRecord::Migrator.migrate('db/migrate')
156
- end
157
-
158
- if options.act_num = 1
159
- if options.action == :add
160
- if !options.title || options.title == ""
161
- puts "Please add a --title with the book name"
162
- puts usage
163
- exit
164
- end
165
- book = Book.new do |b|
166
- b.title = options.title
167
- b.author = options.author if options.author
168
- b.addn_authors = options.addn_authors if options.addn_authors
169
- b.state = options.state if options.state
170
- b.date_read = options.date_read if options.date_read
171
- b.tag_list = options.tags if options.tags
172
- end
173
- book.save
174
- book.cli_display
175
- elsif options.action == :edit
176
- book = Book.find_by(id: options.id)
177
- if book
178
- book.title = options.title if options.title
179
- book.author = options.author if options.author
180
- book.addn_authors = options.addn_authors if options.addn_authors
181
- book.state = options.state if options.state
182
- book.date_read = options.date_read if options.date_read
183
- book.tag_list = options.tags if options.tags
184
- book.save
185
- book.cli_display
186
- else
187
- puts "No book with ID of #{options.id} was found"
188
- end
189
- elsif options.action == :delete
190
- book = Book.find_by(id: options.id)
191
- book.destroy
192
- elsif options.action == :read
193
- book = Book.find_by(id: options.id)
194
- if book
195
- book.cli_display
196
- else
197
- puts "No book with ID of #{options.id} was found"
198
- end
199
- elsif options.action == :search
200
- books = []
201
- books += Book.where(["title LIKE ?", "%#{options.title}%"]).to_a if options.title
202
- books += Book.where(["author LIKE ? or addn_authors LIKE ?", "%#{options.author}%", "%#{options.author}%"]).to_a if options.author
203
- books += Book.where(["author LIKE ? or addn_authors LIKE ?", "%#{options.addn_authors}%", "%#{options.addn_authors}%"]).to_a if options.addn_authors
204
- books += Book.where(["state = ?", "%#{options.state}%"]).to_a if options.state
205
- books.uniq!
206
- books.sort!{ |a, b| a.id <=> b.id}
207
- books.select!{ |b| b.state == options.state} if options.state
208
- books.each { |b| b.cli_display }
209
- elsif options.action == :list
210
- books = Book.all
211
- books.each{ |b| b.cli_display }
212
- end
213
- elsif options.act_num > 1
214
- puts "Please only use one action."
215
- puts usage
122
+ opts.on_tail("-h", "--help", "Show this message") do
123
+ puts opts
216
124
  exit
217
125
  end
218
126
 
127
+ usage = opts
128
+ end.parse!
129
+
130
+ unless options.action
131
+ puts "No action specified"
132
+ puts usage
133
+ exit
134
+ end
135
+
136
+ # TODO Create configuration directory if it doesn't exist
137
+ # mkdir ~/.booklist
138
+
139
+ # TODO configurable booklist path
140
+ booklist_db_path = File.join(Dir.home, '.booklist', 'booklist.db')
141
+
142
+ ActiveRecord::Base.establish_connection(
143
+ :adapter => 'sqlite3',
144
+ :database => booklist_db_path.to_s)
145
+ ActiveRecord::Base.logger = Logger.new(STDERR) if options.debug
146
+
147
+ if options.update_schema || !File.exist?(booklist_db_path)
148
+ ActiveRecord::Migrator.migrate('db/migrate')
149
+ end
150
+
151
+ if options.action == :add
152
+ Booklist::add_book(options)
153
+ elsif options.action == :edit
154
+ Booklist::edit_book(options)
155
+ elsif options.action == :delete
156
+ Booklist::delete_book(options.id)
157
+ elsif options.action == :read
158
+ Booklist::read_book(options.id)
159
+ elsif options.action == :search
160
+ Booklist::search_books(options)
161
+ elsif options.action == :list
162
+ Booklist.list_books
219
163
  end
data/booklist.gemspec CHANGED
@@ -3,11 +3,11 @@ require File.expand_path('../lib/booklist/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = "booklist"
6
- gem.authors = ["Dafydd Crosby"]
6
+ gem.authors = ["David Crosby"]
7
7
  gem.description = %q{A book collection program}
8
8
  gem.summary = %q{Booklist helps you keep a list of books you've read or want to read.}
9
9
 
10
- gem.email = "dafydd@dafyddcrosby.com"
10
+ gem.email = "dave@dafyddcrosby.com"
11
11
  gem.homepage = "https://github.com/dafyddcrosby/booklist"
12
12
 
13
13
  gem.license = 'bsd' # The (three-clause) BSD License
@@ -1,3 +1,3 @@
1
1
  module Booklist
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.9"
3
3
  end
data/lib/booklist.rb CHANGED
@@ -1,3 +1,71 @@
1
1
  require 'booklist/version'
2
2
  require 'booklist/book'
3
3
  require 'booklist/tag'
4
+
5
+ module Booklist
6
+ def self.add_book(options)
7
+ if !options.title || options.title == ""
8
+ puts "Please add a --title with the book name"
9
+ puts usage
10
+ exit
11
+ end
12
+ book = Book.new do |b|
13
+ b.title = options.title
14
+ b.author = options.author if options.author
15
+ b.addn_authors = options.addn_authors if options.addn_authors
16
+ b.state = options.state if options.state
17
+ b.date_read = options.date_read if options.date_read
18
+ b.tag_list = options.tags if options.tags
19
+ end
20
+ book.save
21
+ book.cli_display
22
+ end
23
+
24
+ def self.edit_book(options)
25
+ book = Book.find_by(id: options.id)
26
+ if book
27
+ book.title = options.title if options.title
28
+ book.author = options.author if options.author
29
+ book.addn_authors = options.addn_authors if options.addn_authors
30
+ book.state = options.state if options.state
31
+ book.date_read = options.date_read if options.date_read
32
+ book.tag_list = options.tags if options.tags
33
+ book.save
34
+ book.cli_display
35
+ else
36
+ puts "No book with ID of #{options.id} was found"
37
+ end
38
+ end
39
+
40
+ def self.read_book(id)
41
+ book = Book.find_by(id: id)
42
+ if book
43
+ book.cli_display
44
+ else
45
+ puts "No book with ID of #{id} was found"
46
+ end
47
+ end
48
+
49
+ def self.search_books(options)
50
+ books = []
51
+ books += Book.where(["title LIKE ?", "%#{options.title}%"]).to_a if options.title
52
+ books += Book.where(["author LIKE ? or addn_authors LIKE ?", "%#{options.author}%", "%#{options.author}%"]).to_a if options.author
53
+ books += Book.where(["author LIKE ? or addn_authors LIKE ?", "%#{options.addn_authors}%", "%#{options.addn_authors}%"]).to_a if options.addn_authors
54
+ books += Book.where(["state = ?", "%#{options.state}%"]).to_a if options.state
55
+ books.uniq!
56
+ books.sort!{ |a, b| a.id <=> b.id}
57
+ books.select!{ |b| b.state == options.state} if options.state
58
+ books.each { |b| b.cli_display }
59
+ end
60
+
61
+ def self.delete_book(id)
62
+ book = Book.find_by(id: id)
63
+ book.destroy
64
+ end
65
+
66
+ def self.list_books
67
+ books =Book.all
68
+ books.each{ |b| b.cli_display }
69
+ end
70
+
71
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: booklist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
- - Dafydd Crosby
7
+ - David Crosby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-23 00:00:00.000000000 Z
11
+ date: 2014-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3
@@ -53,12 +53,13 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: A book collection program
56
- email: dafydd@dafyddcrosby.com
56
+ email: dave@dafyddcrosby.com
57
57
  executables:
58
58
  - booklist
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - .gitignore
62
63
  - Gemfile
63
64
  - LICENSE
64
65
  - README.md
@@ -91,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
92
  version: '0'
92
93
  requirements: []
93
94
  rubyforge_project:
94
- rubygems_version: 2.0.14
95
+ rubygems_version: 2.1.11
95
96
  signing_key:
96
97
  specification_version: 4
97
98
  summary: Booklist helps you keep a list of books you've read or want to read.