has_defaults 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/test.yml +102 -0
  3. data/.gitignore +2 -1
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +23 -0
  6. data/Gemfile +1 -0
  7. data/Gemfile.3.2.mysql2 +16 -0
  8. data/Gemfile.3.2.mysql2.lock +75 -0
  9. data/Gemfile.4.2.mysql2 +15 -0
  10. data/Gemfile.4.2.mysql2.lock +73 -0
  11. data/Gemfile.4.2.pg +15 -0
  12. data/Gemfile.4.2.pg.lock +73 -0
  13. data/Gemfile.5.2.mysql2 +15 -0
  14. data/Gemfile.5.2.mysql2.lock +71 -0
  15. data/Gemfile.5.2.pg +16 -0
  16. data/Gemfile.5.2.pg.lock +77 -0
  17. data/Gemfile.6.1.pg +15 -0
  18. data/Gemfile.6.1.pg.lock +75 -0
  19. data/Gemfile.lock +1 -0
  20. data/{MIT-LICENSE → LICENSE} +1 -1
  21. data/README.md +70 -0
  22. data/Rakefile +5 -29
  23. data/has_defaults.gemspec +24 -14
  24. data/lib/has_defaults/active_record_ext.rb +27 -6
  25. data/lib/has_defaults/version.rb +1 -1
  26. data/lib/has_defaults.rb +1 -3
  27. metadata +57 -132
  28. data/README +0 -74
  29. data/pkg/has_defaults-0.3.0.gem +0 -0
  30. data/spec/app_root/log/in_memory.log +0 -147
  31. data/spec/rails-2.3/Gemfile +0 -8
  32. data/spec/rails-2.3/Gemfile.lock +0 -51
  33. data/spec/rails-2.3/Rakefile +0 -11
  34. data/spec/rails-2.3/app_root/config/boot.rb +0 -129
  35. data/spec/rails-2.3/app_root/config/database.yml +0 -4
  36. data/spec/rails-2.3/app_root/config/environment.rb +0 -14
  37. data/spec/rails-2.3/app_root/config/environments/test.rb +0 -28
  38. data/spec/rails-2.3/app_root/config/preinitializer.rb +0 -20
  39. data/spec/rails-2.3/app_root/config/routes.rb +0 -4
  40. data/spec/rails-2.3/app_root/lib/console_with_fixtures.rb +0 -4
  41. data/spec/rails-2.3/app_root/log/.gitignore +0 -1
  42. data/spec/rails-2.3/app_root/script/console +0 -7
  43. data/spec/rails-2.3/rcov.opts +0 -2
  44. data/spec/rails-2.3/spec.opts +0 -4
  45. data/spec/rails-2.3/spec_helper.rb +0 -24
  46. data/spec/rails-3.0/.rspec +0 -2
  47. data/spec/rails-3.0/Gemfile +0 -9
  48. data/spec/rails-3.0/Gemfile.lock +0 -101
  49. data/spec/rails-3.0/Rakefile +0 -10
  50. data/spec/rails-3.0/app_root/.gitignore +0 -4
  51. data/spec/rails-3.0/app_root/config/application.rb +0 -32
  52. data/spec/rails-3.0/app_root/config/boot.rb +0 -13
  53. data/spec/rails-3.0/app_root/config/database.yml +0 -4
  54. data/spec/rails-3.0/app_root/config/environment.rb +0 -5
  55. data/spec/rails-3.0/app_root/config/environments/test.rb +0 -35
  56. data/spec/rails-3.0/app_root/config/initializers/backtrace_silencers.rb +0 -7
  57. data/spec/rails-3.0/app_root/config/initializers/inflections.rb +0 -10
  58. data/spec/rails-3.0/app_root/config/initializers/mime_types.rb +0 -5
  59. data/spec/rails-3.0/app_root/config/initializers/secret_token.rb +0 -7
  60. data/spec/rails-3.0/app_root/config/initializers/session_store.rb +0 -8
  61. data/spec/rails-3.0/app_root/config/locales/en.yml +0 -5
  62. data/spec/rails-3.0/app_root/config/routes.rb +0 -58
  63. data/spec/rails-3.0/app_root/lib/tasks/.gitkeep +0 -0
  64. data/spec/rails-3.0/app_root/log/.gitkeep +0 -0
  65. data/spec/rails-3.0/app_root/script/rails +0 -6
  66. data/spec/rails-3.0/log/in_memory.log +0 -33
  67. data/spec/rails-3.0/rcov.opts +0 -2
  68. data/spec/rails-3.0/spec_helper.rb +0 -25
  69. data/spec/rails-3.2/.rspec +0 -2
  70. data/spec/rails-3.2/Gemfile +0 -9
  71. data/spec/rails-3.2/Gemfile.lock +0 -120
  72. data/spec/rails-3.2/Rakefile +0 -10
  73. data/spec/rails-3.2/app_root/.gitignore +0 -4
  74. data/spec/rails-3.2/app_root/config/application.rb +0 -32
  75. data/spec/rails-3.2/app_root/config/boot.rb +0 -13
  76. data/spec/rails-3.2/app_root/config/database.yml +0 -4
  77. data/spec/rails-3.2/app_root/config/environment.rb +0 -5
  78. data/spec/rails-3.2/app_root/config/environments/test.rb +0 -35
  79. data/spec/rails-3.2/app_root/config/initializers/backtrace_silencers.rb +0 -7
  80. data/spec/rails-3.2/app_root/config/initializers/inflections.rb +0 -10
  81. data/spec/rails-3.2/app_root/config/initializers/mime_types.rb +0 -5
  82. data/spec/rails-3.2/app_root/config/initializers/secret_token.rb +0 -7
  83. data/spec/rails-3.2/app_root/config/initializers/session_store.rb +0 -8
  84. data/spec/rails-3.2/app_root/config/locales/en.yml +0 -5
  85. data/spec/rails-3.2/app_root/config/routes.rb +0 -58
  86. data/spec/rails-3.2/app_root/lib/tasks/.gitkeep +0 -0
  87. data/spec/rails-3.2/app_root/log/.gitkeep +0 -0
  88. data/spec/rails-3.2/app_root/script/rails +0 -6
  89. data/spec/rails-3.2/log/in_memory.log +0 -33
  90. data/spec/rails-3.2/rcov.opts +0 -2
  91. data/spec/rails-3.2/spec_helper.rb +0 -25
  92. data/spec/shared/app_root/app/controllers/application_controller.rb +0 -2
  93. data/spec/shared/app_root/app/models/donut.rb +0 -21
  94. data/spec/shared/app_root/app/models/model_without_defaults.rb +0 -2
  95. data/spec/shared/app_root/app/models/pastry.rb +0 -6
  96. data/spec/shared/app_root/db/migrate/001_create_pastries.rb +0 -18
  97. data/spec/shared/app_root/db/migrate/002_create_model_without_defaults.rb +0 -12
  98. data/spec/shared/has_defaults/active_record_ext_spec.rb +0 -84
@@ -1,10 +0,0 @@
1
- require 'rake'
2
- require 'rspec/core/rake_task'
3
-
4
- desc 'Default: Run all specs for a specific rails version.'
5
- task :default => :spec
6
-
7
- desc "Run all specs for a specific rails version"
8
- RSpec::Core::RakeTask.new(:spec) do |t|
9
- t.pattern = defined?(SPEC) ? SPEC : ['**/*_spec.rb', '../shared/**/*_spec.rb']
10
- end
@@ -1,4 +0,0 @@
1
- .bundle
2
- db/*.sqlite3
3
- log/*.log
4
- tmp/**/*
@@ -1,32 +0,0 @@
1
- require File.expand_path('../boot', __FILE__)
2
-
3
- require 'rails/all'
4
-
5
- # If you have a Gemfile, require the gems listed there, including any gems
6
- # you've limited to :test, :development, or :production.
7
- Bundler.require(:default, Rails.env) if defined?(Bundler)
8
-
9
-
10
- module HasDefaultSpecApp
11
- class Application < Rails::Application
12
- config.encoding = "utf-8"
13
-
14
- config.cache_classes = true
15
- config.whiny_nils = true
16
-
17
- config.consider_all_requests_local = true
18
- config.action_controller.perform_caching = false
19
-
20
- config.action_dispatch.show_exceptions = false
21
-
22
- config.action_controller.allow_forgery_protection = false
23
-
24
- config.action_mailer.delivery_method = :test
25
-
26
- config.active_support.deprecation = :stderr
27
-
28
- config.root = File.expand_path('../..', __FILE__)
29
-
30
- # railties.plugins << Rails::Plugin.new(File.expand_path('../../../../..', __FILE__))
31
- end
32
- end
@@ -1,13 +0,0 @@
1
- require 'rubygems'
2
-
3
- # Set up gems listed in the Gemfile.
4
- gemfile = File.expand_path('../../Gemfile', __FILE__)
5
- begin
6
- ENV['BUNDLE_GEMFILE'] = gemfile
7
- require 'bundler'
8
- Bundler.setup
9
- rescue Bundler::GemNotFound => e
10
- STDERR.puts e.message
11
- STDERR.puts "Try running `bundle install`."
12
- exit!
13
- end if File.exist?(gemfile)
@@ -1,4 +0,0 @@
1
- test:
2
- adapter: sqlite3
3
- database: ":memory:"
4
- verbosity: quiet
@@ -1,5 +0,0 @@
1
- # Load the rails application
2
- require File.expand_path('../application', __FILE__)
3
-
4
- # Initialize the rails application
5
- HasDefaultSpecApp::Application.initialize!
@@ -1,35 +0,0 @@
1
- HasDefaultSpecApp::Application.configure do
2
- # Settings specified here will take precedence over those in config/application.rb
3
-
4
- # The test environment is used exclusively to run your application's
5
- # test suite. You never need to work with it otherwise. Remember that
6
- # your test database is "scratch space" for the test suite and is wiped
7
- # and recreated between test runs. Don't rely on the data there!
8
- config.cache_classes = true
9
-
10
- # Log error messages when you accidentally call methods on nil.
11
- config.whiny_nils = true
12
-
13
- # Show full error reports and disable caching
14
- config.consider_all_requests_local = true
15
- config.action_controller.perform_caching = false
16
-
17
- # Raise exceptions instead of rendering exception templates
18
- config.action_dispatch.show_exceptions = false
19
-
20
- # Disable request forgery protection in test environment
21
- config.action_controller.allow_forgery_protection = false
22
-
23
- # Tell Action Mailer not to deliver emails to the real world.
24
- # The :test delivery method accumulates sent emails in the
25
- # ActionMailer::Base.deliveries array.
26
- config.action_mailer.delivery_method = :test
27
-
28
- # Use SQL instead of Active Record's schema dumper when creating the test database.
29
- # This is necessary if your schema can't be completely dumped by the schema dumper,
30
- # like if you have constraints or database-specific column types
31
- # config.active_record.schema_format = :sql
32
-
33
- # Print deprecation notices to the stderr
34
- config.active_support.deprecation = :stderr
35
- end
@@ -1,7 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4
- # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5
-
6
- # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7
- # Rails.backtrace_cleaner.remove_silencers!
@@ -1,10 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Add new inflection rules using the following format
4
- # (all these examples are active by default):
5
- # ActiveSupport::Inflector.inflections do |inflect|
6
- # inflect.plural /^(ox)$/i, '\1en'
7
- # inflect.singular /^(ox)en/i, '\1'
8
- # inflect.irregular 'person', 'people'
9
- # inflect.uncountable %w( fish sheep )
10
- # end
@@ -1,5 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Add new mime types for use in respond_to blocks:
4
- # Mime::Type.register "text/richtext", :rtf
5
- # Mime::Type.register_alias "text/html", :iphone
@@ -1,7 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Your secret key for verifying the integrity of signed cookies.
4
- # If you change this key, all old signed cookies will become invalid!
5
- # Make sure the secret is at least 30 characters and all random,
6
- # no regular words or you'll be exposed to dictionary attacks.
7
- HasDefaultSpecApp::Application.config.secret_token = 'cb014a08a45243e7143f31e04774c342c1fba329fd594ae1a480d8283b1a851f425dc08044311fb4be6d000b6e6681de7c76d19148419a5ffa0a9f84556d3b33'
@@ -1,8 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- HasDefaultSpecApp::Application.config.session_store :cookie_store, :key => '_app_root_session'
4
-
5
- # Use the database for sessions instead of the cookie-based default,
6
- # which shouldn't be used to store highly confidential information
7
- # (create the session table with "rails generate session_migration")
8
- # HasDefaultSpecApp::Application.config.session_store :active_record_store
@@ -1,5 +0,0 @@
1
- # Sample localization file for English. Add more files in this directory for other locales.
2
- # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
-
4
- en:
5
- hello: "Hello world"
@@ -1,58 +0,0 @@
1
- HasDefaultSpecApp::Application.routes.draw do
2
- # The priority is based upon order of creation:
3
- # first created -> highest priority.
4
-
5
- # Sample of regular route:
6
- # match 'products/:id' => 'catalog#view'
7
- # Keep in mind you can assign values other than :controller and :action
8
-
9
- # Sample of named route:
10
- # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
11
- # This route can be invoked with purchase_url(:id => product.id)
12
-
13
- # Sample resource route (maps HTTP verbs to controller actions automatically):
14
- # resources :products
15
-
16
- # Sample resource route with options:
17
- # resources :products do
18
- # member do
19
- # get 'short'
20
- # post 'toggle'
21
- # end
22
- #
23
- # collection do
24
- # get 'sold'
25
- # end
26
- # end
27
-
28
- # Sample resource route with sub-resources:
29
- # resources :products do
30
- # resources :comments, :sales
31
- # resource :seller
32
- # end
33
-
34
- # Sample resource route with more complex sub-resources
35
- # resources :products do
36
- # resources :comments
37
- # resources :sales do
38
- # get 'recent', :on => :collection
39
- # end
40
- # end
41
-
42
- # Sample resource route within a namespace:
43
- # namespace :admin do
44
- # # Directs /admin/products/* to Admin::ProductsController
45
- # # (app/controllers/admin/products_controller.rb)
46
- # resources :products
47
- # end
48
-
49
- # You can have the root of your site routed with "root"
50
- # just remember to delete public/index.html.
51
- # root :to => "welcome#index"
52
-
53
- # See how all your routes lay out with "rake routes"
54
-
55
- # This is a legacy wild controller route that's not recommended for RESTful applications.
56
- # Note: This route will make all actions in every controller accessible via GET requests.
57
- match ':controller(/:action(/:id(.:format)))'
58
- end
File without changes
File without changes
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby1.8
2
- # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
-
4
- APP_PATH = File.expand_path('../../config/application', __FILE__)
5
- require File.expand_path('../../config/boot', __FILE__)
6
- require 'rails/commands'
@@ -1,33 +0,0 @@
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'
@@ -1,2 +0,0 @@
1
- --exclude "spec/*,gems/*"
2
- --rails
@@ -1,25 +0,0 @@
1
- $: << File.join(File.dirname(__FILE__), "/../lib" )
2
-
3
- # Set the default environment to sqlite3's in_memory database
4
- ENV['RAILS_ENV'] ||= 'test'
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 'rspec/rails'
10
-
11
- # Load dependencies
12
- # require 'has_defaults'
13
-
14
- # Require support code
15
- # Dir["../shared/support/**/*.rb"].each {|f| require f}
16
-
17
- # Run the migrations
18
- print "\033[30m" # dark gray text
19
- ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
20
- print "\033[0m"
21
-
22
- RSpec.configure do |config|
23
- config.use_transactional_fixtures = true
24
- config.use_instantiated_fixtures = false
25
- end
@@ -1,2 +0,0 @@
1
- class ApplicationController < ActionController::Base
2
- end
@@ -1,21 +0,0 @@
1
- class Donut < Pastry
2
-
3
- has_defaults :flavor => "cream", :name => "Cream"
4
- has_defaults :maker => proc { "Dunkin Donuts" }
5
- has_defaults :weight => proc { weigh }
6
-
7
- def flavor
8
- @flavor_getter_called = true
9
- read_attribute(:flavor)
10
- end
11
-
12
- def flavor=(value)
13
- @flavor_setter_called = true
14
- write_attribute(:flavor, value)
15
- end
16
-
17
- def weigh
18
- "a lot"
19
- end
20
-
21
- end
@@ -1,2 +0,0 @@
1
- class ModelWithoutDefaults < ActiveRecord::Base
2
- end
@@ -1,6 +0,0 @@
1
- class Pastry < ActiveRecord::Base
2
-
3
- has_defaults :main_ingredient => "flour", :maker => "Mom"
4
-
5
- end
6
-
@@ -1,18 +0,0 @@
1
- class CreatePastries < ActiveRecord::Migration
2
-
3
- def self.up
4
- create_table :pastries do |t|
5
- t.string :type
6
- t.string :flavor
7
- t.string :name
8
- t.string :maker
9
- t.string :weight
10
- t.string :main_ingredient
11
- end
12
- end
13
-
14
- def self.down
15
- drop_table :pastries
16
- end
17
-
18
- end
@@ -1,12 +0,0 @@
1
- class CreateModelWithoutDefaults < ActiveRecord::Migration
2
-
3
- def self.up
4
- create_table :model_without_defaults do |t|
5
- end
6
- end
7
-
8
- def self.down
9
- drop_table :model_without_defaults
10
- end
11
-
12
- end
@@ -1,84 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe HasDefaults::ActiveRecordExt 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.flavor.should == "cream"
26
- new_donut.maker.should == "Dunkin Donuts"
27
- end
28
-
29
- it "should set defaults only if attributes are nil" do
30
- donut = Donut.new(:flavor => 'vanilla')
31
- donut.flavor.should == "vanilla"
32
- end
33
-
34
- it "should not set a default on an attribute that is set to an empty string" do
35
- donut = Donut.new(:flavor => '')
36
- donut.flavor.should == ''
37
- end
38
-
39
- it "should use getters methods to check if an attribute is nil" do
40
- new_donut = Donut.new
41
- new_donut.instance_variable_get('@flavor_getter_called').should be_true
42
- end
43
-
44
- it "should return default value for an attribute" do
45
- Donut.new.default_for(:flavor).should == "cream"
46
- end
47
-
48
- it "should not set defaults when loading a saved record" do
49
- Donut.create(:flavor => "vanilla")
50
- Donut.first.flavor.should == "vanilla"
51
- end
52
-
53
- it "should define #after_initialize in Rails 2, but not Rails 3 (this method must be defined so after_initialize callbacks run)" do
54
- donut = Donut.new
55
- if Rails.version.to_i < 3
56
- donut.should respond_to(:after_initialize)
57
- else
58
- donut.should_not respond_to(:after_initialize)
59
- end
60
- end
61
-
62
- it "should not redefine defaults in its superclass" do
63
- pastry = Pastry.new
64
- pastry.maker.should == 'Mom'
65
- pastry.default_for(:maker).should == 'Mom'
66
- end
67
-
68
- it "should respect defaults from its superclass" do
69
- donut = Donut.create
70
- donut.main_ingredient.should == 'flour'
71
- donut.maker.should_not == 'Mom'
72
- end
73
-
74
- end
75
-
76
- context "given a model without defaults" do
77
-
78
- it "should not define #after_initialize so initialization remains fast" do
79
- ModelWithoutDefaults.new.should_not respond_to(:after_initialize)
80
- end
81
-
82
- end
83
-
84
- end