increment_persistent 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/increment +33 -0
  2. data/lib/increment.rb +61 -0
  3. metadata +64 -0
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require "thor"
4
+ require "./lib/increment.rb"
5
+
6
+ module Increment
7
+ class CLI < Thor
8
+ default_task :increment
9
+
10
+ class_option :dry_run, :type => :boolean, :aliases => ["-n"]
11
+ class_option :name, :type => :string
12
+ class_option :write, :type => :numeric, :aliases => ["-w"]
13
+ desc "increment a number", "reads a stored number, increments it, returns and saves it"
14
+ def increment
15
+ number = options[:write]
16
+ name = options[:name]
17
+ inc = Increment::Runner.new number, name
18
+ inc.readonly = TRUE if options[:dry_run]
19
+ inc.increment unless options[:write]
20
+ puts inc.number
21
+ end
22
+
23
+ desc "list the named numbers", "Print is list of all names of all numbers"
24
+ def list
25
+ inc = Increment::Runner.new
26
+ inc.list.each do |name|
27
+ puts "#{name}"
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ Increment::CLI.start(ARGV)
@@ -0,0 +1,61 @@
1
+ require "yaml/store"
2
+
3
+ module Increment
4
+ class Runner
5
+ attr_accessor :readonly
6
+
7
+ def initialize given_number=nil, name=nil
8
+ @name = name || "undefined"
9
+
10
+ @filename = File.join(ENV["HOME"], ".increment")
11
+ @store = YAML::Store.new @filename
12
+ create_new unless File.exists? @filename
13
+
14
+ if given_number.nil?
15
+ @number = number_in_file || 0
16
+ else
17
+ @number = given_number
18
+ write given_number
19
+ end
20
+ end
21
+
22
+ def increment
23
+ unless @readonly
24
+ @number += 1
25
+ write @number
26
+ end
27
+ self
28
+ end
29
+
30
+ def number
31
+ @number
32
+ end
33
+
34
+ def list
35
+ list = []
36
+ @store.transaction(false) do
37
+ list = @store.roots.each.to_a
38
+ end
39
+ list
40
+ end
41
+
42
+ private
43
+ def number_in_file
44
+ number = 0
45
+ @store.transaction(false) do
46
+ number = @store[@name]
47
+ end
48
+ number
49
+ end
50
+
51
+ def write number
52
+ @store.transaction do
53
+ @store[@name] = number || 1
54
+ end
55
+ end
56
+
57
+ def create_new
58
+ write 0
59
+ end
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: increment_persistent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bèr Kessels
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.16.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.16.0
30
+ description: Increment numbers persistently. Stores the numbers in a textfile ~/.increment
31
+ email: ber@webschuur.com
32
+ executables:
33
+ - increment
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - lib/increment.rb
38
+ - bin/increment
39
+ homepage: http://github.com/berkes/increment_persistent
40
+ licenses: []
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 1.8.24
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: Increments numbers and remembers them.
63
+ test_files: []
64
+ has_rdoc: