runoff 0.1.3 → 0.2.0

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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OTA3ZDMwNGJlZWY3YWE2MTVlMmJjY2RiMWJmYzJjZGI1NzdjNTI0Mw==
5
- data.tar.gz: !binary |-
6
- NzIyYzU3ZDJhM2YyMmYzY2VmYmMxZjhkNzAwY2MxZTBkMzBhY2MyNA==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- ODM4OGYzZTBlMDM0MmY2NGYxNTIxYTk3YzkxOTAxY2QzYWU0MmZkY2ZlMjFm
10
- NTZiMDU3NjgxODJiZTE0MzIxZDM3NjU0NzEwNzQ2ZjMzZGQ5NWUwYTQzZmU5
11
- NTkwZTg5YTlmNjg0M2NmYTE3MjRhNjI0MWRlN2UyYmMyMDc2OTc=
12
- data.tar.gz: !binary |-
13
- MmRhYzdiNjliNDVhMjIyYmI5YzRmMGM0NThhZDllMjU3ODhhZjM3YjgzMDAy
14
- NzY4NzQyMDg4NTEyOGEwYzA5YjNhNmNmYWUwMGY3Mzc5N2Y0NjNlZjY3NDAx
15
- ZmVmYzY3NTVkOWQ1YmE3ODk2Y2RlNmY5MWY5YjM2OGU5ZDBmZTk=
2
+ SHA1:
3
+ metadata.gz: 07466177c09c57169067c0d8a59dbc5ad4e4d921
4
+ data.tar.gz: 660f59d6d1adfa80f4bd7a9931988ebb446aa7d2
5
+ SHA512:
6
+ metadata.gz: 4f26579401ab7ac73d8a7447a9101c190a4241f5dc1d95cd916542018211139b91eb3613f751eef813a372b74ff4c9b75e4d0cd8c4d6d677451c1d47d0c4677e
7
+ data.tar.gz: db956c7fcc9b3abf62149162b2bf68996b93c34d149d0321f9fb04f710df9b435627ee2fc7555ee05e372b4c103864834f450a150d415810d1fd371970c214d4
data/README.md CHANGED
@@ -26,6 +26,10 @@ To export specific chats.
26
26
 
27
27
  runoff chat skype_username -t ~/skype_backup
28
28
 
29
+ If you don't want to put files into an archive, use `--no-archive` option
30
+
31
+ runoff all skype_username --no-archive
32
+
29
33
  If you're confused, you can get some help.
30
34
 
31
35
  runoff help all
@@ -35,7 +39,7 @@ If you're confused, you can get some help.
35
39
  Things to do in the future versions:
36
40
 
37
41
  - Parse body_xml to filter XML tags and character entities.
38
- - Append only new messages to the previously genetrated files instead of appending everything or create different versions for the files.
42
+ - Append only new messages to the previously genetrated files instead of appending everything or create different versions for the files when using `--no-archive option`.
39
43
  - Add some colors.
40
44
 
41
45
  If you have something to say about this gem or anything else, you can find me on Twitter as [@AigarsDz](http://twitter.com/AigarsDz "@AigarsDz").
data/bin/runoff CHANGED
File without changes
@@ -20,9 +20,7 @@ module Runoff
20
20
  #
21
21
  # Raises IOError if the file cannot be found
22
22
  def initialize(main_db_file_path)
23
- unless File.exists? main_db_file_path
24
- raise IOError, "File doesn't exist"
25
- end
23
+ raise IOError, "File doesn't exist" unless File.exists? main_db_file_path
26
24
 
27
25
  skype_database = Sequel.connect "sqlite://#{main_db_file_path}"
28
26
  @messages = skype_database.from :Messages
@@ -50,7 +48,8 @@ module Runoff
50
48
  # Examples
51
49
  #
52
50
  # get_chatnames
53
- # # => [['something-more', 'somethindg-else'], ['#something/$more;6521032', '#something/$else;8971263']]
51
+ # # => [['something-more', 'somethindg-else'],
52
+ # ['#something/$more;6521032', '#something/$else;8971263']]
54
53
  #
55
54
  # Returns two Array objects containing parsed chatnames and partly parsed chatnames.
56
55
  def get_chatnames
@@ -82,14 +81,14 @@ module Runoff
82
81
  private
83
82
 
84
83
  # Internal: Performs the export process.
85
- #
86
- # chat_records -
87
84
  Array of chat records read from database
85
+ #
86
+ # chat_records - Array of chat records read from database
88
87
  #
89
88
  # Examples
90
89
  #
91
90
  # run_export [{chatname: '#sadsad/$kjhkjh;9878977', 123123213, 'Aidzis', ''}]
92
91
  # # => 1
93
- #
92
+ #
94
93
  # Returns the count of the exported files.
95
94
  def run_export(chat_records, destination_path)
96
95
  chat_records.each do |record|
@@ -101,4 +100,4 @@ module Runoff
101
100
  @exported_filenames.count
102
101
  end
103
102
  end
104
- end
103
+ end
@@ -1,3 +1,5 @@
1
+ require 'zip/zip'
2
+
1
3
  module Runoff
2
4
  # Public: Methods used for writing to files.
3
5
  module FileWriter
@@ -10,21 +12,37 @@ module Runoff
10
12
  #
11
13
  # save_to_file record, '/home/username/skype_backup'
12
14
  def save_to_file(chat_record, output_directory)
13
- datetime = Time.at chat_record[:timestamp]
14
- output_record = "[#{datetime.strftime "%Y-%m-%d %H:%M:%S"}] "
15
- output_record << "#{chat_record[:from_dispname]}: #{parse_body_xml chat_record[:body_xml]}"
16
15
  filename = "#{output_directory}/#{parse_chatname chat_record[:chatname]}.txt"
17
16
 
17
+ Dir.mkdir(output_directory) unless File.exists?(output_directory)
18
18
  File.open(filename, 'a') do |file|
19
- file.puts output_record
19
+ file.puts build_entry(chat_record)
20
20
  end
21
21
 
22
22
  filename
23
23
  rescue StandardError
24
- puts 'An error occured while parsing a chatname'
24
+ puts 'An error occured while saving a file'
25
+ end
26
+
27
+ # Public: Creates a String with one entry from the chat.
28
+ #
29
+ # chat_record - a Hash containing data about a single chat message.
30
+ #
31
+ # Examples
32
+ #
33
+ # build_entry { timestamp: 213213232, from_dispname: 'aidzis', body_xml: 'This is text.' }
34
+ # # => [2013-04-13 14:23:57] aidzis: This is text.
35
+ #
36
+ # Returns a String with a chat entry.
37
+ def build_entry(chat_record)
38
+ datetime = Time.at chat_record[:timestamp]
39
+ output_record = "[#{datetime.strftime "%Y-%m-%d %H:%M:%S"}] "
40
+ output_record << "#{chat_record[:from_dispname]}: #{parse_body_xml chat_record[:body_xml]}"
41
+
42
+ output_record
25
43
  end
26
44
 
27
- # Internal: Converts chatname from database to a valid file name.
45
+ # Public: Converts chatname from database to a valid file name.
28
46
  #
29
47
  # raw_chatname - A String with a chatname read from the database.
30
48
  #
@@ -42,7 +60,7 @@ module Runoff
42
60
  trim_dashes chatname
43
61
  end
44
62
 
45
- # Internal: Removes extra characters from the end of a chatname.
63
+ # Public: Removes extra characters from the end of a chatname.
46
64
  #
47
65
  # raw_chatname - A String with a chatname read from the database
48
66
  #
@@ -59,7 +77,7 @@ module Runoff
59
77
  first_group || second_group
60
78
  end
61
79
 
62
- # Internal: Removes unnecessary dashes from the begining and the end of the string.
80
+ # Public: Removes unnecessary dashes from the begining and the end of the string.
63
81
  #
64
82
  # string - A String possibly containing dashes at the beggining or the end
65
83
  #
@@ -71,23 +89,44 @@ module Runoff
71
89
  #
72
90
  # Returns a string without leading and ending dashes.
73
91
  def trim_dashes(string)
74
- clean_string = string.gsub /^-+/, ''
75
- clean_string.gsub /-+$/, ''
92
+ clean_string = string.gsub(/^-+/, '')
93
+ clean_string.gsub(/-+$/, '')
76
94
  end
77
95
 
78
96
  # Public: Remove Skype emotion tags.
79
- #
80
- # text -
81
97
  String containing XML data
98
+ #
99
+ # text - String containing XML data
82
100
  #
83
101
  # Examples
84
102
  #
85
103
  # parse_body_xml "Some text <ss type="laugh">:D</ss>"
86
104
  # # => "Some text :D"
87
- #
105
+ #
88
106
  # Returns the duplicated String.
89
107
  def parse_body_xml(text)
90
- clean_text = text.gsub /<ss type=".+">/, ''
91
- clean_text.gsub /<\/ss>/, ''
108
+ clean_text = text.gsub(/<ss type=".+">/, '')
109
+ clean_text.gsub(/<\/ss>/, '')
110
+ end
111
+
112
+ # Public: Compresses all the exported files into a Zip archive.
113
+ #
114
+ # output_directory - A String with the path to the directory, wher the file will be saved.
115
+ #
116
+ # Examples
117
+ #
118
+ # archive '/home/username/skype-backup'
119
+ def archive(output_directory)
120
+ timestamp = Time.now.strftime "%Y%m%d%H%M%S"
121
+
122
+ Zip::ZipFile.open "#{output_directory}-#{timestamp}.zip", Zip::ZipFile::CREATE do |zipfile|
123
+ Dir.entries(output_directory).each do |file|
124
+ if File.file?("#{output_directory}/#{file}")
125
+ zipfile.add file, "#{output_directory}/#{file}"
126
+ end
127
+ end
128
+ end
129
+
130
+ FileUtils.rm_rf output_directory
92
131
  end
93
132
  end
94
- end
133
+ end
@@ -28,8 +28,8 @@ module Runoff
28
28
  if RbConfig::CONFIG['host_os'] =~ /mingw/
29
29
  location = "#{ENV['APPDATA']}\\Skype\\#{skype_username}\\main.db"
30
30
 
31
- location.gsub! /\\/, '/'
32
- location.gsub /^[a-zA-Z]:/, ''
31
+ location.gsub!(/\\/, '/')
32
+ location.gsub(/^[a-zA-Z]:/, '')
33
33
  elsif RbConfig::CONFIG['host_os'] =~ /linux/
34
34
  "#{ENV['HOME']}/.Skype/#{skype_username}/main.db"
35
35
  else
data/lib/runoff/source.rb CHANGED
@@ -20,6 +20,8 @@ module Runoff
20
20
 
21
21
  method_option :from, aliases: '-f', desc: 'Specify the location of the main.db file'
22
22
  method_option :to, aliases: '-t', desc: 'Specify where to put export files'
23
+ method_option :archive, aliases: '-a', type: :boolean, default: true,
24
+ desc: 'Specify whether to save files in a Zip archive'
23
25
 
24
26
  # Public: Exports all chat history from the Skype database.
25
27
  #
@@ -35,6 +37,7 @@ module Runoff
35
37
  destination = get_destination
36
38
 
37
39
  print_result composition.export(destination)
40
+ try_to_archive composition, destination
38
41
 
39
42
  rescue IOError => e
40
43
  puts e
@@ -52,6 +55,8 @@ module Runoff
52
55
 
53
56
  method_option :from, aliases: '-f', desc: 'Specify the location of the main.db file'
54
57
  method_option :to, aliases: '-t', desc: 'Specify where to put export files'
58
+ method_option :archive, aliases: '-a', type: :boolean, default: true,
59
+ desc: 'Specify whether to save files in a Zip archive'
55
60
 
56
61
  # Public: Exports specified chats from the Skype database.
57
62
  #
@@ -68,12 +73,13 @@ module Runoff
68
73
  chatnames, raw_chatnames = composition.get_chatnames
69
74
 
70
75
  list_chatnames chatnames
71
- indecies = ask "Which chats do you want to export? (Enter indecies) "
76
+ indecies = ask 'Which chats do you want to export? (Enter indecies) '
72
77
  indecies = indecies.split.map { |index| index.to_i }
73
78
  selected_chatnames = []
74
79
 
75
80
  indecies.each { |index| selected_chatnames << raw_chatnames[index] }
76
81
  print_result composition.export_chats(selected_chatnames, destination)
82
+ try_to_archive composition, destination
77
83
 
78
84
  rescue IOError => e
79
85
  puts e
@@ -113,7 +119,7 @@ module Runoff
113
119
  #
114
120
  # Returns a String containing a path to the destination directory.
115
121
  def get_destination
116
- options[:to] || Location.home_path
122
+ options[:to] || "#{Location.home_path}/skype-backup"
117
123
  end
118
124
 
119
125
  # Internal: Informs the user that the application has finished running.
@@ -126,7 +132,7 @@ module Runoff
126
132
  # # => Finished: 4 files were exported
127
133
  def print_result(count)
128
134
  if count == 1
129
- puts "Finished: 1 file was exported"
135
+ puts 'Finished: 1 file was exported'
130
136
  elsif count > 1
131
137
  puts "Finished: #{count} files were exported"
132
138
  end
@@ -145,5 +151,21 @@ module Runoff
145
151
  chatnames.each_with_index { |n, i| puts "[#{i}] #{n}" }
146
152
  puts
147
153
  end
154
+
155
+ # Internal: performs archiving if an --archive option is provided
156
+ #
157
+ # composition - A Compositon object
158
+ # destination - A String containing a path to the export directory.
159
+ #
160
+ # Examples
161
+ #
162
+ # try_to_archive composition, '/home/username/skype-backup'
163
+ def try_to_archive(composition, destination)
164
+ if options[:archive]
165
+ composition.archive destination
166
+ end
167
+ rescue StandardError
168
+ puts 'Faild to create an archive'
169
+ end
148
170
  end
149
171
  end
@@ -1,3 +1,3 @@
1
1
  module Runoff
2
- VERSION = "0.1.3"
2
+ VERSION = '0.2.0'
3
3
  end
data/runoff.gemspec CHANGED
@@ -22,4 +22,5 @@ Gem::Specification.new do |gem|
22
22
  gem.add_dependency 'thor'
23
23
  gem.add_dependency 'sqlite3'
24
24
  gem.add_dependency 'sequel'
25
+ gem.add_dependency 'rubyzip'
25
26
  end
@@ -9,22 +9,22 @@ describe Runoff::Composition do
9
9
  ->{ composition = Runoff::Composition.new 'not_existing.db' }.must_raise IOError
10
10
  end
11
11
 
12
- it "must have a getter method for exported filenames" do
12
+ it 'must have a getter method for exported filenames' do
13
13
  @composition.must_respond_to :exported_filenames
14
14
  end
15
15
 
16
- it "must return parsed chatnames together with partly parsed chatnames" do
16
+ it 'must return parsed chatnames together with partly parsed chatnames' do
17
17
  chatnames, raw_chatnames = @composition.get_chatnames
18
18
 
19
19
  chatnames.must_equal ['something-more', 'something-else']
20
20
  raw_chatnames.must_equal ['#something/$more;', '#something/$else;']
21
21
  end
22
22
 
23
- it "must have a save_to_file method" do
23
+ it 'must have a save_to_file method' do
24
24
  @composition.must_respond_to :save_to_file
25
25
  end
26
26
 
27
- it "must return a count of the exported filenames" do
27
+ it 'must return a count of the exported filenames' do
28
28
  file_count = @composition.send(
29
29
  :run_export,
30
30
  [{
@@ -40,14 +40,14 @@ describe Runoff::Composition do
40
40
  FileUtils.rm_rf 'test/tmp/.'
41
41
  end
42
42
 
43
- it "must return a count of the exported filenames when called for all chats" do
43
+ it 'must return a count of the exported filenames when called for all chats' do
44
44
  file_count = @composition.export 'test/tmp'
45
45
 
46
46
  file_count.must_equal 2
47
47
  FileUtils.rm_rf 'test/tmp/.'
48
48
  end
49
49
 
50
- it "must return a count of the exported filenames when called for specific chats" do
50
+ it 'must return a count of the exported filenames when called for specific chats' do
51
51
  file_count = @composition.export_chats ['#something/$more;', '#something/$else;'], 'test/tmp'
52
52
 
53
53
  file_count.must_equal 2
@@ -6,15 +6,15 @@ describe Runoff::FileWriter do
6
6
  before do
7
7
  @incorrect_chat_record = {
8
8
  chatname: '#something/$;521357125362',
9
- timestamp: 1362864487,
9
+ timestamp: 1366280218,
10
10
  from_dispname: 'Aidzis',
11
11
  body_xml: ''
12
12
  }
13
13
  @chat_record = {
14
14
  chatname: '#something/$more;521357125362',
15
- timestamp: 1362864487,
15
+ timestamp: 1366280218,
16
16
  from_dispname: 'Aidzis',
17
- body_xml: ''
17
+ body_xml: 'This is a text.'
18
18
  }
19
19
 
20
20
  class ClassWithFileWriterMixin
@@ -24,64 +24,92 @@ describe Runoff::FileWriter do
24
24
  @test_object = ClassWithFileWriterMixin.new
25
25
  end
26
26
 
27
- it "must return a string without Skype emotion XML tags" do
27
+ it 'must return a string without Skype emotion XML tags' do
28
28
  string = 'Some text <ss type="laugh">:D</ss>'
29
29
  clean_string = @test_object.parse_body_xml string
30
30
 
31
31
  clean_string.must_equal 'Some text :D'
32
32
  end
33
33
 
34
- it "must remove all starting and ending dashes from a string" do
35
- string = "---example--"
34
+ it 'must remove all starting and ending dashes from a string' do
35
+ string = '---example--'
36
36
  valid_name = @test_object.trim_dashes string
37
37
 
38
38
  valid_name.must_equal 'example'
39
39
  end
40
40
 
41
- it "must return a valid and readable name from a raw chatname" do
41
+ it 'must return a valid and readable name from a raw chatname' do
42
42
  raw_chatname = '#something/$else;521357125362'
43
43
  chatname = @test_object.parse_chatname raw_chatname
44
44
 
45
45
  chatname.must_equal 'something-else'
46
46
  end
47
47
 
48
- it "must return a valid and readable name from broken chatname records" do
48
+ it 'must return a valid and readable name from broken chatname records' do
49
49
  raw_chatname = '#something/$521357125362'
50
50
  chatname = @test_object.parse_chatname raw_chatname
51
51
 
52
52
  chatname.must_equal 'something'
53
53
  end
54
54
 
55
- it "must return a chatname without the extra symbols" do
55
+ it 'must return a chatname without the extra symbols' do
56
56
  raw_chatname = '#something/$else;521357125362'
57
57
  chatname = @test_object.partly_parse_chatname raw_chatname
58
58
 
59
59
  chatname.must_equal '#something/$else;'
60
60
  end
61
61
 
62
- it "must return a chatname without the extra symbols for broken chatname records" do
62
+ it 'must return a chatname without the extra symbols for broken chatname records' do
63
63
  raw_chatname = '#something/$521357125362'
64
64
  chatname = @test_object.partly_parse_chatname raw_chatname
65
65
 
66
66
  chatname.must_equal '#something/$'
67
67
  end
68
68
 
69
+ it 'must build a chat entry from a database record' do
70
+ entry = @test_object.build_entry @chat_record
71
+
72
+ entry.must_equal '[2013-04-18 13:16:58] Aidzis: This is a text.'
73
+ end
74
+
69
75
  describe "#save_to_file" do
70
- after { FileUtils.rm_rf 'test/tmp/.' }
76
+ after do
77
+ FileUtils.rm_rf 'test/tmp/.'
78
+ Dir.glob('test/*.zip').each do |archive|
79
+ File.delete archive
80
+ end
81
+ end
71
82
 
72
- it "must write chat content to file" do
83
+ it 'must write chat content to file' do
73
84
  @test_object.save_to_file @chat_record, 'test/tmp'
74
85
  @test_object.save_to_file @incorrect_chat_record, 'test/tmp'
75
- Dir["test/tmp/**/*"].length.must_equal 2
86
+ Dir['test/tmp/**/*'].length.must_equal 2
76
87
  end
77
88
 
78
- it "must append to a file if the filename already exists" do
89
+ it 'must append to a file if the filename already exists' do
79
90
  @additional_chat_record = @chat_record
80
91
 
81
92
  @test_object.save_to_file @chat_record, 'test/tmp'
82
93
  @test_object.save_to_file @incorrect_chat_record, 'test/tmp'
83
94
  @test_object.save_to_file @additional_chat_record, 'test/tmp'
84
- Dir["test/tmp/**/*"].length.must_equal 2
95
+ Dir['test/tmp/**/*'].length.must_equal 2
96
+ end
97
+ end
98
+
99
+ it 'must create a Zip file of the file output directory' do
100
+ output_directory = 'test/tmp'
101
+ files = %w[first.txt second.txt]
102
+
103
+ Dir.mkdir(output_directory) unless File.exists?(output_directory)
104
+ files.each do |filename|
105
+ File.new "#{output_directory}/#{filename}", 'w'
106
+ end
107
+
108
+ @test_object.archive output_directory
109
+ Dir["test/*.zip"].length.must_equal 1
110
+
111
+ Dir.glob('test/*.zip').each do |archive|
112
+ File.delete archive
85
113
  end
86
114
  end
87
115
  end
@@ -4,7 +4,7 @@ require 'runoff'
4
4
 
5
5
  describe Runoff::Location do
6
6
  describe '.default_skype_data_location' do
7
- it "must return a default path depending on the operating system" do
7
+ it 'must return a default path depending on the operating system' do
8
8
  path = Runoff::Location.default_skype_data_location 'aidzis_skype'
9
9
 
10
10
  if RbConfig::CONFIG['host_os'] =~ /mingw/
@@ -17,8 +17,8 @@ describe Runoff::Location do
17
17
  end
18
18
  end
19
19
 
20
- describe ".home_path" do
21
- it "must return a path to the user home directory depending on the operating system" do
20
+ describe '.home_path' do
21
+ it 'must return a path to the user home directory depending on the operating system' do
22
22
  path = Runoff::Location.home_path
23
23
 
24
24
  if RbConfig::CONFIG['host_os'] =~ /mingw/
@@ -3,11 +3,33 @@ require 'minitest/autorun'
3
3
  require 'runoff'
4
4
 
5
5
  describe Runoff::Source do
6
- after { FileUtils.rm_rf 'test/tmp/.' }
6
+ before { @source = Runoff::Source.new }
7
7
 
8
- it "must export all the chats from a Skype database into text files and print a count of the exported files" do
9
- command = "all -f test/test_db.sqlite -t test/tmp"
8
+ after do
9
+ FileUtils.rm_rf 'test/tmp/.'
10
+ Dir.glob('test/*.zip').each do |archive|
11
+ File.delete archive
12
+ end
13
+ end
14
+
15
+ it 'must export all the chats from a Skype database into text files and print a count of the exported files' do
16
+ command = 'all -f test/test_db.sqlite -t test/tmp'
10
17
 
11
18
  ->{ Runoff::Source.start command.split }.must_output "Finished: 2 files were exported\n"
12
19
  end
20
+
21
+ it 'must raise a StandardError if no Skype username or --form option is provided' do
22
+ ->{ @source.send :get_composition, nil }.must_raise StandardError
23
+ end
24
+
25
+ it 'must print how many files were exported' do
26
+ ->{ @source.send :print_result, 1 }.must_output "Finished: 1 file was exported\n"
27
+ ->{ @source.send :print_result, 5 }.must_output "Finished: 5 files were exported\n"
28
+ end
29
+
30
+ it 'must print all available chatnames' do
31
+ chatnames = ['something-more', 'something-else']
32
+
33
+ ->{ @source.send :list_chatnames, chatnames }.must_output "[0] something-more\n[1] something-else\n\n"
34
+ end
13
35
  end
metadata CHANGED
@@ -1,86 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: runoff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aigars Dzerviniks
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain:
11
- - !binary |-
12
- LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURuakNDQW9hZ0F3SUJB
13
- Z0lCQVRBTkJna3Foa2lHOXcwQkFRVUZBREJLTVJvd0dBWURWUVFEREJGa2Vt
14
- VnkKZG1sdWFXdHpMbUZwWjJGeWN6RVhNQlVHQ2dtU0pvbVQ4aXhrQVJrV0Iy
15
- OTFkR3h2YjJzeEV6QVJCZ29Ka2lhSgprL0lzWkFFWkZnTmpiMjB3SGhjTk1U
16
- TXdNekkxTVRjek9EVTRXaGNOTVRRd016STFNVGN6T0RVNFdqQktNUm93CkdB
17
- WURWUVFEREJGa2VtVnlkbWx1YVd0ekxtRnBaMkZ5Y3pFWE1CVUdDZ21TSm9t
18
- VDhpeGtBUmtXQjI5MWRHeHYKYjJzeEV6QVJCZ29Ka2lhSmsvSXNaQUVaRmdO
19
- amIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBdwpnZ0VLQW9J
20
- QkFRQzBXYXJpYUl6cmpkU3pBY1VNNGs3a1VmWkdrNFMxZWFIY2J5OTdhRHV0
21
- QjNGTnp5Q3VGZnhVCjdQdndyR29aS0FGVEY1Mnc5aitKeDljV0FPbzlaTENz
22
- ZmJKd040ZjdrTVM4emRYVWJ0d3ovL0V4NnNacG9vZE4KZENnSUM2TXJvUXdL
23
- L3ZjNXExYi90ZVdTNFFCNElmcEVqNlJZYjhRYUptWjBJR252aXJmWE9wVlh5
24
- N05ISXdmVApTc0R5dGFCRTFzaVAwZ3g0YTlpNVNaTjVHM1UydmJFbmE5aDI3
25
- OC9nOVdsSnFCN1ZrcW9YTi9zeUE4L1VIeHVlClcvS1lGVDFXZ2xpR0l3aXhs
26
- K0FJeVFwNGxscEJsOUgzbnU3ZFN2bmRyOVVIUmRsa3pZeEZWM0ZjM0V1cnBp
27
- UE0KT1BTanpJL0c4V3hJYWkrVWVaY2lERjFJc1lpNXRhY0hBZ01CQUFHamdZ
28
- NHdnWXN3Q1FZRFZSMFRCQUl3QURBTApCZ05WSFE4RUJBTUNCTEF3SFFZRFZS
29
- ME9CQllFRkhDSmZLQ3V0ZkhETGdmMUpLak9WNnVHTHVqTE1DZ0dBMVVkCkVR
30
- UWhNQitCSFdSNlpYSjJhVzVwYTNNdVlXbG5ZWEp6UUc5MWRHeHZiMnN1WTI5
31
- dE1DZ0dBMVVkRWdRaE1CK0IKSFdSNlpYSjJhVzVwYTNNdVlXbG5ZWEp6UUc5
32
- MWRHeHZiMnN1WTI5dE1BMEdDU3FHU0liM0RRRUJCUVVBQTRJQgpBUUNudHBP
33
- UXZveDhUVlN3d1h5MXFDMnVadnZQNTV6WjZoeHl6emJIZFJxd0FBT25zc2ZB
34
- VkFaSGlYVGZMZFFPCjg3Z3lMYk81YlZRa0dOa3laemRWTWJjNTlhNEg2ZEtT
35
- cjZBbWNDdGIvdGYrWldqR1U3b0F2UkZuWVJ3aGlyRkwKWThNTDNVZEQyVGdE
36
- REFYQU9IS1Vsc3E2dEtsVTFORXNMdjFCUkJOa0xQbzI1WHlFU1R6SlRWM2M4
37
- ZkluNmlLcgpaL3BOenhBZDlSN29TOExDZlhhTGhQeG85dkVyVVZLd3Q2NHpk
38
- YUtiQUNrampabkNab2VhaGxPd2dzVnN5bDBvCjQ0aXhMbXE0dTE1a0grUFRr
39
- dHFPWFp1ck5FWmdTMlRSWG5GRG9TWmRtT3IxMjM2ZS9SNTBzc1dlR0dIUUox
40
- V2wKN2ZZbFZpQThPY2Z3aGdyaDcyc05mVHpTCi0tLS0tRU5EIENFUlRJRklD
41
- QVRFLS0tLS0K
42
- date: 2013-04-03 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2013-04-27 00:00:00.000000000 Z
43
12
  dependencies:
44
13
  - !ruby/object:Gem::Dependency
45
14
  name: thor
46
15
  requirement: !ruby/object:Gem::Requirement
47
16
  requirements:
48
- - - ! '>='
17
+ - - '>='
49
18
  - !ruby/object:Gem::Version
50
19
  version: '0'
51
20
  type: :runtime
52
21
  prerelease: false
53
22
  version_requirements: !ruby/object:Gem::Requirement
54
23
  requirements:
55
- - - ! '>='
24
+ - - '>='
56
25
  - !ruby/object:Gem::Version
57
26
  version: '0'
58
27
  - !ruby/object:Gem::Dependency
59
28
  name: sqlite3
60
29
  requirement: !ruby/object:Gem::Requirement
61
30
  requirements:
62
- - - ! '>='
31
+ - - '>='
63
32
  - !ruby/object:Gem::Version
64
33
  version: '0'
65
34
  type: :runtime
66
35
  prerelease: false
67
36
  version_requirements: !ruby/object:Gem::Requirement
68
37
  requirements:
69
- - - ! '>='
38
+ - - '>='
70
39
  - !ruby/object:Gem::Version
71
40
  version: '0'
72
41
  - !ruby/object:Gem::Dependency
73
42
  name: sequel
74
43
  requirement: !ruby/object:Gem::Requirement
75
44
  requirements:
76
- - - ! '>='
45
+ - - '>='
77
46
  - !ruby/object:Gem::Version
78
47
  version: '0'
79
48
  type: :runtime
80
49
  prerelease: false
81
50
  version_requirements: !ruby/object:Gem::Requirement
82
51
  requirements:
83
- - - ! '>='
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubyzip
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
84
67
  - !ruby/object:Gem::Version
85
68
  version: '0'
86
69
  description: runoff provides functionality to export all the Skype chat history or
@@ -98,7 +81,6 @@ files:
98
81
  - README.md
99
82
  - Rakefile
100
83
  - bin/runoff
101
- - gem-public_cert.pem
102
84
  - lib/runoff.rb
103
85
  - lib/runoff/composition.rb
104
86
  - lib/runoff/file_writer.rb
@@ -121,17 +103,17 @@ require_paths:
121
103
  - lib
122
104
  required_ruby_version: !ruby/object:Gem::Requirement
123
105
  requirements:
124
- - - ! '>='
106
+ - - '>='
125
107
  - !ruby/object:Gem::Version
126
108
  version: '0'
127
109
  required_rubygems_version: !ruby/object:Gem::Requirement
128
110
  requirements:
129
- - - ! '>='
111
+ - - '>='
130
112
  - !ruby/object:Gem::Version
131
113
  version: '0'
132
114
  requirements: []
133
115
  rubyforge_project:
134
- rubygems_version: 2.0.3
116
+ rubygems_version: 2.0.0
135
117
  signing_key:
136
118
  specification_version: 4
137
119
  summary: Tool to export Skype chat history from the SQLite database to text files
checksums.yaml.gz.sig DELETED
Binary file
data/gem-public_cert.pem DELETED
@@ -1,22 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMRowGAYDVQQDDBFkemVy
3
- dmluaWtzLmFpZ2FyczEXMBUGCgmSJomT8ixkARkWB291dGxvb2sxEzARBgoJkiaJ
4
- k/IsZAEZFgNjb20wHhcNMTMwMzI1MTczODU4WhcNMTQwMzI1MTczODU4WjBKMRow
5
- GAYDVQQDDBFkemVydmluaWtzLmFpZ2FyczEXMBUGCgmSJomT8ixkARkWB291dGxv
6
- b2sxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
7
- ggEKAoIBAQC0WariaIzrjdSzAcUM4k7kUfZGk4S1eaHcby97aDutB3FNzyCuFfxU
8
- 7PvwrGoZKAFTF52w9j+Jx9cWAOo9ZLCsfbJwN4f7kMS8zdXUbtwz//Ex6sZpoodN
9
- dCgIC6MroQwK/vc5q1b/teWS4QB4IfpEj6RYb8QaJmZ0IGnvirfXOpVXy7NHIwfT
10
- SsDytaBE1siP0gx4a9i5SZN5G3U2vbEna9h278/g9WlJqB7VkqoXN/syA8/UHxue
11
- W/KYFT1WgliGIwixl+AIyQp4llpBl9H3nu7dSvndr9UHRdlkzYxFV3Fc3EurpiPM
12
- OPSjzI/G8WxIai+UeZciDF1IsYi5tacHAgMBAAGjgY4wgYswCQYDVR0TBAIwADAL
13
- BgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHCJfKCutfHDLgf1JKjOV6uGLujLMCgGA1Ud
14
- EQQhMB+BHWR6ZXJ2aW5pa3MuYWlnYXJzQG91dGxvb2suY29tMCgGA1UdEgQhMB+B
15
- HWR6ZXJ2aW5pa3MuYWlnYXJzQG91dGxvb2suY29tMA0GCSqGSIb3DQEBBQUAA4IB
16
- AQCntpOQvox8TVSwwXy1qC2uZvvP55zZ6hxyzzbHdRqwAAOnssfAVAZHiXTfLdQO
17
- 87gyLbO5bVQkGNkyZzdVMbc59a4H6dKSr6AmcCtb/tf+ZWjGU7oAvRFnYRwhirFL
18
- Y8ML3UdD2TgDDAXAOHKUlsq6tKlU1NEsLv1BRBNkLPo25XyESTzJTV3c8fIn6iKr
19
- Z/pNzxAd9R7oS8LCfXaLhPxo9vErUVKwt64zdaKbACkjjZnCZoeahlOwgsVsyl0o
20
- 44ixLmq4u15kH+PTktqOXZurNEZgS2TRXnFDoSZdmOr1236e/R50ssWeGGHQJ1Wl
21
- 7fYlViA8Ocfwhgrh72sNfTzS
22
- -----END CERTIFICATE-----
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
@@ -1 +0,0 @@
1
- a �HHV�5���e�̪��͡�f�8G���d�����׹9�bK�n aQ���#6�8�Yt�%0|��M��7D"�[F� _J�jh"��Y���%����B��pBa"ukkh�,�t� ���vJ1�Fw�ih+�\�J���{��4�7�Ai��c�m�|=���ɼ�Dq|���