pastehub 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 943838932edce14917fcbcd38e7fa3938fd9e397
4
- data.tar.gz: b171ec293084b4f79cf2a0136cecc007f6f0be23
3
+ metadata.gz: a01fa2d11546477436fdcfabfb078611ad6703fc
4
+ data.tar.gz: cd4b9982587c99b62620af701df08c58a55675c7
5
5
  SHA512:
6
- metadata.gz: 8bb36630f691fc242faf5db860742d486ecd2e7c3f0dafd156a474105ba1ac6be9ff1ddf3cdcc7a139d4ec7bf54ccea7ce939d2327922694d267607e0a3193a9
7
- data.tar.gz: c9711b80d42e0f4f26f19a4493d6ccfe2c3b10cd885d2ba9102b3138be0d518d0ca4e9546d2730faba53b935d6fa440f43af438b5b8e7a28865f72dccb1f28d5
6
+ metadata.gz: a77838b34dd3d3ca9cfdb918ad7d2c2af2255a339464849e27b0890e84fac26d71e5e6cd041c9e7a56cee1a9baf62a090c2bf86830c80b042d1eddeac24a4cce
7
+ data.tar.gz: 46195274032f1740d99003045051b8a19d359be9a8d1e46cf2fb9b1f969a11120c94a391ca72ea7413f02948c80afa71c4eae8cc2772b6b20f66e9164848fd68
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  PasteHub
2
2
  =======================
3
3
 
4
-
5
4
  ## Concept
6
5
 
7
6
  Cross-platform clipboard (copy and paste) sync tool.
@@ -20,6 +19,7 @@ Linux(gem) | not yet | OK | OK |
20
19
 
21
20
  + [Dropbox](./doc/client/dropbox.md)
22
21
  + [RubyGems](./doc/client/ruby_gems.md)
22
+ + [Plugins](./doc/client/plugins.md)
23
23
  + [Setup Emacs](./doc/client/setup_emacs.md)
24
24
  + [Setup Vim](./doc/client/setup_vim.md)
25
25
 
data/Rakefile CHANGED
@@ -26,7 +26,7 @@ begin
26
26
  'README.txt',
27
27
  'bin/*',
28
28
  'lib/*.rb',
29
- 'lib/*/*.rb',
29
+ 'lib/**/*.rb',
30
30
  ].to_a
31
31
  # gemspec.add_dependency( "json", "1.8.1")
32
32
  gemspec.add_dependency( "clipboard", "1.0.5" )
@@ -50,6 +50,9 @@ task :test do
50
50
  sh "ruby -I ./lib `which rspec` -b ./test/libsyncentry_spec.rb "
51
51
  sh "ruby -I ./lib `which rspec` -b ./test/libutil_spec.rb "
52
52
  sh "ruby -I ./lib `which rspec` -b ./test/libclipboard_spec.rb "
53
+ sh "ruby -I ./lib `which rspec` -b ./test/libplugin_spec.rb "
54
+ sh "ruby -I ./lib `which rspec` -b ./test/plugin_dropbox_todo_spec.rb "
55
+ sh "ruby -I ./lib `which rspec` -b ./test/plugin_sendmail_spec.rb "
53
56
  end
54
57
 
55
58
  task :sync do
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 4
4
- :patch: 2
3
+ :minor: 5
4
+ :patch: 0
@@ -76,39 +76,6 @@ def main( argv )
76
76
 
77
77
  # create clientSync
78
78
  clientSync = PasteHub::ClientSync.new( hostname, 1.0 )
79
-
80
- # add notification handler
81
- receiveNotifyFunc =
82
- case RbConfig::CONFIG['host_os']
83
- when /^darwin/
84
- # MacOS X
85
- notifier_path = RbConfig::CONFIG['bindir'] + "/" + "terminal-notifier"
86
- if File.exist?( notifier_path )
87
- STDERR.puts( "Info: found terminal-notifier for MacOS X." )
88
- lambda { |x|
89
- str = if config.notifyMessageMax < x.size
90
- x[0...config.notifyMessageMax] + " ..."
91
- else
92
- x
93
- end
94
- url_option = ''
95
- util = PasteHub::Util.new
96
- if util.pulloutURL( str )
97
- url_option = '-open \'' + util.pulloutURL( str ) + '\''
98
- end
99
- command = sprintf( "%s -title 'PasteHub' -message '\\%s' %s", notifier_path, str, url_option )
100
- system( command )
101
- }
102
- else
103
- nil
104
- end
105
- else
106
- lambda { |x|
107
- # nothing to do.
108
- }
109
- end
110
-
111
- clientSync.addNoitfyCallback( receiveNotifyFunc )
112
79
 
113
80
  while true
114
81
  signals = 0
@@ -38,3 +38,4 @@ require 'pastehub/client'
38
38
  require 'pastehub/clientsync'
39
39
  require 'pastehub/clipboard'
40
40
  require 'pastehub/syncentry'
41
+ require 'pastehub/plugin'
@@ -45,6 +45,7 @@ module PasteHub
45
45
  def self.setupDirectory
46
46
  localdb_path = PasteHub::Config.instance.localDbPath
47
47
  localsync_path = PasteHub::Config.instance.localSyncPath
48
+ public_path = PasteHub::Config.instance.publicPath
48
49
  # Create directory
49
50
  if not File.exist?( localdb_path )
50
51
  FileUtils.mkdir_p( localdb_path, { :mode => 0700 } )
@@ -54,6 +55,12 @@ module PasteHub
54
55
  if not File.exist?( localsync_path )
55
56
  FileUtils.mkdir_p( localsync_path, { :mode => 0700 } )
56
57
  end
58
+
59
+ # Create Dropbox/Public directory
60
+ if not File.exist?( public_path )
61
+ FileUtils.mkdir_p( public_path, { :mode => 0700 } )
62
+ end
63
+
57
64
  return true
58
65
  end
59
66
 
@@ -113,15 +113,12 @@ module PasteHub
113
113
  @polling_interval = polling_interval
114
114
  @status = Status.new()
115
115
  @last_modify_time = Time.now()
116
- end
117
-
118
- def addNoitfyCallback( receiveNotifyFunc )
119
- @receiveNotifyFunc = receiveNotifyFunc
116
+ @plugin = PasteHub::Plugin
117
+ @plugin.load_plugins
120
118
  end
121
119
 
122
- def notifyToReceive( message )
123
- @receiveNotifyFunc.call( message ) if @receiveNotifyFunc
124
- @status.inc( )
120
+ def notifyToReceive(message)
121
+ @plugin.distribute_newly_arrived(message)
125
122
  end
126
123
 
127
124
  # host's sync data file excludes local hostname
@@ -45,7 +45,11 @@ module PasteHub
45
45
  def initialize( )
46
46
  self.setupClient( {} )
47
47
  @verbose_flag = false
48
- @notifyMessageMax = 80
48
+ @notifyMessageMax = 100
49
+ end
50
+
51
+ def reinitialize()
52
+ initialize()
49
53
  end
50
54
 
51
55
  def getHomeDirectory( )
@@ -76,6 +80,11 @@ module PasteHub
76
80
  else
77
81
  File.expand_path( sprintf( "%s/Dropbox/pastehub/", getHomeDirectory() )) + "/"
78
82
  end
83
+ @publicPath = if hash[ :publicPath ]
84
+ hash[ :publicPath ]
85
+ else
86
+ File.expand_path( sprintf( "%s/Dropbox/Public/", getHomeDirectory() )) + "/"
87
+ end
79
88
  end
80
89
 
81
90
  def loadClient()
@@ -90,6 +99,6 @@ module PasteHub
90
99
  end
91
100
  end
92
101
 
93
- attr_reader :localDbPath, :localSyncPath, :notifyMessageMax
102
+ attr_reader :localDbPath, :localSyncPath, :publicPath, :notifyMessageMax
94
103
  end
95
104
  end
@@ -0,0 +1,70 @@
1
+ #
2
+ # plugin.rb - PasteHub's plugin loader
3
+ #
4
+ # Copyright (c) 2014-2014 Kiyoka Nishiyama <kiyoka@sumibi.org>
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ #
13
+ # 2. Redistributions in binary form must reproduce the above copyright
14
+ # notice, this list of conditions and the following disclaimer in the
15
+ # documentation and/or other materials provided with the distribution.
16
+ #
17
+ # 3. Neither the name of the authors nor the names of its contributors
18
+ # may be used to endorse or promote products derived from this
19
+ # software without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ #
33
+ #
34
+ module PasteHub
35
+ class PluginClass
36
+ attr_reader :plugins
37
+
38
+ def initialize
39
+ @plugins = []
40
+ end
41
+
42
+ def load_plugins
43
+ dir = File.join(File.dirname(__FILE__), "plugin")
44
+ load_plugin_dir(dir)
45
+ end
46
+
47
+ def load_plugin_dir(dir)
48
+ dir = File.expand_path(dir)
49
+ Dir.entries(dir).sort.each {|filename|
50
+ if filename =~ /\.rb$/
51
+ require File.join(dir, filename)
52
+ end
53
+ }
54
+ nil
55
+ end
56
+
57
+ def register_plugin(obj)
58
+ #STDERR.printf( "Info: plugin [%s] loaded.\n", obj.class.to_s )
59
+ @plugins << obj
60
+ end
61
+
62
+ def distribute_newly_arrived(message)
63
+ @plugins.each { |obj|
64
+ obj.newly_arrived(message)
65
+ }
66
+ end
67
+ end
68
+
69
+ Plugin = PluginClass.new
70
+ end
@@ -0,0 +1,64 @@
1
+ #
2
+ # dropbox_todo.rb - Plugin: Add todo as dropbox file.
3
+ #
4
+ # Copyright (c) 2014-2014 Kiyoka Nishiyama <kiyoka@sumibi.org>
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ #
13
+ # 2. Redistributions in binary form must reproduce the above copyright
14
+ # notice, this list of conditions and the following disclaimer in the
15
+ # documentation and/or other materials provided with the distribution.
16
+ #
17
+ # 3. Neither the name of the authors nor the names of its contributors
18
+ # may be used to endorse or promote products derived from this
19
+ # software without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ #
33
+ #
34
+ require 'pastehub/plugin_base'
35
+
36
+ module PasteHub
37
+ class DropboxTodo < PluginBase
38
+
39
+ def todo?(message)
40
+ m = message.match( /(^|[ ])[#]todo([ ]|$)/i )
41
+ if m
42
+ message.gsub( /[ ]?[#]todo[ ]?/i, "" )
43
+ else
44
+ nil
45
+ end
46
+ end
47
+
48
+ def newly_arrived(message)
49
+ config = PasteHub::Config.instance
50
+ path = config.publicPath
51
+ filename = todo?(message)
52
+ if filename
53
+ FileUtils.mkdir_p( path + "pastehub_todo/", { :mode => 0700 } )
54
+ open( path + "pastehub_todo/" + filename + ".txt", "w" ) {|f|
55
+ f.puts "pastehub todo"
56
+ }
57
+ STDERR.printf( "Info: Added todo [%s]\n", filename )
58
+ end
59
+ nil
60
+ end
61
+ end
62
+
63
+ Plugin.register_plugin(DropboxTodo.new)
64
+ end
@@ -0,0 +1,73 @@
1
+ #
2
+ # notification_center.rb - NotificationCenter plugin for MacOS X
3
+ #
4
+ # Copyright (c) 2014-2014 Kiyoka Nishiyama <kiyoka@sumibi.org>
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ #
13
+ # 2. Redistributions in binary form must reproduce the above copyright
14
+ # notice, this list of conditions and the following disclaimer in the
15
+ # documentation and/or other materials provided with the distribution.
16
+ #
17
+ # 3. Neither the name of the authors nor the names of its contributors
18
+ # may be used to endorse or promote products derived from this
19
+ # software without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ #
33
+ #
34
+ require 'pastehub/plugin_base'
35
+
36
+ module PasteHub
37
+ class NotificationCenter < PluginBase
38
+
39
+ def initialize()
40
+ @enable = false
41
+ case RbConfig::CONFIG['host_os']
42
+ when /^darwin/
43
+ # MacOS X
44
+ @notifier_path = RbConfig::CONFIG['bindir'] + "/" + "terminal-notifier"
45
+ if File.exist?( @notifier_path )
46
+ STDERR.puts( "Info: found terminal-notifier for MacOS X." )
47
+ @enable = true
48
+ end
49
+ end
50
+ end
51
+
52
+ def newly_arrived(message)
53
+ config = PasteHub::Config.instance
54
+ if @enable
55
+ str = if config.notifyMessageMax < message.size
56
+ message[0...config.notifyMessageMax] + " ..."
57
+ else
58
+ message
59
+ end
60
+ url_option = ''
61
+ util = PasteHub::Util.new
62
+ if util.pulloutURL( str )
63
+ url_option = '-open \'' + util.pulloutURL( str ) + '\''
64
+ end
65
+ command = sprintf( "%s -title 'PasteHub' -message '\\%s' %s", @notifier_path, str, url_option )
66
+ system( command )
67
+ end
68
+ nil
69
+ end
70
+ end
71
+
72
+ Plugin.register_plugin(NotificationCenter.new)
73
+ end
@@ -0,0 +1,43 @@
1
+ #
2
+ # sample.rb - a PasteHub's plugin sample ( nothing to do )
3
+ #
4
+ # Copyright (c) 2014-2014 Kiyoka Nishiyama <kiyoka@sumibi.org>
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ #
13
+ # 2. Redistributions in binary form must reproduce the above copyright
14
+ # notice, this list of conditions and the following disclaimer in the
15
+ # documentation and/or other materials provided with the distribution.
16
+ #
17
+ # 3. Neither the name of the authors nor the names of its contributors
18
+ # may be used to endorse or promote products derived from this
19
+ # software without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ #
33
+ #
34
+ require 'pastehub/plugin_base'
35
+ module PasteHub
36
+ class PluginSample < PluginBase
37
+ def newly_arrived(message)
38
+ # STDERR.puts "PluginSample: message arrived [#{message}]"
39
+ end
40
+ end
41
+
42
+ Plugin.register_plugin(PluginSample.new)
43
+ end
@@ -0,0 +1,121 @@
1
+ #
2
+ # sendmail.rb - Plugin: send clipboard message by e-mail.
3
+ #
4
+ # Copyright (c) 2014-2014 Kiyoka Nishiyama <kiyoka@sumibi.org>
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ #
13
+ # 2. Redistributions in binary form must reproduce the above copyright
14
+ # notice, this list of conditions and the following disclaimer in the
15
+ # documentation and/or other materials provided with the distribution.
16
+ #
17
+ # 3. Neither the name of the authors nor the names of its contributors
18
+ # may be used to endorse or promote products derived from this
19
+ # software without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ #
33
+ #
34
+ require 'pastehub/plugin_base'
35
+
36
+ module PasteHub
37
+ class MailSetting
38
+ attr_accessor :tag
39
+ attr_accessor :mail
40
+
41
+ def to_s()
42
+ return @tag + "," + @mail
43
+ end
44
+ end
45
+
46
+ class SendMail < PluginBase
47
+ attr_reader :mail_settings
48
+ attr_accessor :mail_command
49
+
50
+ def initialize()
51
+ @mail_command = "mail"
52
+ # load env variables
53
+ @mail_settings = 10.times.collect {|n|
54
+ mail_setting = MailSetting.new
55
+ val = ENV[ sprintf("PASTEHUB_MAIL%d", n) ]
56
+ if val
57
+ if val.match(/^[a-zA-Z]+[,][a-zA-Z0-9_.-]+[@].+$/)
58
+ arr = val.split(/,/)
59
+ mail_setting.tag = arr[0]
60
+ mail_setting.mail = arr[1]
61
+ mail_setting
62
+ else
63
+ nil
64
+ end
65
+ else
66
+ nil
67
+ end
68
+ }.select( ) {|x| x}
69
+ # display settings
70
+ @mail_settings.each { |setting|
71
+ STDERR.printf( "Info: SendMail-plugin tag:[%s] mail[%s]\n",
72
+ setting.tag,
73
+ setting.mail )
74
+ }
75
+ end
76
+
77
+ def sendmail?(message)
78
+ arr = mail_settings.collect { |setting|
79
+ tag_exp = sprintf("(^|[ ])[#]%s([ ]|$)", setting.tag)
80
+ regexp = Regexp.new(tag_exp)
81
+ if regexp.match(message)
82
+ setting.mail
83
+ else
84
+ nil
85
+ end
86
+ }.select( ) {|x| x}
87
+ if 0 < arr.size
88
+ arr[0]
89
+ else
90
+ nil
91
+ end
92
+ end
93
+
94
+ def encode_subject(subject)
95
+ enc_str = Base64.strict_encode64(subject)
96
+ "=?utf-8?B?" + enc_str + "?="
97
+ end
98
+
99
+ def newly_arrived(message)
100
+ mailaddress = sendmail?(message)
101
+ lines = message.split( /\n/ )
102
+ if mailaddress
103
+ command = sprintf( "|%s %s -i -s '%s'", @mail_command, mailaddress, encode_subject(lines[0]))
104
+ if @mail_command
105
+ p @mail_command
106
+ open( command, "w" ) {|f|
107
+ f.print message
108
+ }
109
+ STDERR.printf( "Info: send mail [%s]\n", command )
110
+ nil
111
+ else
112
+ command
113
+ end
114
+ else
115
+ nil
116
+ end
117
+ end
118
+ end
119
+
120
+ Plugin.register_plugin(SendMail.new)
121
+ end
@@ -0,0 +1,43 @@
1
+ #
2
+ # plugin_base.rb - Base class for plugin implementation.
3
+ #
4
+ # Copyright (c) 2014-2014 Kiyoka Nishiyama <kiyoka@sumibi.org>
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions
8
+ # are met:
9
+ #
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ #
13
+ # 2. Redistributions in binary form must reproduce the above copyright
14
+ # notice, this list of conditions and the following disclaimer in the
15
+ # documentation and/or other materials provided with the distribution.
16
+ #
17
+ # 3. Neither the name of the authors nor the names of its contributors
18
+ # may be used to endorse or promote products derived from this
19
+ # software without specific prior written permission.
20
+ #
21
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
+ #
33
+ #
34
+ module PasteHub
35
+ class PluginBase
36
+ def initialize
37
+ end
38
+
39
+ # for customization of newly arraived message.
40
+ def newly_arrived (message)
41
+ end
42
+ end
43
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pastehub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kiyoka Nishiyama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-13 00:00:00.000000000 Z
11
+ date: 2014-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clipboard
@@ -156,6 +156,12 @@ files:
156
156
  - lib/pastehub/clientsync.rb
157
157
  - lib/pastehub/clipboard.rb
158
158
  - lib/pastehub/config.rb
159
+ - lib/pastehub/plugin.rb
160
+ - lib/pastehub/plugin/dropbox_todo.rb
161
+ - lib/pastehub/plugin/notification_center.rb
162
+ - lib/pastehub/plugin/sample.rb
163
+ - lib/pastehub/plugin/sendmail.rb
164
+ - lib/pastehub/plugin_base.rb
159
165
  - lib/pastehub/syncentry.rb
160
166
  - lib/pastehub/util.rb
161
167
  - README.md