defaultable 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -36,4 +36,50 @@ end
36
36
 
37
37
  ```
38
38
 
39
- The second parameter of ```set_defaults``` is the environment variable you'd like to use from the file.
39
+ The second parameter of ```set_defaults``` is the environment variable you'd like to use from the file. For example "development".
40
+
41
+
42
+ ## Serialization
43
+
44
+ Sometimes we want to store settings for a database record in the actual schema. To do that, use the ```Defaultable::Serialization``` class.
45
+ We'll use ```ActiveRecord::Base#serialize``` method in this example.
46
+
47
+ First create a model for your settings by extending ```Defaultable::Settings```.
48
+
49
+ ```
50
+ class UserSetting < Defaultable::Settings
51
+ end
52
+ ```
53
+
54
+ Second, create an initializer. We need this to setup the serialization class for ActiveRecord.
55
+
56
+ ```
57
+ Defaultable::Serialization.settings_class = UserSetting
58
+ ```
59
+
60
+ Now on your User model, setup the serialization class on it.
61
+
62
+ ```
63
+ class User < ActiveRecord::Base
64
+ serialize :settings, Defaultable::Serialization
65
+ end
66
+ ```
67
+
68
+ #### What we just accomplished
69
+
70
+ Now we have the ability to setup user settings on creation and updating.
71
+
72
+ ```
73
+ user = User.new
74
+ user.settings.newsletter = true
75
+ user.save
76
+
77
+
78
+ User.find(1).settings.newsletter # => true
79
+ ```
80
+
81
+
82
+
83
+
84
+
85
+
data/defaultable.gemspec CHANGED
@@ -15,9 +15,10 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Defaultable::VERSION
17
17
 
18
- gem.add_dependency("activesupport", ">= 3.0")
18
+ gem.add_dependency("activesupport", ">= 3.2")
19
19
 
20
20
  gem.add_development_dependency("rspec", "~> 2.7")
21
21
  gem.add_development_dependency("pry")
22
22
  gem.add_development_dependency("awesome_print")
23
+ gem.add_development_dependency("activerecord", ">= 3.2")
23
24
  end
@@ -18,10 +18,14 @@ module Defaultable
18
18
 
19
19
  # Called to convert from ruby object to serialized data.
20
20
  def dump(obj)
21
- raise TypeError, "Serialization failed: Object is not of type #{self.class.settings_class.name}." unless obj.is_a?(self.class.settings_class)
21
+ raise TypeError, "Serialization failed: Object is not of type #{self.class.settings_class.name}." if !obj.is_a?(self.class.settings_class) && !obj.nil?
22
22
 
23
23
  # We need to use the registry because we don't want to store defaults that weren't overwritten
24
- obj.class.new(obj.registry.as_hash).to_yaml if obj
24
+ if obj.nil?
25
+ self.class.settings_class.new
26
+ else
27
+ obj.class.new(obj.registry.as_hash).to_yaml if obj
28
+ end
25
29
  end
26
30
 
27
31
  def raw_load(data)
@@ -65,6 +65,10 @@ module Defaultable
65
65
  end
66
66
  end
67
67
 
68
+ def empty?
69
+ @table.length == 0
70
+ end
71
+
68
72
  def recursive_hash_assignment(hash)
69
73
  hash.each do |key, value|
70
74
  if value.kind_of?(Hash)
@@ -1,3 +1,3 @@
1
1
  module Defaultable
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -33,6 +33,16 @@ describe Defaultable::Settings do
33
33
  setting.foo?.should be_true
34
34
  end
35
35
 
36
+ it ".empty? should return true" do
37
+ setting = Defaultable::Settings.new
38
+ setting.should be_empty
39
+ end
40
+
41
+ it ".empty? should return false" do
42
+ setting = Defaultable::Settings.new(:foo => 'bar')
43
+ setting.should_not be_empty
44
+ end
45
+
36
46
  describe "Defaults." do
37
47
  it "should have default settings." do
38
48
  Defaultable::Settings.set_defaults File.expand_path('../', __FILE__) + '/test.yml'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defaultable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-23 00:00:00.000000000 Z
12
+ date: 2012-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70253939215940 !ruby/object:Gem::Requirement
16
+ requirement: &70100058426160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '3.0'
21
+ version: '3.2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70253939215940
24
+ version_requirements: *70100058426160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70253939215280 !ruby/object:Gem::Requirement
27
+ requirement: &70100058423640 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '2.7'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70253939215280
35
+ version_requirements: *70100058423640
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: pry
38
- requirement: &70253939214780 !ruby/object:Gem::Requirement
38
+ requirement: &70100058421280 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70253939214780
46
+ version_requirements: *70100058421280
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: awesome_print
49
- requirement: &70253939214140 !ruby/object:Gem::Requirement
49
+ requirement: &70100058437380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,18 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70253939214140
57
+ version_requirements: *70100058437380
58
+ - !ruby/object:Gem::Dependency
59
+ name: activerecord
60
+ requirement: &70100058432520 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '3.2'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70100058432520
58
69
  description: Defaultable is an extendable class to allow easy method chaining for
59
70
  settings along with defaults.
60
71
  email: