baza_models 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +35 -0
  3. data/Gemfile +9 -3
  4. data/Gemfile.lock +90 -51
  5. data/README.md +98 -3
  6. data/Rakefile +20 -17
  7. data/VERSION +1 -1
  8. data/baza_models.gemspec +149 -0
  9. data/config/best_project_practice_rubocop.yml +2 -0
  10. data/config/best_project_practice_rubocop_todo.yml +35 -0
  11. data/lib/baza_models.rb +15 -0
  12. data/lib/baza_models/autoloader.rb +135 -0
  13. data/lib/baza_models/baza_orm_adapter.rb +39 -0
  14. data/lib/baza_models/can_can_adapter.rb +9 -0
  15. data/lib/baza_models/class_translation.rb +44 -0
  16. data/lib/baza_models/errors.rb +24 -2
  17. data/lib/baza_models/model.rb +236 -115
  18. data/lib/baza_models/model/belongs_to_relations.rb +49 -0
  19. data/lib/baza_models/model/custom_validations.rb +24 -0
  20. data/lib/baza_models/model/delegation.rb +21 -0
  21. data/lib/baza_models/model/has_many_relations.rb +85 -0
  22. data/lib/baza_models/model/has_one_relations.rb +93 -0
  23. data/lib/baza_models/model/manipulation.rb +123 -0
  24. data/lib/baza_models/model/queries.rb +45 -0
  25. data/lib/baza_models/model/scopes.rb +19 -0
  26. data/lib/baza_models/model/translation_functionality.rb +30 -0
  27. data/lib/baza_models/model/validations.rb +95 -0
  28. data/lib/baza_models/query.rb +447 -0
  29. data/lib/baza_models/query/inspector.rb +74 -0
  30. data/lib/baza_models/query/not.rb +34 -0
  31. data/lib/baza_models/ransacker.rb +30 -0
  32. data/lib/baza_models/test_database_cleaner.rb +23 -0
  33. data/lib/baza_models/validators/base_validator.rb +14 -0
  34. data/lib/baza_models/validators/confirmation_validator.rb +12 -0
  35. data/lib/baza_models/validators/format_validator.rb +11 -0
  36. data/lib/baza_models/validators/length_validator.rb +16 -0
  37. data/lib/baza_models/validators/uniqueness_validator.rb +21 -0
  38. data/shippable.yml +3 -1
  39. data/spec/baza_models/autoloader_spec.rb +57 -0
  40. data/spec/baza_models/baza_orm_adapter_spec.rb +52 -0
  41. data/spec/baza_models/class_translation_spec.rb +25 -0
  42. data/spec/baza_models/factory_girl_spec.rb +13 -0
  43. data/spec/baza_models/model/belongs_to_relations_spec.rb +26 -0
  44. data/spec/baza_models/model/custom_validations_spec.rb +18 -0
  45. data/spec/baza_models/model/delgation_spec.rb +16 -0
  46. data/spec/baza_models/model/has_many_relations_spec.rb +68 -0
  47. data/spec/baza_models/model/has_one_relations_spec.rb +35 -0
  48. data/spec/baza_models/model/manipulation_spec.rb +25 -0
  49. data/spec/baza_models/model/queries_spec.rb +59 -0
  50. data/spec/baza_models/model/scopes_spec.rb +23 -0
  51. data/spec/baza_models/model/translate_functionality_spec.rb +13 -0
  52. data/spec/baza_models/model/validations_spec.rb +52 -0
  53. data/spec/baza_models/model_spec.rb +75 -98
  54. data/spec/baza_models/query/not_spec.rb +16 -0
  55. data/spec/baza_models/query_spec.rb +155 -0
  56. data/spec/baza_models/ransacker_spec.rb +15 -0
  57. data/spec/baza_models/validators/confirmation_validator_spec.rb +28 -0
  58. data/spec/baza_models/validators/format_validator_spec.rb +17 -0
  59. data/spec/baza_models/validators/length_validator_spec.rb +19 -0
  60. data/spec/baza_models/validators/uniqueness_validator_spec.rb +24 -0
  61. data/spec/factories/organization.rb +5 -0
  62. data/spec/factories/user.rb +7 -0
  63. data/spec/spec_helper.rb +17 -5
  64. data/spec/support/database_helper.rb +87 -0
  65. data/spec/test_classes/organization.rb +3 -0
  66. data/spec/test_classes/person.rb +3 -0
  67. data/spec/test_classes/role.rb +12 -0
  68. data/spec/test_classes/user.rb +40 -0
  69. data/spec/test_classes/user_passport.rb +3 -0
  70. metadata +146 -7
  71. data/spec/test_classes/user_test.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 97e4c8978bcb4c3871711744b67dbeb46587b2b7
4
- data.tar.gz: e8233d6be05b457895c5ab6334c09f4460ead3d4
3
+ metadata.gz: d1953b9a3edb12121b165ba16b4ad833bda5529b
4
+ data.tar.gz: 18960bc46ba6f08b171186781844a9938ba48e1a
5
5
  SHA512:
6
- metadata.gz: e91e463217a4c3b601adc67d66550f263f4cb528018d7fe67560d7e0a20deb19a7b1c7048598b18cc0f875c9990fd7111eb0560d2dddba297753f52117cfb448
7
- data.tar.gz: b1c3e2958d01c720a0b3437793b08ce80e0dfbf8cfafaff46d3848beb16d618c48562173b61aa4b5fdf4c95e408a7397e0673757922443bca1d811a9e801fa46
6
+ metadata.gz: f1232a900ec342d84e63c264bd7399fa6d9bc37672c42e4a038b4bf4f8194b9afd4f97e343e64d55ab6898f1c8c73139e66114cde10128f77d3990f665360dc3
7
+ data.tar.gz: f6ba88d75b1623ae7cfdb16f90fa1749c9cc2c8f41110b72f27792699e14a2d5cc03e36eb40acaba5313bdba8e3d78634bc0fa70a196a0f800e82c765abbd194
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,35 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+ # This configuration was generated by
8
+ # `rubocop --auto-gen-config`
9
+ # on 2015-12-20 19:19:55 +0100 using RuboCop version 0.35.1.
10
+ # The point is for the user to remove these configuration records
11
+ # one by one as the offenses are removed from the code base.
12
+ # Note that changes in the inspected code, or installation of new
13
+ # versions of RuboCop, may require this file to be generated again.
14
+
15
+ # Offense count: 6
16
+ Metrics/AbcSize:
17
+ Max: 41
18
+
19
+ # Offense count: 1
20
+ # Configuration parameters: CountComments.
21
+ Metrics/ClassLength:
22
+ Max: 400
23
+
24
+ # Offense count: 5
25
+ Metrics/CyclomaticComplexity:
26
+ Max: 15
27
+
28
+ # Offense count: 2
29
+ # Configuration parameters: CountComments.
30
+ Metrics/MethodLength:
31
+ Max: 77
32
+
33
+ # Offense count: 6
34
+ Metrics/PerceivedComplexity:
35
+ Max: 21
data/Gemfile CHANGED
@@ -3,17 +3,23 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
- gem "baza", "~> 0.0.15"
6
+ gem "array_enumerator"
7
+ gem "baza", "~> 0.0.20"
7
8
  gem "string-cases"
8
9
 
9
10
  # Add dependencies to develop your gem here.
10
11
  # Include everything needed to run rake, tests, features, etc.
11
12
  group :development do
12
- gem "rspec", "~> 2.8.0"
13
+ gem "rspec", "~> 3.3.0"
13
14
  gem "rdoc", "~> 3.12"
14
15
  gem "bundler", "~> 1.0"
15
16
  gem "jeweler", "~> 2.0.1"
16
- gem "sqlite3"
17
+ gem "factory_girl"
18
+ gem "sqlite3", platform: :ruby
19
+ gem "jdbc-sqlite3", platform: :jruby
20
+ gem "best_practice_project", require: false, github: "kaspernj/best_practice_project"
21
+ gem "rubocop", require: false
22
+ gem "orm_adapter", require: false
17
23
  end
18
24
 
19
25
  gem "codeclimate-test-reporter", group: :test, require: nil
data/Gemfile.lock CHANGED
@@ -1,22 +1,41 @@
1
+ GIT
2
+ remote: git://github.com/kaspernj/best_practice_project.git
3
+ revision: 2493cc7b6afc89705e22e4eed8e52f92d309555b
4
+ specs:
5
+ best_practice_project (0.0.5)
6
+ psych (~> 2.0.0)
7
+
1
8
  GEM
2
9
  remote: http://rubygems.org/
3
10
  specs:
4
- addressable (2.3.7)
5
- array_enumerator (0.0.7)
6
- baza (0.0.15)
7
- array_enumerator
8
- datet
9
- knjrbfw
10
- string-cases
11
- wref
11
+ activesupport (4.2.4)
12
+ i18n (~> 0.7)
13
+ json (~> 1.7, >= 1.7.7)
14
+ minitest (~> 5.1)
15
+ thread_safe (~> 0.3, >= 0.3.4)
16
+ tzinfo (~> 1.1)
17
+ addressable (2.3.8)
18
+ array_enumerator (0.0.10)
19
+ ast (2.2.0)
20
+ astrolabe (1.3.1)
21
+ parser (~> 2.2)
22
+ baza (0.0.20)
23
+ array_enumerator (~> 0.0.10)
24
+ datet (~> 0.0.25)
25
+ event_handler (~> 0.0.0)
26
+ string-cases (~> 0.0.1)
27
+ wref (~> 0.0.8)
12
28
  builder (3.2.2)
13
- codeclimate-test-reporter (0.4.6)
29
+ codeclimate-test-reporter (0.4.7)
14
30
  simplecov (>= 0.7.1, < 1.0.0)
15
31
  datet (0.0.25)
16
32
  descendants_tracker (0.0.4)
17
33
  thread_safe (~> 0.3, >= 0.3.1)
18
- diff-lcs (1.1.3)
34
+ diff-lcs (1.2.5)
19
35
  docile (1.1.5)
36
+ event_handler (0.0.0)
37
+ factory_girl (4.5.0)
38
+ activesupport (>= 3.0.0)
20
39
  faraday (0.9.1)
21
40
  multipart-post (>= 1.2, < 3)
22
41
  git (1.2.9.1)
@@ -28,10 +47,10 @@ GEM
28
47
  multi_json (>= 1.7.5, < 2.0)
29
48
  nokogiri (~> 1.6.3)
30
49
  oauth2
31
- hashie (3.4.0)
32
- highline (1.7.1)
33
- http2 (0.0.29)
34
- string-cases
50
+ hashie (3.4.2)
51
+ highline (1.7.2)
52
+ i18n (0.7.0)
53
+ jdbc-sqlite3 (3.8.10.1)
35
54
  jeweler (2.0.1)
36
55
  builder
37
56
  bundler (>= 1.0)
@@ -41,67 +60,87 @@ GEM
41
60
  nokogiri (>= 1.5.10)
42
61
  rake
43
62
  rdoc
44
- json (1.8.2)
45
- jwt (1.3.0)
46
- knjrbfw (0.0.110)
47
- datet
48
- http2
49
- php4r
50
- ruby_process
51
- tsafe
52
- wref
63
+ json (1.8.3)
64
+ json (1.8.3-java)
65
+ jwt (1.5.1)
53
66
  mini_portile (0.6.2)
54
- multi_json (1.11.0)
67
+ minitest (5.8.0)
68
+ multi_json (1.11.2)
55
69
  multi_xml (0.5.5)
56
70
  multipart-post (2.0.0)
57
71
  nokogiri (1.6.6.2)
58
72
  mini_portile (~> 0.6.0)
73
+ nokogiri (1.6.6.2-java)
59
74
  oauth2 (1.0.0)
60
75
  faraday (>= 0.8, < 0.10)
61
76
  jwt (~> 1.0)
62
77
  multi_json (~> 1.3)
63
78
  multi_xml (~> 0.5)
64
79
  rack (~> 1.2)
65
- php4r (0.0.4)
66
- datet
67
- http2
68
- string-strtr
69
- rack (1.6.0)
80
+ orm_adapter (0.5.0)
81
+ parser (2.2.3.0)
82
+ ast (>= 1.1, < 3.0)
83
+ powerpack (0.1.1)
84
+ psych (2.0.17)
85
+ rack (1.6.4)
86
+ rainbow (2.0.0)
70
87
  rake (10.4.2)
71
88
  rdoc (3.12.2)
72
89
  json (~> 1.4)
73
- rspec (2.8.0)
74
- rspec-core (~> 2.8.0)
75
- rspec-expectations (~> 2.8.0)
76
- rspec-mocks (~> 2.8.0)
77
- rspec-core (2.8.0)
78
- rspec-expectations (2.8.0)
79
- diff-lcs (~> 1.1.2)
80
- rspec-mocks (2.8.0)
81
- ruby_process (0.0.9)
82
- tsafe
83
- wref
84
- simplecov (0.9.2)
90
+ rspec (3.3.0)
91
+ rspec-core (~> 3.3.0)
92
+ rspec-expectations (~> 3.3.0)
93
+ rspec-mocks (~> 3.3.0)
94
+ rspec-core (3.3.2)
95
+ rspec-support (~> 3.3.0)
96
+ rspec-expectations (3.3.1)
97
+ diff-lcs (>= 1.2.0, < 2.0)
98
+ rspec-support (~> 3.3.0)
99
+ rspec-mocks (3.3.2)
100
+ diff-lcs (>= 1.2.0, < 2.0)
101
+ rspec-support (~> 3.3.0)
102
+ rspec-support (3.3.0)
103
+ rubocop (0.35.1)
104
+ astrolabe (~> 1.3)
105
+ parser (>= 2.2.3.0, < 3.0)
106
+ powerpack (~> 0.1)
107
+ rainbow (>= 1.99.1, < 3.0)
108
+ ruby-progressbar (~> 1.7)
109
+ tins (<= 1.6.0)
110
+ ruby-progressbar (1.7.5)
111
+ simplecov (0.10.0)
85
112
  docile (~> 1.1.0)
86
- multi_json (~> 1.0)
87
- simplecov-html (~> 0.9.0)
88
- simplecov-html (0.9.0)
113
+ json (~> 1.8)
114
+ simplecov-html (~> 0.10.0)
115
+ simplecov-html (0.10.0)
89
116
  sqlite3 (1.3.10)
90
- string-cases (0.0.0)
91
- string-strtr (0.0.3)
92
- thread_safe (0.3.4)
93
- tsafe (0.0.11)
94
- wref (0.0.6)
117
+ string-cases (0.0.1)
118
+ thread_safe (0.3.5)
119
+ thread_safe (0.3.5-java)
120
+ tins (1.6.0)
121
+ tzinfo (1.2.2)
122
+ thread_safe (~> 0.1)
123
+ wref (0.0.8)
95
124
 
96
125
  PLATFORMS
126
+ java
97
127
  ruby
98
128
 
99
129
  DEPENDENCIES
100
- baza (~> 0.0.15)
130
+ array_enumerator
131
+ baza (~> 0.0.20)
132
+ best_practice_project!
101
133
  bundler (~> 1.0)
102
134
  codeclimate-test-reporter
135
+ factory_girl
136
+ jdbc-sqlite3
103
137
  jeweler (~> 2.0.1)
138
+ orm_adapter
104
139
  rdoc (~> 3.12)
105
- rspec (~> 2.8.0)
140
+ rspec (~> 3.3.0)
141
+ rubocop
106
142
  sqlite3
107
143
  string-cases
144
+
145
+ BUNDLED WITH
146
+ 1.10.6
data/README.md CHANGED
@@ -1,10 +1,105 @@
1
- [![Build Status](https://api.shippable.com/projects/5506810c5ab6cc13529b84bf/badge?branchName=master)](https://app.shippable.com/projects/5506810c5ab6cc13529b84bf/builds/latest)
1
+ [![Build Status](https://img.shields.io/shippable/5506810c5ab6cc13529b84bf.svg)](https://app.shippable.com/projects/5506810c5ab6cc13529b84bf/builds/latest)
2
2
  [![Code Climate](https://codeclimate.com/github/kaspernj/baza_models/badges/gpa.svg)](https://codeclimate.com/github/kaspernj/baza_models)
3
3
  [![Test Coverage](https://codeclimate.com/github/kaspernj/baza_models/badges/coverage.svg)](https://codeclimate.com/github/kaspernj/baza_models)
4
4
 
5
- # baza_models
5
+ # BazaModels
6
6
 
7
- Description goes here.
7
+ An attempt to recreate 90% of the ActiveRecord functionality in a very simple way.
8
+
9
+ The examples in this readme actually work.
10
+
11
+ ## Relationships
12
+
13
+ ### has_many
14
+ ```ruby
15
+ class User < BazaModels::Model
16
+ has_many :roles
17
+ has_many :admin_roles, -> { where(role: "administrator") }, class_name: "Role", dependent: :restrict_with_error # :destroy-dependent also works
18
+ end
19
+ ```
20
+
21
+ ### has_one
22
+ ```ruby
23
+ class User < BazaModels::Model
24
+ has_one :person, dependent: :restrict_with_error # :destroy-dependent also works
25
+ end
26
+ ```
27
+
28
+ ### belongs_to
29
+ ```ruby
30
+ class Role < BazaModels::Model
31
+ belongs_to :user
32
+ end
33
+ ```
34
+
35
+ ## Validations
36
+
37
+ ### Presence
38
+ ```ruby
39
+ class User < BazaModels::Model
40
+ validates :email, presence: true
41
+ end
42
+ ```
43
+
44
+ ## Queries
45
+
46
+ ### Where
47
+ ```ruby
48
+ users = User.where(email: "myemail@example.com").to_a
49
+ ```
50
+
51
+ ### Group
52
+ ```ruby
53
+ users = User.group(:email).to_a
54
+ ```
55
+
56
+ ### Order
57
+ ```ruby
58
+ users = User.order(:email).to_a
59
+ ```
60
+
61
+ ### Includes / autoloading / eager loading
62
+ ```ruby
63
+ users = User.includes(:roles)
64
+ ```
65
+
66
+ ### Joins
67
+ ```ruby
68
+ users = User.joins(:roles).where(roles: {role: 'administrator'})
69
+ ```
70
+
71
+ ### Other methods...
72
+ ```ruby
73
+ User.where(email: "myemail@example.com").to_sql #=> "SELECT `users`.* FROM..."
74
+ User.any? #=> true
75
+ User.all #=> BazaModels::Query<...>
76
+ User.select(:email)
77
+ User.limit(5)
78
+ User.to_enum
79
+ User.first
80
+ User.last
81
+ User.order(:id).reverse_order
82
+ ```
83
+
84
+
85
+ ## Setting and saving attributes
86
+
87
+ ### Setting
88
+ ```ruby
89
+ role.assign_attributes(user: user, role: "administrator")
90
+ role.save! #=> true || raising error
91
+
92
+ role.update_attributes!(user: user, role: "administrator") #=> true || raising error
93
+ role.role = "administrator"
94
+ role.save #=> true || false
95
+ ```
96
+
97
+ ### Getting
98
+ ```ruby
99
+ role.role #=> "administrator"
100
+ role.user #=> [some user]
101
+ role.has_attribute?(:created_at) #=> true
102
+ ```
8
103
 
9
104
  ## Contributing to baza_models
10
105
 
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rubygems'
4
- require 'bundler'
3
+ require "rubygems"
4
+ require "bundler"
5
5
  begin
6
6
  Bundler.setup(:default, :development)
7
7
  rescue Bundler::BundlerError => e
@@ -9,42 +9,45 @@ rescue Bundler::BundlerError => e
9
9
  $stderr.puts "Run `bundle install` to install missing gems"
10
10
  exit e.status_code
11
11
  end
12
- require 'rake'
12
+ require "rake"
13
13
 
14
- require 'jeweler'
14
+ require "jeweler"
15
15
  Jeweler::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
17
  gem.name = "baza_models"
18
18
  gem.homepage = "http://github.com/kaspernj/baza_models"
19
19
  gem.license = "MIT"
20
- gem.summary = %Q{ActiveRecord like models for the Baza database framework}
21
- gem.description = %Q{ActiveRecord like models for the Baza database framework}
20
+ gem.summary = %(ActiveRecord like models for the Baza database framework)
21
+ gem.description = %(ActiveRecord like models for the Baza database framework)
22
22
  gem.email = "k@spernj.org"
23
23
  gem.authors = ["kaspernj"]
24
24
  # dependencies defined in Gemfile
25
25
  end
26
26
  Jeweler::RubygemsDotOrgTasks.new
27
27
 
28
- require 'rspec/core'
29
- require 'rspec/core/rake_task'
28
+ require "rspec/core"
29
+ require "rspec/core/rake_task"
30
30
  RSpec::Core::RakeTask.new(:spec) do |spec|
31
- spec.pattern = FileList['spec/**/*_spec.rb']
31
+ spec.pattern = FileList["spec/**/*_spec.rb"]
32
32
  end
33
33
 
34
34
  desc "Code coverage detail"
35
35
  task :simplecov do
36
- ENV['COVERAGE'] = "true"
37
- Rake::Task['spec'].execute
36
+ ENV["COVERAGE"] = "true"
37
+ Rake::Task["spec"].execute
38
38
  end
39
39
 
40
- task :default => :spec
40
+ task default: :spec
41
41
 
42
- require 'rdoc/task'
42
+ require "rdoc/task"
43
43
  Rake::RDocTask.new do |rdoc|
44
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+ version = File.exist?("VERSION") ? File.read("VERSION") : ""
45
45
 
46
- rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.rdoc_dir = "rdoc"
47
47
  rdoc.title = "baza_models #{version}"
48
- rdoc.rdoc_files.include('README*')
49
- rdoc.rdoc_files.include('lib/**/*.rb')
48
+ rdoc.rdoc_files.include("README*")
49
+ rdoc.rdoc_files.include("lib/**/*.rb")
50
50
  end
51
+
52
+ require "best_practice_project"
53
+ BestPracticeProject.load_tasks
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.1