cubbyhole 0.0.1 → 0.1.0

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/.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