soup 1.0.5 → 1.0.6
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 +1 -1
- data/lib/soup.rb +0 -22
- data/lib/soup/backends/file_backend.rb +30 -22
- data/lib/soup/backends/multi_soup.rb +2 -5
- data/lib/soup/backends/read_only.rb +1 -1
- data/lib/soup/backends/yaml_backend.rb +6 -6
- metadata +3 -3
data/Rakefile
CHANGED
data/lib/soup.rb
CHANGED
@@ -8,28 +8,6 @@ class Soup
|
|
8
8
|
autoload :Backends, 'soup/backends'
|
9
9
|
autoload :Snip, 'soup/snip'
|
10
10
|
|
11
|
-
# You can access a default soup using this methods.
|
12
|
-
|
13
|
-
def self.default_instance #:nodoc:
|
14
|
-
@@instance ||= new
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.[](*args)
|
18
|
-
default_instance[*args]
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.<<(attributes)
|
22
|
-
default_instance << attributes
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.with(*args)
|
26
|
-
default_instance.sieve(*args)
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.destroy(*args)
|
30
|
-
default_instance.destroy(*args)
|
31
|
-
end
|
32
|
-
|
33
11
|
# Get the soup ready!
|
34
12
|
def initialize(backend=nil)
|
35
13
|
@backend = backend || Soup::Backends::FileBackend.new
|
@@ -10,26 +10,13 @@ class Soup
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def names
|
13
|
-
snip_paths.map { |s|
|
13
|
+
snip_paths.map { |s| snip_name_from_path(s) }
|
14
14
|
end
|
15
15
|
|
16
16
|
def load_snip(name)
|
17
|
-
path = snip_paths.find { |s|
|
17
|
+
path = snip_paths.find { |s| snip_name_from_path(s) == name }
|
18
18
|
if path
|
19
|
-
|
20
|
-
data = file.read
|
21
|
-
default_attributes = {:name => name, :updated_at => file.mtime, :created_at => file.mtime}
|
22
|
-
if attribute_start = data.index("\n:")
|
23
|
-
content = data[0, attribute_start].strip
|
24
|
-
attributes = default_attributes.merge(YAML.load(data[attribute_start, data.length]))
|
25
|
-
else
|
26
|
-
content = data
|
27
|
-
attributes = default_attributes
|
28
|
-
end
|
29
|
-
attributes.update(:content => content) if content && content.length > 0
|
30
|
-
extension = File.extname(path).gsub(/^\./, '')
|
31
|
-
attributes.update(:extension => extension) if extension != "snip"
|
32
|
-
Snip.new(attributes, self)
|
19
|
+
load_snip_from_path(path, name)
|
33
20
|
else
|
34
21
|
nil
|
35
22
|
end
|
@@ -54,8 +41,35 @@ class Soup
|
|
54
41
|
end
|
55
42
|
end
|
56
43
|
|
44
|
+
def all_snips
|
45
|
+
snip_paths.map do |path|
|
46
|
+
load_snip_from_path(path, snip_name_from_path(path))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
57
50
|
private
|
58
51
|
|
52
|
+
def snip_name_from_path(path)
|
53
|
+
File.basename(path).split(".").first
|
54
|
+
end
|
55
|
+
|
56
|
+
def load_snip_from_path(path, name)
|
57
|
+
file = File.new(path)
|
58
|
+
data = file.read
|
59
|
+
default_attributes = {:name => name, :updated_at => file.mtime, :created_at => file.mtime}
|
60
|
+
if attribute_start = data.index("\n:")
|
61
|
+
content = data[0, attribute_start].strip
|
62
|
+
attributes = default_attributes.merge(YAML.load(data[attribute_start, data.length]))
|
63
|
+
else
|
64
|
+
content = data
|
65
|
+
attributes = default_attributes
|
66
|
+
end
|
67
|
+
attributes.update(:content => content) if content && content.length > 0
|
68
|
+
extension = File.extname(path).gsub(/^\./, '')
|
69
|
+
attributes.update(:extension => extension) if extension != "snip"
|
70
|
+
Snip.new(attributes, self)
|
71
|
+
end
|
72
|
+
|
59
73
|
def path_for(name, extension=nil)
|
60
74
|
snip_extension = ".snip"
|
61
75
|
snip_extension += ".#{extension}" if extension
|
@@ -65,12 +79,6 @@ class Soup
|
|
65
79
|
def snip_paths
|
66
80
|
Dir[File.join(@base_path, "*")].select { |s| File.file?(s) }
|
67
81
|
end
|
68
|
-
|
69
|
-
def all_snips
|
70
|
-
Dir[File.join(@base_path, "*")].map do |key|
|
71
|
-
load_snip(File.basename(key, ".snip"))
|
72
|
-
end
|
73
|
-
end
|
74
82
|
end
|
75
83
|
end
|
76
84
|
end
|
@@ -11,19 +11,16 @@ class Soup
|
|
11
11
|
|
12
12
|
def method_missing(*args)
|
13
13
|
@backends.each do |backend|
|
14
|
-
if result = backend.__send__(*args)
|
14
|
+
if result = backend.respond_to?(args.first) ? backend.__send__(*args) : nil
|
15
15
|
return result
|
16
16
|
end
|
17
17
|
end
|
18
18
|
nil
|
19
19
|
end
|
20
20
|
|
21
|
-
private
|
22
|
-
|
23
21
|
def all_snips
|
24
|
-
@backends.map { |b| b.
|
22
|
+
@backends.map { |b| b.all_snips }.flatten
|
25
23
|
end
|
26
|
-
|
27
24
|
end
|
28
25
|
end
|
29
26
|
end
|
@@ -51,17 +51,17 @@ class Soup
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
private
|
55
|
-
|
56
|
-
def path_for(name)
|
57
|
-
File.join(@base_path, name + ".yml")
|
58
|
-
end
|
59
|
-
|
60
54
|
def all_snips
|
61
55
|
Dir[path_for("*")].map do |key|
|
62
56
|
load_snip(File.basename(key, ".yml"))
|
63
57
|
end
|
64
58
|
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def path_for(name)
|
63
|
+
File.join(@base_path, name + ".yml")
|
64
|
+
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
metadata
CHANGED