thefox-wallet 0.17.1 → 0.18.0

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/bin/install.sh ADDED
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Install gem local.
4
+
5
+ SCRIPT_BASEDIR=$(dirname "$0")
6
+
7
+
8
+ option=$1
9
+ set -e
10
+ which mkdir &> /dev/null || { echo 'ERROR: mkdir not found in PATH'; exit 1; }
11
+ which mv &> /dev/null || { echo 'ERROR: mv not found in PATH'; exit 1; }
12
+ which chmod &> /dev/null || { echo 'ERROR: chmod not found in PATH'; exit 1; }
13
+ which gem &> /dev/null || { echo 'ERROR: gem not found in PATH'; exit 1; }
14
+ which bundler &> /dev/null || { echo 'ERROR: bundler not found in PATH'; exit 1; }
15
+
16
+ cd "${SCRIPT_BASEDIR}/.."
17
+
18
+ # Load Environment Variables
19
+ [[ -f .env ]] && source .env
20
+
21
+ if [[ -z "${GEMSPEC_FILE}" ]] ; then
22
+ echo 'ERROR: one of the environment variables is missing'
23
+
24
+ echo "GEMSPEC_FILE: '${GEMSPEC_FILE}'"
25
+
26
+ exit 1
27
+ fi
28
+
29
+ gem_file=$(gem build "${GEMSPEC_FILE}" 2> /dev/null | grep 'File:' | tail -1 | awk '{ print $2 }')
30
+
31
+ if [[ -z "$gem_file" ]] ; then
32
+ echo 'ERROR: gem_file variable not set'
33
+ exit 1
34
+ fi
35
+
36
+ echo "install gem file '$gem_file'"
37
+ sudo gem install "$gem_file"
38
+
39
+ # Create tmp directory.
40
+ if [[ ! -d tmp/releases ]]; then
41
+ mkdir -p tmp/releases
42
+
43
+ chmod u=rwx,go-rwx tmp
44
+ chmod u=rwx,go-rwx tmp/releases
45
+ fi
46
+
47
+ if [[ "$option" = "-f" ]]; then
48
+ mv -v "$gem_file" tmp/releases
49
+ else
50
+ mv -v -i "$gem_file" tmp/releases
51
+ fi
data/bin/release.sh ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Release gem to https://rubygems.org.
4
+
5
+ SCRIPT_BASEDIR=$(dirname "$0")
6
+
7
+
8
+ set -e
9
+ which mv &> /dev/null || { echo 'ERROR: mv not found in PATH'; exit 1; }
10
+ which gem &> /dev/null || { echo 'ERROR: gem not found in PATH'; exit 1; }
11
+
12
+ cd "${SCRIPT_BASEDIR}/.."
13
+
14
+ # Load Environment Variables
15
+ [[ -f .env ]] && source .env
16
+
17
+ if [[ -z "${GEMSPEC_FILE}" ]] ; then
18
+ echo 'ERROR: one of the environment variables is missing'
19
+
20
+ echo "GEMSPEC_FILE: '${GEMSPEC_FILE}'"
21
+
22
+ exit 1
23
+ fi
24
+
25
+ gem_file=$(gem build "${GEMSPEC_FILE}" 2> /dev/null | grep 'File:' | tail -1 | awk '{ print $2 }')
26
+
27
+ echo "push gem file '$gem_file'"
28
+ gem push "$gem_file"
29
+
30
+ # Create tmp directory.
31
+ if [[ ! -d tmp/releases ]]; then
32
+ mkdir -p tmp/releases
33
+
34
+ chmod u=rwx,go-rwx tmp
35
+ chmod u=rwx,go-rwx tmp/releases
36
+ fi
37
+ mv -v -i "$gem_file" tmp/releases
data/bin/test.sh ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Run all tests.
4
+
5
+ SCRIPT_BASEDIR=$(dirname "$0")
6
+ RUBYOPT=-w
7
+ TZ=Europe/Vienna
8
+
9
+
10
+ set -e
11
+ which bundler &> /dev/null || { echo 'ERROR: bundler not found in PATH'; exit 1; }
12
+
13
+ cd "${SCRIPT_BASEDIR}/.."
14
+
15
+ mkdir -p tmp
16
+ bundler exec ./test/suite_all.rb -v
data/bin/uninstall.sh ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Uninstall gem.
4
+
5
+ SCRIPT_BASEDIR=$(dirname "$0")
6
+
7
+
8
+ set -e
9
+ which gem &> /dev/null || { echo 'ERROR: gem not found in PATH'; exit 1; }
10
+
11
+ cd "${SCRIPT_BASEDIR}/.."
12
+
13
+ # Load Environment Variables
14
+ [[ -f .env ]] && source .env
15
+
16
+ if [[ -z "${GEM_NAME}" ]] ; then
17
+ echo 'ERROR: one of the environment variables is missing'
18
+
19
+ echo "GEM_NAME: '${GEM_NAME}'"
20
+
21
+ exit 1
22
+ fi
23
+
24
+ gem uninstall "${GEM_NAME}" --all --executables
data/bin/wallet CHANGED
@@ -12,115 +12,115 @@ require 'wallet'
12
12
  @options = Hash.new
13
13
  @options[:logger] = @logger
14
14
  opts = OptionParser.new do |o|
15
- o.banner = 'Usage: wallet <command> [options]'
16
- o.separator('')
17
- o.separator('Commands:')
18
- o.separator('')
19
- o.separator(' add Add a new entry')
20
- o.separator(' categories List categories')
21
- o.separator(' clear Clear temp and cache files')
22
- o.separator(' csv Import/Export CSV file')
23
- o.separator(' html Exports a wallet as HTML')
24
- o.separator(' list List entries')
25
- o.separator('')
26
-
27
- o.on('-w', '--wallet <path>', 'Path to wallet directory.') do |path|
28
- @options[:wallet_path] = Pathname.new(path).expand_path
29
- end
30
-
31
- o.on('--id <id>', 'ID used for a new entry.') do |id|
32
- @options[:entry_id] = id
33
- end
34
-
35
- o.on('-t', '--title <title>', 'Title used for a new entry.') do |title|
36
- @options[:entry_title] = title
37
- end
38
-
39
- o.on('-d', '--date <YYYY-MM-DD>', 'Date used for a new entry.') do |date|
40
- @options[:entry_date] = date
41
- end
42
-
43
- o.on('--start <YYYY-MM-DD>', 'Start-date used for a range.') do |date|
44
- @options[:entry_date_start] = Date.parse(date)
45
- end
46
-
47
- o.on('--end <YYYY-MM-DD>', 'End-date used for a range.') do |date|
48
- @options[:entry_date_end] = Date.parse(date)
49
- end
50
-
51
- o.on('-r', '--revenue <revenue>', 'Revenue used for a new entry.') do |revenue|
52
- # @TODO replace with Wumber.
53
- # @options[:entry_revenue] = revenue.to_s.sub(/,/, '.').to_f.abs
54
- @options[:entry_revenue] = eval(revenue.to_s.to_s.gsub(/,/, '.')).to_f.round(TheFox::Wallet::NUMBER_ROUND).abs
55
- end
56
-
57
- o.on('-e', '--expense <expense>', 'Expense used for a new entry.') do |expense|
58
- # @TODO replace with Wumber.
59
- # @options[:entry_expense] = -expense.to_s.sub(/,/, '.').to_f.abs
60
- @options[:entry_expense] = -eval(expense.to_s.gsub(/,/, '.')).to_f.round(TheFox::Wallet::NUMBER_ROUND).abs
61
- end
62
-
63
- o.on('-c', '--category <category>', 'Category used for a new entry.') do |category|
64
- @options[:entry_category] = category
65
- end
66
-
67
- o.on('-o', '--comment <comment>', 'Comment used for a new entry.') do |comment|
68
- @options[:entry_comment] = comment
69
- end
70
-
71
- o.on('--import', 'Import CSV') do
72
- @options[:is_import] = true
73
- end
74
-
75
- o.on('--export', 'Export CSV') do
76
- @options[:is_export] = true
77
- end
78
-
79
- o.on('-p', '--path <path>', 'Path used for csv import/export and html directory path.') do |path|
80
- @options[:path] = path
81
- end
82
-
83
- o.on('-i', '--interactive', 'Use some commands interactively.') do
84
- @options[:is_interactively] = true
85
- end
86
-
87
- o.on('-f', '--force', 'Force add command.') do
88
- @options[:force] = true
89
- end
90
-
91
- o.on('--no-force', 'Do not force add command.') do
92
- @options[:force] = false
93
- end
94
-
95
- o.on('-v', '--verbose', 'Log on debug level.') do
96
- @logger.level = Logger::DEBUG
97
- end
98
-
99
- o.on_tail('-V', '--version', 'Show version.') do
100
- puts "#{::TheFox::Wallet::NAME} #{::TheFox::Wallet::VERSION} (#{::TheFox::Wallet::DATE})"
101
- puts TheFox::Wallet::HOMEPAGE
102
- exit
103
- end
104
-
105
- o.on_tail('-h', '--help', 'Show this message.') do
106
- puts o
107
- puts
108
- exit 3
109
- end
15
+ o.banner = 'Usage: wallet <command> [options]'
16
+ o.separator('')
17
+ o.separator('Commands:')
18
+ o.separator('')
19
+ o.separator(' add Add a new entry')
20
+ o.separator(' categories List categories')
21
+ o.separator(' clear Clear temp and cache files')
22
+ o.separator(' csv Import/Export CSV file')
23
+ o.separator(' html Exports a wallet as HTML')
24
+ o.separator(' list List entries')
25
+ o.separator('')
26
+
27
+ o.on('-w', '--wallet <path>', 'Path to wallet directory.') do |path|
28
+ @options[:wallet_path] = Pathname.new(path).expand_path
29
+ end
30
+
31
+ o.on('--id <id>', 'ID used for a new entry.') do |id|
32
+ @options[:entry_id] = id
33
+ end
34
+
35
+ o.on('-t', '--title <title>', 'Title used for a new entry.') do |title|
36
+ @options[:entry_title] = title
37
+ end
38
+
39
+ o.on('-d', '--date <YYYY-MM-DD>', 'Date used for a new entry.') do |date|
40
+ @options[:entry_date] = date
41
+ end
42
+
43
+ o.on('--start <YYYY-MM-DD>', 'Start-date used for a range.') do |date|
44
+ @options[:entry_date_start] = Date.parse(date)
45
+ end
46
+
47
+ o.on('--end <YYYY-MM-DD>', 'End-date used for a range.') do |date|
48
+ @options[:entry_date_end] = Date.parse(date)
49
+ end
50
+
51
+ o.on('-r', '--revenue <revenue>', 'Revenue used for a new entry.') do |revenue|
52
+ # @TODO replace with Wumber.
53
+ # @options[:entry_revenue] = revenue.to_s.sub(/,/, '.').to_f.abs
54
+ @options[:entry_revenue] = eval(revenue.to_s.to_s.gsub(/,/, '.')).to_f.round(TheFox::Wallet::NUMBER_ROUND).abs
55
+ end
56
+
57
+ o.on('-e', '--expense <expense>', 'Expense used for a new entry.') do |expense|
58
+ # @TODO replace with Wumber.
59
+ # @options[:entry_expense] = -expense.to_s.sub(/,/, '.').to_f.abs
60
+ @options[:entry_expense] = -eval(expense.to_s.gsub(/,/, '.')).to_f.round(TheFox::Wallet::NUMBER_ROUND).abs
61
+ end
62
+
63
+ o.on('-c', '--category <category>', 'Category used for a new entry.') do |category|
64
+ @options[:entry_category] = category
65
+ end
66
+
67
+ o.on('-o', '--comment <comment>', 'Comment used for a new entry.') do |comment|
68
+ @options[:entry_comment] = comment
69
+ end
70
+
71
+ o.on('--import', 'Import CSV') do
72
+ @options[:is_import] = true
73
+ end
74
+
75
+ o.on('--export', 'Export CSV') do
76
+ @options[:is_export] = true
77
+ end
78
+
79
+ o.on('-p', '--path <path>', 'Path used for csv import/export and html directory path.') do |path|
80
+ @options[:path] = path
81
+ end
82
+
83
+ o.on('-i', '--interactive', 'Use some commands interactively.') do
84
+ @options[:is_interactively] = true
85
+ end
86
+
87
+ o.on('-f', '--force', 'Force add command.') do
88
+ @options[:force] = true
89
+ end
90
+
91
+ o.on('--no-force', 'Do not force add command.') do
92
+ @options[:force] = false
93
+ end
94
+
95
+ o.on('-v', '--verbose', 'Log on debug level.') do
96
+ @logger.level = Logger::DEBUG
97
+ end
98
+
99
+ o.on_tail('-V', '--version', 'Show version.') do
100
+ puts "#{::TheFox::Wallet::NAME} #{::TheFox::Wallet::VERSION} (#{::TheFox::Wallet::DATE})"
101
+ puts TheFox::Wallet::HOMEPAGE
102
+ exit
103
+ end
104
+
105
+ o.on_tail('-h', '--help', 'Show this message.') do
106
+ puts o
107
+ puts
108
+ exit 3
109
+ end
110
110
  end
111
111
  ARGV << '-h' if ARGV.count == 0
112
112
  commands = opts.parse(ARGV)
113
113
  command_name = commands.shift
114
114
 
115
115
  if command_name
116
- begin
117
- command = TheFox::Wallet::Command.create_by_name(command_name, @options)
118
- command.run
119
- rescue Exception => e
120
- @logger.error(e.to_s)
121
- exit 1
122
- end
116
+ begin
117
+ command = TheFox::Wallet::Command.create_by_name(command_name, @options)
118
+ command.run
119
+ rescue Exception => e
120
+ @logger.error(e.to_s)
121
+ exit 1
122
+ end
123
123
  else
124
- # Show help page when no argument was given.
125
- opts.parse(['-h'])
124
+ # Show help page when no argument was given.
125
+ opts.parse(['-h'])
126
126
  end
@@ -6,61 +6,61 @@ require 'date'
6
6
  require 'pathname'
7
7
 
8
8
  module TheFox::Wallet
9
-
10
- class Command
11
-
12
- NAME = 'default'
13
-
14
- def initialize(options = Hash.new)
15
- # Initialize all options.
16
- @options = options
17
- @options[:logger] ||= Logger.new(IO::NULL)
18
- @options[:wallet_path] ||= Pathname.new('wallet')
19
- @options[:entry_id] ||= nil
20
- @options[:entry_title] ||= nil
21
- @options[:entry_date] ||= Date.today.to_s
22
- @options[:entry_date_start] ||= Date.parse('1970-01-01')
23
- @options[:entry_date_end] ||= Date.today
24
- @options[:entry_revenue] ||= 0.0
25
- @options[:entry_expense] ||= 0.0
26
- @options[:entry_category] ||= nil
27
- @options[:entry_comment] ||= nil
28
- @options[:is_import] ||= false
29
- @options[:is_export] ||= false
30
- @options[:path] ||= nil
31
- @options[:is_interactively] ||= false
32
- @options[:force] ||= false
33
- end
34
-
35
- def run
36
- end
37
-
38
- def self.create_by_name(name, options = Hash.new)
39
- classes = [
40
- AddCommand,
41
- CategoriesCommand,
42
- ClearCommand,
43
- CsvCommand,
44
- HtmlCommand,
45
- ListCommand,
46
- ]
47
-
48
- # Search class by name.
49
- classes.each do |cclass|
50
- if cclass.is_matching_class(name)
51
- # Create a new Object from the found Class.
52
- cmd = cclass.new(options)
53
- return cmd
54
- end
55
- end
56
-
57
- raise "Unknown command '#{name}'"
58
- end
59
-
60
- def self.is_matching_class(name)
61
- name == self::NAME
62
- end
63
-
64
- end
65
-
9
+
10
+ class Command
11
+
12
+ NAME = 'default'
13
+
14
+ def initialize(options = Hash.new)
15
+ # Initialize all options.
16
+ @options = options
17
+ @options[:logger] ||= Logger.new(IO::NULL)
18
+ @options[:wallet_path] ||= Pathname.new('wallet')
19
+ @options[:entry_id] ||= nil
20
+ @options[:entry_title] ||= nil
21
+ @options[:entry_date] ||= Date.today.to_s
22
+ @options[:entry_date_start] ||= Date.parse('1970-01-01')
23
+ @options[:entry_date_end] ||= Date.today
24
+ @options[:entry_revenue] ||= 0.0
25
+ @options[:entry_expense] ||= 0.0
26
+ @options[:entry_category] ||= nil
27
+ @options[:entry_comment] ||= nil
28
+ @options[:is_import] ||= false
29
+ @options[:is_export] ||= false
30
+ @options[:path] ||= nil
31
+ @options[:is_interactively] ||= false
32
+ @options[:force] ||= false
33
+ end
34
+
35
+ def run
36
+ end
37
+
38
+ def self.create_by_name(name, options = Hash.new)
39
+ classes = [
40
+ AddCommand,
41
+ CategoriesCommand,
42
+ ClearCommand,
43
+ CsvCommand,
44
+ HtmlCommand,
45
+ ListCommand,
46
+ ]
47
+
48
+ # Search class by name.
49
+ classes.each do |cclass|
50
+ if cclass.is_matching_class(name)
51
+ # Create a new Object from the found Class.
52
+ cmd = cclass.new(options)
53
+ return cmd
54
+ end
55
+ end
56
+
57
+ raise "Unknown command '#{name}'"
58
+ end
59
+
60
+ def self.is_matching_class(name)
61
+ name == self::NAME
62
+ end
63
+
64
+ end
65
+
66
66
  end