attribute-defaults 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+
2
+ Copyright (C) 2011 Dimitrij Denissenko
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,3 +1,6 @@
1
+ require 'active_record'
2
+ require 'active_support/concern'
3
+
1
4
  module ActiveRecord
2
5
  module AttributesWithDefaults
3
6
  extend ActiveSupport::Concern
@@ -20,7 +23,7 @@ module ActiveRecord
20
23
 
21
24
  evaluator = "__eval_attr_default_for_#{sym}".to_sym
22
25
  setter = "__set_attr_default_for_#{sym}".to_sym
23
- block ||= default.is_a?(Proc) ? default : Proc.new { default }
26
+ block ||= default.is_a?(Proc) ? default : proc { default }
24
27
 
25
28
  after_initialize setter.to_sym
26
29
  define_method(evaluator, &block)
@@ -29,7 +32,7 @@ module ActiveRecord
29
32
  def #{setter}
30
33
  #{'return if persisted?' if options[:persisted] == false}
31
34
  return unless self.#{sym}.send(:#{options[:if] || 'nil?'})
32
- value = #{evaluator}(self)
35
+ value = #{evaluator}#{'(self)' unless block.arity.zero?}
33
36
  self.#{sym} = value.duplicable? ? value.dup : value
34
37
  rescue ActiveModel::MissingAttributeError
35
38
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attribute-defaults
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dimitrij Denissenko
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-15 00:00:00 +01:00
18
+ date: 2011-06-13 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -24,7 +24,7 @@ dependencies:
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ">="
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  hash: 7
30
30
  segments:
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ">="
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  hash: 7
46
46
  segments:
@@ -50,33 +50,26 @@ dependencies:
50
50
  version: 3.0.0
51
51
  type: :runtime
52
52
  version_requirements: *id002
53
- description: Simple ActiveRecord plugin that allows to specify default values for attributes
53
+ description: ActiveRecord plugin that allows to specify default values for attributes
54
54
  email: dimitrij@blacksquaremedia.com
55
55
  executables: []
56
56
 
57
57
  extensions: []
58
58
 
59
- extra_rdoc_files:
60
- - README.rdoc
59
+ extra_rdoc_files: []
60
+
61
61
  files:
62
- - .gitignore
63
- - Gemfile
64
- - Gemfile.lock
62
+ - LICENSE
65
63
  - README.rdoc
66
- - Rakefile
67
- - VERSION
68
- - attribute-defaults.gemspec
69
64
  - lib/attribute-defaults.rb
70
65
  - lib/attribute_defaults.rb
71
- - spec/attribute_defaults_spec.rb
72
- - spec/spec_helper.rb
73
66
  has_rdoc: true
74
- homepage: http://github.com/bsm/attribute-defaults
67
+ homepage: https://github.com/bsm/attribute-defaults
75
68
  licenses: []
76
69
 
77
70
  post_install_message:
78
- rdoc_options:
79
- - --charset=UTF-8
71
+ rdoc_options: []
72
+
80
73
  require_paths:
81
74
  - lib
82
75
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -84,26 +77,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
77
  requirements:
85
78
  - - ">="
86
79
  - !ruby/object:Gem::Version
87
- hash: 3
80
+ hash: 57
88
81
  segments:
89
- - 0
90
- version: "0"
82
+ - 1
83
+ - 8
84
+ - 7
85
+ version: 1.8.7
91
86
  required_rubygems_version: !ruby/object:Gem::Requirement
92
87
  none: false
93
88
  requirements:
94
89
  - - ">="
95
90
  - !ruby/object:Gem::Version
96
- hash: 3
91
+ hash: 23
97
92
  segments:
98
- - 0
99
- version: "0"
93
+ - 1
94
+ - 3
95
+ - 6
96
+ version: 1.3.6
100
97
  requirements: []
101
98
 
102
99
  rubyforge_project:
103
- rubygems_version: 1.3.7
100
+ rubygems_version: 1.6.2
104
101
  signing_key:
105
102
  specification_version: 3
106
- summary: Specify default values for attributes
107
- test_files:
108
- - spec/attribute_defaults_spec.rb
109
- - spec/spec_helper.rb
103
+ summary: Specify default values for ActiveRecord attributes
104
+ test_files: []
105
+
data/.gitignore DELETED
@@ -1,2 +0,0 @@
1
- spec/tmp
2
- pkg
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- group :test do
4
- gem 'activerecord', '3.0.0'
5
- gem 'activesupport', '3.0.0'
6
- gem "sqlite3-ruby"
7
- gem "rspec", "~> 2.0.0.beta"
8
- end
@@ -1,39 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- activemodel (3.0.0)
5
- activesupport (= 3.0.0)
6
- builder (~> 2.1.2)
7
- i18n (~> 0.4.1)
8
- activerecord (3.0.0)
9
- activemodel (= 3.0.0)
10
- activesupport (= 3.0.0)
11
- arel (~> 1.0.0)
12
- tzinfo (~> 0.3.23)
13
- activesupport (3.0.0)
14
- arel (1.0.1)
15
- activesupport (~> 3.0.0)
16
- builder (2.1.2)
17
- diff-lcs (1.1.2)
18
- i18n (0.4.1)
19
- rspec (2.0.0.beta.22)
20
- rspec-core (= 2.0.0.beta.22)
21
- rspec-expectations (= 2.0.0.beta.22)
22
- rspec-mocks (= 2.0.0.beta.22)
23
- rspec-core (2.0.0.beta.22)
24
- rspec-expectations (2.0.0.beta.22)
25
- diff-lcs (>= 1.1.2)
26
- rspec-mocks (2.0.0.beta.22)
27
- rspec-core (= 2.0.0.beta.22)
28
- rspec-expectations (= 2.0.0.beta.22)
29
- sqlite3-ruby (1.3.1)
30
- tzinfo (0.3.23)
31
-
32
- PLATFORMS
33
- ruby
34
-
35
- DEPENDENCIES
36
- activerecord (= 3.0.0)
37
- activesupport (= 3.0.0)
38
- rspec (~> 2.0.0.beta)
39
- sqlite3-ruby
data/Rakefile DELETED
@@ -1,25 +0,0 @@
1
- require 'rake'
2
- require 'rspec/mocks/version'
3
- require 'rspec/core/rake_task'
4
-
5
- RSpec::Core::RakeTask.new(:spec)
6
-
7
- desc 'Default: run specs.'
8
- task :default => :spec
9
-
10
- begin
11
- require 'jeweler'
12
- Jeweler::Tasks.new do |gemspec|
13
- gemspec.name = "attribute-defaults"
14
- gemspec.summary = "Specify default values for attributes"
15
- gemspec.description = "Simple ActiveRecord plugin that allows to specify default values for attributes"
16
- gemspec.email = "dimitrij@blacksquaremedia.com"
17
- gemspec.homepage = "http://github.com/bsm/attribute-defaults"
18
- gemspec.authors = ["Dimitrij Denissenko"]
19
- gemspec.add_runtime_dependency "activerecord", ">= 3.0.0"
20
- gemspec.add_runtime_dependency "activesupport", ">= 3.0.0"
21
- end
22
- Jeweler::GemcutterTasks.new
23
- rescue LoadError
24
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
25
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.1.1
@@ -1,57 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{attribute-defaults}
8
- s.version = "0.1.1"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Dimitrij Denissenko"]
12
- s.date = %q{2010-09-15}
13
- s.description = %q{Simple ActiveRecord plugin that allows to specify default values for attributes}
14
- s.email = %q{dimitrij@blacksquaremedia.com}
15
- s.extra_rdoc_files = [
16
- "README.rdoc"
17
- ]
18
- s.files = [
19
- ".gitignore",
20
- "Gemfile",
21
- "Gemfile.lock",
22
- "README.rdoc",
23
- "Rakefile",
24
- "VERSION",
25
- "attribute-defaults.gemspec",
26
- "lib/attribute-defaults.rb",
27
- "lib/attribute_defaults.rb",
28
- "spec/attribute_defaults_spec.rb",
29
- "spec/spec_helper.rb"
30
- ]
31
- s.homepage = %q{http://github.com/bsm/attribute-defaults}
32
- s.rdoc_options = ["--charset=UTF-8"]
33
- s.require_paths = ["lib"]
34
- s.rubygems_version = %q{1.3.7}
35
- s.summary = %q{Specify default values for attributes}
36
- s.test_files = [
37
- "spec/attribute_defaults_spec.rb",
38
- "spec/spec_helper.rb"
39
- ]
40
-
41
- if s.respond_to? :specification_version then
42
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
43
- s.specification_version = 3
44
-
45
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
- s.add_runtime_dependency(%q<activerecord>, [">= 3.0.0"])
47
- s.add_runtime_dependency(%q<activesupport>, [">= 3.0.0"])
48
- else
49
- s.add_dependency(%q<activerecord>, [">= 3.0.0"])
50
- s.add_dependency(%q<activesupport>, [">= 3.0.0"])
51
- end
52
- else
53
- s.add_dependency(%q<activerecord>, [">= 3.0.0"])
54
- s.add_dependency(%q<activesupport>, [">= 3.0.0"])
55
- end
56
- end
57
-
@@ -1,78 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe ActiveRecord::AttributesWithDefaults do
4
-
5
- def foo(options = {})
6
- @foo ||= Foo.new options.reverse_merge(:age => 30)
7
- end
8
-
9
- def bar(options = {})
10
- @bar ||= Bar.new options.reverse_merge(:age => 30)
11
- end
12
-
13
- def baz(options = {})
14
- @baz ||= Baz.new
15
- end
16
-
17
- it 'should initialize records setting defaults' do
18
- foo.description.should == '(no description)'
19
- foo.locale.should == 'en'
20
- foo.birth_year.should == 30.years.ago.year
21
- end
22
-
23
- it 'should allow to set custom value conditions' do
24
- foo(:locale => '', :description => '')
25
- foo.locale.should == ''
26
- foo.description.should == '(no description)'
27
-
28
- Bar.new(:some_arr => nil).some_arr.should == [1, 2, 3]
29
- Bar.new(:some_arr => []).some_arr.should == [1, 2, 3]
30
- Bar.new(:some_arr => [:A, :B]).some_arr.should == [:A, :B]
31
- end
32
-
33
- it 'should not override attributes that were set manually' do
34
- foo(:locale => 'en-GB').locale.should == 'en-GB'
35
- end
36
-
37
- it 'should respect :persisted => false option' do
38
- persisted = Foo.first
39
- persisted.description.should == '(no description)'
40
- persisted.locale.should be_nil
41
- end
42
-
43
- it 'should work with protected attributes' do
44
- foo(:description => 'Custom').description.should == '(no description)'
45
- end
46
-
47
- it 'should correctly apply defaults in subclasses' do
48
- bar.description.should == '(no description)'
49
- bar.locale.should == 'en'
50
- bar.birth_year.should == 30.years.ago.year
51
- end
52
-
53
- it 'should allow mass-assignment' do
54
- baz.description.should == 'Please set ...'
55
- baz.locale.should == 'en-US'
56
- baz.age.should == 18
57
-
58
- persisted = Baz.first
59
- persisted.age.should be_nil
60
- end
61
-
62
- it 'should allow Hashes as default values' do
63
- bar.some_hash.should == {}
64
- end
65
-
66
- it 'should ensure default values are duplicated' do
67
- bar.some_hash[:a] = 'A'
68
- bar.some_hash.should == {:a => 'A'}
69
- Bar.new.some_hash.should == {}
70
- end
71
-
72
- it 'should handle missing attributes (e.g. in case of Base#exists?)' do
73
- lambda { Foo.exists? }.should_not raise_error
74
- lambda { Foo.select(:locale).first }.should_not raise_error
75
- end
76
-
77
-
78
- end
@@ -1,59 +0,0 @@
1
- $: << File.dirname(__FILE__) + '/../lib'
2
- require 'rubygems'
3
- require 'bundler'
4
- Bundler.setup
5
- Bundler.require :default, :test
6
-
7
- require 'active_support'
8
- require 'active_record'
9
- require 'rspec'
10
- require 'fileutils'
11
- require 'attribute_defaults'
12
-
13
- SPEC_DATABASE = File.dirname(__FILE__) + '/tmp/test.sqlite3'
14
-
15
- RSpec.configure do |c|
16
-
17
- c.before do
18
- FileUtils.mkdir_p File.dirname(SPEC_DATABASE)
19
- base = ActiveRecord::Base
20
- base.establish_connection('adapter' => 'sqlite3', 'database' => SPEC_DATABASE)
21
- base.connection.create_table :foos do |t|
22
- t.string :name
23
- t.integer :age
24
- t.string :locale
25
- t.string :description
26
- t.timestamps
27
- end
28
- Foo.create!(:name => 'Bogus') {|f| f.description = nil; f.locale = nil }
29
- end
30
-
31
- c.after do
32
- FileUtils.rm_f(SPEC_DATABASE)
33
- end
34
-
35
- end
36
-
37
- class Foo < ActiveRecord::Base
38
- attr_accessible :name, :age, :locale
39
- attr_accessor :birth_year
40
-
41
- attr_default :description, "(no description)", :if => :blank?
42
- attr_default :locale, "en", :persisted => false
43
- attr_default :birth_year do |f|
44
- f.age ? Time.now.year - f.age : nil
45
- end
46
- end
47
-
48
- class Bar < Foo
49
- attr_accessor :some_hash, :some_arr
50
- attr_accessible :some_arr
51
-
52
- attr_default :some_hash, :default => {}
53
- attr_default :some_arr, :default => [1, 2, 3], :if => :blank?
54
- end
55
-
56
- class Baz < ActiveRecord::Base
57
- set_table_name 'foos'
58
- attr_defaults :description => "Please set ...", :age => { :default => 18, :persisted => false }, :locale => lambda { 'en-US' }
59
- end