wpps 0.2.4 → 0.3.2

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8320bfc6c0f49190dd79e4d44c2e76e1907cc64e
4
- data.tar.gz: 2589f51754aa3e10bce0312f3d606b0a134e03f0
3
+ metadata.gz: c6eee0097df00b23ec18bae46054835c6c86a4ee
4
+ data.tar.gz: aa53450a075147f36824a65b0a688400376c6c63
5
5
  SHA512:
6
- metadata.gz: 23f477e8e729c16b137c4dda20484331e2538d4c004f933ffd68df7354af5681d387adee8bbd35626ac6b482ed21622ad67532daaaf2e1bd88c16435a0cbe983
7
- data.tar.gz: 7722b843b8ecb3e3e4209bf8401206d4e5cb035908a664e91cc8cc910c524859fcee5db01ee4a8f827dc7fb3f3b3ee88b3bb292057bb7dd256870ee0cd3da44c
6
+ metadata.gz: 10329e5fe521ac3a54ddc0a1c128c4946a4b4d45cbba32bd097c619dd508c894e01cbcebf8109e79927292f3b664cb9f792ba068c3bdfdb2b156d0cd4c075a85
7
+ data.tar.gz: e298cd434fb30401780d41ef5d064d5919ad93d014dee27f73519d504df61dc69a4294dafcb4874b249d619b9ffea67de4b89fd07a1cf16afa91f169905dfce1
data/bin/pwrslv CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # coding: utf-8
2
3
 
3
4
  require 'rubygems'
4
5
  require 'twitter'
@@ -7,12 +8,16 @@ require 'optparse'
7
8
  require 'nokogiri'
8
9
  require 'wputils'
9
10
  require 'whiplash/version'
11
+ require 'initcommand'
10
12
 
11
- usage = "Usage: pwrslv [OPTIONS]"
13
+ usage = "Usage: pwrslv init {url|file} [--ovrwr]\n"\
14
+ " pwrslv [OPTIONS]"
12
15
 
13
- options = { :maxtweets => 1,
14
- :interative => false,
15
- :verbose => 0
16
+ # Setting default options
17
+ options = { :maxtweets => 1, # Number of tweets to get from tweeter
18
+ :interative => false, # No interactive
19
+ :ovrwr => false, # No overwrite
20
+ :verbose => 0 # Verbosity level: no message
16
21
  }
17
22
  OptionParser.new do |opt|
18
23
  opt.banner = usage
@@ -29,6 +34,9 @@ OptionParser.new do |opt|
29
34
  'Maximum number of tweets retrieve from',
30
35
  'a specific TAG'
31
36
  ) { |o| options[:maxtweets] = o.to_i }
37
+ opt.on('--ovrwr',
38
+ 'flag that enables overrides files,',
39
+ 'directories') { |o| options[:ovrwr] = true }
32
40
  opt.on('-t',
33
41
  '--tag TAG',
34
42
  String,
@@ -37,7 +45,7 @@ OptionParser.new do |opt|
37
45
  ) { |o| options[:tag] = o }
38
46
  opt.on('--verbose LEVEL') do |o|
39
47
  options[:verbose] = o.to_i
40
- unless 0 <= options[:verbose] and options[:verbose] <= 2
48
+ unless 0 <= options[:verbose] and options[:verbose] <= 3
41
49
  puts opt.help
42
50
  exit 1
43
51
  end
@@ -52,68 +60,92 @@ OptionParser.new do |opt|
52
60
  end
53
61
  end.parse!
54
62
 
63
+ if ARGV[0] == "init" then
64
+ ARGV.shift
65
+ if ARGV.length == 1 then
66
+ createSubTreeDirectory('.powerslave', options[:ovrwr], ARGV[0])
67
+ exit 0
68
+ else
69
+ STDERR.puts usage
70
+ exit 1
71
+ end
72
+ end
73
+
55
74
  unless ARGV.empty? then
56
- puts usage
75
+ STDOUT.puts usage
57
76
  exit 1
58
77
  end
59
78
 
60
- usertwitter=ARGV[0]
79
+ # usertwitter=ARGV[0]
61
80
 
62
81
  yamlconf = getPScfgFile()
63
82
  client = get_tweeter_client(yamlconf)
64
83
 
65
84
  begin
66
85
  tag = getWPTag(options)
86
+ puts "Tag: #{tag}" if options[:verbose] > 0
67
87
  tweets = client.search(tag)
68
-
88
+ puts "Tweets: #{tweets}" if options[:verbose] > 0
69
89
  nro = 0
70
90
  tweets.each do |tw|
71
91
  nro += 1
72
- # puts "Tweet text: #{tw.text}"
92
+ printLevelMsg(1, options[:verbose], "Tweet text: #{tw.text}")
93
+
73
94
  uri = /https:\/\/t.co\/.*/.match(tw.text)
74
- unless uri == nil
75
- # puts "Getting uri: #{uri[0]} short uri:"
76
- unless uri[0] == nil
77
- ruri = resolve_redirects(uri[0])
78
- idinfo = /http:\/\/pastie\.org\/(\d+)/.match(ruri)
79
- # puts "Processing idinfo: #{idinfo[0]}"
80
- unless idinfo[1] == nil
81
- # puts "Getting Pastie: #{idinfo[1]}"
82
- p = Pastie.get(idinfo[1])
83
- # puts "Pastie: #{p}"
84
- unless p == nil
85
- doc = Nokogiri::HTML(p.content)
86
- src = doc.at('body').at('pre').
87
- inner_html.gsub("<br>", "\n").gsub("<br/>", "\n").
88
- gsub("&lt;","<").gsub("&gt;",">").gsub("&amp;", "&")
89
- lines = src.split(/\n/)
90
- lastLine = lines[lines.length - 1]
91
- psflnm = /.*filename: (.*)/.match(lines[lines.length - 1])
92
- if psflnm[1] == nil
93
- puts "Cannot get filename from pastie link. Process ends"
94
- exit 1
95
- end
96
- filename = psflnm[1]
97
- print "Start writing #{filename}"
98
- $stdout.flush
99
- begin
100
- file = File.open(filename, "w+")
101
- nwlines = lines.first(lines.length - 1)
102
- nwlines.each do |line|
103
- file.puts(line)
104
- end
105
- rescue Exception => e
106
- puts "\nError writting #{filename} due: #{e}"
107
- exit 1
108
- end
109
- puts " End writing #{filename}"
110
- end
111
- end
112
- end
95
+ endIfNil(uri, "Invalid URI on tweet")
96
+ printLevelMsg(1, options[:verbose], "Getting uri: #{uri[0]} short uri:")
97
+
98
+ endIfNil(uri[0], "Invalid URI format")
99
+
100
+ ruri = resolve_redirects(uri[0])
101
+ printLevelMsg(1, options[:verbose], "Resolved URI: #{ruri}")
102
+
103
+ idinfo = /http:\/\/pastie\.org\/(\d+)/.match(ruri)
104
+ printLevelMsg(1, options[:verbose], "Processing idinfo: #{idinfo[0]}")
105
+
106
+ endIfNil(idinfo[1], "Invalid Pastie id")
107
+ printLevelMsg(1, options[:verbose], "Getting Pastie id: #{idinfo[1]}")
108
+
109
+ p = Pastie.get(idinfo[1])
110
+ printLevelMsg(1, options[:verbose], "Pastie: #{p}")
111
+ endIfNil(p, "get pastie is nil")
112
+
113
+ doc = Nokogiri::HTML(p.content)
114
+ src = doc.at('body').at('pre').
115
+ inner_html.gsub("<br>", "\n").gsub("<br/>", "\n").
116
+ gsub("&lt;","<").gsub("&gt;",">").gsub("&amp;", "&").
117
+ gsub("&aacute;", "á").gsub("&eacute;", "é").gsub("&iacute;", "í").
118
+ gsub("&oacute;", "ó").gsub("&uactue;", "ú")
119
+ printLevelMsg(3, options[:verbose], "Source file: #{src}")
120
+
121
+ lines = src.split(/\n|\r\n/)
122
+ lastLine = lines[lines.length - 1]
123
+ psflnm = /.*filename: (.*)/.match(lastLine)
124
+
125
+ endIfNil(psflnm[1], "Cannot get filename from pastie link. Process ends")
126
+ filename = psflnm[1]
127
+
128
+ STDOUT.print "Start writing #{filename}"
129
+ STDOUT.flush
130
+
131
+ begin
132
+
133
+ file = File.open(filename, "w+")
134
+ nwlines = lines.first(lines.length - 1).last(lines.length - 2)
135
+ file.puts(nwlines)
136
+ # nwlines.each do |line|
137
+ # file.puts(line)
138
+ # end
139
+ rescue Exception => e
140
+ STDERR.puts "\nError writting #{filename} due: #{e}"
141
+ exit 1
113
142
  end
143
+
144
+ STDOUT.puts " End writing #{filename}"
145
+
114
146
  break if nro == options[:maxtweets]
115
147
  end
116
148
  rescue Exception => e
117
- puts e
149
+ STDERR.puts e
118
150
  exit 1
119
151
  end
data/bin/wp CHANGED
@@ -7,15 +7,28 @@ require 'optparse'
7
7
  require 'extensions'
8
8
  require 'wputils'
9
9
  require 'whiplash/version'
10
+ require 'initcommand'
10
11
 
11
- usage = "Usage: wp [OPTIONS]"
12
+ usage = "Usage: wp init {url|file} [--ovrwr]\n"\
13
+ " wp [options] filename"
12
14
 
13
- options = {}
15
+ options = { :ovrwr => false,
16
+ :auth => nil
17
+ }
14
18
  OptionParser.new do |opt|
15
19
  opt.banner = usage
16
20
  opt.version = Whiplash::VERSION
17
21
  opt.separator ""
18
22
  opt.separator "Specific options:"
23
+ opt.on('-a',
24
+ '--auth FILE',
25
+ String,
26
+ 'A FILE that contains the twitter\'s',
27
+ 'authorizations tokens'
28
+ ) { |o| options[:auth] = o }
29
+ opt.on('--ovrwr',
30
+ 'flag that enables overrides files,',
31
+ 'directories') { |o| options[:ovrwr] = true }
19
32
  opt.on('-m',
20
33
  '--message MESSAGE',
21
34
  String,
@@ -36,6 +49,18 @@ OptionParser.new do |opt|
36
49
  end
37
50
  end.parse!
38
51
 
52
+ # Test if is a init command
53
+ if ARGV[0] == "init" then
54
+ ARGV.shift
55
+ if ARGV.length == 1 then
56
+ createSubTreeDirectory('.whiplash', options[:ovrwr], ARGV[0])
57
+ exit 0
58
+ else
59
+ STDERR.puts usage
60
+ exit 1
61
+ end
62
+ end
63
+
39
64
  if ARGV.empty? or ARGV.length > 1 then
40
65
  puts usage
41
66
  exit 1
@@ -45,22 +70,19 @@ sendfile=ARGV[0]
45
70
  unless options[:message] == nil
46
71
  user_message = options[:message]
47
72
  else
48
- user_message = ""
73
+ user_message = "NO MESSAGE"
49
74
  end
50
75
 
51
- yamlconf = getWPcfgFile()
76
+ yamlconf = getWPcfgFile(options[:auth])
52
77
 
53
78
  # Reading a file
54
79
  unless File::exist? sendfile or File::readable? sendfile
55
- puts "Error: file #{sendfile} does not exist or not readable"
80
+ STDERR.puts "Error: file #{sendfile} does not exist or not readable"
56
81
  exit 1
57
82
  end
58
83
 
59
84
  file = File.new(sendfile, "r")
60
- conts = ""
61
- file.each_line do |line|
62
- conts += line
63
- end
85
+ conts = file.read
64
86
  file.close
65
87
 
66
88
  # Create a new paste
@@ -69,7 +91,13 @@ lang = le.getLangDesc(File.extname sendfile)
69
91
  exts = File.extname sendfile
70
92
  comm = lang.prodComment('filename: ' + (File.basename sendfile))
71
93
  conts = conts + comm
72
- p = Pastie.create(conts, false, lang.name)
94
+ p = nil
95
+ begin
96
+ p = Pastie.create(conts, false, lang.name)
97
+ rescue => error
98
+ STDERR.puts "Error pastie: #{error.class} and #{error.message}"
99
+ exit 1
100
+ end
73
101
 
74
102
  # Getting environment variables that contains the tag info
75
103
  tag = getWPTag(options)
@@ -81,12 +109,14 @@ client = get_tweeter_client(yamlconf)
81
109
  begin
82
110
  tweet_message = tag + " " + user_message + " " + p.link
83
111
  if tweet_message.length > 240
84
- puts "wp cannot send message: #{tweet_message} because too long: #{tweet_emssage.length}"
112
+ STDERR.puts "wp cannot send message: #{tweet_message} because too long: #{tweet_emssage.length}"
85
113
  exit 1
86
114
  end
87
115
  tweet = client.update(tweet_message)
88
- puts "Tweet id: #{tweet.id}"
116
+ histfile = File.join(ENV['HOME'], '.whiplash', 'history', tweet.id.to_s)
117
+ creatFileWrTr(histfile, conts)
118
+ STDOUT.puts "Tweet id: #{tweet.id}"
89
119
  rescue Exception => e
90
- puts "wp could not sent message send due: #{e.message}"
120
+ STDERR.puts "wp could not send a message due: #{e.message}"
91
121
  exit 1
92
122
  end
@@ -0,0 +1,63 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
4
+ def createSubTreeDirectory(workDir, ovrwr, url)
5
+ workPath = ENV['HOME'] + '/' + workDir
6
+
7
+ if Dir.exists? workPath then
8
+ if ovrwr then
9
+ eraseDirAll(workPath)
10
+ else
11
+ STDERR.puts "#{workPath} already exists"
12
+ exit 1
13
+ end
14
+ end
15
+
16
+ Dir.mkdir workPath
17
+ File.chmod(0700, workPath)
18
+ Dir.mkdir workPath + '/config'
19
+ File.chmod(0700, workPath + '/config')
20
+ Dir.mkdir workPath + '/history'
21
+ File.chmod(0700, workPath + '/history')
22
+ createAuthFile(url, workPath + '/config/auth')
23
+ end
24
+
25
+ def eraseDirAll(dir)
26
+ if Dir.exists? dir then
27
+ Dir.foreach(dir) do |filename|
28
+ if not (filename == '.' or filename == '..') then
29
+ pathname = dir + '/' + filename
30
+ if File.file? pathname then
31
+ File.delete pathname
32
+ elsif File.directory? pathname then
33
+ eraseDirAll pathname
34
+ else
35
+ puts "This never could happen #{pathname}"
36
+ # Unknown file
37
+ end
38
+ end
39
+ end
40
+ Dir.delete(dir)
41
+ end
42
+ end
43
+
44
+ def createAuthFile(url, authfile)
45
+ uriclass = URI.parse(url)
46
+ perms = String.new
47
+ if uriclass.scheme == "http" or uriclass.scheme == "https" then
48
+ perms = Net::HTTP.get(URI.parse(url))
49
+ elsif uriclass.scheme == "file" then
50
+ urlfile = File.open(uriclass.path, "r")
51
+ perms = urlfile.read
52
+ urlfile.close
53
+ else
54
+ urlfile = File.open(url, "r")
55
+ perms = urlfile.read
56
+ urlfile.close
57
+ end
58
+
59
+ # puts perms
60
+ f = File.new(authfile, File::CREAT|File::TRUNC | File::WRONLY, 0600)
61
+ f.write perms
62
+ f.close
63
+ end
@@ -1,3 +1,3 @@
1
1
  class Whiplash
2
- VERSION = '0.2.4'
2
+ VERSION = '0.3.2'
3
3
  end
@@ -23,13 +23,13 @@ rescue Faraday::Error, Faraday::Error::ConnectionFailed => e
23
23
  return nil
24
24
  end
25
25
 
26
- def getWPcfgFile()
27
- filepath=ENV["HOME"] + "/" + ".whiplash"
26
+ def getWPcfgFile(file)
27
+ filepath=file || File.join(ENV['HOME'], '.whiplash', 'config' ,'auth')
28
28
  YAML.load_file(filepath)
29
29
  end
30
30
 
31
31
  def getPScfgFile()
32
- filepath=ENV["HOME"] + "/" + ".powerslave"
32
+ filepath=File.join(ENV['HOME'], '.powerslave', 'config', 'auth')
33
33
  YAML.load_file(filepath)
34
34
  end
35
35
 
@@ -51,3 +51,29 @@ def getWPTag(options)
51
51
  end
52
52
  return ("#" + pTag)
53
53
  end
54
+
55
+ def endIfNil(value, msg)
56
+ if value.nil?
57
+ STDERR.puts msg
58
+ exit 1
59
+ end
60
+ end
61
+
62
+ def printLevelMsg(levelMsg, currentLevel, msg)
63
+ case currentLevel
64
+ when 0
65
+ levelMsg = 0
66
+ when 1, levelMsg == currentLevel
67
+ STDERR.puts msg
68
+ when 2, levelMsg <= currentLevel
69
+ STDERR.puts msg
70
+ when 3, levelMsg <= currentLevel
71
+ STDERR.puts msg
72
+ end
73
+ end
74
+
75
+ def creatFileWrTr(filename, msg)
76
+ hf = File.new(filename, File::CREAT|File::TRUNC|File::RDWR,0600)
77
+ hf.write msg
78
+ hf.close
79
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wpps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Francisco Cardona McCormick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-20 00:00:00.000000000 Z
11
+ date: 2016-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: twitter
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 5.14.0
19
+ version: 5.16.0
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 5.14.0
22
+ version: 5.16.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 5.14.0
29
+ version: 5.16.0
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 5.14.0
32
+ version: 5.16.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: pastie-api
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -56,20 +56,20 @@ dependencies:
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: 0.9.1
59
+ version: 0.9.2
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 0.9.1
62
+ version: 0.9.2
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 0.9.1
69
+ version: 0.9.2
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 0.9.1
72
+ version: 0.9.2
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: faraday_middleware
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -96,21 +96,21 @@ dependencies:
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 1.6.6.2
99
+ version: 1.6.7.2
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 1.6.6.2
102
+ version: 1.6.7.2
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: 1.6.6.2
109
+ version: 1.6.7.2
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 1.6.6.2
113
- description: Share snippets of code with a group of persons by twitter
112
+ version: 1.6.7.2
113
+ description: Share code's snippets by using twitter and pastie
114
114
  email: jfcmacro@gmail.com
115
115
  executables:
116
116
  - wp
@@ -121,6 +121,7 @@ files:
121
121
  - bin/pwrslv
122
122
  - bin/wp
123
123
  - lib/extensions.rb
124
+ - lib/initcommand.rb
124
125
  - lib/whiplash/version.rb
125
126
  - lib/wputils.rb
126
127
  homepage: https://github.com/jfcmacro/whiplash
@@ -143,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
144
  version: '0'
144
145
  requirements: []
145
146
  rubyforge_project:
146
- rubygems_version: 2.2.2
147
+ rubygems_version: 2.4.8
147
148
  signing_key:
148
149
  specification_version: 4
149
150
  summary: The whip hand