my-lib 0.0.1 → 0.0.1.1

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.1.1
data/lib/dev.rb ADDED
@@ -0,0 +1,363 @@
1
+ # -*- coding:utf-8 -*-
2
+
3
+ #! ruby
4
+ # -*- coding: utf-8 -*-
5
+ #
6
+ # 俺俺な典型的な動作を提供する
7
+ #
8
+ # こんな感じで使うと良い
9
+ #
10
+ # require "/Users/seijiro/code/ruby/my-lib.rb"
11
+ # class This < MyObject
12
+ # include RunPerSecModule
13
+ # include MyDBModule
14
+ # include MyPusherModule
15
+ # .....
16
+ #
17
+ # end
18
+ #
19
+
20
+ # 俺俺インスタンスをつくるためにクラスを用意した
21
+ # 典型的なrequireを書きこんでいく
22
+ # 読み込み済みモジュール
23
+ # kconv time
24
+ class MyObject
25
+ def self.myrequire
26
+ require "kconv"
27
+ require "time"
28
+ require "optparse"
29
+ end
30
+ end
31
+
32
+ #~/config.ymlに配置された設定ファイルを読んで返す
33
+ class MyConfig
34
+ # 設定オブジェクトを返す
35
+ def self.get
36
+ self.read unless @data
37
+ return @data
38
+ end
39
+
40
+ private
41
+
42
+ def self.read
43
+ require 'yaml'
44
+ @data = YAML.load_file("#{ENV['HOME']}/config.yml")
45
+ end
46
+ end
47
+
48
+ # 指定秒数ごとにrun関数をループする
49
+ # 各メソッドを必要に応じて再定義して使う。
50
+ #
51
+ # 使い方:
52
+ # someinstance.extend RunPerSecModule
53
+ # someinstance.run(ループのインターバルsec){
54
+ # __block__for__yield__
55
+ # }
56
+ #
57
+ # OR
58
+ #
59
+ # class ThisDo < MyObject
60
+ # include RunPerSecModule
61
+ # .....
62
+ #
63
+ module RunPerSecModule
64
+ # ループフラグ
65
+ @loop_flg
66
+
67
+ # main_loopをループする
68
+ # sec : ループ間隔 秒
69
+ # before_run_loop,ループ,after_run_loopの順番で実行する。
70
+ # ループの中身はloop_hook_pre,与えられたブロック,main_loop,loop_hook_postの順番で実行する
71
+ def run(sec)
72
+ init_run_per_sec_module
73
+ before_run_loop
74
+ while @loop_flg
75
+ loop_hook_pre
76
+ yield
77
+ main_loop
78
+ loop_hook_post
79
+ sleep sec
80
+ end
81
+ after_run_loop
82
+ end
83
+
84
+ # 外からは使わない
85
+ # 無限ループフラグを立てる
86
+ def init_run_per_sec_module
87
+ @loop_flg = true
88
+ end
89
+
90
+ # runのループを止める
91
+ def stop_run
92
+ @loop_flg = false
93
+ end
94
+
95
+ # runメソッドが呼ばれるとループの前に一回だけ実行される
96
+ def before_run_loop
97
+ end
98
+
99
+ # runメソッドのloopの中で最初に実行される
100
+ def loop_hook_pre
101
+ end
102
+
103
+ # runメソッドのloopの中で実行される
104
+ def main_loop
105
+ end
106
+
107
+ # runのループの中でmain_loopのあとで実行される
108
+ def loop_hook_post
109
+ end
110
+
111
+ # runメソッドが呼ばれるとループのあとで実行される
112
+ def after_run_loop
113
+ end
114
+ end
115
+
116
+ # DBに接続してなんでもいれておくtableへのインサートを提供する
117
+ #
118
+ # @dbcon:DBコネクション
119
+ # @insert:インサート文
120
+ # @config:
121
+ # ~/config.ymlに
122
+ # mydbmodule:
123
+ # server:localhost
124
+ # port: 3389
125
+ # socket:/tmp/mysql.sock
126
+ # user:xxxx
127
+ # pass:xxxxxx
128
+ # database:xxxxx
129
+ # を設定
130
+ #
131
+ # 使い方
132
+ # class ThisDo
133
+ # include MyDBModule
134
+ # して
135
+ # o = ThisDo.new
136
+ # o.insert_DB("my_app_tail",'data')
137
+ # でOK
138
+ #
139
+ module MyDBModule
140
+ #DBコネクション
141
+ @dbcon
142
+
143
+ #インサート文
144
+ @insert
145
+
146
+ # DBに接続する
147
+ def set_my_db
148
+ require "mysql"
149
+ @c = MyConfig.get
150
+ @dbcon = Mysql::new(
151
+ @c['mydbmodule']['server'],
152
+ @c['mydbmodule']['user'],
153
+ @c['mydbmodule']['pass'],
154
+ @c['mydbmodule']['database'],
155
+ @c['mydbmodule']['port'],
156
+ @c['mydbmodule']['socket'],
157
+ )
158
+ @dbcon.query("set character set utf8") #おまじない
159
+ @dbcon.query("use " + @c['mydbmodule']['database'])
160
+ @insertsql = @dbcon.prepare("insert into keyvalue(`usage`,`value`) values (?,?);")
161
+ end
162
+
163
+ # テーブルにインサートする
164
+ #
165
+ # args
166
+ # usage : string key
167
+ # value : string value
168
+ def insert_DB(key='test_app',value='')
169
+ set_my_db if @dbcon == nil
170
+ @insertsql.execute(key,value)
171
+ end
172
+ end
173
+
174
+ # Pusherサービスへのアクセスを提供する
175
+ # https://app.pusherapp.com/apps/7449/api_access?welcome=true
176
+ # @pusher_app_id = 'your pusher app id'
177
+ # @pusher_key = 'pusher key'
178
+ # @pusher_secret = 'pusher secret'
179
+ # @config
180
+ # ~/config.ymlに
181
+ # mypushermodule:
182
+ # app_id:xxx
183
+ # key:xxxxxxxxxxxxx
184
+ # secret:xxxxxxxxxx
185
+ # event:my_event
186
+ # channel:test_channel
187
+ #
188
+ # 使い方など
189
+ # class ThisDo
190
+ # include MyPusherModule
191
+ # して
192
+ # o = ThisDo.new
193
+ # o.push_pusher('test_app','test')
194
+ # とかでok
195
+ module MyPusherModule
196
+
197
+ #pussherが設定されているか?
198
+ @pusherconnected
199
+
200
+ # Pusherへの接続を設定する
201
+ def set_my_pusher
202
+ @c = MyConfig.get['mypushermodule']
203
+
204
+ require "pusher"
205
+ Pusher.app_id = @c['app_id']
206
+ Pusher.key = @c['key']
207
+ Pusher.secret = @c['secret']
208
+ @pusher_event = @c['event']
209
+ @pusher_channel = @c['test_channel']
210
+ end
211
+
212
+ # Pusherにデータをpushする
213
+ # args
214
+ # app_name : string アプリの名前
215
+ # data : string データ
216
+ def push_pusher(app_name='test_app',data='test')
217
+ if @pusherconnected == nil
218
+ set_my_pusher
219
+ @pusherconnected = true
220
+ end
221
+ begin
222
+ Pusher[@pusher_channel].trigger!(
223
+ @pusher_event, { app_name => data})
224
+ rescue Pusher::Error => e
225
+ p e
226
+ end
227
+ end
228
+ end
229
+
230
+
231
+ # Googleカレンダーへのアクセスを提供する
232
+ #
233
+ # ~/config.ymlに
234
+ # gmail:
235
+ # address:YourMailAdress@gmail.com
236
+ # pass:xxxxxxxxxx
237
+ # feedurl:http://www.google.com/calendar/feeds/xxxxxxxx%40gmail.com/private/full
238
+ #
239
+ # 使い方など
240
+ # class ThisDo
241
+ # include MyGCalModule
242
+ # して
243
+ # o = ThisDo.new
244
+ # o.gcal_read
245
+ # とかでok
246
+ module MyGCalModule
247
+ attr_accessor :gmail,:gmailpass,:gcalfeedurl,:gcal_query
248
+
249
+ def gcal_read
250
+ service
251
+ @gcal_events = @gcal.events
252
+ return self
253
+ end
254
+
255
+ #GCalへ書きこむ
256
+ def gcal_write(eventdata)
257
+ service
258
+ event = @gcal.create_event
259
+ event.title = eventdata[:title]
260
+ event.st = eventdata[:start]
261
+ event.en = eventdata[:end]
262
+ event.save!
263
+ @gcal_event = event
264
+ return self
265
+ end
266
+
267
+ # gcalのイベントをAtMduleが食べれる形に変換する
268
+ # 共通のJOBクラスで包もうかしら?
269
+ def gcal_parse_2_jobs
270
+ @gcal_jobs = []
271
+ q = @gcal_query ||= '[Gcal2PusherTail'
272
+ @gcal_events.each do |event|
273
+ begin
274
+ kind,filename = event.title.split(']')
275
+ if(kind == @gcal_query && filename != nil)
276
+ @gcal_jobs << {:filename => filename,
277
+ :start => event.st,
278
+ :end => event.en,
279
+ :object => event}
280
+ end
281
+ rescue =>ex
282
+ p ex
283
+ #握りつぶす
284
+ end
285
+ end
286
+ return self
287
+ end
288
+
289
+ #fetchしたデータの取り込み済みマークを立てる
290
+ def gcal_checkout(event)
291
+ event.title = '[FETCHED]' + event.title
292
+ event.save!
293
+ return self
294
+ end
295
+
296
+ # GCalへのアクセス
297
+ def service
298
+ if @gcal_srv.nil?
299
+ require 'gcalapi'
300
+ @c = MyConfig.get['gmail']
301
+ @gcal_srv = GoogleCalendar::Service.new(@c['address'],@c['pass'])
302
+ end
303
+ @gcal = GoogleCalendar::Calendar::new(@gcal_srv, @c['feedurl'])
304
+ end
305
+ end
306
+
307
+ # Atコマンドを突っ込む
308
+ # MyGCalModuleとの連携で使う
309
+ #
310
+ # @config
311
+ # ~/config.ymlに
312
+ # atmodule:
313
+ # scriptdir:/Users/seijiro/scripts
314
+ # rbdir:/Users/seijiro/code/ruby
315
+ #
316
+ # 使い方など
317
+ # class ThisDo
318
+ # include MyAtModule
319
+ # include MyGCalModule
320
+ # して
321
+ # o = ThisDo.new
322
+ # とかでok
323
+ module MyAtModule
324
+ def initialize
325
+ @c = MyConfig.get['atmodule']
326
+ end
327
+
328
+ def gcaljobs_2_at
329
+ @gcal_jobs.each { |job| jobs2at(job) }
330
+ return self
331
+ end
332
+
333
+ def jobs2at(job)
334
+ command = _at_command(job)
335
+ File.open("#{_at_scriptpath(job)}","w") do |io|
336
+ io.write(command)
337
+ end
338
+
339
+ atcommand = "/usr/bin/at -f #{_at_scriptpath(job)} #{job[:start].localtime.strftime("%H:%M %m/%d/%y")}"
340
+ p atcommand
341
+ p command
342
+ system atcommand
343
+ gcal_checkout(job[:object])
344
+ end
345
+
346
+ def _at_scriptpath(job)
347
+ "#{@c['scriptdir']}/job2at_#{job[:start].localtime.strftime("%Y%m%d%H%M")}.sh"
348
+ end
349
+
350
+ def _at_command(job)
351
+ "#! /bin/bash
352
+ #ユーザーの環境変数パスを使いたい
353
+ source ~/.bashrc
354
+ growlnotify -t 'Gcal2At' -m 'pusher tail #{job[:filename]} start . end is #{job[:start].localtime.strftime("%Y/%m/%d/%H/%M")}'
355
+ ruby #{@c['rbdir']}/pushertail.rb #{job[:filename]} '#{job[:end].to_s}'
356
+ "
357
+ end
358
+ end
359
+
360
+
361
+
362
+ __END__
363
+ test
data/lib/my-lib.rb CHANGED
@@ -14,6 +14,8 @@ end
14
14
  # MyLogger.lw("message")
15
15
  class MyLogger
16
16
 
17
+ Version = "0.0.1"
18
+
17
19
  # log notice
18
20
  # @param [String] message message for log
19
21
  def self.ln(message)
@@ -62,6 +64,8 @@ end
62
64
  #
63
65
  class MyJobAnisoku
64
66
 
67
+ Version = "0.0.1"
68
+
65
69
  def initialize(args = { })
66
70
  require 'rubygems'
67
71
  require 'kconv'
@@ -318,6 +322,9 @@ end
318
322
  #
319
323
  # this class has queue of jobs.controll jobs and run jobs
320
324
  module MyMachine
325
+
326
+ Version = "0.0.1"
327
+
321
328
  attr_accessor :queue
322
329
 
323
330
  def initialize
@@ -360,9 +367,12 @@ end
360
367
  #
361
368
  class MyMachineAnisoku
362
369
  include MyMachine
370
+
371
+ Version = "0.0.1"
372
+
363
373
  # directory of save video files default "#{ENV['HOME']}/Desktop/video"
364
374
  attr_accessor :savedir
365
-
375
+
366
376
  # set video save dir
367
377
  # @param [Hash] args
368
378
  # @option args [String] :savedir save dir
@@ -387,7 +397,10 @@ class MyMachineAnisoku
387
397
  EM.run do
388
398
  EM.add_periodic_timer(0.00001) do
389
399
  # print "loop".green
390
- EM.stop if should_stop_machine?
400
+ if should_stop_machine?
401
+ finalize_files
402
+ EM.stop
403
+ end
391
404
  @queue.pop.run unless @queue.empty?
392
405
  end
393
406
  end
@@ -396,6 +409,20 @@ class MyMachineAnisoku
396
409
 
397
410
  private
398
411
 
412
+ # delete tiny fail files
413
+ def finalize_files
414
+ delete_entries = []
415
+ Dir.entries(@savedir).select!{ |entry|
416
+ !File.directory?(entry) &&
417
+ File.size("#{ @savedir }/#{entry}") < 1024 * 1024 * 2
418
+ }.each do |entry|
419
+ # p File.size("#{ @savedir }/#{entry}")
420
+ # p ("#{@savedir }/#{entry}")
421
+ File.delete("#{@savedir }/#{entry}")
422
+ end
423
+ end
424
+
425
+
399
426
  # setup jobs
400
427
  def setupjobs
401
428
  ajob = MyJobAnisoku.new(
@@ -408,6 +435,8 @@ class MyMachineAnisoku
408
435
  def should_stop_machine?
409
436
  @gaman += 1 if @queue.empty?
410
437
  print @gaman
411
- return @queue.empty? && @gaman > 500
438
+ return @queue.empty? && @gaman > 1500
412
439
  end
413
440
  end
441
+
442
+
data/lib/opt-parse.rb ADDED
File without changes
data/my-lib.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{my-lib}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{modeverv}]
12
- s.date = %q{2011-08-31}
12
+ s.date = %q{2011-09-01}
13
13
  s.description = %q{longer description of your gem}
14
14
  s.email = %q{modeverv@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -25,9 +25,12 @@ Gem::Specification.new do |s|
25
25
  "README.rdoc",
26
26
  "Rakefile",
27
27
  "VERSION",
28
+ "lib/dev.rb",
28
29
  "lib/my-lib.rb",
30
+ "lib/opt-parse.rb",
29
31
  "my-lib.gemspec",
30
32
  "spec/my-lib_spec.rb",
33
+ "spec/opt-parse_spec.rb",
31
34
  "spec/spec_helper.rb"
32
35
  ]
33
36
  s.homepage = %q{http://github.com/modeverv/my-lib}
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "OptParse" do
4
+ it "fails" do
5
+ # fail "hey buddy, you should probably rename this file and start specing for real"
6
+ end
7
+
8
+ it "success" do
9
+ #ruby sample.rb -a foo bar -b baz
10
+ # => true
11
+ # true
12
+ # ["foo", "bar", "baz"]
13
+ end
14
+
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my-lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-31 00:00:00.000000000Z
12
+ date: 2011-09-01 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: term-ansicolor
16
- requirement: &2153163620 !ruby/object:Gem::Requirement
16
+ requirement: &2152500740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153163620
24
+ version_requirements: *2152500740
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &2153163140 !ruby/object:Gem::Requirement
27
+ requirement: &2152500140 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2153163140
35
+ version_requirements: *2152500140
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mechanize
38
- requirement: &2153162580 !ruby/object:Gem::Requirement
38
+ requirement: &2152499580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2153162580
46
+ version_requirements: *2152499580
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &2153162020 !ruby/object:Gem::Requirement
49
+ requirement: &2152498940 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>'
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.3.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2153162020
57
+ version_requirements: *2152498940
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yard
60
- requirement: &2153161540 !ruby/object:Gem::Requirement
60
+ requirement: &2152498200 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>'
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.6.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2153161540
68
+ version_requirements: *2152498200
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
- requirement: &2153160980 !ruby/object:Gem::Requirement
71
+ requirement: &2152497460 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>'
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.0.0
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2153160980
79
+ version_requirements: *2152497460
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: jeweler
82
- requirement: &2153160420 !ruby/object:Gem::Requirement
82
+ requirement: &2152496840 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2153160420
90
+ version_requirements: *2152496840
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rcov
93
- requirement: &2153159880 !ruby/object:Gem::Requirement
93
+ requirement: &2152496180 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2153159880
101
+ version_requirements: *2152496180
102
102
  description: longer description of your gem
103
103
  email: modeverv@gmail.com
104
104
  executables: []
@@ -115,9 +115,12 @@ files:
115
115
  - README.rdoc
116
116
  - Rakefile
117
117
  - VERSION
118
+ - lib/dev.rb
118
119
  - lib/my-lib.rb
120
+ - lib/opt-parse.rb
119
121
  - my-lib.gemspec
120
122
  - spec/my-lib_spec.rb
123
+ - spec/opt-parse_spec.rb
121
124
  - spec/spec_helper.rb
122
125
  homepage: http://github.com/modeverv/my-lib
123
126
  licenses:
@@ -134,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
137
  version: '0'
135
138
  segments:
136
139
  - 0
137
- hash: -1451352433699865531
140
+ hash: 969569085450216819
138
141
  required_rubygems_version: !ruby/object:Gem::Requirement
139
142
  none: false
140
143
  requirements: