has_defaults 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/.gitignore +2 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +74 -0
  4. data/Rakefile +17 -0
  5. data/has_defaults.gemspec +19 -0
  6. data/lib/has_defaults/active_record_ext.rb +54 -0
  7. data/lib/has_defaults/version.rb +5 -0
  8. data/lib/has_defaults.rb +4 -0
  9. data/pkg/has_defaults-0.3.0.gem +0 -0
  10. data/spec/app_root/log/in_memory.log +147 -0
  11. data/spec/rails2/Gemfile +8 -0
  12. data/spec/rails2/Gemfile.lock +51 -0
  13. data/spec/rails2/Rakefile +11 -0
  14. data/spec/rails2/app_root/app/controllers/application_controller.rb +2 -0
  15. data/spec/rails2/app_root/app/models/donut.rb +21 -0
  16. data/spec/rails2/app_root/app/models/model_without_defaults.rb +2 -0
  17. data/spec/rails2/app_root/app/models/pastry.rb +6 -0
  18. data/spec/rails2/app_root/config/boot.rb +114 -0
  19. data/spec/rails2/app_root/config/database.yml +21 -0
  20. data/spec/rails2/app_root/config/environment.rb +14 -0
  21. data/spec/rails2/app_root/config/environments/in_memory.rb +0 -0
  22. data/spec/rails2/app_root/config/environments/mysql.rb +0 -0
  23. data/spec/rails2/app_root/config/environments/postgresql.rb +0 -0
  24. data/spec/rails2/app_root/config/environments/sqlite.rb +0 -0
  25. data/spec/rails2/app_root/config/environments/sqlite3.rb +0 -0
  26. data/spec/rails2/app_root/config/routes.rb +4 -0
  27. data/spec/rails2/app_root/db/migrate/001_create_pastries.rb +18 -0
  28. data/spec/rails2/app_root/db/migrate/002_create_model_without_defaults.rb +12 -0
  29. data/spec/rails2/app_root/lib/console_with_fixtures.rb +4 -0
  30. data/spec/rails2/app_root/log/.gitignore +1 -0
  31. data/spec/rails2/app_root/script/console +7 -0
  32. data/spec/rails2/has_defaults_spec.rb +79 -0
  33. data/spec/rails2/rcov.opts +2 -0
  34. data/spec/rails2/spec.opts +4 -0
  35. data/spec/rails2/spec_helper.rb +20 -0
  36. data/spec/rails3/.rspec +2 -0
  37. data/spec/rails3/Gemfile +9 -0
  38. data/spec/rails3/Gemfile.lock +101 -0
  39. data/spec/rails3/Rakefile +10 -0
  40. data/spec/rails3/app_root/.gitignore +4 -0
  41. data/spec/rails3/app_root/app/controllers/application_controller.rb +2 -0
  42. data/spec/rails3/app_root/app/models/donut.rb +21 -0
  43. data/spec/rails3/app_root/app/models/model_without_defaults.rb +2 -0
  44. data/spec/rails3/app_root/app/models/pastry.rb +6 -0
  45. data/spec/rails3/app_root/config/application.rb +32 -0
  46. data/spec/rails3/app_root/config/boot.rb +13 -0
  47. data/spec/rails3/app_root/config/database.yml +21 -0
  48. data/spec/rails3/app_root/config/environment.rb +5 -0
  49. data/spec/rails3/app_root/config/environments/in_memory.rb +0 -0
  50. data/spec/rails3/app_root/config/environments/mysql.rb +0 -0
  51. data/spec/rails3/app_root/config/environments/postgresql.rb +0 -0
  52. data/spec/rails3/app_root/config/environments/sqlite.rb +0 -0
  53. data/spec/rails3/app_root/config/environments/sqlite3.rb +0 -0
  54. data/spec/rails3/app_root/config/environments/test.rb +35 -0
  55. data/spec/rails3/app_root/config/initializers/backtrace_silencers.rb +7 -0
  56. data/spec/rails3/app_root/config/initializers/inflections.rb +10 -0
  57. data/spec/rails3/app_root/config/initializers/mime_types.rb +5 -0
  58. data/spec/rails3/app_root/config/initializers/secret_token.rb +7 -0
  59. data/spec/rails3/app_root/config/initializers/session_store.rb +8 -0
  60. data/spec/rails3/app_root/config/locales/en.yml +5 -0
  61. data/spec/rails3/app_root/config/routes.rb +58 -0
  62. data/spec/rails3/app_root/db/migrate/001_create_pastries.rb +18 -0
  63. data/spec/rails3/app_root/db/migrate/002_create_model_without_defaults.rb +12 -0
  64. data/spec/rails3/app_root/lib/tasks/.gitkeep +0 -0
  65. data/spec/rails3/app_root/log/.gitkeep +0 -0
  66. data/spec/rails3/app_root/script/rails +6 -0
  67. data/spec/rails3/has_defaults_spec.rb +74 -0
  68. data/spec/rails3/log/in_memory.log +33 -0
  69. data/spec/rails3/rcov.opts +2 -0
  70. data/spec/rails3/spec_helper.rb +21 -0
  71. metadata +149 -0
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe "has_defaults" do
4
+
5
+ context "given a model with defaults" do
6
+
7
+ it "should set defaults" do
8
+ new_donut = Donut.new
9
+ new_donut.flavor.should == "cream"
10
+ new_donut.name.should == "Cream"
11
+ end
12
+
13
+ it "should use setters methods to set the defaults" do
14
+ new_donut = Donut.new
15
+ new_donut.instance_variable_get('@flavor_setter_called').should be_true
16
+ end
17
+
18
+ it "should call procs in the model context when given as defaults" do
19
+ new_donut = Donut.new
20
+ new_donut.weight.should == 'a lot'
21
+ end
22
+
23
+ it "should merge multiple has_defaults directives" do
24
+ new_donut = Donut.new
25
+ new_donut.maker.should == "Dunkin Donuts"
26
+ end
27
+
28
+ it "should set defaults only if attributes are nil" do
29
+ donut = Donut.new(:flavor => 'vanilla')
30
+ donut.flavor.should == "vanilla"
31
+ end
32
+
33
+ it "should not set a default on an attribute that is set to an empty string" do
34
+ donut = Donut.new(:flavor => '')
35
+ donut.flavor.should == ''
36
+ end
37
+
38
+ it "should use getters methods to check if an attribute is nil" do
39
+ new_donut = Donut.new
40
+ new_donut.instance_variable_get('@flavor_getter_called').should be_true
41
+ end
42
+
43
+ it "should return default value for an attribute" do
44
+ Donut.new.default_for(:flavor).should == "cream"
45
+ end
46
+
47
+ it "should not set defaults when loading a saved record" do
48
+ Donut.create(:flavor => "vanilla")
49
+ Donut.first.flavor.should == "vanilla"
50
+ end
51
+
52
+ it "should not redefine defaults in its superclass" do
53
+ pastry = Pastry.new
54
+ pastry.maker.should == 'Mom'
55
+ pastry.default_for(:maker).should == 'Mom'
56
+ end
57
+
58
+ it "should respect defaults from its superclass" do
59
+ donut = Donut.create
60
+ donut.main_ingredient.should == 'flour'
61
+ donut.maker.should_not == 'Mom'
62
+ end
63
+
64
+ end
65
+
66
+ context "given a model without defaults" do
67
+
68
+ it "should not define #after_initialize so initialization remains fast" do
69
+ ModelWithoutDefaults.new.should_not respond_to(:after_initialize)
70
+ end
71
+
72
+ end
73
+
74
+ end
@@ -0,0 +1,33 @@
1
+ SQL (0.3ms)  SELECT name
2
+ FROM sqlite_master
3
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
4
+ 
5
+ SQL (0.1ms) select sqlite_version(*)
6
+ SQL (0.2ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) 
7
+ SQL (0.0ms) PRAGMA index_list("schema_migrations")
8
+ SQL (0.1ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
9
+ SQL (0.1ms) SELECT name
10
+ FROM sqlite_master
11
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
12
+ SQL (0.3ms)  SELECT name
13
+ FROM sqlite_master
14
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
15
+ 
16
+ SQL (0.1ms) select sqlite_version(*)
17
+ SQL (0.2ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) 
18
+ SQL (0.0ms) PRAGMA index_list("schema_migrations")
19
+ SQL (0.1ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
20
+ SQL (0.1ms) SELECT name
21
+ FROM sqlite_master
22
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
23
+ SQL (0.3ms)  SELECT name
24
+ FROM sqlite_master
25
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
26
+ 
27
+ SQL (0.1ms) select sqlite_version(*)
28
+ SQL (0.2ms) CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) 
29
+ SQL (0.0ms) PRAGMA index_list("schema_migrations")
30
+ SQL (0.1ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
31
+ SQL (0.1ms) SELECT name
32
+ FROM sqlite_master
33
+ WHERE type = 'table' AND NOT name = 'sqlite_sequence'
@@ -0,0 +1,2 @@
1
+ --exclude "spec/*,gems/*"
2
+ --rails
@@ -0,0 +1,21 @@
1
+ $: << File.join(File.dirname(__FILE__), "/../lib" )
2
+
3
+ # Set the default environment to sqlite3's in_memory database
4
+ ENV['RAILS_ENV'] ||= 'in_memory'
5
+ ENV['RAILS_ROOT'] = 'app_root'
6
+
7
+ # Load the Rails environment and testing framework
8
+ require "#{File.dirname(__FILE__)}/app_root/config/environment"
9
+ require "#{File.dirname(__FILE__)}/../../lib/has_defaults"
10
+ require 'rspec/rails'
11
+
12
+ # Undo changes to RAILS_ENV
13
+ silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
14
+
15
+ # Run the migrations
16
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
17
+
18
+ RSpec.configure do |config|
19
+ config.use_transactional_fixtures = true
20
+ config.use_instantiated_fixtures = false
21
+ end
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: has_defaults
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
+ platform: ruby
12
+ authors:
13
+ - Henning Koch
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-06-28 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: Default values for ActiveRecord models.
36
+ email: henning.koch@makandra.de
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - .gitignore
45
+ - MIT-LICENSE
46
+ - README
47
+ - Rakefile
48
+ - has_defaults.gemspec
49
+ - lib/has_defaults.rb
50
+ - lib/has_defaults/active_record_ext.rb
51
+ - lib/has_defaults/version.rb
52
+ - pkg/has_defaults-0.3.0.gem
53
+ - spec/app_root/log/in_memory.log
54
+ - spec/rails2/Gemfile
55
+ - spec/rails2/Gemfile.lock
56
+ - spec/rails2/Rakefile
57
+ - spec/rails2/app_root/app/controllers/application_controller.rb
58
+ - spec/rails2/app_root/app/models/donut.rb
59
+ - spec/rails2/app_root/app/models/model_without_defaults.rb
60
+ - spec/rails2/app_root/app/models/pastry.rb
61
+ - spec/rails2/app_root/config/boot.rb
62
+ - spec/rails2/app_root/config/database.yml
63
+ - spec/rails2/app_root/config/environment.rb
64
+ - spec/rails2/app_root/config/environments/in_memory.rb
65
+ - spec/rails2/app_root/config/environments/mysql.rb
66
+ - spec/rails2/app_root/config/environments/postgresql.rb
67
+ - spec/rails2/app_root/config/environments/sqlite.rb
68
+ - spec/rails2/app_root/config/environments/sqlite3.rb
69
+ - spec/rails2/app_root/config/routes.rb
70
+ - spec/rails2/app_root/db/migrate/001_create_pastries.rb
71
+ - spec/rails2/app_root/db/migrate/002_create_model_without_defaults.rb
72
+ - spec/rails2/app_root/lib/console_with_fixtures.rb
73
+ - spec/rails2/app_root/log/.gitignore
74
+ - spec/rails2/app_root/script/console
75
+ - spec/rails2/has_defaults_spec.rb
76
+ - spec/rails2/rcov.opts
77
+ - spec/rails2/spec.opts
78
+ - spec/rails2/spec_helper.rb
79
+ - spec/rails3/.rspec
80
+ - spec/rails3/Gemfile
81
+ - spec/rails3/Gemfile.lock
82
+ - spec/rails3/Rakefile
83
+ - spec/rails3/app_root/.gitignore
84
+ - spec/rails3/app_root/app/controllers/application_controller.rb
85
+ - spec/rails3/app_root/app/models/donut.rb
86
+ - spec/rails3/app_root/app/models/model_without_defaults.rb
87
+ - spec/rails3/app_root/app/models/pastry.rb
88
+ - spec/rails3/app_root/config/application.rb
89
+ - spec/rails3/app_root/config/boot.rb
90
+ - spec/rails3/app_root/config/database.yml
91
+ - spec/rails3/app_root/config/environment.rb
92
+ - spec/rails3/app_root/config/environments/in_memory.rb
93
+ - spec/rails3/app_root/config/environments/mysql.rb
94
+ - spec/rails3/app_root/config/environments/postgresql.rb
95
+ - spec/rails3/app_root/config/environments/sqlite.rb
96
+ - spec/rails3/app_root/config/environments/sqlite3.rb
97
+ - spec/rails3/app_root/config/environments/test.rb
98
+ - spec/rails3/app_root/config/initializers/backtrace_silencers.rb
99
+ - spec/rails3/app_root/config/initializers/inflections.rb
100
+ - spec/rails3/app_root/config/initializers/mime_types.rb
101
+ - spec/rails3/app_root/config/initializers/secret_token.rb
102
+ - spec/rails3/app_root/config/initializers/session_store.rb
103
+ - spec/rails3/app_root/config/locales/en.yml
104
+ - spec/rails3/app_root/config/routes.rb
105
+ - spec/rails3/app_root/db/migrate/001_create_pastries.rb
106
+ - spec/rails3/app_root/db/migrate/002_create_model_without_defaults.rb
107
+ - spec/rails3/app_root/lib/tasks/.gitkeep
108
+ - spec/rails3/app_root/log/.gitkeep
109
+ - spec/rails3/app_root/script/rails
110
+ - spec/rails3/has_defaults_spec.rb
111
+ - spec/rails3/log/in_memory.log
112
+ - spec/rails3/rcov.opts
113
+ - spec/rails3/spec_helper.rb
114
+ has_rdoc: true
115
+ homepage: https://github.com/makandra/has_defaults
116
+ licenses: []
117
+
118
+ post_install_message:
119
+ rdoc_options: []
120
+
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ hash: 3
129
+ segments:
130
+ - 0
131
+ version: "0"
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ hash: 3
138
+ segments:
139
+ - 0
140
+ version: "0"
141
+ requirements: []
142
+
143
+ rubyforge_project:
144
+ rubygems_version: 1.3.9.4
145
+ signing_key:
146
+ specification_version: 3
147
+ summary: Default values for ActiveRecord models.
148
+ test_files: []
149
+