baza_models 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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