my-lib 0.0.1 → 0.0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: