soup 0.9.12 → 0.9.13

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/Rakefile CHANGED
@@ -21,7 +21,7 @@ spec = Gem::Specification.new do |s|
21
21
 
22
22
  # Change these as appropriate
23
23
  s.name = "soup"
24
- s.version = "0.9.12"
24
+ s.version = "0.9.13"
25
25
  s.summary = "A super-simple data store"
26
26
  s.author = "James Adam"
27
27
  s.email = "james@lazyatom.com"
data/lib/soup/backends.rb CHANGED
@@ -6,6 +6,7 @@ class Soup
6
6
  # * #save_snip(attribute_hash) - should store and return a Soup::Snip, or nil if it couldn't be saved
7
7
  # * #destroy(name) - should return true if the snip was removed, or false if otherwise
8
8
  module Backends
9
+ autoload :Base, 'soup/backends/base'
9
10
  autoload :YAMLBackend, 'soup/backends/yaml_backend'
10
11
  autoload :MultiSoup, 'soup/backends/multi_soup'
11
12
  autoload :ReadOnly, 'soup/backends/read_only'
@@ -0,0 +1,17 @@
1
+ class Soup
2
+ module Backends
3
+ class Base
4
+ def find(conditions)
5
+ if conditions.keys == [:name]
6
+ load_snip(conditions[:name])
7
+ else
8
+ all_snips.select do |s|
9
+ conditions.inject(true) do |matches, (key, value)|
10
+ matches && (s.__send__(key) == value)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,6 +1,6 @@
1
1
  class Soup
2
2
  module Backends
3
- class MultiSoup
3
+ class MultiSoup < Base
4
4
  def initialize(*backends)
5
5
  @backends = backends
6
6
  end
@@ -17,6 +17,13 @@ class Soup
17
17
  end
18
18
  nil
19
19
  end
20
+
21
+ private
22
+
23
+ def all_snips
24
+ @backends.map { |b| b.send(:all_snips) }.flatten
25
+ end
26
+
20
27
  end
21
28
  end
22
29
  end
@@ -1,6 +1,6 @@
1
1
  class Soup
2
2
  module Backends
3
- class ReadOnly
3
+ class ReadOnly < Base
4
4
  def initialize(backend)
5
5
  @backend = backend
6
6
  end
@@ -1,6 +1,6 @@
1
1
  class Soup
2
2
  module Backends
3
- class YAMLBackend
3
+ class YAMLBackend < Base
4
4
  ATTRIBUTE_TOKEN = "--- # Soup attributes"
5
5
 
6
6
  def initialize(path="soup")
@@ -15,18 +15,6 @@ class Soup
15
15
  Dir[path_for("*")].map { |s| File.basename(s, ".yml") }
16
16
  end
17
17
 
18
- def find(conditions)
19
- if conditions.keys == [:name]
20
- load_snip(conditions[:name])
21
- else
22
- all_snips.select do |s|
23
- conditions.inject(true) do |matches, (key, value)|
24
- matches && (s.__send__(key) == value)
25
- end
26
- end
27
- end
28
- end
29
-
30
18
  def load_snip(name)
31
19
  path = path_for(name)
32
20
  if File.exist?(path)
@@ -39,6 +39,17 @@ class MultiSoupBackendTest < Test::Unit::TestCase
39
39
  end
40
40
  end
41
41
 
42
+ context "when snips with a certain attribute exist in multiple backends" do
43
+ setup do
44
+ @soup_one << {:name => "snip1", :active => true}
45
+ @soup_two << {:name => "snip2", :active => true}
46
+ end
47
+
48
+ should "find matching snips from all backends" do
49
+ assert_equal 2, @soup[:active => true].length
50
+ end
51
+ end
52
+
42
53
  should "save snips" do
43
54
  @soup << {:name => "snip", :body => "bad snip"}
44
55
  @soup.destroy("snip")
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 9
8
- - 12
9
- version: 0.9.12
8
+ - 13
9
+ version: 0.9.13
10
10
  platform: ruby
11
11
  authors:
12
12
  - James Adam
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-31 00:00:00 +02:00
17
+ date: 2010-07-14 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -44,6 +44,7 @@ files:
44
44
  - test/multi_soup_backend_test.rb
45
45
  - test/soup_test.rb
46
46
  - test/test_helper.rb
47
+ - lib/soup/backends/base.rb
47
48
  - lib/soup/backends/multi_soup.rb
48
49
  - lib/soup/backends/read_only.rb
49
50
  - lib/soup/backends/yaml_backend.rb