hashme 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/lib/hashme.rb +2 -1
- data/lib/hashme/properties.rb +16 -20
- data/lib/hashme/version.rb +1 -1
- data/spec/hashme/base_spec.rb +7 -0
- data/spec/hashme/properties_spec.rb +12 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2663088632661682c045a62e2674257dd342c568
|
4
|
+
data.tar.gz: 24af504823c262c52ab5c951ecceb8fa17a8f2ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffec5164dd1d0920674d067e1b1c1c354ed6db3333a0c003850f4cf847ef564ef236e0516c698f15d82f36ea8e167ff5f3d4f67c4126e633df080e4f0248df50
|
7
|
+
data.tar.gz: 99637e30e2c635a4955c3f461eef856bd8d1ace88619eab3f83aa0e3d9705b6495248add82ba9fc7a9e1230cb29cdec76d894e0757dba655c71932bf6eda1678
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Hashme helps you create simple models that allow you to initialize and
|
|
6
6
|
generate hashes that you can serialize and store as you wish.
|
7
7
|
|
8
8
|
Its a bit like ActiveRecord, but without all the messy database stuff,
|
9
|
-
and of course you can nest to you're
|
9
|
+
and of course you can nest to you're heart's content.
|
10
10
|
|
11
11
|
## Installation
|
12
12
|
|
@@ -89,6 +89,11 @@ kennel.cats.length == 2 # true!
|
|
89
89
|
|
90
90
|
## History
|
91
91
|
|
92
|
+
### 0.1.2 - 2014-03-10
|
93
|
+
|
94
|
+
* Set default property values on object initialization.
|
95
|
+
* Refactoring to use `class_atrribute` for properties hash for improved inheritance.
|
96
|
+
|
92
97
|
### 0.1.1 - 2014-01-21
|
93
98
|
|
94
99
|
* Fixing dependency on ActiveModel >= 3.0
|
data/lib/hashme.rb
CHANGED
data/lib/hashme/properties.rb
CHANGED
@@ -2,6 +2,11 @@ module Hashme
|
|
2
2
|
module Properties
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
+
included do
|
6
|
+
class_attribute :properties
|
7
|
+
self.properties = {}
|
8
|
+
end
|
9
|
+
|
5
10
|
def get_attribute(name)
|
6
11
|
self[name]
|
7
12
|
end
|
@@ -17,6 +22,15 @@ module Hashme
|
|
17
22
|
|
18
23
|
protected
|
19
24
|
|
25
|
+
# Go through each property and make sure it has a default value.
|
26
|
+
def set_defaults
|
27
|
+
(self.class.properties || {}).each do |key, property|
|
28
|
+
unless property.default.nil?
|
29
|
+
self[property.name] = property.default
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
20
34
|
# Internal method to go through each attribute and set the
|
21
35
|
# values via the set_attribute method.
|
22
36
|
def set_attributes(attrs = {})
|
@@ -28,37 +42,19 @@ module Hashme
|
|
28
42
|
private
|
29
43
|
|
30
44
|
def get_property(name)
|
31
|
-
|
32
|
-
self.class.search_property(name)
|
45
|
+
self.class.properties[name.to_sym]
|
33
46
|
end
|
34
47
|
|
35
48
|
module ClassMethods
|
36
49
|
|
37
|
-
attr_accessor :properties
|
38
|
-
|
39
50
|
def property(*args)
|
40
|
-
self.properties ||= {}
|
41
|
-
|
42
51
|
# Prepare the property object and methods
|
43
52
|
property = Property.new(*args)
|
44
|
-
properties
|
53
|
+
self.properties = properties.merge(property.name => property)
|
45
54
|
define_property_methods(property)
|
46
55
|
|
47
56
|
property
|
48
57
|
end
|
49
|
-
|
50
|
-
# Recursive search the property in the superclass chain
|
51
|
-
def search_property(name)
|
52
|
-
name = name.to_sym
|
53
|
-
|
54
|
-
if properties[name]
|
55
|
-
properties[name]
|
56
|
-
elsif superclass.respond_to?(:search_property)
|
57
|
-
superclass.search_property(name)
|
58
|
-
else
|
59
|
-
nil
|
60
|
-
end
|
61
|
-
end
|
62
58
|
|
63
59
|
protected
|
64
60
|
|
data/lib/hashme/version.rb
CHANGED
data/spec/hashme/base_spec.rb
CHANGED
@@ -32,6 +32,13 @@ describe Hashme do
|
|
32
32
|
@obj.name.should eql("Sam")
|
33
33
|
end
|
34
34
|
|
35
|
+
it "should set default values so they are accessible by hash" do
|
36
|
+
@model.property :surname, String, :default => "Nowl"
|
37
|
+
@obj = @model.new
|
38
|
+
@obj.to_hash[:surname].should eql('Nowl')
|
39
|
+
end
|
40
|
+
|
41
|
+
|
35
42
|
end
|
36
43
|
|
37
44
|
end
|
@@ -51,11 +51,21 @@ describe Hashme::Properties do
|
|
51
51
|
@model.properties.class.should eql(Hash)
|
52
52
|
end
|
53
53
|
|
54
|
-
it "should be
|
54
|
+
it "should be empty if no properties" do
|
55
55
|
model = Class.new do
|
56
56
|
include Hashme
|
57
57
|
end
|
58
|
-
model.properties.should
|
58
|
+
model.properties.should be_empty
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should be inherited from parent models" do
|
62
|
+
mod = Class.new(@model) do
|
63
|
+
property :surname, String
|
64
|
+
end
|
65
|
+
mod.properties.keys.should include(:name)
|
66
|
+
mod.properties.keys.should include(:surname)
|
67
|
+
# Make sure we don't update the parent!
|
68
|
+
@model.properties.keys.should_not include(:surname)
|
59
69
|
end
|
60
70
|
|
61
71
|
end
|
@@ -97,5 +107,4 @@ describe Hashme::Properties do
|
|
97
107
|
|
98
108
|
end
|
99
109
|
|
100
|
-
|
101
110
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Lown
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|