soup 0.1.3 → 0.1.4
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/Manifest +10 -0
- data/README +2 -2
- data/lib/active_record_tuple.rb +3 -1
- data/lib/data_mapper_tuple.rb +1 -1
- data/lib/sequel_tuple.rb +1 -1
- data/lib/snip.rb +6 -6
- data/lib/soup.rb +13 -2
- data/soup.gemspec +56 -0
- data/spec/snip_spec.rb +46 -0
- data/spec/soup_test.rb +0 -0
- data/spec/spec_runner.rb +12 -0
- metadata +14 -8
data/Manifest
ADDED
data/README
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
Soup is a bit of everything, summoned from nothing. Soup is like an imaginary friend - comforting,
|
2
|
-
|
1
|
+
Soup is a bit of everything, summoned from nothing. Soup is like an imaginary friend - comforting,
|
2
|
+
and will often talk to you, but when you look closely, they don't exist.
|
3
3
|
|
4
4
|
Terrifying. And so:
|
5
5
|
|
data/lib/active_record_tuple.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'activerecord'
|
3
3
|
|
4
|
-
class
|
4
|
+
class ActiveRecordTuple < ActiveRecord::Base
|
5
|
+
set_table_name :tuples
|
6
|
+
|
5
7
|
def self.prepare_database(config)
|
6
8
|
ActiveRecord::Base.establish_connection(config)
|
7
9
|
return if connection.tables.include?("tuples")
|
data/lib/data_mapper_tuple.rb
CHANGED
data/lib/sequel_tuple.rb
CHANGED
data/lib/snip.rb
CHANGED
@@ -20,7 +20,7 @@ class Snip < EmptyClass
|
|
20
20
|
# Returns the snip with the given name (i.e. the snip with the tuple of "name" -> name)
|
21
21
|
#
|
22
22
|
def self.[](name)
|
23
|
-
tuples =
|
23
|
+
tuples = Soup.tuple_class.all_for_snip_named(name)
|
24
24
|
snip = Snip.new(:__id => tuples.first.snip_id)
|
25
25
|
snip.replace_tuples(tuples)
|
26
26
|
snip
|
@@ -36,7 +36,7 @@ class Snip < EmptyClass
|
|
36
36
|
# should return all Snips who have a 'created_at' value greater than '2007-01-01'.
|
37
37
|
#
|
38
38
|
def self.with(name, tuple_value_conditions=nil)
|
39
|
-
matching_tuples =
|
39
|
+
matching_tuples = Soup.tuple_class.find_matching(name, tuple_value_conditions)
|
40
40
|
matching_tuples.map { |t| t.snip_id }.uniq.map { |snip_id| find(snip_id) }
|
41
41
|
end
|
42
42
|
|
@@ -44,7 +44,7 @@ class Snip < EmptyClass
|
|
44
44
|
# with the matching snip_id, gathered into a magical snip.)
|
45
45
|
#
|
46
46
|
def self.find(id)
|
47
|
-
raise "not found" unless (tuples =
|
47
|
+
raise "not found" unless (tuples = Soup.tuple_class.for_snip(id)).any?
|
48
48
|
snip = Snip.new(:__id => id)
|
49
49
|
snip.replace_tuples(tuples)
|
50
50
|
snip
|
@@ -75,7 +75,7 @@ class Snip < EmptyClass
|
|
75
75
|
|
76
76
|
def reload
|
77
77
|
return self unless self.id
|
78
|
-
replace_tuples(
|
78
|
+
replace_tuples(Soup.tuple_class.for_snip(id))
|
79
79
|
self
|
80
80
|
end
|
81
81
|
|
@@ -123,7 +123,7 @@ class Snip < EmptyClass
|
|
123
123
|
|
124
124
|
def set_id_if_necessary
|
125
125
|
if self.id.nil?
|
126
|
-
set_id(
|
126
|
+
set_id(Soup.tuple_class.next_snip_id)
|
127
127
|
@tuples.values.each { |tuple| tuple.snip_id = self.id }
|
128
128
|
end
|
129
129
|
end
|
@@ -142,7 +142,7 @@ class Snip < EmptyClass
|
|
142
142
|
tuple.value = value
|
143
143
|
else
|
144
144
|
attributes = {:snip_id => self.id, :name => name.to_s, :value => value}
|
145
|
-
tuple = @tuples[name.to_s] =
|
145
|
+
tuple = @tuples[name.to_s] = Soup.tuple_class.new(attributes)
|
146
146
|
end
|
147
147
|
tuple.value
|
148
148
|
end
|
data/lib/soup.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'snip'
|
2
2
|
|
3
3
|
module Soup
|
4
|
-
VERSION = "0.1.
|
4
|
+
VERSION = "0.1.4"
|
5
5
|
|
6
6
|
DEFAULT_CONFIG = {
|
7
7
|
:adapter => 'sqlite3',
|
@@ -27,9 +27,20 @@ module Soup
|
|
27
27
|
@tuple_implementation = "#{tuple_implementation}_tuple"
|
28
28
|
end
|
29
29
|
|
30
|
+
def self.tuple_class
|
31
|
+
@tuple_class ||= case @tuple_implementation
|
32
|
+
when "active_record_tuple", nil
|
33
|
+
ActiveRecordTuple
|
34
|
+
when "data_mapper_tuple"
|
35
|
+
DataMapperTuple
|
36
|
+
when "sequel_tuple"
|
37
|
+
SequelTuple
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
30
41
|
# Get the soup ready!
|
31
42
|
def self.prepare
|
32
43
|
require @tuple_implementation || DEFAULT_TUPLE_IMPLEMENTATION
|
33
|
-
|
44
|
+
tuple_class.prepare_database(DEFAULT_CONFIG.merge(@database_config || {}))
|
34
45
|
end
|
35
46
|
end
|
data/soup.gemspec
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
|
2
|
+
# Gem::Specification for Soup-0.1.4
|
3
|
+
# Originally generated by Echoe
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = %q{soup}
|
7
|
+
s.version = "0.1.4"
|
8
|
+
|
9
|
+
s.specification_version = 2 if s.respond_to? :specification_version=
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.authors = ["James Adam"]
|
13
|
+
s.date = %q{2008-03-11}
|
14
|
+
s.description = %q{Soup is a bit of everything, summoned from nothing. Soup is like an imaginary friend - comforting,}
|
15
|
+
s.email = ["james@lazyatom.com"]
|
16
|
+
s.files = ["lib/active_record_tuple.rb", "lib/data_mapper_tuple.rb", "lib/sequel_tuple.rb", "lib/snip.rb", "lib/soup.rb", "README", "spec/snip_spec.rb", "spec/soup_test.rb", "spec/spec_runner.rb", "Manifest", "soup.gemspec"]
|
17
|
+
s.has_rdoc = true
|
18
|
+
s.homepage = %q{}
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
s.rubyforge_project = %q{soup}
|
21
|
+
s.rubygems_version = %q{0.9.5}
|
22
|
+
s.summary = %q{Soup is a bit of everything, summoned from nothing. Soup is like an imaginary friend - comforting,}
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
# # Original Rakefile source (requires the Echoe gem):
|
27
|
+
#
|
28
|
+
# require 'rubygems'
|
29
|
+
# #require 'rake/gempackagetask'
|
30
|
+
#
|
31
|
+
# require 'lib/soup'
|
32
|
+
#
|
33
|
+
# begin
|
34
|
+
# require 'echoe'
|
35
|
+
#
|
36
|
+
# Echoe.new("soup", Soup::VERSION) do |soup|
|
37
|
+
# soup.author = ["James Adam"]
|
38
|
+
# soup.email = ["james@lazyatom.com"]
|
39
|
+
# soup.description = File.readlines("README").first
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# rescue LoadError
|
43
|
+
# puts "You need to install the echoe gem to perform meta operations on this gem"
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# desc "Open an irb session preloaded with this library"
|
47
|
+
# task :console do
|
48
|
+
# sh "irb -rubygems -r ./lib/soup.rb"
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# # We have to run our own spec runner, because Snip will try to undefine
|
52
|
+
# # rspec's should methods using the default one
|
53
|
+
# task(:test) do
|
54
|
+
# files = FileList['spec/**/*_spec.rb']
|
55
|
+
# system "ruby spec/spec_runner.rb #{files} --format specdoc"
|
56
|
+
# end
|
data/spec/snip_spec.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
Soup.base = {:database => "soup_test.db"}
|
2
|
+
Soup.prepare
|
3
|
+
|
4
|
+
describe Snip, "when newly created" do
|
5
|
+
before(:each) { @snip = Snip.new }
|
6
|
+
|
7
|
+
it "should not have a name" do
|
8
|
+
@snip.name.should be_nil
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should return nil for any attributes" do
|
12
|
+
@snip.other_attribute.should be_nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
describe Snip, "when setting attributes" do
|
18
|
+
before(:each) { @snip = Snip.new }
|
19
|
+
|
20
|
+
it "should allow setting attributes" do
|
21
|
+
@snip.something = "blah"
|
22
|
+
@snip.something.should == "blah"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should not respond to attributes that have not been set" do
|
26
|
+
@snip.should_not respond_to(:monkey)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should respond to attributes that have been set" do
|
30
|
+
@snip.monkey = true
|
31
|
+
@snip.should respond_to(:monkey)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe Snip, "when saving" do
|
36
|
+
before(:each) { @snip = Snip.new }
|
37
|
+
|
38
|
+
it "should return all attributes when reloading" do
|
39
|
+
@snip.name = "something"
|
40
|
+
@snip.jazz = "smooth"
|
41
|
+
@snip.save
|
42
|
+
|
43
|
+
other_snip = Snip['something']
|
44
|
+
other_snip.jazz.should == "smooth"
|
45
|
+
end
|
46
|
+
end
|
data/spec/soup_test.rb
ADDED
Binary file
|
data/spec/spec_runner.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# We need to do a bit of extra work here, because Snip will undefine a
|
4
|
+
# whole bunch of stuff that spec adds, like the Object#should method.
|
5
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
6
|
+
require 'soup'
|
7
|
+
|
8
|
+
# This is basically the contents of rspec's own spec runner. It's just
|
9
|
+
# that we needed to require 'soup' before it.
|
10
|
+
require 'rubygems'
|
11
|
+
require 'spec'
|
12
|
+
exit ::Spec::Runner::CommandLine.run(rspec_options)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Adam
|
@@ -13,14 +13,15 @@ date: 2008-03-11 00:00:00 +00:00
|
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
17
|
-
email:
|
16
|
+
description: Soup is a bit of everything, summoned from nothing. Soup is like an imaginary friend - comforting,
|
17
|
+
email:
|
18
|
+
- james@lazyatom.com
|
18
19
|
executables: []
|
19
20
|
|
20
21
|
extensions: []
|
21
22
|
|
22
|
-
extra_rdoc_files:
|
23
|
-
|
23
|
+
extra_rdoc_files: []
|
24
|
+
|
24
25
|
files:
|
25
26
|
- lib/active_record_tuple.rb
|
26
27
|
- lib/data_mapper_tuple.rb
|
@@ -28,8 +29,13 @@ files:
|
|
28
29
|
- lib/snip.rb
|
29
30
|
- lib/soup.rb
|
30
31
|
- README
|
32
|
+
- spec/snip_spec.rb
|
33
|
+
- spec/soup_test.rb
|
34
|
+
- spec/spec_runner.rb
|
35
|
+
- Manifest
|
36
|
+
- soup.gemspec
|
31
37
|
has_rdoc: true
|
32
|
-
homepage:
|
38
|
+
homepage: ""
|
33
39
|
post_install_message:
|
34
40
|
rdoc_options: []
|
35
41
|
|
@@ -49,10 +55,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
55
|
version:
|
50
56
|
requirements: []
|
51
57
|
|
52
|
-
rubyforge_project:
|
58
|
+
rubyforge_project: soup
|
53
59
|
rubygems_version: 0.9.5
|
54
60
|
signing_key:
|
55
61
|
specification_version: 2
|
56
|
-
summary:
|
62
|
+
summary: Soup is a bit of everything, summoned from nothing. Soup is like an imaginary friend - comforting,
|
57
63
|
test_files: []
|
58
64
|
|