lita-key-value 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e82aaa9cfc4098df78127100a2ce40636ac01c73
4
- data.tar.gz: 62eaa2ce505a300cd61333aadc6cd7672868781c
3
+ metadata.gz: 257372e9468420b3569c6af465d25512effca21a
4
+ data.tar.gz: 9dc868fc7a438589453397d99564703625cb2030
5
5
  SHA512:
6
- metadata.gz: 1f6dee9886ba8424b1aaf574d565a072849dd20bf30c216da34efeb8c63103f56f440e73f0abee0b10a8efe32e07700f95464d7d127024ab70b5510a59617f2d
7
- data.tar.gz: 797b04c2c39add8d762d42aa21bd8574c92ac5b2121cd53b9051ab83a24728be25a794ce6dd8a2a163f49ff141cd6c17ab475d61b3e11490b90843d07b8f63c1
6
+ metadata.gz: 3c2d425fea4f3378cb31a03c50f3ad43a193e01c8c114573a08fe2f5442bb4eb4737cd683495cae0cee8c421de3a4444656bdd417b3670b34ccedb12d768c1cb
7
+ data.tar.gz: 5c16594bf5c5fdcfa8cb90074f87ff025a09f9859a30cfa7da91ba94c1584e514ad4fad0a4bb6bc0abef0d8420c568cad9ff7c97d439d88fb6960894def3fa66
data/README.md CHANGED
@@ -15,6 +15,22 @@ Add lita-key-value to your Lita instance's Gemfile:
15
15
  gem "lita-key-value"
16
16
  ```
17
17
 
18
+ ## Configuration
19
+
20
+ ### Optional attributes
21
+
22
+ * `key_pattern` (Regexp) - Determines what Lita will recognize as a valid key. Default: `/[\w\._]+/`.
23
+ * `key_normalizer` (Proc) - A custom callable that determines how each key will be normalized before being stored in Redis. The proc should take one argument, the key as matched via regular expression, and return one value, the normalized version of the key.
24
+
25
+ ### Example
26
+
27
+ ``` ruby
28
+ Lita.configure do |config|
29
+ config.handlers.key_value.key_pattern = /[\w-]+/
30
+ config.handlers.key_value.key_normalizer = proc { |key| "~#{key}~" }
31
+ end
32
+ ```
33
+
18
34
  ## Usage
19
35
 
20
36
  Set a key:
@@ -6,21 +6,35 @@ module Lita
6
6
  REDIS_KEY = "kv"
7
7
  KEY_PATTERN = /[\w\._]+/
8
8
 
9
- route(/^kv\s+set\s+(#{KEY_PATTERN.source})\s+(.+)/i, :set, command: true, help: {
10
- "kv set KEY VALUE" => "Set KEY to VALUE."
11
- })
9
+ def self.default_config(config)
10
+ config.key_pattern = nil
11
+ config.key_normalizer = nil
12
+ end
13
+
14
+ def self.define_routes(pattern)
15
+ route(/^kv\s+set\s+(#{pattern})\s+(.+)/i, :set, command: true, help: {
16
+ "kv set KEY VALUE" => "Set KEY to VALUE."
17
+ })
18
+
19
+ route(/^kv\s+get\s+(#{pattern})/i, :get, command: true, help: {
20
+ "kv get KEY" => "Get the value of KEY."
21
+ })
12
22
 
13
- route(/^kv\s+get\s+(#{KEY_PATTERN.source})/i, :get, command: true, help: {
14
- "kv get KEY" => "Get the value of KEY."
15
- })
23
+ route(/^kv\s+delete\s+(#{pattern})/i, :delete, command: true, help: {
24
+ "kv delete KEY" => "Delete KEY."
25
+ })
16
26
 
17
- route(/^kv\s+delete\s+(#{KEY_PATTERN.source})/i, :delete, command: true, help: {
18
- "kv delete KEY" => "Delete KEY."
19
- })
27
+ route(/^kv\s+list/i, :list, command: true, help: {
28
+ "kv list" => "List all keys."
29
+ })
30
+ end
31
+
32
+ on :loaded, :define_routes
20
33
 
21
- route(/^kv\s+list/i, :list, command: true, help: {
22
- "kv list" => "List all keys."
23
- })
34
+ def define_routes(payload)
35
+ pattern = config.key_pattern || KEY_PATTERN
36
+ self.class.define_routes(pattern.source)
37
+ end
24
38
 
25
39
  def set(response)
26
40
  key, value = response.matches.first
@@ -62,8 +76,18 @@ module Lita
62
76
 
63
77
  private
64
78
 
79
+ def config
80
+ Lita.config.handlers.key_value
81
+ end
82
+
65
83
  def normalize_key(key)
66
- key.to_s.downcase.strip
84
+ normalizer = config.key_normalizer
85
+
86
+ if normalizer.respond_to?(:call)
87
+ normalizer.call(key)
88
+ else
89
+ key.to_s.downcase.strip
90
+ end
67
91
  end
68
92
  end
69
93
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-key-value"
3
- spec.version = "0.0.2"
3
+ spec.version = "0.1.0"
4
4
  spec.authors = ["Jimmy Cuadra"]
5
5
  spec.email = ["jimmy@jimmycuadra.com"]
6
6
  spec.description = %q{A Lita handler for storing snippets of text.}
@@ -47,4 +47,22 @@ describe Lita::Handlers::KeyValue, lita_handler: true do
47
47
  expect(replies.last).to eq("No keys are stored.")
48
48
  end
49
49
  end
50
+
51
+ context "with a custom key handler and normalizer" do
52
+ before do
53
+ Lita.config.handlers.key_value.tap do |config|
54
+ config.key_pattern = /[\w-]+/
55
+ config.key_normalizer = proc { |key| "~#{key}~" }
56
+ end
57
+
58
+ described_class.routes.clear
59
+ subject.define_routes({})
60
+ end
61
+
62
+ it "allows a custom key pattern and normalizer" do
63
+ send_command("kv set hello-world it works")
64
+ send_command("kv get hello-world")
65
+ expect(replies.last).to eq("it works")
66
+ end
67
+ end
50
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-key-value
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmy Cuadra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-26 00:00:00.000000000 Z
11
+ date: 2014-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -140,4 +140,3 @@ summary: A Lita handler for storing snippets of text.
140
140
  test_files:
141
141
  - spec/lita/handlers/key_value_spec.rb
142
142
  - spec/spec_helper.rb
143
- has_rdoc: