tf_uploader 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/tf ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # return a nicer message from ctrl-c
4
+ trap("INT") do
5
+ puts("\n ! Command cancelled.")
6
+ exit
7
+ end
8
+
9
+ require 'tf_uploader'
10
+ TfUploader::Command.start
data/bin/tf_uploader ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # return a nicer message from ctrl-c
4
+ trap("INT") do
5
+ puts("\n ! Command cancelled.")
6
+ exit
7
+ end
8
+
9
+ require 'tf_uploader'
10
+ TfUploader::Command.start
@@ -0,0 +1,8 @@
1
+ class FileSystemFile < ActiveRecord::Base
2
+ set_table_name "ZFILESYSTEMFILE"
3
+ set_primary_key "Z_PK"
4
+
5
+ belongs_to :tomb, :foreign_key => "ZTOMB"
6
+
7
+ alias_attribute :path, 'ZPATH'
8
+ end
@@ -0,0 +1,36 @@
1
+ class Tomb < ActiveRecord::Base
2
+ set_table_name "ZTOMB"
3
+ set_primary_key "Z_PK"
4
+
5
+ has_one :file_system_file, :foreign_key => "ZTOMB"
6
+
7
+ def as_json(options={})
8
+ {
9
+ :first_name => read_attribute("ZFIRSTNAME"),
10
+ :middle_name => read_attribute("ZMIDDLENAME"),
11
+ :surname => read_attribute("ZLASTNAME"),
12
+ :suffix => read_attribute("ZNAMESUFFIX"),
13
+ :gender => read_attribute("ZGENDER"),
14
+ :eulogy => read_attribute("ZEULOGY"),
15
+ :gravepic_latitude => read_attribute("ZLATITUDE"),
16
+ :gravepic_longitude => read_attribute("ZLONGITUDE"),
17
+ :gravepic_accuracy => read_attribute("ZCOORDINATEACCURACY"),
18
+ :input_at => read_attribute("ZINPUTAT"),
19
+ :account_id => read_attribute("ZSUBDOMAINURL"),
20
+ :guid => read_attribute("ZGUID"),
21
+ :birth_day => read_attribute("ZBIRTHDAY"),
22
+ :birth_month => read_attribute("ZBIRTHMONTH"),
23
+ :birth_year => read_attribute("ZBIRTHYEAR"),
24
+ :death_day => read_attribute("ZDEATHDAY"),
25
+ :death_month => read_attribute("ZDEATHMONTH"),
26
+ :death_year => read_attribute("ZDEATHYEAR"),
27
+ :photo_capture => read_attribute("ZPHOTOCAPTUREDATE"),
28
+ :compass => read_attribute("ZCOMPASS"),
29
+ :angle => read_attribute("ZANGLE"),
30
+ :row_count => read_attribute("ZROWCOUNT"),
31
+ :vet => read_attribute("ZVETERAN"),
32
+ :rotate => "None"
33
+ }.merge(options)
34
+ end
35
+
36
+ end
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'thor'
3
+ require 'active_record'
4
+ require 'sqlite3'
5
+ require 'rest_client'
6
+ require 'mini_magick'
7
+
8
+ module TfUploader
9
+ #HOST = "http://www.tombfinder.com"
10
+ HOST = "http://localhost:3000"
11
+ end
12
+
13
+ require 'tf_uploader/uploader'
14
+ require 'tf_uploader/command'
15
+
16
+ require 'models/tomb'
17
+ require 'models/file_system_file'
@@ -0,0 +1,8 @@
1
+ class TfUploader::Command < Thor
2
+ include Thor::Actions
3
+
4
+ desc "upload", "Upload a directory of tomb images and sqlite db pulled from the iphone"
5
+ def upload(dir, token)
6
+ TfUploader::Uploader.new(dir, token).upload!
7
+ end
8
+ end
@@ -0,0 +1,54 @@
1
+ class TfUploader::Uploader
2
+ attr_accessor :base_path, :token
3
+
4
+ def initialize(directory, token)
5
+ @base_path = File.expand_path(directory)
6
+ @token = token
7
+
8
+ @connection = ActiveRecord::Base.establish_connection(
9
+ :adapter => "sqlite3",
10
+ :database => File.join(@base_path, "TombfinderNew.sqlite"))
11
+ end
12
+
13
+ def upload!
14
+ tombs = Tomb.all
15
+ puts "Posting #{tombs.count} records"
16
+ Tomb.all.each do |tomb|
17
+ post(tomb)
18
+ end
19
+ puts ""
20
+ puts "Done!"
21
+ end
22
+
23
+ def post(tomb)
24
+ picture = square_pic(tomb)
25
+
26
+ RestClient.post(
27
+ "#{TfUploader::HOST}/api/records.json?auth_token=#{token}",
28
+ :record => tomb.as_json(:gravepic => picture),
29
+ :favorite => "false",
30
+ :name => "record",
31
+ :secret => "U8BsP0TZF"
32
+ )
33
+ print "."
34
+ rescue RestClient::UnprocessableEntity => e
35
+ puts ""
36
+ puts "Failed to upload record #{tomb.read_attribute("ZGUID")}"
37
+ ensure
38
+ STDOUT.flush
39
+ end
40
+
41
+ def square_pic(tomb)
42
+ image = MiniMagick::Image.open(File.join(base_path, tomb.file_system_file.path))
43
+ if image['width'] > image['height']
44
+ geometry = "#{image['height']}x#{image['height']}+#{image['height']/2}+0"
45
+ else
46
+ geometry = "#{image['width']}x#{image['width']}+0+#{image['width']/2}"
47
+ end
48
+
49
+ image.crop geometry
50
+ cropped_path = File.join(base_path, "cropped_" + tomb.file_system_file.path)
51
+ image.write cropped_path
52
+ File.new(cropped_path, 'rb')
53
+ end
54
+ end
metadata ADDED
@@ -0,0 +1,132 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tf_uploader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ross Hale
9
+ - Tony Spore
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-05-08 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: term-ansicolor
17
+ requirement: &2164531120 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.7
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *2164531120
26
+ - !ruby/object:Gem::Dependency
27
+ name: rest-client
28
+ requirement: &2164530520 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.6.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *2164530520
37
+ - !ruby/object:Gem::Dependency
38
+ name: thor
39
+ requirement: &2164529900 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 0.14.6
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *2164529900
48
+ - !ruby/object:Gem::Dependency
49
+ name: activerecord
50
+ requirement: &2164529320 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 3.1.3
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *2164529320
59
+ - !ruby/object:Gem::Dependency
60
+ name: sqlite3
61
+ requirement: &2164528840 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 1.3.5
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *2164528840
70
+ - !ruby/object:Gem::Dependency
71
+ name: sqlite3-ruby
72
+ requirement: &2164528360 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.3.3
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: *2164528360
81
+ - !ruby/object:Gem::Dependency
82
+ name: mini_magick
83
+ requirement: &2164527860 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: '3.4'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: *2164527860
92
+ description: A ruby command line interface for uploading large numbers of tombs to
93
+ TombFinder
94
+ email: rosshale@gmail.com
95
+ executables:
96
+ - tf
97
+ - tf_uploader
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - lib/models/file_system_file.rb
102
+ - lib/models/tomb.rb
103
+ - lib/tf_uploader/command.rb
104
+ - lib/tf_uploader/uploader.rb
105
+ - lib/tf_uploader.rb
106
+ - bin/tf
107
+ - bin/tf_uploader
108
+ homepage: http://www.tombfinder.com
109
+ licenses: []
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: 1.3.6
126
+ requirements: []
127
+ rubyforge_project:
128
+ rubygems_version: 1.8.6
129
+ signing_key:
130
+ specification_version: 3
131
+ summary: TombFinder Uploader
132
+ test_files: []