regressor 0.1.7 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d65b586c2f3cdb52c4caca5d2df4fc0f36ea9334
4
- data.tar.gz: 5ce0ea649f1384d98038cbfb95fa9be17641a598
3
+ metadata.gz: c4067523485e37bfe88f9fa29ac76ecf72aa5a7a
4
+ data.tar.gz: e335a88eca6d47780e23d7cbc9e01bce0e03f68b
5
5
  SHA512:
6
- metadata.gz: 19a7ea900faa06082251ac354d8ff6422d6286876ab9df091b1ec50345d8122198fb3c14493b1d762964a64d4b31b1395496dc5e9c1fa213036644bf81e4be35
7
- data.tar.gz: 17eb601bf361f4301e5bab48edff952052b45ced7e28a2b2121f527c2498e9d3e665ae22b403624fb0f3d640eee50df9fa5b21d30dd643cffe3dc0125629a384
6
+ metadata.gz: 836c34cca6b84b1b0e9cf8d0c342a8b1dc61e3afdf45b29b563154ac99460cce7cfb02131a2d0808c307608b16712ea315a5c8979a7155801ea66331c731a898
7
+ data.tar.gz: 3e7ef603731c0103de9d088c72674f8d343b2f70e611ee511905ea33938f35fb37af4106cc31858e4169da845e079dad58b043e994d24768abb311c993edd5f2
@@ -0,0 +1,13 @@
1
+ module Regressor
2
+ module Model
3
+ module Database
4
+ module Column
5
+ def columns
6
+ @model.constantize.columns.map(&:name).map do |column|
7
+ "it { is_expected.to have_db_column :#{column} }"
8
+ end.join("\n\t")
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Regressor
2
+ module Model
3
+ module Database
4
+ module Index
5
+ def indexes
6
+ ActiveRecord::Base.connection.indexes(@model.tableize.gsub("/", "_")).map do |indexes|
7
+ "it { is_expected.to have_db_index #{indexes.columns}}"
8
+ end.flatten.join("\n\t")
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module Regressor
2
+ module Model
3
+ module Enum
4
+ def enums
5
+ enum_specs = []
6
+ @model.constantize.defined_enums.each do |enum_k, enum_v|
7
+ enum_values = enum_v.map do |key, value|
8
+ key
9
+ end
10
+ enum_specs << "it { is_expected.to define_enum_for(:#{enum_k}).with(#{enum_values})}"
11
+ end
12
+ enum_specs.compact.uniq.join("\n\t")
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Regressor
2
+ module Model
3
+ module Nested
4
+ module Attribute
5
+ def nested_attributes
6
+ if @model.constantize.nested_attributes_options.present?
7
+ @model.constantize.nested_attributes_options.keys.map do |key|
8
+ "it { is_expected.to accept_nested_attributes_for :#{key} }"
9
+ end.join("\n\t")
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module Regressor
2
+ module Model
3
+ module Relation
4
+ module BelongTo
5
+ def belong_to_relations
6
+ @model.constantize.reflect_on_all_associations(:belongs_to).map(&:name).map do |relation|
7
+ "it { is_expected.to belong_to :#{relation}}"
8
+ end.join("\n\t")
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Regressor
2
+ module Model
3
+ module Relation
4
+ module HasMany
5
+ def has_many_relations
6
+ @model.constantize.reflect_on_all_associations(:has_many).map(&:name).map do |relation|
7
+ "it { is_expected.to have_many :#{relation}}"
8
+ end.join("\n\t") rescue nil
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Regressor
2
+ module Model
3
+ module Relation
4
+ module HasOne
5
+ def has_one_relations
6
+ @model.constantize.reflect_on_all_associations(:has_one).map(&:name).map do |relation|
7
+ "it { is_expected.to have_one :#{relation}}"
8
+ end.join("\n\t") rescue nil
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ module Regressor
2
+ module Model
3
+ module Validation
4
+ module Length
5
+ def length_validators
6
+ @model.constantize.validators.select do |validator|
7
+ validator.class.to_s == ActiveModel::Validations::LengthValidator.to_s
8
+ end.inject([]) do |result, validator|
9
+ if validator.options[:minimum]
10
+ validator.attributes.each do |attribute|
11
+ result << "it { is_expected.to allow_value(Faker::Lorem.characters(#{validator.options[:minimum]})).for :#{attribute} }"
12
+ result << "it { is_expected.not_to allow_value(Faker::Lorem.characters(#{validator.options[:minimum] - 1})).for :#{attribute} }"
13
+ end
14
+ end
15
+ if validator.options[:maximum]
16
+ validator.attributes.each do |attribute|
17
+ result << "it { is_expected.to allow_value(Faker::Lorem.characters(#{validator.options[:maximum]})).for :#{attribute} }"
18
+ result << "it { is_expected.not_to allow_value(Faker::Lorem.characters(#{validator.options[:maximum] + 1})).for :#{attribute} }"
19
+ end
20
+ end
21
+ result
22
+ end.flatten.compact.uniq.join("\n\t")
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ module Regressor
2
+ module Model
3
+ module Validation
4
+ module Presence
5
+ def presence_validators
6
+ @model.constantize.validators.select do |validator|
7
+ validator.class.to_s == ActiveRecord::Validations::PresenceValidator.to_s
8
+ end.map(&:attributes).flatten.map do |attribute|
9
+ "it { is_expected.to validate_presence_of :#{attribute} }"
10
+ end.uniq.join("\n\t")
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'regression_model'
2
+
3
+ module Regressor
4
+ class ModelGenerator < Rails::Generators::Base
5
+ source_root(File.expand_path(File.dirname(__FILE__)))
6
+
7
+ def create_regression_files
8
+ Rails.application.eager_load!
9
+ ActiveRecord::Base.descendants.map(&:name).reject { |x| Regressor.configuration.excluded_models.include? x }.each do |model|
10
+ @model = Regressor::RegressionModel.new(model)
11
+ create_file "#{Regressor.configuration.regression_path}/#{model.tableize.gsub("/", "_").singularize}_spec.rb", ERB.new(File.new(File.expand_path('../templates/spec_regression_template.erb', File.dirname(__FILE__))).read).result(binding)
12
+ end
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ require_relative 'model/relation/belong_to'
2
+ require_relative 'model/relation/has_one'
3
+ require_relative 'model/relation/has_many'
4
+ require_relative 'model/validation/presence'
5
+ require_relative 'model/validation/length'
6
+ require_relative 'model/database/column'
7
+ require_relative 'model/database/index'
8
+ require_relative 'model/nested/attribute'
9
+ require_relative 'model/enum'
10
+
11
+ class Regressor::RegressionModel
12
+ include Regressor::Model::Relation::BelongTo
13
+ include Regressor::Model::Relation::HasOne
14
+ include Regressor::Model::Relation::HasMany
15
+ include Regressor::Model::Validation::Presence
16
+ include Regressor::Model::Validation::Length
17
+ include Regressor::Model::Database::Column
18
+ include Regressor::Model::Database::Index
19
+ include Regressor::Model::Nested::Attribute
20
+ include Regressor::Model::Enum
21
+
22
+ attr_accessor :model
23
+
24
+ def initialize(model)
25
+ @model = model
26
+ end
27
+
28
+ end
@@ -1,18 +1,27 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  RSpec.describe <%= @model.model %> do
4
+
4
5
  # === Relations ===
5
6
  <%= @model.belong_to_relations %>
6
7
  <%= @model.has_one_relations %>
7
8
  <%= @model.has_many_relations %>
9
+
8
10
  # === Nested Attributes ===
9
11
  <%= @model.nested_attributes %>
10
- # === Database Columns ===
11
- <%= @model.database_columns %>
12
- # === Database Indexes ===
13
- <%= @model.database_indexes %>
14
- # === Validations ===
15
- <%= @model.validators %>
12
+
13
+ # === Database (Columns) ===
14
+ <%= @model.columns %>
15
+
16
+ # === Database (Indexes) ===
17
+ <%= @model.indexes %>
18
+
19
+ # === Validations (Length) ===
20
+ <%= @model.length_validators %>
21
+
22
+ # === Validations (Presence) ===
23
+ <%= @model.presence_validators %>
24
+
16
25
  <% if Regressor.configuration.include_enums %>
17
26
  # === Enums ===
18
27
  <%= @model.enums %>
@@ -1,3 +1,3 @@
1
1
  module Regressor
2
- VERSION = "0.1.7"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: regressor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erwin Schens
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-07 00:00:00.000000000 Z
11
+ date: 2015-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: shoulda-matchers
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
19
+ version: '2.7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '4.0'
26
+ version: '2.7'
27
27
  - !ruby/object:Gem::Dependency
28
- name: shoulda-matchers
28
+ name: faker
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.7'
33
+ version: '1.3'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.7'
40
+ version: '1.3'
41
41
  - !ruby/object:Gem::Dependency
42
- name: faker
42
+ name: rspec-rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.3'
47
+ version: '3.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.3'
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec-rails
56
+ name: rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '4.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '4.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 1.3.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 1.3.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: generator_spec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -105,14 +105,22 @@ files:
105
105
  - MIT-LICENSE
106
106
  - Rakefile
107
107
  - lib/generators/regressor/install_generator.rb
108
- - lib/generators/spec_regression_generator.rb
108
+ - lib/generators/regressor/model/database/column.rb
109
+ - lib/generators/regressor/model/database/index.rb
110
+ - lib/generators/regressor/model/enum.rb
111
+ - lib/generators/regressor/model/nested/attribute.rb
112
+ - lib/generators/regressor/model/relation/belong_to.rb
113
+ - lib/generators/regressor/model/relation/has_many.rb
114
+ - lib/generators/regressor/model/relation/has_one.rb
115
+ - lib/generators/regressor/model/validation/length.rb
116
+ - lib/generators/regressor/model/validation/presence.rb
117
+ - lib/generators/regressor/model_generator.rb
118
+ - lib/generators/regressor/regression_model.rb
109
119
  - lib/generators/templates/regressor.rb
110
- - lib/generators/templates/spec_regression_template.rb.erb
111
- - lib/regression_model.rb
120
+ - lib/generators/templates/spec_regression_template.erb
112
121
  - lib/regressor.rb
113
122
  - lib/regressor/version.rb
114
- - lib/tasks/regressor_tasks.rake
115
- homepage: http://example.org
123
+ homepage: https://github.com/ndea/regressor
116
124
  licenses:
117
125
  - MIT
118
126
  metadata: {}
@@ -1,12 +0,0 @@
1
- require 'regression_model'
2
- class SpecRegressionGenerator < Rails::Generators::Base
3
-
4
- def create_regression_files
5
- Rails.application.eager_load!
6
- ActiveRecord::Base.descendants.map(&:name).reject { |x| Regressor.configuration.excluded_models.include? x }.each do |model|
7
- @model = RegressionModel.new(model)
8
- create_file "#{Regressor.configuration.regression_path}/#{model.tableize.gsub("/", "_").singularize}_spec.rb", ERB.new(File.new(File.expand_path('templates/spec_regression_template.rb.erb', File.dirname(__FILE__))).read).result(binding)
9
- end
10
- end
11
-
12
- end
@@ -1,80 +0,0 @@
1
- class RegressionModel
2
-
3
- attr_accessor :model
4
-
5
- def initialize(model)
6
- @model = model
7
- end
8
-
9
- def belong_to_relations
10
- @model.constantize.reflect_on_all_associations(:belongs_to).map(&:name).map do |relation|
11
- "it { is_expected.to belong_to :#{relation}}"
12
- end.join("\n\t") rescue nil
13
- end
14
-
15
- def has_one_relations
16
- @model.constantize.reflect_on_all_associations(:has_one).map(&:name).map do |relation|
17
- "it { is_expected.to have_one :#{relation}}"
18
- end.join("\n\t") rescue nil
19
- end
20
-
21
- def has_many_relations
22
- @model.constantize.reflect_on_all_associations(:has_many).map(&:name).map do |relation|
23
- "it { is_expected.to have_many :#{relation}}"
24
- end.join("\n\t") rescue nil
25
- end
26
-
27
- def enums
28
- enum_specs = []
29
- @model.constantize.defined_enums.each do |enum_k, enum_v|
30
- enum_values = enum_v.map do |key, value|
31
- key
32
- end
33
- enum_specs << "it { is_expected.to define_enum_for(:#{enum_k}).with(#{enum_values})}"
34
- end
35
- enum_specs.compact.uniq.join("\n\t")
36
- end
37
-
38
- def validators
39
- validator_specs = []
40
- @model.constantize.validators.each do |validator|
41
- if validator.class.to_s == ActiveRecord::Validations::PresenceValidator.to_s
42
- validator.attributes.each do |attribute|
43
- validator_specs << "it { is_expected.to validate_presence_of :#{attribute} }"
44
- end
45
- end
46
- if validator.class.to_s == ActiveModel::Validations::LengthValidator.to_s
47
- validator.attributes.each do |attribute|
48
- minimum = validator.options[:minimum]
49
- maximum = validator.options[:maximum]
50
- validator_specs << "it { is_expected.to allow_value(Faker::Lorem.characters(#{minimum})).for :#{attribute} }" if minimum
51
- validator_specs << "it { is_expected.not_to allow_value(Faker::Lorem.characters(#{minimum - 1})).for :#{attribute} }" if minimum
52
- validator_specs << "it { is_expected.to allow_value(Faker::Lorem.characters(#{maximum})).for :#{attribute} }" if maximum
53
- validator_specs << "it { is_expected.not_to allow_value(Faker::Lorem.characters(#{maximum + 1})).for :#{attribute} }" if maximum
54
- end
55
- end
56
- end rescue []
57
- validator_specs.compact.uniq.join("\n\t")
58
- end
59
-
60
- def nested_attributes
61
- if @model.constantize.nested_attributes_options.present?
62
- @model.constantize.nested_attributes_options.keys.map do |key|
63
- "it { is_expected.to accept_nested_attributes_for :#{key} }"
64
- end.join("\n\t") rescue nil
65
- end
66
- end
67
-
68
- def database_columns
69
- @model.constantize.columns.map(&:name).map do |column|
70
- "it { is_expected.to have_db_column :#{column} }"
71
- end.join("\n\t") rescue nil
72
- end
73
-
74
- def database_indexes
75
- ActiveRecord::Base.connection.indexes(@model.tableize.gsub("/", "_")).map do |indexes|
76
- "it { is_expected.to have_db_index #{indexes.columns}}"
77
- end.flatten.join("\n\t") rescue nil
78
- end
79
-
80
- end
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :regressor do
3
- # # Task goes here
4
- # end