property_sets 0.0.8 → 0.0.9

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.8
1
+ 0.0.9
@@ -1,5 +1,30 @@
1
+ require 'delegate'
2
+
1
3
  module PropertySets
2
4
  module ActiveRecordExtension
5
+
6
+ class PropertySetProxy < Delegator
7
+ attr_accessor :record
8
+
9
+ def initialize(record)
10
+ self.record = record
11
+ end
12
+
13
+ def __getobj__
14
+ record
15
+ end
16
+
17
+ def id
18
+ record.id
19
+ end
20
+
21
+ def create(args = {})
22
+ record.attributes = args
23
+ record.save
24
+ record
25
+ end
26
+ end
27
+
3
28
  module ClassMethods
4
29
  def property_set(association, &block)
5
30
  raise "Invalid association name, letters only" unless association.to_s =~ /[a-z]+/
@@ -40,7 +65,8 @@ module PropertySets
40
65
  # The finder method which returns the property if present, otherwise a new instance with defaults
41
66
  define_method "lookup" do |arg|
42
67
  instance = detect { |property| property.name.to_sym == arg }
43
- instance ||= property_class.new(@owner.class.name.underscore.to_sym => @owner, :name => arg.to_s, :value => property_class.default(arg))
68
+ instance ||= property_class.new(@owner.class.name.underscore.to_sym => @owner, :name => arg.to_s)
69
+ PropertySetProxy.new(instance)
44
70
  end
45
71
  end
46
72
  end
@@ -2,18 +2,6 @@ module PropertySets
2
2
  module PropertySetModel
3
3
  module InstanceMethods
4
4
 
5
- def create
6
- self.value = self.class.default(name.to_sym) if self.value.nil?
7
- if new_record?
8
- super
9
- end
10
- self
11
- end
12
-
13
- def protected?
14
- self.class.protected?(self.name.to_sym)
15
- end
16
-
17
5
  def false?
18
6
  [ "false", "0", "", "off", "n" ].member?(value.to_s.downcase)
19
7
  end
@@ -22,6 +10,10 @@ module PropertySets
22
10
  !false?
23
11
  end
24
12
 
13
+ def value
14
+ read_attribute(:value) || self.class.default(name.to_sym)
15
+ end
16
+
25
17
  def to_s
26
18
  value.to_s
27
19
  end
@@ -65,10 +57,6 @@ module PropertySets
65
57
  @properties.keys
66
58
  end
67
59
 
68
- def protected?(key)
69
- !!@properties[key][:protected]
70
- end
71
-
72
60
  def default(key)
73
61
  @properties[key] && @properties[key].key?(:default) ? @properties[key][:default] : nil
74
62
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{property_sets}
8
- s.version = "0.0.8"
8
+ s.version = "0.0.9"
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"]
12
- s.date = %q{2011-01-12}
12
+ s.date = %q{2011-01-13}
13
13
  s.description = %q{This gem is an ActiveRecord extension which provides a convenient interface for managing per row properties}
14
14
  s.email = %q{morten@zendesk.com}
15
15
  s.extra_rdoc_files = [
@@ -6,7 +6,7 @@ class Account < ActiveRecord::Base
6
6
  property :bar
7
7
  property :baz
8
8
  property :hep, :default => 'skep'
9
- property :bob, :protected => true
9
+ property :bob
10
10
  end
11
11
 
12
12
  property_set :texts do
@@ -81,7 +81,7 @@ class TestPropertySets < ActiveSupport::TestCase
81
81
  @account.settings.foo.destroy
82
82
  @account.reload
83
83
  assert @account.settings.foo.new_record?
84
- assert @account.settings.foo.update_attributes(:value => 8)
84
+ assert @account.settings.foo.create(:value => 8)
85
85
  assert @account.settings.foo.id
86
86
  assert @account.settings.foo.value == "8"
87
87
  assert @account.settings.hep.create
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: 15
4
+ hash: 13
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 8
10
- version: 0.0.8
9
+ - 9
10
+ version: 0.0.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Morten Primdahl
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-12 00:00:00 -08:00
18
+ date: 2011-01-13 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency