bagman 0.0.3 → 0.0.5
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/Changelog.md +9 -0
- data/lib/bagman/bag.rb +9 -1
- data/lib/bagman/document.rb +26 -9
- data/lib/bagman/version.rb +1 -1
- metadata +4 -4
data/Changelog.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# 0.0.5
|
2
|
+
|
3
|
+
- Fixed long standing bug where the bag would become something like `'{"serialised":"bag"}': null` [lachie]
|
4
|
+
|
5
|
+
# 0.0.4
|
6
|
+
|
7
|
+
- Was never pushed for some reason!
|
8
|
+
- `uncast` field type uses `:defaults`. [whalec]
|
9
|
+
|
1
10
|
# 0.0.3
|
2
11
|
|
3
12
|
- Added `bag_field` class method to `Bagman::Document`s. This allows for adding adhoc accessors for conveniently accessing verbatim bag values. [lachie]
|
data/lib/bagman/bag.rb
CHANGED
@@ -13,6 +13,7 @@ module Bagman
|
|
13
13
|
instance_eval(&blk)
|
14
14
|
end
|
15
15
|
|
16
|
+
|
16
17
|
alias :fields :columns
|
17
18
|
|
18
19
|
|
@@ -55,6 +56,7 @@ module Bagman
|
|
55
56
|
write_attribute(index_name, value)
|
56
57
|
end
|
57
58
|
|
59
|
+
|
58
60
|
self.bag[name] = if s = options[:serialize]
|
59
61
|
s[value]
|
60
62
|
elsif value.is_a? Date
|
@@ -68,9 +70,15 @@ module Bagman
|
|
68
70
|
|
69
71
|
def uncast_bag_field(name, type, options, &blk)
|
70
72
|
name = name.to_s
|
73
|
+
if default = options[:default]
|
74
|
+
default_generator = "__#{name}_default"
|
75
|
+
target_class.send :define_method, default_generator do
|
76
|
+
default.dup
|
77
|
+
end
|
78
|
+
end
|
71
79
|
|
72
80
|
target_class.send :define_method, name do
|
73
|
-
self.bag[name]
|
81
|
+
self.bag[name] || (default_generator && send(default_generator))
|
74
82
|
end
|
75
83
|
|
76
84
|
target_class.send :define_method, "#{name}=" do |value|
|
data/lib/bagman/document.rb
CHANGED
@@ -11,24 +11,40 @@ module Bagman
|
|
11
11
|
before_save :serialize_bag
|
12
12
|
end
|
13
13
|
|
14
|
+
|
14
15
|
def bag
|
15
16
|
@bag ||= decode_or_initialize_bag
|
16
17
|
end
|
17
18
|
|
18
19
|
|
19
20
|
def bag=(bag)
|
20
|
-
|
21
|
+
case bag
|
22
|
+
when NilClass
|
23
|
+
@bag = AngryHash.new
|
24
|
+
when String
|
25
|
+
@bag = decode_or_initialize_bag(bag)
|
26
|
+
else
|
27
|
+
@bag = AngryHash[bag]
|
28
|
+
end.tap {
|
29
|
+
mixin_top_level_mixin
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def decode_or_initialize_bag(bag_string=nil)
|
35
|
+
begin
|
36
|
+
bag_string ||= read_attribute('bag')
|
37
|
+
AngryHash[ ActiveSupport::JSON.decode( bag_string ) ]
|
38
|
+
rescue
|
39
|
+
initialize_bag(AngryHash.new)
|
40
|
+
end.tap {|bag|
|
41
|
+
mixin_top_level_mixin(bag)
|
42
|
+
}
|
21
43
|
end
|
22
44
|
|
23
45
|
|
24
|
-
def
|
25
|
-
|
26
|
-
AngryHash[ ActiveSupport::JSON.decode( read_attribute('bag') ) ]
|
27
|
-
rescue
|
28
|
-
initialize_bag(AngryHash.new)
|
29
|
-
end.tap {|h|
|
30
|
-
h.extend self.class.bag.top_level_mixin
|
31
|
-
}
|
46
|
+
def mixin_top_level_mixin(hash=@bag)
|
47
|
+
hash.extend self.class.bag.top_level_mixin unless hash.__angry_hash_extension # XXX angry hash should have an API for this
|
32
48
|
end
|
33
49
|
|
34
50
|
|
@@ -45,6 +61,7 @@ module Bagman
|
|
45
61
|
if @bag
|
46
62
|
encrypt_crypto_pocket
|
47
63
|
write_attribute(:bag, ActiveSupport::JSON.encode(@bag))
|
64
|
+
@bag = nil
|
48
65
|
end
|
49
66
|
end
|
50
67
|
|
data/lib/bagman/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bagman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Lachie Cox
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-09-10 00:00:00 Z
|
20
20
|
dependencies: []
|
21
21
|
|
22
22
|
description: We built Bagman for a project. We wanted fast prototyping and development, and some level of escape from the schema on relational databases.
|