cinch-storage 1.0.3 → 1.1.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/README.md +7 -7
- data/cinch-storage.gemspec +9 -7
- data/lib/cinch/storage.rb +28 -0
- data/lib/cinch/storage/version.rb +4 -2
- data/spec/cinch-storage_spec.rb +27 -12
- data/spec/spec_helper.rb +1 -1
- metadata +23 -6
- data/lib/cinch-storage.rb +0 -25
data/README.md
CHANGED
@@ -26,6 +26,10 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
## Usage
|
28
28
|
|
29
|
+
First, require it.
|
30
|
+
|
31
|
+
require 'cinch/storage'
|
32
|
+
|
29
33
|
In your plugin you will need to spin up a Storage object as part of your init.
|
30
34
|
|
31
35
|
def initialize(*args)
|
@@ -42,14 +46,10 @@ data collision.
|
|
42
46
|
@storage.save
|
43
47
|
end
|
44
48
|
|
45
|
-
##
|
46
|
-
|
47
|
-
The module is very fragile at the moment as a result of being written in like 20 minutes
|
48
|
-
or something as a stopgap.
|
49
|
+
## Think this is terrible?
|
49
50
|
|
50
|
-
|
51
|
-
|
52
|
-
little tighter integration with Cinch.
|
51
|
+
I wouldn't disagree; this is my first time writing anyting remotely
|
52
|
+
ORM-like. Please feel free to fork and submit pulls to increase sanity.
|
53
53
|
|
54
54
|
## Contributing
|
55
55
|
|
data/cinch-storage.gemspec
CHANGED
@@ -4,23 +4,25 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'cinch/storage/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name =
|
7
|
+
gem.name = 'cinch-storage'
|
8
8
|
gem.version = Cinch::Storage::VERSION
|
9
|
-
gem.authors = [
|
10
|
-
gem.email = [
|
11
|
-
gem.description = %q{
|
12
|
-
gem.summary = %q{
|
13
|
-
gem.homepage =
|
9
|
+
gem.authors = ['Brian Haberer']
|
10
|
+
gem.email = ['bhaberer@gmail.com']
|
11
|
+
gem.description = %q{Simple YAML backed Storage solution for Cinch plugins.}
|
12
|
+
gem.summary = %q{Data Storage for Cinch plugins.}
|
13
|
+
gem.homepage = 'https://github.com/bhaberer/cinch-storage'
|
14
|
+
gem.license = 'MIT'
|
14
15
|
|
15
16
|
gem.files = `git ls-files`.split($/)
|
16
17
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
-
gem.require_paths = [
|
19
|
+
gem.require_paths = ['lib']
|
19
20
|
|
20
21
|
gem.add_development_dependency 'rake'
|
21
22
|
gem.add_development_dependency 'rspec'
|
22
23
|
gem.add_development_dependency 'coveralls'
|
23
24
|
gem.add_development_dependency 'cinch-test'
|
24
25
|
|
26
|
+
gem.add_dependency 'cinch', '~> 2.0.12'
|
25
27
|
gem.add_dependency 'psych', '~> 1.3.4'
|
26
28
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'cinch/storage/version'
|
3
|
+
require 'psych'
|
4
|
+
|
5
|
+
module Cinch
|
6
|
+
# Addon for Cinch to allow for simple YAML storage of data
|
7
|
+
class Storage
|
8
|
+
attr_accessor :filename, :data
|
9
|
+
|
10
|
+
def initialize(file, init = {})
|
11
|
+
@filename = file
|
12
|
+
@data = Psych.load(File.open(@filename)) if File.exist?(@filename)
|
13
|
+
@data ||= init
|
14
|
+
end
|
15
|
+
|
16
|
+
def save
|
17
|
+
File.open(@filename, 'w') do |file|
|
18
|
+
Psych.dump(@data, file)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def synced_save(bot = @bot)
|
23
|
+
bot.synchronize(@filename) do
|
24
|
+
save
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/cinch-storage_spec.rb
CHANGED
@@ -1,43 +1,58 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
Thing = Struct.new(:foo)
|
4
|
+
|
3
5
|
class MyPlugin
|
4
6
|
include Cinch::Plugin
|
5
7
|
|
6
8
|
def initialize(*args)
|
7
9
|
super
|
8
|
-
@storage =
|
10
|
+
@storage = Cinch::Storage.new(config[:filename] || '/dev/null', [])
|
9
11
|
end
|
10
12
|
|
11
|
-
match /store (.*)/
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
match /store (.*)/, method: :store_text
|
15
|
+
match /storething (.*)/, method: :store_object
|
16
|
+
|
17
|
+
def store_text(m, text)
|
18
|
+
@storage.data << text
|
19
|
+
@storage.synced_save(@bot)
|
20
|
+
end
|
21
|
+
|
22
|
+
def store_object(m, text)
|
23
|
+
@storage.data << Thing.new(text)
|
15
24
|
@storage.synced_save(@bot)
|
16
25
|
end
|
17
26
|
end
|
18
27
|
|
19
28
|
|
20
|
-
describe
|
29
|
+
describe Cinch::Storage do
|
21
30
|
include Cinch::Test
|
22
31
|
|
23
32
|
before(:each) do
|
24
33
|
@filename = '/tmp/storage_test.tmp'
|
25
34
|
File.delete(@filename) if File.exist?(@filename)
|
26
|
-
@bot = make_bot(MyPlugin, { :
|
35
|
+
@bot = make_bot(MyPlugin, { filename: @filename })
|
27
36
|
end
|
28
37
|
|
29
38
|
it 'should allow users to store information between bot runs' do
|
30
|
-
storage =
|
39
|
+
storage = Cinch::Storage.new(@filename, [])
|
31
40
|
storage.data << 'foo'
|
32
41
|
storage.save
|
33
42
|
|
34
|
-
|
35
|
-
should include 'foo'
|
43
|
+
Cinch::Storage.new(@filename).data
|
44
|
+
.should include 'foo'
|
36
45
|
end
|
37
46
|
|
38
47
|
it 'should handle multiple bot threads attempting to write to the same file' do
|
39
|
-
10.times { |x| get_replies(make_message(@bot, "!store #{x}"))}
|
40
|
-
|
41
|
-
should == 10
|
48
|
+
10.times { |x| get_replies(make_message(@bot, "!store #{x}")) }
|
49
|
+
Cinch::Storage.new(@filename).data.length
|
50
|
+
.should == 10
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should write object data to the disk' do
|
54
|
+
get_replies(make_message(@bot, "!storething foobar"))
|
55
|
+
Cinch::Storage.new(@filename).data.first
|
56
|
+
.should == Thing.new('foobar')
|
42
57
|
end
|
43
58
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cinch-storage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -75,6 +75,22 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: cinch
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 2.0.12
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.0.12
|
78
94
|
- !ruby/object:Gem::Dependency
|
79
95
|
name: psych
|
80
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,7 +107,7 @@ dependencies:
|
|
91
107
|
- - ~>
|
92
108
|
- !ruby/object:Gem::Version
|
93
109
|
version: 1.3.4
|
94
|
-
description:
|
110
|
+
description: Simple YAML backed Storage solution for Cinch plugins.
|
95
111
|
email:
|
96
112
|
- bhaberer@gmail.com
|
97
113
|
executables: []
|
@@ -105,12 +121,13 @@ files:
|
|
105
121
|
- README.md
|
106
122
|
- Rakefile
|
107
123
|
- cinch-storage.gemspec
|
108
|
-
- lib/cinch
|
124
|
+
- lib/cinch/storage.rb
|
109
125
|
- lib/cinch/storage/version.rb
|
110
126
|
- spec/cinch-storage_spec.rb
|
111
127
|
- spec/spec_helper.rb
|
112
128
|
homepage: https://github.com/bhaberer/cinch-storage
|
113
|
-
licenses:
|
129
|
+
licenses:
|
130
|
+
- MIT
|
114
131
|
post_install_message:
|
115
132
|
rdoc_options: []
|
116
133
|
require_paths:
|
@@ -132,7 +149,7 @@ rubyforge_project:
|
|
132
149
|
rubygems_version: 1.8.25
|
133
150
|
signing_key:
|
134
151
|
specification_version: 3
|
135
|
-
summary:
|
152
|
+
summary: Data Storage for Cinch plugins.
|
136
153
|
test_files:
|
137
154
|
- spec/cinch-storage_spec.rb
|
138
155
|
- spec/spec_helper.rb
|
data/lib/cinch-storage.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'cinch/storage/version'
|
2
|
-
require 'psych'
|
3
|
-
|
4
|
-
class CinchStorage
|
5
|
-
attr_accessor :filename, :data
|
6
|
-
|
7
|
-
def initialize(file, init = Hash.new)
|
8
|
-
@filename = file
|
9
|
-
@data = Psych::load(File.open(@filename)) if File::exist?(@filename)
|
10
|
-
@data ||= init
|
11
|
-
end
|
12
|
-
|
13
|
-
def save
|
14
|
-
File.open(@filename, 'w') do |file|
|
15
|
-
Psych::dump(@data, file)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def synced_save(bot = @bot)
|
20
|
-
bot.synchronize(@filename) do
|
21
|
-
save
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|