default_value_for 1.0.1 → 1.0.3

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.
@@ -20,10 +20,22 @@ section. Please read on.
20
20
 
21
21
  == Installation
22
22
 
23
+ === Rails 2
24
+
23
25
  Install with:
24
26
 
25
27
  ./script/plugin install git://github.com/FooBarWidget/default_value_for.git
26
28
 
29
+ === Rails 3
30
+
31
+ You can either install it as a plugin:
32
+
33
+ rails plugin install git://github.com/FooBarWidget/default_value_for.git
34
+
35
+ or install it by adding it to your Gemfile:
36
+
37
+ gem "default_value_for"
38
+
27
39
 
28
40
  == The default_value_for method
29
41
 
@@ -84,9 +96,13 @@ The difference is purely aesthetic. If you have lots of default values which ar
84
96
 
85
97
  As a side note, due to specifics of Ruby's parser, you cannot say,
86
98
 
87
- default_value :uuid { UuidGenerator.new.generate_uuid }
99
+ default_value_for :uuid { UuidGenerator.new.generate_uuid }
100
+
101
+ because it will not parse. One needs to write
102
+
103
+ default_value_for(:uuid) { UuidGenerator.new.generate_uuid }
88
104
 
89
- because it will not parse. This is in part the inspiration for the +default_values+ syntax.
105
+ instead. This is in part the inspiration for the +default_values+ syntax.
90
106
 
91
107
  == Rules
92
108
 
@@ -290,7 +306,7 @@ And if schema defaults don't provide the flexibility that you need, then
290
306
  you could specify a per-environment default:
291
307
 
292
308
  class User < ActiveRecord::Base
293
- if RAILS_ENV == "development"
309
+ if Rails.env == "development"
294
310
  default_value_for :is_admin, true
295
311
  end
296
312
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{default_value_for}
3
- s.version = "1.0.1"
3
+ s.version = "1.0.3"
4
4
  s.summary = %q{Provides a way to specify default values for ActiveRecord models}
5
5
  s.description = %q{The default_value_for plugin allows one to define default values for ActiveRecord models in a declarative manner}
6
6
  s.email = %q{info@phusion.nl}
@@ -10,7 +10,6 @@ Gem::Specification.new do |s|
10
10
  'LICENSE.TXT', 'Rakefile', 'README.rdoc', 'test.rb',
11
11
  'init.rb',
12
12
  'lib/default_value_for.rb',
13
- 'lib/default_value_for/railtie.rb',
14
- 'lib/rails.rb'
13
+ 'lib/default_value_for/railtie.rb'
15
14
  ]
16
15
  end
data/init.rb CHANGED
@@ -19,5 +19,4 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  # Rails 2 initialization
22
- require "default_value_for"
23
- ActiveRecord::Base.extend(DefaultValueForPlugin::ClassMethods)
22
+ ActiveRecord::Base.extend(DefaultValueFor::ClassMethods)
@@ -1,99 +1,107 @@
1
- # Copyright (c) 2008, 2009, 2010 Phusion
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- require "default_value_for/railtie"
22
-
23
- module DefaultValueForPlugin
24
- class NormalValueContainer
25
- def initialize(value)
26
- @value = value
27
- end
28
-
29
- def evaluate(instance)
30
- if @value.duplicable?
31
- return @value.dup
32
- else
33
- return @value
34
- end
35
- end
36
- end
37
-
38
- class BlockValueContainer
39
- def initialize(block)
40
- @block = block
41
- end
42
-
43
- def evaluate(instance)
44
- return @block.call(instance)
45
- end
46
- end
47
-
48
- module ClassMethods
49
- def default_value_for(attribute, value = nil, &block)
50
- if !method_defined?(:initialize_with_defaults)
51
- include(InstanceMethods)
52
- alias_method_chain :initialize, :defaults
53
- class_inheritable_accessor :_default_attribute_values
54
- self._default_attribute_values = ActiveSupport::OrderedHash.new
55
- end
56
- if block_given?
57
- container = BlockValueContainer.new(block)
58
- else
59
- container = NormalValueContainer.new(value)
60
- end
61
- _default_attribute_values[attribute.to_s] = container
62
- end
63
-
64
- def default_values(values)
65
- values.each_pair do |key, value|
66
- if value.kind_of? Proc
67
- default_value_for(key, &value)
68
- else
69
- default_value_for(key, value)
70
- end
71
- end
72
- end
73
- end
74
-
75
- module InstanceMethods
76
- def initialize_with_defaults(attrs = nil)
77
- initialize_without_defaults(attrs) do
78
- if attrs
79
- stringified_attrs = attrs.stringify_keys
80
- safe_attrs = if respond_to? :sanitize_for_mass_assignment
81
- sanitize_for_mass_assignment(stringified_attrs)
82
- else
83
- remove_attributes_protected_from_mass_assignment(stringified_attrs)
84
- end
85
- safe_attribute_names = safe_attrs.keys.map do |x|
86
- x.to_s
87
- end
88
- end
89
- self.class._default_attribute_values.each do |attribute, container|
90
- if safe_attribute_names.nil? || !safe_attribute_names.any? { |attr_name| attr_name =~ /^#{attribute}($|\()/ }
91
- __send__("#{attribute}=", container.evaluate(self))
92
- changed_attributes.delete(attribute)
93
- end
94
- end
95
- yield(self) if block_given?
96
- end
97
- end
98
- end
99
- end
1
+ # Copyright (c) 2008, 2009, 2010, 2011 Phusion
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'default_value_for/railtie' if defined?(Rails::Railtie)
22
+
23
+ module DefaultValueFor
24
+ class NormalValueContainer
25
+ def initialize(value)
26
+ @value = value
27
+ end
28
+
29
+ def evaluate(instance)
30
+ if @value.duplicable?
31
+ return @value.dup
32
+ else
33
+ return @value
34
+ end
35
+ end
36
+ end
37
+
38
+ class BlockValueContainer
39
+ def initialize(block)
40
+ @block = block
41
+ end
42
+
43
+ def evaluate(instance)
44
+ if @block.arity == 0
45
+ return @block.call
46
+ else
47
+ return @block.call(instance)
48
+ end
49
+ end
50
+ end
51
+
52
+ module ClassMethods
53
+ def default_value_for(attribute, value = nil, &block)
54
+ if !method_defined?(:initialize_with_defaults)
55
+ include(InstanceMethods)
56
+ alias_method_chain :initialize, :defaults
57
+ if respond_to?(:class_attribute)
58
+ class_attribute :_default_attribute_values
59
+ else
60
+ class_inheritable_accessor :_default_attribute_values
61
+ end
62
+ self._default_attribute_values = ActiveSupport::OrderedHash.new
63
+ end
64
+ if block_given?
65
+ container = BlockValueContainer.new(block)
66
+ else
67
+ container = NormalValueContainer.new(value)
68
+ end
69
+ _default_attribute_values[attribute.to_s] = container
70
+ end
71
+
72
+ def default_values(values)
73
+ values.each_pair do |key, value|
74
+ if value.kind_of? Proc
75
+ default_value_for(key, &value)
76
+ else
77
+ default_value_for(key, value)
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ module InstanceMethods
84
+ def initialize_with_defaults(attrs = nil, *args)
85
+ initialize_without_defaults(attrs, *args) do
86
+ if attrs
87
+ stringified_attrs = attrs.stringify_keys
88
+ safe_attrs = if respond_to? :sanitize_for_mass_assignment
89
+ sanitize_for_mass_assignment(stringified_attrs)
90
+ else
91
+ remove_attributes_protected_from_mass_assignment(stringified_attrs)
92
+ end
93
+ safe_attribute_names = safe_attrs.keys.map do |x|
94
+ x.to_s
95
+ end
96
+ end
97
+ self.class._default_attribute_values.each do |attribute, container|
98
+ if safe_attribute_names.nil? || !safe_attribute_names.any? { |attr_name| attr_name =~ /^#{attribute}($|\()/ }
99
+ __send__("#{attribute}=", container.evaluate(self))
100
+ changed_attributes.delete(attribute)
101
+ end
102
+ end
103
+ yield(self) if block_given?
104
+ end
105
+ end
106
+ end
107
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2008, 2009, 2010 Phusion
1
+ # Copyright (c) 2008, 2009, 2010, 2011 Phusion
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the "Software"), to deal
@@ -19,14 +19,11 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  # Rails 3 initialization
22
- module DefaultValueForPlugin
23
- if defined? Rails::Railtie
24
- require 'rails'
25
- class Railtie < Rails::Railtie
26
- initializer 'default_value_for.insert_into_active_record' do
27
- ActiveSupport.on_load :active_record do
28
- ActiveRecord::Base.extend(DefaultValueForPlugin::ClassMethods)
29
- end
22
+ module DefaultValueFor
23
+ class Railtie < Rails::Railtie
24
+ initializer 'default_value_for.insert_into_active_record' do
25
+ ActiveSupport.on_load :active_record do
26
+ ActiveRecord::Base.extend(DefaultValueFor::ClassMethods)
30
27
  end
31
28
  end
32
29
  end
data/test.rb CHANGED
@@ -19,10 +19,12 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  require 'rubygems'
22
+ gem 'activerecord', '~> 3.1.0.rc1'
22
23
  require 'active_record'
23
24
  require 'test/unit'
24
25
  require 'active_support/core_ext/logger'
25
26
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
27
+ require File.dirname(__FILE__) + '/lib/default_value_for'
26
28
  require File.dirname(__FILE__) + '/init'
27
29
  Dir.chdir(File.dirname(__FILE__))
28
30
 
@@ -222,7 +224,8 @@ class DefaultValuePluginTest < Test::Unit::TestCase
222
224
  def test_default_values
223
225
  define_model_class do
224
226
  default_values :type => "normal",
225
- :number => lambda { 10 + 5 }
227
+ :number => lambda { 10 + 5 },
228
+ :timestamp => lambda {|_| Time.now }
226
229
  end
227
230
 
228
231
  object = TestClass.new
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: default_value_for
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease: false
4
+ hash: 17
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 1
10
- version: 1.0.1
9
+ - 3
10
+ version: 1.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Hongli Lai
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-08 00:00:00 +01:00
18
+ date: 2011-07-18 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -36,7 +36,6 @@ files:
36
36
  - init.rb
37
37
  - lib/default_value_for.rb
38
38
  - lib/default_value_for/railtie.rb
39
- - lib/rails.rb
40
39
  has_rdoc: true
41
40
  homepage: http://github.com/FooBarWidget/default_value_for
42
41
  licenses: []
@@ -67,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
66
  requirements: []
68
67
 
69
68
  rubyforge_project:
70
- rubygems_version: 1.3.7
69
+ rubygems_version: 1.5.2
71
70
  signing_key:
72
71
  specification_version: 3
73
72
  summary: Provides a way to specify default values for ActiveRecord models
@@ -1,23 +0,0 @@
1
- # Copyright (c) 2008, 2009, 2010 Phusion
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- # Rails 2 initialization
22
- require "default_value_for"
23
- ActiveRecord::Base.extend(DefaultValueForPlugin::ClassMethods)