my_scripts 0.0.9 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -15,7 +15,7 @@ paths, environments and all such nonsense... It is also not OS-specific, so
15
15
  OK, I confess: I wanted to write scripts but had neither time nor desire to learn
16
16
  all the esoterics of bash, cmd/powershell and mac scripting. So, I set out to do
17
17
  all my scripting in Ruby. I also wanted my scripts to be easily testable, that's
18
- why I created a simple scripting framework instead of stuffing each script in a
18
+ why I created a simple scripting framework instead of stuffing each script into a
19
19
  separate executable Ruby file as most people do.
20
20
 
21
21
  These scripts are very much targeted to my own specific needs, but if you find them
@@ -33,16 +33,20 @@ looks like too much pain. Ruby 1.9 is the way of the future, so let's move forwa
33
33
  == SYNOPSIS:
34
34
  === Creating your own scripts
35
35
 
36
- Put your source file inside lib/my_scripts. It will be auto-loaded. Use MyScripts
36
+ First, you need to either fork my_scripts on github or clone it to your computer with:
37
+
38
+ $ git clone git://github.com/arvicco/my_scripts.git
39
+
40
+ Now, put your Ruby file inside lib/my_scripts. It will be auto-loaded. Use MyScripts
37
41
  module as a top level namespace. Subclass Script and redefine run method to do all
38
42
  actual work:
39
43
 
40
- #-------- lib/my_shiny_script.rb----------
41
- module MyScript
44
+ #-------- lib/my_scripts/my_shiny_script.rb----------
45
+ module MyScripts
42
46
  class MyShinyScript < Script
43
47
  def run
44
- # here you do all actual work for your script
45
- # you have following instance vars at your disposal:
48
+ # Here you put all the actual code of your script.
49
+ # You have following instance vars at your disposal:
46
50
  # @name - your script name,
47
51
  # @argv - your ARGV Array of command line arguments,
48
52
  # @cli - CLI runner (holds references to stdin and stdout)
@@ -63,9 +67,11 @@ Put your executable into bin directory, with something like this:
63
67
  Run 'rake install' from project directory, and enjoy greatness of your new script!
64
68
 
65
69
  OK, so you're not advanced enough to follow even these simple instructions. No problemo.
66
- I have dummy script skeleton in lib/dummy.rb that is ready for your use. Just put your
67
- script code inside run method (if you use ARGV, change it to @argv). Done! You can immediately
68
- run your script anywhere in the system using the following command:
70
+ I guess you still managed to install my_scripts gem if you are reading this, so just modify it.
71
+ Locate my_scripts gem in gem directory (usually it's something like ../ruby/lib/ruby/gems/1.9.1/gems).
72
+ I have dummy script skeleton in lib/my_scripts/dummy.rb that is ready for your use. Just put your
73
+ script code inside run method (if you use ARGV, change it to @argv). Done! You can
74
+ immediately run your script anywhere in the system using the following command:
69
75
 
70
76
  $ dummy Whatever arguments your code expects and processes
71
77
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.11
@@ -6,23 +6,32 @@ module MyScripts
6
6
  class Citi < Script
7
7
  INFILE_ENCODING = 'CP1251:UTF-8' # Encoding pair of input file ('File external:Ruby internal')
8
8
  OUTFILE_ENCODING = 'CP1252:UTF-8' # Encoding pair of output file ('File external:Ruby internal')
9
+ # STDOUT_ENCODING = 'CP866:UTF-8' # Encoding pair of stdout ('Stdout external:Ruby internal')
9
10
 
10
- REPLACES = {
11
- /Pokupka Masterkard .*(Detskiy Mir).*/ => "Detski Mir\nLChildcare",
12
- /Pokupka Masterkard .*(Medicina).*/ => "AO Medicina\nLMedical:Medicine",
13
- /Pokupka Masterkard .*(Pharmacy).*/ => "\\1\nLMedical:Medicine",
14
- /Pokupka Masterkard .*(Alye Parusa).*/ => "\\1\nLGroceries",
15
- /Pokupka Masterkard .*(Perekrestok).*/ => "\\1\nLGroceries",
16
- /Pokupka Masterkard .*(Ile De Beaute).*/ => "\\1\nLPersonal Care",
17
- /Pokupka Masterkard .*(Beeline).*/ => "\\1\nLCommunications:Telephone",
18
- /Pokupka Masterkard (.+) (Moscow Ru.+|Moskva Ru.+)/ => "\\1\nM\\2\nLHousehold",
19
- /Vkhodyashchij Platezh(.+Bank Moskvy)/ => "Incoming transfer\nM\\1\nL[BM New Prestige]",
11
+ REPLACE = {
12
+ 'Universam '=> '',
13
+ 'Supermarket '=> '',
14
+ 'Pokupka Masterkard ' => '',
15
+ /.*(Detskiy Mir).*/ => "Detski Mir\nLChildcare",
16
+ /.*(Legioner).*/ => "Legioner\nLBooks & Media:DVDs",
17
+ /.*(Gudman).*/ => "Goodman\nLDining",
18
+ /.*(Sushi Vesla).*/ => "\\1\nLDining",
19
+ /.*(Starbucks).*/ => "\\1\nLDining",
20
+ /.*(Medicina).*/ => "AO Medicina\nLMedical:Medicine",
21
+ /.*(Pharmacy).*/ => "\\1\nLMedical:Medicine",
22
+ /.*(Alye Parusa).*/ => "\\1\nLGroceries",
23
+ /.*(Perekrestok).*/ => "\\1\nLGroceries",
24
+ /.*(Ile De Beaute).*/ => "\\1\nLPersonal Care",
25
+ /.*(Beeline).*/ => "\\1\nLCommunications:Telephone",
26
+ /(.+) (Moscow Ru.*|Moskva Ru.*)/ => "\\1\nM\\2\nLHousehold",
27
+ /Vkhodyashchij Platezh(.+Bank Moskvy)/ => "Incoming transfer\nM\\1\nL[BM 2yr Prestige]",
28
+ /Platezh Cherez Citibank Online/ => "Incoming transfer\nL[Citi RUB]",
20
29
  /Oplata Dolg Kr Karta(.+)/ => "Transfer to Credit card\nM\\1\nL[Citi MC]",
21
30
  /Snyatie Nalichnykh(.+)/ => "Cash withdrawal\nM\\1\nL[Cash RUB]",
22
31
  /Vznos Nalichnykh(.+)/ => "Cash deposit\nM\\1\nL[Cash RUB]",
23
32
  /Kom Za Obsluzhivanie/ => "Citibank\nMService fee\nLFinance:Bank Charge",
24
- 'Universam '=> '',
25
- 'Supermarket '=> ''
33
+ /Komissiya Za Snyatie Nalichnykh/ => "Citibank\nMCash withdrawal fee\nLFinance:Bank Charge"
34
+
26
35
  }
27
36
 
28
37
  def run
@@ -31,26 +40,33 @@ module MyScripts
31
40
  in_file = @argv.first
32
41
 
33
42
  # If 2nd Arg is given, it is out_file name, otherwise derive from in_file name
34
- out_file = @argv[1] ? @argv[1] : in_file.sub(/\.qif|$/, '_out.qif')
35
-
36
- # All the other args lumped into message, or default message
37
- message = @argv.empty? ? 'Commit' : @argv.join(' ')
38
- # Timestamp added to message
39
- message += " #{Time.now.to_s[0..-6]}"
40
-
41
- puts "Committing (versionup =#{bump}) with message: #{message}"
43
+ out_file = @argv[1] ? @argv[1] : in_file.sub(/\.qif|$/i, '_out.qif')
42
44
 
43
- system %Q[git add --all]
44
- case bump
45
- when 1..9
46
- system %Q[rake version:bump:patch]
47
- when 10..99
48
- system %Q[rake version:bump:minor]
49
- when 10..99
50
- system %Q[rake version:bump:major]
45
+ # $stdout.set_encoding(STDOUT_ENCODING, :undef=>:replace)
46
+ File.open(out_file, 'w:'+ (OUTFILE_ENCODING), :undef => :replace) do |outfile|
47
+ File.open(in_file, 'r:'+ (INFILE_ENCODING), :undef => :replace).each_line do |line|
48
+ type = line[0]
49
+ text = line[1..-1]
50
+ case type # Indicates type of field
51
+ when 'D' # Date field - convert to MM/DD/YYYY format expected by Quicken
52
+ text.gsub! /(\d+)\/(\d+)\/(\d+)/, '\2/\1/\3'
53
+ when 'P' # Payee field
54
+ # Convert payee from Cyrillic to Latin translit
55
+ text.translit!
56
+ # Capitalize each word and remove extra whitespaces (leaves first char intact)
57
+ text = text.scan(/[\w&]+/).map{|word| word.capitalize}.join(' ')
58
+ # Preprocess Payee field making pre-defined replacements
59
+ REPLACE.each {|key, value| text.gsub!(key, value)}
60
+ when 'M' # Memo field - drop if empty
61
+ if text.rstrip.empty?
62
+ text.clear
63
+ type.clear
64
+ end
65
+ end
66
+ line = type+text
67
+ outfile.puts line unless line.empty?
68
+ end
51
69
  end
52
- system %Q[git commit -a -m "#{message}" --author arvicco]
53
- system %Q[git push]
54
70
  end
55
71
  end
56
- end
72
+ end
@@ -1,8 +1,8 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  class String
4
- TRANSLIT_CYRILLIC = 'АБВГДЕЁЗИЙКЛМНОПРСТУФЪЫЬЭабвгдеёзийклмнопрстуфъыьэ'
5
- TRANSLIT_LATIN = "ABVGDEEZIJKLMNOPRSTUF\"Y'Eabvgdeezijklmnoprstuf\"y'e"
4
+ TRANSLIT_CYRILLIC = %Q{АБВГДЕЁЗИЙКЛМНОПРСТУФЪЫЬЭабвгдеёзийклмнопрстуфъыьэ}
5
+ TRANSLIT_LATIN = %Q{ABVGDEEZIJKLMNOPRSTUF"Y'Eabvgdeezijklmnoprstuf"y'e}
6
6
  TRANSLIT_DOUBLES = {'Ж'=>'ZH', 'Х'=>'KH', 'Ц'=>'TS', 'Ч'=>'CH', 'Ш'=>'SH', 'Щ'=>'SHCH', 'Ю'=>'YU', 'Я'=>'YA',
7
7
  'ж'=>'zh', 'х'=>'kh', 'ц'=>'ts', 'ч'=>'ch', 'ш'=>'sh', 'щ'=>'shch', 'ю'=>'yu', 'я'=>'ya'}
8
8
 
data/my_scripts.gemspec CHANGED
@@ -5,14 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{my_scripts}
8
- s.version = "0.0.9"
8
+ s.version = "0.0.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["arvicco"]
12
- s.date = %q{2010-02-12}
12
+ s.date = %q{2010-02-13}
13
13
  s.description = %q{Simple framework for writing command-line scripts and collection of my own scripts (mostly dev-related)}
14
14
  s.email = %q{arvitallian@gmail.com}
15
- s.executables = ["citi", "dummy", "gitto", "jew", "mybones", "rabbit", "recode.rb"]
15
+ s.executables = ["citi", "dummy", "gitto", "jew", "mybones", "rabbit"]
16
16
  s.extra_rdoc_files = [
17
17
  "LICENSE",
18
18
  "README.rdoc"
@@ -30,7 +30,6 @@ Gem::Specification.new do |s|
30
30
  "bin/jew",
31
31
  "bin/mybones",
32
32
  "bin/rabbit",
33
- "bin/recode.rb",
34
33
  "features/my_scripts.feature",
35
34
  "features/step_definitions/my_scripts_steps.rb",
36
35
  "features/support/env.rb",
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
2
4
 
3
5
  module MyScriptsTest
@@ -45,5 +47,15 @@ module MyScriptsTest
45
47
  "::MyScriptsTest::A::B::C".to_class.should == MyScriptsTest::A::B::C
46
48
  end
47
49
  end
50
+
51
+ context '#translit!' do
52
+ it 'converts string from Cyrillic to Latin translit' do
53
+ "Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства".translit!.
54
+ should == "SHirokaya elektrifikatsiya yuzhnykh gubernij dast moshchnyj tolchok pod\"emu sel'skogo khozyajstva"
55
+ "ШИРОКАЯ ЭЛЕКТРИФИКАЦИЯ ЮЖНЫХ ГУБЕРНИЙ ДАСТ МОЩНЫЙ ТОЛЧОК ПОДЪЁМУ СЕЛЬСКОГО ХОЗЯЙСТВА".translit!.
56
+ should == "SHIROKAYA ELEKTRIFIKATSIYA YUZHNYKH GUBERNIJ DAST MOSHCHNYJ TOLCHOK POD\"EMU SEL'SKOGO KHOZYAJSTVA"
57
+ end
58
+ end
59
+
48
60
  end
49
61
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_scripts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - arvicco
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-12 00:00:00 +03:00
12
+ date: 2010-02-13 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -41,7 +41,6 @@ executables:
41
41
  - jew
42
42
  - mybones
43
43
  - rabbit
44
- - recode.rb
45
44
  extensions: []
46
45
 
47
46
  extra_rdoc_files:
@@ -60,7 +59,6 @@ files:
60
59
  - bin/jew
61
60
  - bin/mybones
62
61
  - bin/rabbit
63
- - bin/recode.rb
64
62
  - features/my_scripts.feature
65
63
  - features/step_definitions/my_scripts_steps.rb
66
64
  - features/support/env.rb
data/bin/recode.rb DELETED
@@ -1,59 +0,0 @@
1
- # encoding: UTF-8
2
- INFILE_NAME = 'ACCT_101.QIF'
3
- OUTFILE_NAME = 'TEST.QIF'
4
- INFILE_ENCODING = 'CP1251:UTF-8' # Encoding pair of log file ('File external:Ruby internal')
5
- OUTFILE_ENCODING = 'CP1252:UTF-8' # Encoding pair of log file ('File external:Ruby internal')
6
- #STDOUT_ENCODING = 'CP866:UTF-8' # Encoding pair of stdout ('Stdout external:Ruby internal')
7
- REPLACES = {
8
- /Pokupka Masterkard .*(Detskiy Mir).*/ => "Detski Mir\nLChildcare",
9
- /Pokupka Masterkard .*(Medicina).*/ => "AO Medicina\nLMedical:Medicine",
10
- /Pokupka Masterkard .*(Pharmacy).*/ => "\\1\nLMedical:Medicine",
11
- /Pokupka Masterkard .*(Alye Parusa).*/ => "\\1\nLGroceries",
12
- /Pokupka Masterkard .*(Perekrestok).*/ => "\\1\nLGroceries",
13
- /Pokupka Masterkard .*(Ile De Beaute).*/ => "\\1\nLPersonal Care",
14
- /Pokupka Masterkard .*(Beeline).*/ => "\\1\nLCommunications:Telephone",
15
- /Pokupka Masterkard (.+) (Moscow Ru.+|Moskva Ru.+)/ => "\\1\nM\\2\nLHousehold",
16
- /Vkhodyashchij Platezh(.+Bank Moskvy)/ => "Incoming transfer\nM\\1\nL[BM New Prestige]",
17
- /Oplata Dolg Kr Karta(.+)/ => "Transfer to Credit card\nM\\1\nL[Citi MC]",
18
- /Snyatie Nalichnykh(.+)/ => "Cash withdrawal\nM\\1\nL[Cash RUB]",
19
- /Vznos Nalichnykh(.+)/ => "Cash deposit\nM\\1\nL[Cash RUB]",
20
- /Kom Za Obsluzhivanie/ => "Citibank\nMService fee\nLFinance:Bank Charge",
21
- 'Universam '=> '',
22
- 'Supermarket '=> ''
23
- }
24
-
25
- class String
26
- TRANSLIT_RUSSIAN = 'АБВГДЕЁЗИЙКЛМНОПРСТУФЪЫЬЭабвгдеёзийклмнопрстуфъыьэ'
27
- TRANSLIT_LATIN = "ABVGDEEZIJKLMNOPRSTUF\"Y'Eabvgdeezijklmnoprstuf\"y'e"
28
- TRANSLIT_DOUBLES = {'Ж'=>'ZH', 'Х'=>'KH', 'Ц'=>'TS', 'Ч'=>'CH', 'Ш'=>'SH', 'Щ'=>'SHCH', 'Ю'=>'YU', 'Я'=>'YA',
29
- 'ж'=>'zh', 'х'=>'kh', 'ц'=>'ts', 'ч'=>'ch', 'ш'=>'sh', 'щ'=>'shch', 'ю'=>'yu', 'я'=>'ya'}
30
-
31
- def translit!
32
- TRANSLIT_DOUBLES.each {|key, value| self.gsub!(key, value)}
33
- self.tr!(TRANSLIT_RUSSIAN, TRANSLIT_LATIN)
34
- self
35
- end
36
- end
37
-
38
- #$stdout.set_encoding(STDOUT_ENCODING, :undef=>:replace)
39
- File.open(OUTFILE_NAME, 'w:'+ (OUTFILE_ENCODING), :undef => :replace) do |outfile|
40
- File.open(INFILE_NAME, 'r:'+ (INFILE_ENCODING), :undef => :replace).each_line do |line|
41
- puts line, '-----------'
42
- case line.chars.first
43
- when 'D' # Date field - convert to MM/DD/YYYY format expected by Quicken
44
- line.gsub! /(\d+)\/(\d+)\/(\d+)/, '\2/\1/\3'
45
- when 'P' # Payee field
46
- # Convert payee from Russian to translit
47
- line.translit!
48
- # Capitalize each word and remove extra whitespaces (leaves first char intact)
49
- line[1..-1] = line[1..-1].scan(/\w+/).map{|word| word.capitalize}.join(' ')
50
- # Preprocess Payee field making pre-defined replacements
51
- REPLACES.each {|key, value| line.gsub!(key, value)}
52
- when 'M' # Memo field - drop if empty
53
- line.clear if line.rstrip == 'M'
54
- end
55
-
56
- outfile.puts line unless line.empty?
57
- puts line, '-----------'
58
- end
59
- end