file_convert 0.0.1 → 0.0.3

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MGFkNzZhZDFkMzY0ZGJkMWRkOTk2NTVmZDE4ZmZiZjRjMWIyOTAyNQ==
5
+ data.tar.gz: !binary |-
6
+ OWZiOThlMGE0MjQ1NWYyYjA4YjJkZDJjMzJhYmYxMWY0ZjkzYzk0Mw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NGI2YzY4MDczZGE2NzhmNzE1YTA4YmFiYTFlMDc0ZTIwNzU4ODcwM2M5M2Ux
10
+ MzVmYWEwZTg3YThjYjM4MjAwMmQ2ZGEzYjQ5NTY2OGNmNTg5NmNmMDZmZTBm
11
+ MTU0MDlkNTJjNDQ2YmRiNzQ1NTBkMmE0ZmU0NTIxYzA1ZWI1Mzg=
12
+ data.tar.gz: !binary |-
13
+ ZTYwNzBlNjc4ZmM4ODAxMjljZWNlM2Q5NTM2NTU1Y2M3OGEyMWI0ODBlMWMy
14
+ YjliNTRiMmE2NDdkYzM4MzI2MzlkZjM1NTNiZDg5NDJiNDJiZTJmZTI2NWIx
15
+ MjU1N2MyNjdiNDQwYTc4NTdlNzBmZDgwYzZhZjM2YWFkNGQ0ZDk=
@@ -0,0 +1,20 @@
1
+ .idea
2
+ *.gem
3
+ config/config.yml
4
+ *.rbc
5
+ .bundle
6
+ .config
7
+ .yardoc
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
20
+
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm --create 1.9.3-p392@file_convert
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+ gem 'rspec'
@@ -0,0 +1,3 @@
1
+ file_convert
2
+ ============
3
+ A gem that is a wrapper around google drive to convert files to different formats.
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'file_convert'
4
+ require 'yaml'
5
+
6
+ puts 'Usage: file_convert config.yml file.doc'
7
+
8
+ @configurations ||= YAML.load_file(ARGV[0])
9
+
10
+ puts @configurations.inspect
11
+
12
+ FileConvert.configure do |config|
13
+ config.client_id = @configurations['CLIENT_ID']
14
+ config.client_secret = @configurations['CLIENT_SECRET']
15
+ config.oauth_scope = @configurations['OAUTH_SCOPE']
16
+ config.redirect_uri = @configurations['REDIRECT_URI']
17
+ config.user_name = @configurations['USER_NAME']
18
+ config.password = @configurations['PASSWORD']
19
+ config.s3_key = @configurations['S3_KEY']
20
+ config.s3_secret = @configurations['S3_SECRET']
21
+ config.s3_bucket = @configurations['S3_BUCKET']
22
+ config.tmp_folder = @configurations['TMP_FOLDER']
23
+ end
24
+
25
+ converter = FileConvert.new
26
+ puts converter.to_txt_from_s3 ARGV[1]
@@ -0,0 +1,15 @@
1
+ # Get your credentials from the APIs Console
2
+ CLIENT_ID: '***'
3
+ CLIENT_SECRET: '***'
4
+ OAUTH_SCOPE: 'https://www.googleapis.com/auth/drive'
5
+ REDIRECT_URI: 'urn:ietf:wg:oauth:2.0:oob'
6
+
7
+ # Your google account
8
+ USER_NAME: '***@***.com'
9
+ PASSWORD: 'password'
10
+
11
+ S3_KEY: ***
12
+ S3_SECRET: ***
13
+ S3_BUCKET: www
14
+
15
+ TMP_FOLDER: '/tmp/'
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'file_convert'
7
+ s.version = '0.0.3'
8
+ s.executables << 'file_convert'
9
+ s.date = '2013-03-18'
10
+ s.summary = 'convert files to different formats'
11
+ s.description = 'wrapper around google drive to convert files to different formats'
12
+ s.authors = ['Sina Jahan']
13
+ s.email = 'info@sinajahan.com'
14
+
15
+ s.files = `git ls-files`.split($/)
16
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
+ s.require_paths = ['lib']
19
+
20
+ s.homepage = 'http://rubygems.org/gems/file_convert'
21
+
22
+ s.add_dependency('google-api-client', '~> 0.6.2')
23
+ s.add_dependency('mime-types', '~> 1.21')
24
+ s.add_dependency('gdata', '~> 1.1.2')
25
+ s.add_dependency('aws-s3', '~> 0.6.3')
26
+
27
+ s.add_development_dependency('rspec')
28
+ end
@@ -1,38 +1,39 @@
1
1
  require 'rubygems'
2
2
  require 'tempfile'
3
3
 
4
- class FileConvert
5
- def self.configure(&block)
6
- yield(configuration)
7
- configuration
8
- end
9
-
10
- def self.configuration
11
- @config ||= FileConvert::Configuration.new
12
- end
13
-
14
-
15
- def initialize
16
- @drive = Drive.new FileConvert.configuration
17
- @docs = Docs.new FileConvert.configuration
18
- @bucket = Bucket.new FileConvert.configuration
19
- end
20
-
21
- def to_txt_from_s3(s3_file_key)
22
- s3_file = @bucket.download s3_file_key
23
- convert_txt_url = @drive.get_convert_txt_url s3_file.path
24
- @docs.download_and_read(convert_txt_url)
25
- end
26
-
27
- def self.get_a_temp_file(key = '')
28
- Tempfile.new(['file_convert', key], configuration.tmp_folder)
29
- end
30
- end
31
-
32
4
  require 'file_convert/drive'
33
5
  require 'file_convert/docs'
34
6
  require 'file_convert/bucket'
35
7
  require 'file_convert/configuration'
36
8
 
9
+ module FileConvert
10
+ class Converter
11
+ def self.configure(&block)
12
+ yield(configuration)
13
+ configuration
14
+ end
15
+
16
+ def self.configuration
17
+ @config ||= Configuration.new
18
+ end
19
+
20
+
21
+ def initialize
22
+ @drive = Drive.new Converter.configuration
23
+ @docs = Docs.new Converter.configuration
24
+ @bucket = Bucket.new Converter.configuration
25
+ end
26
+
27
+ def to_txt_from_s3(s3_file_key)
28
+ s3_file = @bucket.download s3_file_key
29
+ convert_txt_url = @drive.get_convert_txt_url s3_file.path
30
+ @docs.download_and_read(convert_txt_url)
31
+ end
32
+
33
+ def self.get_a_temp_file(key = '')
34
+ Tempfile.new(['file_convert', key], configuration.tmp_folder)
35
+ end
36
+ end
37
+ end
37
38
 
38
39
 
@@ -0,0 +1,22 @@
1
+ require 'aws/s3'
2
+
3
+ module FileConvert
4
+ class Bucket
5
+ def initialize(config)
6
+ AWS::S3::Base.establish_connection!(
7
+ access_key_id: config.s3_key,
8
+ secret_access_key: config.s3_secret
9
+ )
10
+
11
+ @bucket = AWS::S3::Bucket.find('clearfit-thumbnails-development')
12
+ end
13
+
14
+ def download(key)
15
+ temp_file = Converter.get_a_temp_file key
16
+ file_with_key = @bucket[key]
17
+ raise "There is no file with the key [#{key}]" if file_with_key.nil?
18
+ File.open(temp_file, 'w') { |file| file.write(file_with_key.value) }
19
+ temp_file
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ module FileConvert
2
+ class Configuration
3
+ attr_accessor :client_id
4
+ attr_accessor :client_secret
5
+ attr_accessor :oauth_scope
6
+ attr_accessor :redirect_uri
7
+ attr_accessor :user_name
8
+ attr_accessor :password
9
+ attr_accessor :s3_key
10
+ attr_accessor :s3_secret
11
+ attr_accessor :s3_bucket
12
+ attr_accessor :tmp_folder
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ require 'gdata/client'
2
+ require 'gdata/http'
3
+ require 'gdata/auth'
4
+
5
+ module FileConvert
6
+ class Docs
7
+ def initialize(config)
8
+ @client = GData::Client::Spreadsheets.new
9
+ @client.clientlogin(config.user_name, config.password)
10
+ end
11
+
12
+ def download_and_read(url)
13
+ temp_file = Converter.get_a_temp_file
14
+ content = @client.get(url)
15
+ File.open(temp_file, 'w') { |file| file.write(content.body) }
16
+ File.read(temp_file)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,66 @@
1
+ require 'google/api_client'
2
+ require 'launchy'
3
+ require 'yaml'
4
+ require 'mime/types'
5
+
6
+ module FileConvert
7
+ class Drive
8
+ def initialize(config)
9
+ # Get your credentials from the APIs Console
10
+ client_id = config.client_id
11
+ client_secret = config.client_secret
12
+ oauth_scope = config.oauth_scope
13
+ redirect_uri = config.redirect_uri
14
+
15
+ # Create a new API @client & load the Google Drive API
16
+ @client = Google::APIClient.new
17
+ @drive = @client.discovered_api('drive', 'v2')
18
+
19
+ # Request authorization
20
+ @client.authorization.client_id = client_id
21
+ @client.authorization.client_secret = client_secret
22
+ @client.authorization.scope = oauth_scope
23
+ @client.authorization.redirect_uri = redirect_uri
24
+
25
+ uri = @client.authorization.authorization_uri
26
+ Launchy.open(uri)
27
+
28
+ # Exchange authorization code for access token
29
+ $stdout.write 'Enter authorization code: '
30
+ @client.authorization.code = $stdin.gets.chomp
31
+ @client.authorization.fetch_access_token!
32
+ end
33
+
34
+ def get_convert_txt_url(file_path)
35
+ file = @drive.files.insert.request_schema.new({
36
+ title: file_path,
37
+ description: 'A test resume document',
38
+ })
39
+
40
+ mime = MIME::Types.type_for(file_path).first.to_s
41
+ media = Google::APIClient::UploadIO.new(file_path, mime)
42
+
43
+ needs_ocr = mime == 'application/pdf'
44
+
45
+ result = @client.execute(
46
+ :api_method => @drive.files.insert,
47
+ :body_object => file,
48
+ :media => media,
49
+ :parameters => {
50
+ 'uploadType' => 'multipart',
51
+ convert: true,
52
+ ocr: (true if needs_ocr),
53
+ ocrLanguage: (:en if needs_ocr),
54
+ useContentAsIndexableText: (true if needs_ocr),
55
+ 'alt' => 'json'}.reject { |k, v| v.nil? })
56
+
57
+ file_id = result.data.id
58
+
59
+ result = @client.execute(
60
+ :api_method => @drive.files.get,
61
+ :parameters => {'fileId' => file_id})
62
+
63
+ result.data.export_links['text/plain']
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+ describe FileConvert do
3
+ pending 'write it'
4
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'file_convert' # and any other gems you need
5
+
6
+ RSpec.configure do |config|
7
+ # some (optional) config here
8
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file_convert
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sina Jahan
@@ -14,7 +13,6 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: google-api-client
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: mime-types
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: gdata
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: aws-s3
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rspec
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ! '>='
84
74
  - !ruby/object:Gem::Version
@@ -86,40 +76,56 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ! '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  description: wrapper around google drive to convert files to different formats
95
84
  email: info@sinajahan.com
96
- executables: []
85
+ executables:
86
+ - file_convert
97
87
  extensions: []
98
88
  extra_rdoc_files: []
99
89
  files:
90
+ - .gitignore
91
+ - .rspec
92
+ - .rvmrc
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - README.md
96
+ - bin/file_convert
97
+ - config/config.sample.yml
98
+ - file_convert.gemspec
100
99
  - lib/file_convert.rb
100
+ - lib/file_convert/bucket.rb
101
+ - lib/file_convert/configuration.rb
102
+ - lib/file_convert/docs.rb
103
+ - lib/file_convert/drive.rb
104
+ - spec/pdf_to_txt_spec.rb
105
+ - spec/spec_helper.rb
101
106
  homepage: http://rubygems.org/gems/file_convert
102
107
  licenses: []
108
+ metadata: {}
103
109
  post_install_message:
104
110
  rdoc_options: []
105
111
  require_paths:
106
112
  - lib
107
113
  required_ruby_version: !ruby/object:Gem::Requirement
108
- none: false
109
114
  requirements:
110
115
  - - ! '>='
111
116
  - !ruby/object:Gem::Version
112
117
  version: '0'
113
118
  required_rubygems_version: !ruby/object:Gem::Requirement
114
- none: false
115
119
  requirements:
116
120
  - - ! '>='
117
121
  - !ruby/object:Gem::Version
118
122
  version: '0'
119
123
  requirements: []
120
124
  rubyforge_project:
121
- rubygems_version: 1.8.25
125
+ rubygems_version: 2.0.3
122
126
  signing_key:
123
- specification_version: 3
127
+ specification_version: 4
124
128
  summary: convert files to different formats
125
- test_files: []
129
+ test_files:
130
+ - spec/pdf_to_txt_spec.rb
131
+ - spec/spec_helper.rb