cubbyhole 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ vendor/bundle
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in cubbyhole.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'rspec'
8
+ end
@@ -1,3 +1,3 @@
1
1
  module Cubbyhole
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/cubbyhole.rb CHANGED
@@ -6,8 +6,69 @@ end
6
6
 
7
7
  module Cubbyhole
8
8
  class Base
9
- def foo
10
- "asf"
9
+ def self.create(params={})
10
+ new(params).save
11
+ end
12
+
13
+ def self.get(id)
14
+ objs[id]
15
+ end
16
+
17
+ def self.next_id
18
+ @next_id ||= 0
19
+ id = @next_id
20
+ @next_id += 1
21
+ id
22
+ end
23
+
24
+ def self.objs
25
+ @objs ||= {}
26
+ end
27
+
28
+ def initialize(params={})
29
+ @id = self.class.next_id
30
+ @params = params
31
+ @persisted = false
32
+ stringify_keys!
33
+ end
34
+
35
+ attr_reader :id
36
+
37
+ def persisted?
38
+ @persisted
39
+ end
40
+
41
+ def save
42
+ @persisted = true
43
+ stringify_keys!
44
+ self.class.objs[@id] = self
45
+ end
46
+
47
+ def method_missing(meth, *args, &blk)
48
+ key = meth.to_s
49
+
50
+ if key =~ /=$/
51
+ raise ArgumentError unless args.size == 1
52
+ @params[key.gsub(/=$/, "")] = args.first
53
+ else
54
+ raise ArgumentError unless args.size == 0
55
+ @params[key]
56
+ end
57
+ end
58
+
59
+ def respond_to?(*args); true; end
60
+
61
+ def update_attributes(params)
62
+ @params.merge!(params)
63
+ stringify_keys!
64
+ save
65
+ end
66
+
67
+ def stringify_keys!
68
+ @params.keys.each do |key|
69
+ @params[key.to_s] = @params.delete(key)
70
+ end
71
+ @params
11
72
  end
12
73
  end
13
74
  end
@@ -0,0 +1,53 @@
1
+ $:.push File.expand_path("../../lib", __FILE__)
2
+
3
+ require 'cubbyhole'
4
+
5
+ describe Cubbyhole do
6
+ it "makes constants" do
7
+ NewConstant.new.foo.should == nil
8
+ end
9
+
10
+ it "allows you to set attrs on new" do
11
+ model = NewModel.new(:foo => "bar", :baz => "bang")
12
+ model.foo.should == "bar"
13
+ model.baz.should == "bang"
14
+ end
15
+
16
+ it "allows you to save and fetch objects" do
17
+ model = NewModel.new(:foo => "bar")
18
+ model.save
19
+
20
+ fetched = NewModel.get(model.id)
21
+ fetched.foo.should == "bar"
22
+ end
23
+
24
+ it "should not persist unsaved objects" do
25
+ model = NewModel.new(:foo => "bar")
26
+
27
+ NewModel.get(model.id).should be_nil
28
+ end
29
+
30
+ it "allows you to create saved objects" do
31
+ model = NewModel.create(:foo => "bar")
32
+
33
+ fetched = NewModel.get(model.id)
34
+ fetched.foo.should == "bar"
35
+ end
36
+
37
+ it "allows you to set and retrieve attributes" do
38
+ model = NewModel.new
39
+ model.foo.should == nil
40
+ model.foo = "bar"
41
+ model.foo.should == "bar"
42
+ end
43
+
44
+ it "allows you to update_attributes" do
45
+ model = NewModel.new(:foo => "bar")
46
+ model.save
47
+ model.update_attributes(:foo => "baz", :bar => "zot")
48
+
49
+ fetched = NewModel.get(model.id)
50
+ fetched.foo.should == "baz"
51
+ fetched.bar.should == "zot"
52
+ end
53
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cubbyhole
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andy Delcambre
@@ -36,6 +36,7 @@ files:
36
36
  - cubbyhole.gemspec
37
37
  - lib/cubbyhole.rb
38
38
  - lib/cubbyhole/version.rb
39
+ - spec/cubbyhole_spec.rb
39
40
  has_rdoc: true
40
41
  homepage: ""
41
42
  licenses: []
@@ -70,5 +71,5 @@ rubygems_version: 1.6.2
70
71
  signing_key:
71
72
  specification_version: 3
72
73
  summary: A zero config data store
73
- test_files: []
74
-
74
+ test_files:
75
+ - spec/cubbyhole_spec.rb