azeroth 0.0.6 → 0.0.7

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
  SHA256:
3
- metadata.gz: 670fc994395afb0d20d4a113976c2b813d151ca6cad00d928e145d904294bcbc
4
- data.tar.gz: 8c6f020d5e79b0dfc1559672a57d24468e883ec750e6503032e289deed19328b
3
+ metadata.gz: fe08d469b1d7f7de1b5e506ecfb28bf25d0529f12cb0ed44e738373685ff2f86
4
+ data.tar.gz: f947cca246ca569dfad592f4a25d806bdc32f4c5071a409719590828f2fb0b36
5
5
  SHA512:
6
- metadata.gz: caf235cb34805e990b810e396859b42a6937eaa14f54cfff32cfa34867e716b180f0634a00e81042b56e0ce3b0851c08d5e3927b16da3c4138f3134703536e81
7
- data.tar.gz: 2adb8cf2c8751e7c3e6cb7dcda4591285565d4b1e6deee999cbbeb6f941127e4b3c3b454fbf65e38c40ae9caa1de02d1562ff77b3ec9e6d4752c1b9f58dbf426
6
+ metadata.gz: ffd2677abcd53391963db5e8d4fb40cf35f3c0d86ad41a82bea3b9149a894bd6d8c7737e499c75cbb410106611f1c1c897c174069b9f5e74c8081f72e47fd258
7
+ data.tar.gz: 998012e33fe8abc53f81633a85d54181b4db805bb578b619b97c2a3974f1509ee06c260e0ef81e728b4965a9457bb805237cf711b334faded65ce399a25d07e3
data/.gitignore CHANGED
@@ -6,6 +6,7 @@ doc
6
6
  .yardoc/
7
7
  measurement/
8
8
  **/*.swp
9
+ **/*.swo
9
10
  rubycritic/
10
11
  spec/dummy/log/*
11
12
  spec/dummy/tmp/*
data/README.md CHANGED
@@ -9,4 +9,4 @@ Azeroth
9
9
 
10
10
  Yard Documentation
11
11
  -------------------
12
- https://www.rubydoc.info/gems/azeroth/0.0.6
12
+ https://www.rubydoc.info/gems/azeroth/0.0.7
data/azeroth.gemspec CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |gem|
25
25
  gem.add_development_dependency 'actionpack', '~> 5.x'
26
26
  gem.add_development_dependency 'activerecord', '~> 5.x'
27
27
  gem.add_development_dependency 'bundler', '~> 1.16.1'
28
+ gem.add_development_dependency 'factory_bot', '~> 5.1.1'
28
29
  gem.add_development_dependency 'pry', '0.12.2'
29
30
  gem.add_development_dependency 'pry-nav', '0.3.0'
30
31
  gem.add_development_dependency 'rails', '>= 5.2.0'
data/config/yardstick.yml CHANGED
@@ -22,6 +22,7 @@ rules:
22
22
  Summary::Presence:
23
23
  enabled: true
24
24
  exclude:
25
+ - Azeroth::Decorator#initialize
25
26
  - Azeroth::Model#initialize
26
27
  - Azeroth::ResourceBuilder#initialize
27
28
  - Azeroth::ResourceRouteBuilder#initialize
data/lib/azeroth.rb CHANGED
@@ -6,6 +6,7 @@
6
6
  #
7
7
  # @see Resourceable
8
8
  module Azeroth
9
+ autoload :Decorator, 'azeroth/decorator'
9
10
  autoload :Model, 'azeroth/model'
10
11
  autoload :Resourceable, 'azeroth/resourceable'
11
12
  autoload :ResourceBuilder, 'azeroth/resource_builder'
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinclair'
4
+
5
+ module Azeroth
6
+ # @api public
7
+ #
8
+ # Class to be used when decorating outputs
9
+ #
10
+ # @example
11
+ # class DummyModel
12
+ # include ActiveModel::Model
13
+ #
14
+ # attr_accessor :id, :first_name, :last_name, :age,
15
+ # :favorite_pokemon
16
+ #
17
+ # class Decorator < Azeroth::Decorator
18
+ # expose :name
19
+ # expose :age
20
+ # expose :favorite_pokemon, as: :pokemon
21
+ #
22
+ # def name
23
+ # [object.first_name, object.last_name].join(' ')
24
+ # end
25
+ # end
26
+ # end
27
+ #
28
+ # model = DummyModel.new(
29
+ # id: 100,
30
+ # first_name: 'John',
31
+ # last_name: 'Wick',
32
+ # favorite_pokemon: 'Arcanine'
33
+ # )
34
+ #
35
+ # decorator = DummyModel::Decorator.new(model)
36
+ #
37
+ # decorator.as_json # returns {
38
+ # # 'name' => 'John Wick',
39
+ # # 'age' => nil,
40
+ # # 'pokemon' => 'Arcanine'
41
+ # # }
42
+ class Decorator
43
+ class << self
44
+ # @api private
45
+ #
46
+ # All attributes exposed
47
+ #
48
+ # @return [Array<Symbol>]
49
+ def attributes
50
+ @attributes ||= []
51
+ end
52
+
53
+ private
54
+
55
+ # rubocop:disable Naming/UncommunicativeMethodParamName
56
+
57
+ # @visibility public
58
+ # @api public
59
+ # @private
60
+ #
61
+ # Expose attributes on json decorated
62
+ #
63
+ # @param attribute [Symbol,String] attribute to be exposed
64
+ # @param as [Symbol,String] name of the attribute on the json
65
+ #
66
+ # @return [Array<Symbol>]
67
+ #
68
+ # @example
69
+ # class DummyModel
70
+ # include ActiveModel::Model
71
+ #
72
+ # attr_accessor :id, :first_name, :last_name, :age,
73
+ # :favorite_pokemon
74
+ #
75
+ # class Decorator < Azeroth::Decorator
76
+ # expose :name
77
+ # expose :age
78
+ # expose :favorite_pokemon, as: :pokemon
79
+ #
80
+ # def name
81
+ # [object.first_name, object.last_name].join(' ')
82
+ # end
83
+ # end
84
+ # end
85
+ def expose(attribute, as: attribute)
86
+ builder = Sinclair.new(self)
87
+ builder.add_method(as, "@object.#{attribute}")
88
+ builder.build
89
+
90
+ attributes << as.to_sym
91
+ end
92
+ # rubocop:enable Naming/UncommunicativeMethodParamName
93
+ end
94
+
95
+ # @api private
96
+ #
97
+ # @overload initialize(object)
98
+ # @param [Object] object to be decorated
99
+ # @overload initialize(array)
100
+ # @param array [Array] array of objects to be decorated
101
+ def initialize(object)
102
+ @object = object
103
+ end
104
+
105
+ # @api private
106
+ #
107
+ # Builds hash / Json from the given object
108
+ #
109
+ # When object is an iterator, decoration is applied to each
110
+ # and an array is returned
111
+ #
112
+ # @param *args [Hash] options (to be implemented)
113
+ #
114
+ # @return [Hash]
115
+ def as_json(*args)
116
+ return array_as_json(*args) if enum?
117
+
118
+ {}.tap do |hash|
119
+ self.class.attributes.each do |method|
120
+ hash[method.to_s] = public_send(method)
121
+ end
122
+ end
123
+ end
124
+
125
+ private
126
+
127
+ attr_reader :object
128
+ # @method object
129
+ # @api private
130
+ #
131
+ # Object to be decorated
132
+ #
133
+ # @return [Object]
134
+
135
+ # @api private
136
+ # @private
137
+ #
138
+ # Checks if object is an enumerable
139
+ #
140
+ # @return [TrueClass,FalseClass]
141
+ def enum?
142
+ object.is_a?(Enumerable)
143
+ end
144
+
145
+ # @api private
146
+ # @private
147
+ #
148
+ # Iterate over enumerable decorating each entry
149
+ #
150
+ # @return [Array<Hash>]
151
+ def array_as_json(*args)
152
+ object.map do |item|
153
+ self.class.new(item).as_json(*args)
154
+ end
155
+ end
156
+ end
157
+ end
data/lib/azeroth/model.rb CHANGED
@@ -6,17 +6,20 @@ module Azeroth
6
6
  #
7
7
  # Model responsible for making the conection to the resource model class
8
8
  class Model
9
- attr_reader :name
10
- # @method name
11
- # @api private
12
- #
9
+ # @param name [String,Symbol] name of the resource
10
+ def initialize(name)
11
+ if name.is_a?(Class)
12
+ @klass = name
13
+ else
14
+ @name = name.to_s
15
+ end
16
+ end
17
+
13
18
  # Returns the name of the resource represented by the model
14
19
  #
15
20
  # @return [String]
16
-
17
- # @param name [String,Symbol] name of the resource
18
- def initialize(name)
19
- @name = name.to_s
21
+ def name
22
+ @name ||= klass.name.gsub(/.*::/, '').underscore
20
23
  end
21
24
 
22
25
  # Resource class (real model class)
@@ -32,5 +35,30 @@ module Azeroth
32
35
  def plural
33
36
  name.pluralize
34
37
  end
38
+
39
+ # Decorates object to return a hash
40
+ #
41
+ # Decorate uses klass::Decorator to decorate.
42
+ #
43
+ # When no decorator has been defined, object will
44
+ # receive an +#as_json+ call instead
45
+ #
46
+ # @return [Hash]
47
+ def decorate(object)
48
+ decorator_class.new(object).as_json
49
+ rescue NameError
50
+ object.as_json
51
+ end
52
+
53
+ private
54
+
55
+ # @private
56
+ #
57
+ # Returns decorator class for the object
58
+ #
59
+ # @return [Class] subclass of {Decorator}
60
+ def decorator_class
61
+ @decorator_class ||= klass::Decorator
62
+ end
35
63
  end
36
64
  end
@@ -19,6 +19,12 @@ module Azeroth
19
19
 
20
20
  private
21
21
 
22
+ # @api private
23
+ # @private
24
+ #
25
+ # Perform rendering of an action based on the requested format
26
+ #
27
+ # @return [String]
22
28
  def render_basic
23
29
  action = params[:action]
24
30
  respond_to do |format|
@@ -27,6 +33,12 @@ module Azeroth
27
33
  end
28
34
  end
29
35
 
36
+ # @api private
37
+ # @private
38
+ #
39
+ # returns 404 as HTTP status
40
+ #
41
+ # @return [TrueClass]
30
42
  def not_found
31
43
  head :not_found
32
44
  end
@@ -135,6 +135,9 @@ module Azeroth
135
135
  RoutesBuilder.new(model, builder, options).append
136
136
  end
137
137
 
138
+ # Returns all updatable attributes
139
+ #
140
+ # @return [Array<String>]
138
141
  def permitted_attributes
139
142
  @permitted_attributes ||= klass.attribute_names - ['id']
140
143
  end
@@ -11,6 +11,15 @@ module Azeroth
11
11
  #
12
12
  # @param name [String, Symbol] Name of the resource
13
13
  # @param options [Hash]
14
+ #
15
+ # @return [Array<MethodDefinition>]
16
+ #
17
+ # @example
18
+ # class DocumentsController < ApplicationController
19
+ # include Azeroth::Resourceable
20
+ #
21
+ # resource_for :document
22
+ # end
14
23
  def resource_for(name, **options)
15
24
  Builder.new(
16
25
  self, name, Azeroth::Options.new(options)
@@ -57,12 +57,22 @@ module Azeroth
57
57
  #
58
58
  # @return [Array<Sinclair::MethodDefinition>]
59
59
 
60
+ # @private
61
+ #
62
+ # Method code to update route
63
+ #
64
+ # @return [String]
60
65
  def update_code
61
66
  <<-RUBY
62
67
  render json: update_resource
63
68
  RUBY
64
69
  end
65
70
 
71
+ # @private
72
+ #
73
+ # Method code to create route
74
+ #
75
+ # @return [String]
66
76
  def create_code
67
77
  <<-RUBY
68
78
  render json: create_resource
@@ -71,7 +81,7 @@ module Azeroth
71
81
 
72
82
  # @private
73
83
  #
74
- # Method code to destrou route
84
+ # Method code to destroy route
75
85
  #
76
86
  # @return [String]
77
87
  def destroy_code
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Azeroth
4
- VERSION = '0.0.6'
4
+ VERSION = '0.0.7'
5
5
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Document
4
+ class Decorator < Azeroth::Decorator
5
+ expose :name
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DummyModel
4
+ include ActiveModel::Model
5
+
6
+ attr_accessor :id, :first_name, :last_name, :age,
7
+ :favorite_pokemon
8
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DummyModel
4
+ class Decorator < Azeroth::Decorator
5
+ expose :name
6
+ expose :age
7
+ expose :favorite_pokemon, as: :pokemon
8
+
9
+ def name
10
+ [object.first_name, object.last_name].join(' ')
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class User < ActiveRecord::Base
4
+ end
@@ -5,5 +5,12 @@ ActiveRecord::Schema.define do
5
5
 
6
6
  create_table :documents, force: true do |t|
7
7
  t.string :name
8
+ t.string :reference
9
+ end
10
+
11
+ create_table :users, force: true do |t|
12
+ t.string :name
13
+ t.string :email
14
+ t.string :reference
8
15
  end
9
16
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Azeroth::Decorator do
4
+ subject(:decorator) { DummyModel::Decorator.new(object) }
5
+
6
+ let(:object) do
7
+ DummyModel.new(
8
+ id: 100,
9
+ first_name: 'John',
10
+ last_name: 'Wick',
11
+ favorite_pokemon: 'Arcanine'
12
+ )
13
+ end
14
+
15
+ describe '#as_json' do
16
+ it 'returns exposed attributes' do
17
+ expect(decorator.as_json).to eq(
18
+ 'name' => 'John Wick',
19
+ 'age' => nil,
20
+ 'pokemon' => 'Arcanine'
21
+ )
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Azeroth::Decorator do
4
+ subject(:decorator) { DummyModel::Decorator.new(object) }
5
+
6
+ let(:model) { build(:dummy_model) }
7
+ let(:object) { model }
8
+
9
+ describe '#as_json' do
10
+ context 'when object is just a model' do
11
+ let(:expected_json) do
12
+ {
13
+ name: "#{model.first_name} #{model.last_name}",
14
+ age: model.age,
15
+ pokemon: model.favorite_pokemon
16
+ }.stringify_keys
17
+ end
18
+
19
+ it 'returns meta data defined json' do
20
+ expect(decorator.as_json).to eq(expected_json)
21
+ end
22
+ end
23
+
24
+ context 'when object is an array' do
25
+ let(:object) { [model, other_model] }
26
+
27
+ let(:other_model) do
28
+ build(
29
+ :dummy_model,
30
+ first_name: 'dum',
31
+ age: 65,
32
+ favorite_pokemon: :bulbasaur
33
+ )
34
+ end
35
+
36
+ let(:expected_json) do
37
+ [
38
+ {
39
+ name: "#{model.first_name} #{model.last_name}",
40
+ age: model.age,
41
+ pokemon: model.favorite_pokemon
42
+ }, {
43
+ name: "#{other_model.first_name} #{other_model.last_name}",
44
+ age: other_model.age,
45
+ pokemon: other_model.favorite_pokemon
46
+ }
47
+ ].map(&:stringify_keys)
48
+ end
49
+
50
+ it 'returns meta data defined json' do
51
+ expect(decorator.as_json).to eq(expected_json)
52
+ end
53
+ end
54
+
55
+ context 'when object is just an active record model' do
56
+ subject(:decorator) { Document::Decorator.new(object) }
57
+
58
+ let(:reference) { SecureRandom.uuid }
59
+ let!(:model) { create(:document, reference: reference) }
60
+
61
+ let(:expected_json) do
62
+ {
63
+ name: model.name
64
+ }.stringify_keys
65
+ end
66
+
67
+ it 'returns meta data defined json' do
68
+ expect(decorator.as_json).to eq(expected_json)
69
+ end
70
+ end
71
+
72
+ context 'when object is an active record relation' do
73
+ subject(:decorator) { Document::Decorator.new(object) }
74
+
75
+ let(:reference) { SecureRandom.uuid }
76
+ let!(:model) { create(:document, reference: reference) }
77
+ let(:object) { Document.where(reference: reference) }
78
+ let!(:other_model) { create(:document, reference: reference) }
79
+
80
+ let(:expected_json) do
81
+ [
82
+ {
83
+ name: model.name
84
+ }, {
85
+ name: other_model.name
86
+ }
87
+ ].map(&:stringify_keys)
88
+ end
89
+
90
+ it 'returns meta data defined json' do
91
+ expect(decorator.as_json).to eq(expected_json)
92
+ end
93
+ end
94
+ end
95
+ end
@@ -30,4 +30,94 @@ describe Azeroth::Model do
30
30
 
31
31
  it_behaves_like 'a model wrapper'
32
32
  end
33
+
34
+ context 'when initializing with string' do
35
+ let(:input) { 'document' }
36
+
37
+ it_behaves_like 'a model wrapper'
38
+ end
39
+
40
+ context 'when initializing with model' do
41
+ let(:input) { Document }
42
+
43
+ it_behaves_like 'a model wrapper'
44
+ end
45
+
46
+ describe '#decorate' do
47
+ context 'when model has a decorator' do
48
+ let(:input) { :document }
49
+ let(:reference) { SecureRandom.uuid }
50
+ let!(:object) { create(:document, reference: reference) }
51
+
52
+ context 'when object is just a model and has decorator' do
53
+ let!(:object) { create(:document, reference: reference) }
54
+
55
+ let(:expected_json) do
56
+ {
57
+ name: object.name
58
+ }.stringify_keys
59
+ end
60
+
61
+ it 'returns meta data defined json' do
62
+ expect(model.decorate(object)).to eq(expected_json)
63
+ end
64
+ end
65
+
66
+ context 'when object is an active record relation' do
67
+ let(:relation) { Document.where(reference: reference) }
68
+ let!(:other_object) { create(:document, reference: reference) }
69
+
70
+ let(:expected_json) do
71
+ [
72
+ {
73
+ name: object.name
74
+ }, {
75
+ name: other_object.name
76
+ }
77
+ ].map(&:stringify_keys)
78
+ end
79
+
80
+ it 'returns meta data defined json' do
81
+ expect(model.decorate(relation)).to eq(expected_json)
82
+ end
83
+ end
84
+ end
85
+
86
+ context 'when model is an active record that does not have a decorator' do
87
+ let(:input) { Class.new(User) }
88
+ let(:reference) { SecureRandom.uuid }
89
+ let!(:object) { create(:user, reference: reference) }
90
+
91
+ context 'when object is just a model' do
92
+ it 'returns regular as_json' do
93
+ expect(model.decorate(object)).to eq(object.as_json)
94
+ end
95
+ end
96
+
97
+ context 'when object is an active record relation' do
98
+ let(:relation) { User.where(reference: reference) }
99
+
100
+ before { create(:user, reference: reference) }
101
+
102
+ it 'returns regular as_json' do
103
+ expect(model.decorate(relation)).to eq(relation.as_json)
104
+ end
105
+ end
106
+ end
107
+
108
+ context 'when model is an active model that does not have a decorator' do
109
+ let(:input) do
110
+ Class.new do
111
+ include ActiveModel::Model
112
+ attr_accessor :id, :name
113
+ end
114
+ end
115
+
116
+ let(:object) { input.new(id: 1, name: 'my name') }
117
+
118
+ it 'returns regular as_json' do
119
+ expect(model.decorate(object)).to eq(object.as_json)
120
+ end
121
+ end
122
+ end
33
123
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :document, class: ::Document do
5
+ sequence(:name) { |n| "Name-#{n}" }
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :dummy_model, class: ::DummyModel do
5
+ sequence(:id)
6
+ first_name { 'dummy' }
7
+ last_name { 'bot' }
8
+ age { 21 }
9
+ favorite_pokemon { 'squirtle' }
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :user, class: ::User do
5
+ sequence(:name) { |n| "Name-#{n}" }
6
+ sequence(:email) { |n| "user-#{n}@email.com" }
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.configure do |config|
4
+ config.include FactoryBot::Syntax::Methods
5
+ end
6
+
7
+ FactoryBot.find_definitions
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: azeroth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darthjee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-10 00:00:00.000000000 Z
11
+ date: 2019-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.16.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: factory_bot
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 5.1.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 5.1.1
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: pry
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -386,6 +400,7 @@ files:
386
400
  - config/yardstick.yml
387
401
  - docker-compose.yml
388
402
  - lib/azeroth.rb
403
+ - lib/azeroth/decorator.rb
389
404
  - lib/azeroth/model.rb
390
405
  - lib/azeroth/options.rb
391
406
  - lib/azeroth/resource_builder.rb
@@ -415,6 +430,10 @@ files:
415
430
  - spec/dummy/app/models/application_record.rb
416
431
  - spec/dummy/app/models/concerns/.keep
417
432
  - spec/dummy/app/models/document.rb
433
+ - spec/dummy/app/models/document/decorator.rb
434
+ - spec/dummy/app/models/dummy_model.rb
435
+ - spec/dummy/app/models/dummy_model/decorator.rb
436
+ - spec/dummy/app/models/user.rb
418
437
  - spec/dummy/app/views/documents/edit.html
419
438
  - spec/dummy/app/views/documents/index.html
420
439
  - spec/dummy/app/views/documents/new.html
@@ -464,6 +483,8 @@ files:
464
483
  - spec/dummy/storage/.keep
465
484
  - spec/dummy/tmp/.keep
466
485
  - spec/dummy/tmp/storage/.keep
486
+ - spec/integration/yard/azeroth/decorator_spec.rb
487
+ - spec/lib/azeroth/decorator_spec.rb
467
488
  - spec/lib/azeroth/model_spec.rb
468
489
  - spec/lib/azeroth/resource_builder_spec.rb
469
490
  - spec/lib/azeroth/resource_route_builder_spec.rb
@@ -474,6 +495,10 @@ files:
474
495
  - spec/support/app/controllers/resource_builder_controller.rb
475
496
  - spec/support/app/controllers/resource_route_builder_controller.rb
476
497
  - spec/support/app/controllers/routes_builder_controller.rb
498
+ - spec/support/factories/document.rb
499
+ - spec/support/factories/dummy_model.rb
500
+ - spec/support/factories/user.rb
501
+ - spec/support/factory_bot.rb
477
502
  - spec/support/matchers/add_method.rb
478
503
  - spec/support/shared_examples/resource_routes.rb
479
504
  homepage: https://github.com/darthjee/azeroth
@@ -520,6 +545,10 @@ test_files:
520
545
  - spec/dummy/app/models/application_record.rb
521
546
  - spec/dummy/app/models/concerns/.keep
522
547
  - spec/dummy/app/models/document.rb
548
+ - spec/dummy/app/models/document/decorator.rb
549
+ - spec/dummy/app/models/dummy_model.rb
550
+ - spec/dummy/app/models/dummy_model/decorator.rb
551
+ - spec/dummy/app/models/user.rb
523
552
  - spec/dummy/app/views/documents/edit.html
524
553
  - spec/dummy/app/views/documents/index.html
525
554
  - spec/dummy/app/views/documents/new.html
@@ -569,6 +598,8 @@ test_files:
569
598
  - spec/dummy/storage/.keep
570
599
  - spec/dummy/tmp/.keep
571
600
  - spec/dummy/tmp/storage/.keep
601
+ - spec/integration/yard/azeroth/decorator_spec.rb
602
+ - spec/lib/azeroth/decorator_spec.rb
572
603
  - spec/lib/azeroth/model_spec.rb
573
604
  - spec/lib/azeroth/resource_builder_spec.rb
574
605
  - spec/lib/azeroth/resource_route_builder_spec.rb
@@ -579,5 +610,9 @@ test_files:
579
610
  - spec/support/app/controllers/resource_builder_controller.rb
580
611
  - spec/support/app/controllers/resource_route_builder_controller.rb
581
612
  - spec/support/app/controllers/routes_builder_controller.rb
613
+ - spec/support/factories/document.rb
614
+ - spec/support/factories/dummy_model.rb
615
+ - spec/support/factories/user.rb
616
+ - spec/support/factory_bot.rb
582
617
  - spec/support/matchers/add_method.rb
583
618
  - spec/support/shared_examples/resource_routes.rb