status_cacher 0.0.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.
@@ -0,0 +1,4 @@
1
+ .idea
2
+ coverage
3
+ pkg
4
+ *.swp
data/.rvmrc ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-p362@status_cacher"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.20.13 (stable)" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
17
+
18
+ # First we attempt to load the desired environment directly from the environment
19
+ # file. This is very fast and efficient compared to running through the entire
20
+ # CLI and selector. If you want feedback on which environment was used then
21
+ # insert the word 'use' after --create as this triggers verbose mode.
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
+ then
25
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
+ for __hook in "${rvm_path:-$HOME/.rvm}/hooks/after_use"*
27
+ do
28
+ if [[ -f "${__hook}" && -x "${__hook}" && -s "${__hook}" ]]
29
+ then \. "${__hook}" || true
30
+ fi
31
+ done
32
+ unset __hook
33
+ if (( ${rvm_use_flag:=1} >= 2 )) # display only when forced
34
+ then
35
+ if [[ $- == *i* ]] # check for interactive shells
36
+ then printf "%b" "Using: \E[32m$GEM_HOME\E[0m" # show the user the ruby and gemset they are using in green
37
+ else printf "%b" "Using: $GEM_HOME" # don't use colors in non-interactive shells
38
+ fi
39
+ fi
40
+ else
41
+ # If the environment file has not yet been created, use the RVM CLI to select.
42
+ rvm --create "$environment_id" || {
43
+ echo "Failed to create RVM environment '${environment_id}'."
44
+ return 1
45
+ }
46
+ fi
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ status_cacher (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.2.4)
10
+ rspec (2.13.0)
11
+ rspec-core (~> 2.13.0)
12
+ rspec-expectations (~> 2.13.0)
13
+ rspec-mocks (~> 2.13.0)
14
+ rspec-core (2.13.1)
15
+ rspec-expectations (2.13.0)
16
+ diff-lcs (>= 1.1.3, < 2.0)
17
+ rspec-mocks (2.13.1)
18
+
19
+ PLATFORMS
20
+ ruby
21
+
22
+ DEPENDENCIES
23
+ rspec
24
+ status_cacher!
@@ -0,0 +1,31 @@
1
+ # StatusCacher
2
+
3
+ This gem provides a simple script that writes a status to a file.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ <code>gem 'status\_cacher'</code>
10
+
11
+ And then execute:
12
+
13
+ <code>bundle</code>
14
+
15
+ Or install it yourself as:
16
+
17
+ <code>gem install status\_cacher </code>
18
+
19
+ ## Usage
20
+
21
+ require "status_cacher"
22
+
23
+ ### Writing Status
24
+ <pre><code>status_cacher = StatusCacher.new("/tmp/filename")
25
+ status_cacher.status = ("ok")
26
+ </code></pre>
27
+
28
+ ### Reading Status
29
+ <pre><code>status_cacher = StatusCacher.new("/tmp/filename")
30
+ status_value = status_cacher.status
31
+ </code></pre>
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,25 @@
1
+ class StatusCacher
2
+ attr_accessor :status_path
3
+
4
+ def initialize(status_path)
5
+ raise ArgumentError("No status path specified") if status_path.nil?
6
+ @status_path = status_path
7
+
8
+ FileUtils.touch(status_path)
9
+ end
10
+
11
+ def status=(value)
12
+ File.open(@status_path, 'w') { |f|
13
+ f.write value
14
+ }
15
+ rescue StandardError => e
16
+ raise StatusStorageError.new("Could not write to status cache at #{@status_path}: #{e.inspect}")
17
+ end
18
+
19
+ def status
20
+ f = File.open(@status_path, "r")
21
+ f.read
22
+ rescue StandardError => e
23
+ raise StatusStorageError.new("Status path does not exist when it should #{@status_path}: #{e.inspect}")
24
+ end
25
+ end
@@ -0,0 +1,2 @@
1
+ class StatusStorageError < IOError
2
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib' ))
5
+
6
+ RSpec.configure do |config|
7
+ config.treat_symbols_as_metadata_keys_with_true_values = true
8
+ config.run_all_when_everything_filtered = true
9
+ config.filter_run :focus
10
+ end
@@ -0,0 +1,90 @@
1
+ require "spec_helper"
2
+
3
+ require 'tempfile'
4
+ require 'fileutils'
5
+
6
+ require "status_cacher"
7
+ require "status_storage_error"
8
+
9
+ describe StatusCacher do
10
+ before :each do
11
+ @test_text = "test text"
12
+ @status_file_path = Tempfile.new("status-cacher-temp-").path
13
+ end
14
+
15
+ context "when initialized" do
16
+ it "should raise an argument error if no status file location is specified" do
17
+ expect {
18
+ @iut = StatusCacher.new
19
+ }.to raise_error ArgumentError
20
+ end
21
+
22
+ it "should remember the status file location specified" do
23
+ @iut = StatusCacher.new(@status_file_path)
24
+ @iut.status_path.should == @status_file_path
25
+ end
26
+ end
27
+
28
+ context "when asked to store a status" do
29
+ it "should create the status file if not present" do
30
+ FileUtils.rm_f(@status_file_path)
31
+ File.exists?(@status_file_path).should == false
32
+ @iut = StatusCacher.new(@status_file_path)
33
+ File.exists?(@status_file_path).should == true
34
+ end
35
+
36
+ it "should not overwrite the status file if present" do
37
+ populate_test_data
38
+ @iut = StatusCacher.new(@status_file_path)
39
+ File.read(@status_file_path).should == @test_text
40
+ end
41
+
42
+ it "should store only the value provided in the status file" do
43
+ populate_test_data
44
+ test_text = "new value"
45
+ @iut = StatusCacher.new(@status_file_path)
46
+ @iut.status = (test_text)
47
+ File.read(@status_file_path).should == test_text
48
+ end
49
+
50
+ it "should raise a StorageError if the store operation fails" do
51
+ mock_file = double(File)
52
+ File.should_receive(:open).and_yield(mock_file)
53
+ mock_file.should_receive(:write).and_raise RuntimeError
54
+ @iut = StatusCacher.new(@status_file_path)
55
+ expect{
56
+ @iut.status = "blah"
57
+ }.to raise_error StatusStorageError
58
+ end
59
+ end
60
+
61
+ context "when asked to return the current status" do
62
+ it "should return "" if the status file was not present" do
63
+ FileUtils.rm_f(@status_file_path)
64
+ @iut = StatusCacher.new(@status_file_path)
65
+ value = @iut.status
66
+ value.should == ""
67
+ end
68
+
69
+ it "should return the value stored in the status file" do
70
+ populate_test_data
71
+ @iut = StatusCacher.new(@status_file_path)
72
+ value = @iut.status
73
+ value.should == @test_text
74
+ end
75
+
76
+ it "should raise a StorageError if the file exists but could not be accessed" do
77
+ @iut = StatusCacher.new(@status_file_path)
78
+ expect{
79
+ @iut.status_path = "/djksghsfdksfgdklsjhfjks/"
80
+ @iut.status
81
+ }.to raise_error StatusStorageError
82
+ end
83
+ end
84
+
85
+ def populate_test_data
86
+ open(@status_file_path, 'a') { |f|
87
+ f.write @test_text
88
+ }
89
+ end
90
+ end
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'status_cacher'
3
+ s.version = '0.0.1'
4
+ s.date = '2013-06-25'
5
+ s.summary = "Writes a status to a file"
6
+ s.description = ""
7
+ s.authors = ["Tiaan van Deventer"]
8
+ s.email = 'tiaan.van.deventer@gmail.com'
9
+ s.homepage = 'http://rubygems.org/gems/status_cacher'
10
+ s.files = `git ls-files`.split($\)
11
+ s.require_paths = ["lib/"]
12
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
13
+ s.add_development_dependency 'rspec'
14
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: status_cacher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tiaan van Deventer
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: ''
31
+ email: tiaan.van.deventer@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - .gitignore
37
+ - .rvmrc
38
+ - Gemfile
39
+ - Gemfile.lock
40
+ - README.md
41
+ - Rakefile
42
+ - lib/status_cacher.rb
43
+ - lib/status_storage_error.rb
44
+ - spec/spec_helper.rb
45
+ - spec/status_cacher_spec.rb
46
+ - status_cacher.gemspec
47
+ homepage: http://rubygems.org/gems/status_cacher
48
+ licenses: []
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib/
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 1.8.24
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: Writes a status to a file
71
+ test_files:
72
+ - spec/spec_helper.rb
73
+ - spec/status_cacher_spec.rb