soulless 0.6.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +12 -18
  3. data/.rspec +1 -1
  4. data/.travis.yml +7 -12
  5. data/CODE_OF_CONDUCT.md +49 -0
  6. data/Gemfile +17 -13
  7. data/LICENSE.txt +17 -18
  8. data/README.md +8 -181
  9. data/Rakefile +4 -8
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/docker-compose.yml +11 -0
  13. data/lib/soulless/attributes.rb +33 -0
  14. data/lib/soulless/callbacks.rb +13 -0
  15. data/lib/soulless/dirty.rb +10 -8
  16. data/lib/soulless/inheritance.rb +120 -124
  17. data/lib/soulless/model.rb +24 -63
  18. data/lib/soulless/validations/uniqueness_validator.rb +7 -8
  19. data/lib/soulless/validations.rb +1 -2
  20. data/lib/soulless/version.rb +1 -1
  21. data/lib/soulless.rb +5 -23
  22. data/soulless.gemspec +12 -13
  23. metadata +30 -173
  24. data/lib/soulless/accessors.rb +0 -51
  25. data/lib/soulless/associations.rb +0 -35
  26. data/lib/soulless/locale/en.yml +0 -30
  27. data/lib/soulless/railtie.rb +0 -7
  28. data/lib/soulless/validations/associated_validator.rb +0 -17
  29. data/spec/associated_validator_spec.rb +0 -31
  30. data/spec/associations_spec.rb +0 -65
  31. data/spec/dirty_spec.rb +0 -54
  32. data/spec/dummy/.gitignore +0 -17
  33. data/spec/dummy/README.rdoc +0 -28
  34. data/spec/dummy/Rakefile +0 -6
  35. data/spec/dummy/app/assets/images/.keep +0 -0
  36. data/spec/dummy/app/assets/javascripts/application.js +0 -16
  37. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  38. data/spec/dummy/app/controllers/application_controller.rb +0 -5
  39. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  40. data/spec/dummy/app/forms/dummy_form.rb +0 -7
  41. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  42. data/spec/dummy/app/mailers/.keep +0 -0
  43. data/spec/dummy/app/models/.keep +0 -0
  44. data/spec/dummy/app/models/concerns/.keep +0 -0
  45. data/spec/dummy/app/models/dummy_model.rb +0 -6
  46. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  47. data/spec/dummy/bin/bundle +0 -3
  48. data/spec/dummy/bin/rails +0 -4
  49. data/spec/dummy/bin/rake +0 -4
  50. data/spec/dummy/config/application.rb +0 -28
  51. data/spec/dummy/config/boot.rb +0 -6
  52. data/spec/dummy/config/database.yml +0 -25
  53. data/spec/dummy/config/environment.rb +0 -5
  54. data/spec/dummy/config/environments/development.rb +0 -29
  55. data/spec/dummy/config/environments/production.rb +0 -80
  56. data/spec/dummy/config/environments/test.rb +0 -36
  57. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  58. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  59. data/spec/dummy/config/initializers/inflections.rb +0 -16
  60. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  61. data/spec/dummy/config/initializers/secret_token.rb +0 -12
  62. data/spec/dummy/config/initializers/session_store.rb +0 -3
  63. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  64. data/spec/dummy/config/locales/en.yml +0 -23
  65. data/spec/dummy/config/routes.rb +0 -56
  66. data/spec/dummy/config.ru +0 -4
  67. data/spec/dummy/db/migrate/20131106221200_create_dummy_models.rb +0 -11
  68. data/spec/dummy/db/schema.rb +0 -24
  69. data/spec/dummy/db/seeds.rb +0 -7
  70. data/spec/dummy/db/test.sqlite3 +0 -0
  71. data/spec/dummy/lib/assets/.keep +0 -0
  72. data/spec/dummy/lib/tasks/.keep +0 -0
  73. data/spec/dummy/log/.keep +0 -0
  74. data/spec/dummy/public/404.html +0 -58
  75. data/spec/dummy/public/422.html +0 -58
  76. data/spec/dummy/public/500.html +0 -57
  77. data/spec/dummy/public/favicon.ico +0 -0
  78. data/spec/dummy/public/robots.txt +0 -5
  79. data/spec/dummy/vendor/assets/javascripts/.keep +0 -0
  80. data/spec/dummy/vendor/assets/stylesheets/.keep +0 -0
  81. data/spec/inheritance_spec.rb +0 -51
  82. data/spec/soulless_spec.rb +0 -61
  83. data/spec/spec_helper.rb +0 -38
  84. data/spec/support/dummy_association.rb +0 -30
  85. data/spec/support/dummy_class.rb +0 -20
  86. data/spec/support/dummy_model_inheritance.rb +0 -10
  87. data/spec/support/dummy_soulless_inheritance.rb +0 -10
  88. data/spec/support/en.yml +0 -8
  89. data/spec/uniqueness_validator_spec.rb +0 -17
@@ -1,57 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>We're sorry, but something went wrong (500)</title>
5
- <style>
6
- body {
7
- background-color: #EFEFEF;
8
- color: #2E2F30;
9
- text-align: center;
10
- font-family: arial, sans-serif;
11
- }
12
-
13
- div.dialog {
14
- width: 25em;
15
- margin: 4em auto 0 auto;
16
- border: 1px solid #CCC;
17
- border-right-color: #999;
18
- border-left-color: #999;
19
- border-bottom-color: #BBB;
20
- border-top: #B00100 solid 4px;
21
- border-top-left-radius: 9px;
22
- border-top-right-radius: 9px;
23
- background-color: white;
24
- padding: 7px 4em 0 4em;
25
- }
26
-
27
- h1 {
28
- font-size: 100%;
29
- color: #730E15;
30
- line-height: 1.5em;
31
- }
32
-
33
- body > p {
34
- width: 33em;
35
- margin: 0 auto 1em;
36
- padding: 1em 0;
37
- background-color: #F7F7F7;
38
- border: 1px solid #CCC;
39
- border-right-color: #999;
40
- border-bottom-color: #999;
41
- border-bottom-left-radius: 4px;
42
- border-bottom-right-radius: 4px;
43
- border-top-color: #DADADA;
44
- color: #666;
45
- box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
- }
47
- </style>
48
- </head>
49
-
50
- <body>
51
- <!-- This file lives in public/500.html -->
52
- <div class="dialog">
53
- <h1>We're sorry, but something went wrong.</h1>
54
- </div>
55
- <p>If you are the application owner check the logs for more information.</p>
56
- </body>
57
- </html>
File without changes
@@ -1,5 +0,0 @@
1
- # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
- #
3
- # To ban all spiders from the entire site uncomment the next two lines:
4
- # User-agent: *
5
- # Disallow: /
File without changes
File without changes
@@ -1,51 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Soulless::Inheritance do
4
- describe DummyModelInheritance do
5
- before(:each) do
6
- @dummy_inheritance = DummyModelInheritance.new
7
- end
8
-
9
- it 'should inherit the name attribute' do
10
- @dummy_inheritance.attributes.keys.should include(:name)
11
- end
12
-
13
- it 'should inherit the default value for the name attribute' do
14
- @dummy_inheritance.attributes[:name].should == 'Anthony'
15
- end
16
-
17
- it 'should not inhert the email attribute when added as exclude option' do
18
- @dummy_inheritance.attributes.keys.should_not include(:email)
19
- end
20
-
21
- it 'should validate presence of name' do
22
- @dummy_inheritance.name = nil
23
- @dummy_inheritance.valid?
24
- @dummy_inheritance.errors[:name].should include("can't be blank")
25
- end
26
-
27
- it 'should not validate email' do
28
- @dummy_inheritance.class.validators.each do |validator|
29
- validator.attributes.should_not include(:email)
30
- end
31
- end
32
- end
33
-
34
- describe DummySoullessInheritance do
35
- before(:each) do
36
- @dummy_inheritance = DummySoullessInheritance.new
37
- end
38
-
39
- it 'should inherit the name attribute' do
40
- @dummy_inheritance.attributes.keys.should include(:name)
41
- end
42
-
43
- it 'should inherit the default value for the name attribute' do
44
- @dummy_inheritance.attributes[:name].should == 'Anthony'
45
- end
46
-
47
- it 'should not inhert the email attribute when added as exclude option' do
48
- @dummy_inheritance.attributes.keys.should_not include(:email)
49
- end
50
- end
51
- end
@@ -1,61 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Soulless do
4
- before(:each) do
5
- @dummy_class = DummyClass.new
6
- end
7
-
8
- it 'should validate name' do
9
- @dummy_class.name = nil
10
- @dummy_class.valid?.should == false
11
- expect(@dummy_class.errors[:name]).to_not be_empty
12
- end
13
-
14
- it 'should call #persist! when #save is called' do
15
- @dummy_class.save
16
- expect(@dummy_class.saved).to eq(true)
17
- end
18
-
19
- it 'should call #persist! when #update_attributes is called' do
20
- @dummy_class.update_attributes(name: 'Biff')
21
- expect(@dummy_class.saved).to eq(true)
22
- end
23
-
24
- it 'should not call #persist! if attributes are invalid' do
25
- @dummy_class.name = nil
26
- expect(@dummy_class.save).to eq(false)
27
- expect(@dummy_class.saved).to eq(false)
28
- end
29
-
30
- it '#update_attributes should not save' do
31
- @dummy_class.assign_attributes(name: 'Yaw', email: 'yokoono@thebeatles.com')
32
- expect(@dummy_class.saved?).to eq(false)
33
- end
34
-
35
- it '#assign_attributes should merge new values' do
36
- @dummy_class.email = 'yokoono@thebeatles.com'
37
- @dummy_class.assign_attributes(name: 'Yaw')
38
- expect(@dummy_class.name).to eq('Yaw')
39
- expect(@dummy_class.email).to eq('yokoono@thebeatles.com')
40
- end
41
-
42
- it '#assign_attributes should deep merge new values' do
43
- @dummy_class = DummyAssociation.new(spouse: { name: 'Megan' })
44
- @dummy_class.assign_attributes(spouse: { name: 'Mary Jane Watson' })
45
- expect(@dummy_class.spouse.name).to eq('Mary Jane Watson')
46
- end
47
-
48
- it '#update_attributes should save' do
49
- @dummy_class.update_attributes(name: 'Yaw', email: 'yokoono@thebeatles.com')
50
- expect(@dummy_class.saved?).to eq(true)
51
- end
52
-
53
- it '#persisted? should be false' do
54
- expect(@dummy_class.persisted?).to eq(false)
55
- end
56
-
57
- it 'should call the before_validation callback' do
58
- @dummy_class.save
59
- expect(@dummy_class.validation_callback).to eq(true)
60
- end
61
- end
data/spec/spec_helper.rb DELETED
@@ -1,38 +0,0 @@
1
- require 'coveralls'
2
- Coveralls.wear!
3
-
4
- require File.expand_path("../../spec/dummy/config/environment", __FILE__)
5
-
6
- require 'soulless'
7
- require 'database_cleaner'
8
-
9
- # Require supporting ruby files with custom matchers and macros, etc,
10
- # in spec/support/ and its subdirectories.
11
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
12
-
13
- RSpec.configure do |config|
14
- config.mock_with :rspec do |mocks|
15
- # Enable only the newer, non-monkey-patching expect syntax.
16
- # For more details, see:
17
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
18
- mocks.syntax = :should
19
-
20
- # Prevents you from mocking or stubbing a method that does not exist on
21
- # a real object. This is generally recommended.
22
- mocks.verify_partial_doubles = true
23
- end
24
-
25
- DatabaseCleaner.strategy = :transaction
26
-
27
- config.before :suite do
28
- DatabaseCleaner.clean_with :truncation
29
- end
30
-
31
- config.before :each do
32
- DatabaseCleaner.start
33
- end
34
-
35
- config.after :each do
36
- DatabaseCleaner.clean
37
- end
38
- end
@@ -1,30 +0,0 @@
1
- require File.dirname(__FILE__) + '/dummy_class'
2
-
3
- class DummyAssociation
4
- include Soulless.model
5
-
6
- attribute :saved, Boolean, default: false
7
-
8
- has_one :spouse do
9
- attribute :name, String
10
-
11
- validates :name, presence: true
12
- end
13
-
14
- has_many :friends do
15
- attribute :name, String
16
-
17
- validates :name, presence: true
18
- end
19
-
20
- has_one :dummy_clone, DummyClass
21
-
22
- has_many :dummy_clones, DummyClass
23
-
24
- validates_associated :spouse, :friends
25
-
26
- private
27
- def persist!
28
- self.saved = true
29
- end
30
- end
@@ -1,20 +0,0 @@
1
- class DummyClass
2
- include Soulless.model
3
-
4
- attribute :name, String, default: 'Anthony'
5
- attribute :email, String
6
- attribute :validation_callback, Boolean
7
- attribute :save_callback, Boolean
8
- attribute :saved, Boolean, default: false
9
-
10
- validates :name, presence: true
11
-
12
- before_validation lambda { self.validation_callback = true }
13
-
14
- before_save lambda { self.save_callback = true }
15
-
16
- private
17
- def persist!
18
- self.saved = true
19
- end
20
- end
@@ -1,10 +0,0 @@
1
- class DummyModelInheritance
2
- include Soulless.model
3
-
4
- inherit_from(DummyModel, { use_database_default: [:name], exclude: :email, include_timestamps: true })
5
-
6
- private
7
- def persist!
8
- self.saved = true
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- class DummySoullessInheritance
2
- include Soulless.model
3
-
4
- inherit_from(::DummyClass, { exclude: :email })
5
-
6
- private
7
- def persist!
8
- self.saved = true
9
- end
10
- end
data/spec/support/en.yml DELETED
@@ -1,8 +0,0 @@
1
- en:
2
- soulless:
3
- errors:
4
- models:
5
- dummy_association/dummy_clone:
6
- attributes:
7
- name:
8
- blank: this is a test
@@ -1,17 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Soulless::Validations::UniquenessValidator do
4
- it 'should validate uniqueness on model' do
5
- DummyModel.create!(name: 'Anthony')
6
- model = DummyModel.new(name: 'Anthony')
7
- expect(model.valid?).to eq(false)
8
- model.errors[:name].should include('has already been taken')
9
- end
10
-
11
- it 'should validate uniqueness on form' do
12
- DummyModel.create!(name: 'Anthony')
13
- form = DummyForm.new(name: 'Anthony')
14
- expect(form.valid?).to eq(false)
15
- form.errors[:name].should include('has already been taken')
16
- end
17
- end