property_sets 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -11,6 +11,7 @@ You configure the allowed stored properties by specifying these in an initialize
11
11
  class Account < ActiveRecord::Base
12
12
  property_set :settings do
13
13
  property :version, :default => "v1.0"
14
+ property :featured
14
15
  property :product
15
16
  end
16
17
 
@@ -21,9 +22,24 @@ You configure the allowed stored properties by specifying these in an initialize
21
22
 
22
23
  The declared properties can then be accessed runtime via the defined association:
23
24
 
24
- account.settings.ssl # returns the value of the setting
25
- account.settings.ssl=(value) # immediately changes the value of the setting
26
- account.settings.ssl? # coerces the setting to boolean AR style
25
+ # Return the version record for this account - or a new record if none exists
26
+ account.settings.version
27
+
28
+ # Create (or update) the version record with default value
29
+ account.settings.version.create
30
+
31
+ # Create (or update) the version record with the given value
32
+ account.settings.version.create(:value => "v1.1")
33
+
34
+ # Destroy the version record
35
+ account.settings.version.destroy
36
+
37
+ On top of the basic access paths, there are some short cuts:
38
+
39
+ account.settings.featured=(1) # immediately changes the value of the setting
40
+ account.settings.featured? # coerces the setting to boolean AR style
41
+ account.settings.featured.enable # sets the value of this setting to a true value
42
+ account.settings.featured.disable # sets the value of this setting to a false value
27
43
 
28
44
  If the value has never been set, a nil (or default) is returned. And that's pretty much it.
29
45
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.10
1
+ 0.0.11
@@ -73,12 +73,9 @@ module PropertySets
73
73
  end
74
74
  end
75
75
 
76
- def self.included(receiver)
77
- receiver.extend(ClassMethods)
78
- end
79
76
  end
80
77
  end
81
78
 
82
79
  ActiveRecord::Base.class_eval do
83
- include PropertySets::ActiveRecordExtension
80
+ extend PropertySets::ActiveRecordExtension::ClassMethods
84
81
  end
@@ -10,6 +10,16 @@ module PropertySets
10
10
  !false?
11
11
  end
12
12
 
13
+ def enable
14
+ update_attribute(:value, "1")
15
+ self
16
+ end
17
+
18
+ def disable
19
+ update_attribute(:value, "0")
20
+ self
21
+ end
22
+
13
23
  def to_s
14
24
  value.to_s
15
25
  end
@@ -24,6 +34,10 @@ module PropertySets
24
34
  end
25
35
  end
26
36
 
37
+ def coerce_value
38
+ self.value = value.to_s unless value.nil?
39
+ end
40
+
27
41
  def owner_class_instance
28
42
  send(self.class.owner_class_sym)
29
43
  end
@@ -42,6 +56,7 @@ module PropertySets
42
56
  base.after_create :reset_owner_association
43
57
  base.after_destroy :reset_owner_association
44
58
  base.validate :validate_format_of_name
59
+ base.before_create :coerce_value
45
60
  end
46
61
 
47
62
  def property(key, options = nil)
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{property_sets}
8
- s.version = "0.0.10"
8
+ s.version = "0.0.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Morten Primdahl"]
@@ -97,6 +97,23 @@ class TestPropertySets < ActiveSupport::TestCase
97
97
  assert !@account.settings.foo?
98
98
  end
99
99
 
100
+ should "support enable/disable semantics" do
101
+ assert !@account.settings.foo?
102
+ assert @account.settings.foo.id.nil?
103
+ @account.settings.foo.enable
104
+ assert @account.settings.foo.id.present?
105
+ assert @account.settings.foo?
106
+ @account.settings.foo.disable
107
+ assert !@account.settings.foo?
108
+ end
109
+
110
+ should "coerce everything but nil to string" do
111
+ assert @account.settings.foo.create(:value => 3)
112
+ assert @account.settings.foo.value == "3"
113
+ assert @account.settings.foo.create(:value => nil)
114
+ assert @account.settings.foo.value.nil?
115
+ end
116
+
100
117
  should "support bulk build multiple properties in one go" do
101
118
  @account.settings.bulk(:foo => "123", :bar => "456")
102
119
  @account.save!
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: property_sets
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 10
10
- version: 0.0.10
9
+ - 11
10
+ version: 0.0.11
11
11
  platform: ruby
12
12
  authors:
13
13
  - Morten Primdahl