scholar-rename 0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3ed79b92fcf9f579c34e3eaba52af4af7aee50e1
4
+ data.tar.gz: 4daa459bf18e325d1de3fb55096b652d8f600c04
5
+ SHA512:
6
+ metadata.gz: 5be2495e46ce5ce2dcc299061aaa56bb598785dd1e152aaedd1922970df6b8326a285a7cc8b71412516d9d3a30763e2655355e03562502871584256dd83bd4c3
7
+ data.tar.gz: 4f3082e00d2e661a6b99b33e1780ff7f6a5be069ab6281d5971cc368af0fbb0abb3ea840bd94e1d9380853bdfff6ecd1c2e389e303d458a5311fc4286048de93
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # by jeremy warner, fall 2016
4
+ # scholar-rename, interactive pdf-namer
5
+ # prereq: pdftotext installation for text dump
6
+ # renames a pdf file to author-title-year.pdf
7
+ # or other formats based on your selection
8
+ # todo - make a suite of decent tests
9
+
10
+ require_relative '../lib/selector'
11
+ require_relative '../lib/renamer'
12
+
13
+ r = Renamer.new ARGV
data/lib/renamer.rb ADDED
@@ -0,0 +1,31 @@
1
+ class Renamer
2
+ def initialize(*args)
3
+ @file = File.join(Dir.pwd, args.first)
4
+
5
+ if @file == Dir.pwd.to_s + '/'
6
+ puts "scholar-rename: provide a file"
7
+ else
8
+ rename
9
+ end
10
+ end
11
+
12
+ def rename # move file based on users input
13
+ now = Time.now.to_i.to_s # current time, unique temp file
14
+ temp = File.join(Dir.pwd, "temp-scholar-rename-text-#{now}")
15
+ system("pdftotext -q '#{@file}' '#{temp}'")
16
+ content = File.read temp
17
+
18
+ # Choose pdf qualities
19
+ s = Selector.new(content)
20
+ s.select_all # choose props
21
+ printf "Ok? [Yn]: "
22
+ conf = STDIN.gets.chomp # confirm title
23
+
24
+ begin # file read in from first ARGV above
25
+ File.rename(@file, s.title) unless conf.match /^(n|N).*/
26
+ ensure # cleaning up @file cleanup from pdftotext
27
+ puts "Cleaning up..."
28
+ File.delete(temp)
29
+ end
30
+ end
31
+ end
data/lib/selector.rb ADDED
@@ -0,0 +1,89 @@
1
+ # Class for choosing and displaying the information from the pdf.
2
+ # I wonder if this could be augmented with information from google scholar
3
+ # somehow, there is probably a ruby (or at least python) api.
4
+
5
+ class Selector
6
+ attr_reader :title
7
+
8
+ # take the first 10 lines of the pdftotext output and assign it to the
9
+ # context class instance variable, use later when choosing selector
10
+ def initialize(c)
11
+ @content = c.split("\n")[0..14].reject {|x| x.length < 2 }
12
+ @fulltxt = c.split("\n")
13
+ end
14
+
15
+ def select_all
16
+ puts "Select title line number:"
17
+ title = choose @content
18
+
19
+ puts "Select author line number:"
20
+ authors = choose @content
21
+
22
+ puts "Select author form number:"
23
+ author = gen_authors(authors)
24
+
25
+ year = gen_year # just read it
26
+
27
+ puts "Select desired title format:"
28
+ @title = choose(gen_forms year, title, author)
29
+ end
30
+
31
+ private
32
+ # Pass in an array to list and be selected, and return the element that the
33
+ # user selects back to the calling method. pretty sketchy way to interpret
34
+ # the users input as a range or integer, but seems to be working for now.
35
+ # requires you to check for an array and join it on the downside though
36
+ def choose(opts)
37
+ opts.each_with_index {|l, i| puts "#{i}\t#{l}" }
38
+ printf "Your selection [0 - #{opts.length-1}]: "
39
+ line = STDIN.gets.chomp
40
+ meta = "opts[#{line}]"
41
+ mout = eval meta # in theory terrible but this aint a rails app............
42
+ if mout.is_a? (Array)
43
+ mout.join ' '
44
+ else
45
+ mout
46
+ end
47
+ end
48
+
49
+ # Generate different forms for author selection, enumerating the different
50
+ # author that you want to save the file as. Split based on a comma.
51
+ def gen_authors(aline)
52
+ lines = aline.split(", ").map {|a| a.sub /\d$/, '' } # delete ref number.
53
+ if lines.is_a?(String)
54
+ aline # return first
55
+ else # its an array, augment w/ lname and choose
56
+ alines = lines.map {|a| a.split.last } + lines
57
+ choose alines
58
+ end
59
+ end
60
+
61
+ # based on the collected information, generate different forms of the title.
62
+ # perhaps at some point this could be autoselected from the command line,
63
+ # like how the date formatting works, using symbols for different features...
64
+ # in theory could also handle this with the eval method like above - but this
65
+ # would probably be better as a send call or an instance_eval method :/
66
+ def gen_forms(y, t, a)
67
+ ad = a.downcase
68
+ au = a.upcase
69
+ return [
70
+ "#{a}_#{y}_#{t}.pdf".gsub(" ", "_"),
71
+ "#{au}_#{y}_#{t}.pdf".gsub(" ", "_"),
72
+ "#{ad}_#{y}_#{t}.pdf".gsub(" ", "_"),
73
+ "#{a} #{y} #{t}.pdf",
74
+ "#{au} #{y} #{t}.pdf",
75
+ "#{ad} #{y} #{t}.pdf",
76
+ ]
77
+ end
78
+
79
+ # parse out a year from a string, for each line of the document until found.
80
+ # then clean it up and return it
81
+ def gen_year
82
+ @fulltxt.each do |l| # find year
83
+ lm = l.match(/(19|20)\d\d/)
84
+ return lm[0] if !lm.nil?
85
+ end
86
+
87
+ Time.now.year.to_s # not matched, just return current year
88
+ end
89
+ end
data/lib/version.rb ADDED
@@ -0,0 +1 @@
1
+ module SR; Version = "0.1"; end
data/readme.md ADDED
@@ -0,0 +1,9 @@
1
+ # scholar-rename `interactive pdf-namer`
2
+
3
+ - prereq: pdftotext installation for text dump
4
+ - renames a pdf file to author-title-year.pdf
5
+ - or other formats based on your selection
6
+ - by jeremy warner, fall 2016
7
+
8
+ You need this: https://en.wikipedia.org/wiki/Pdftotext
9
+
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scholar-rename
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Warner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Interactive tool to rename pdfs based on author/title/year.
42
+ email: jeremywrnr@gmail.com
43
+ executables:
44
+ - scholar-rename
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - bin/scholar-rename
49
+ - lib/renamer.rb
50
+ - lib/selector.rb
51
+ - lib/version.rb
52
+ - readme.md
53
+ homepage: http://github.com/jeremywrnr/scholar-rename
54
+ licenses:
55
+ - MIT
56
+ metadata: {}
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubyforge_project:
73
+ rubygems_version: 2.6.8
74
+ signing_key:
75
+ specification_version: 4
76
+ summary: Rename pdfs based on author/title/year.
77
+ test_files: []