azeroth 1.1.0 → 2.1.0
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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +3 -3
- data/.gitignore +2 -0
- data/.rubocop.yml +16 -2
- data/Dockerfile +2 -2
- data/Gemfile +30 -0
- data/Makefile +6 -0
- data/README.md +5 -3
- data/azeroth.gemspec +6 -36
- data/lib/azeroth/controller_interface.rb +3 -4
- data/lib/azeroth/decorator/hash_builder.rb +1 -0
- data/lib/azeroth/decorator.rb +5 -8
- data/lib/azeroth/model.rb +1 -0
- data/lib/azeroth/options.rb +16 -0
- data/lib/azeroth/params_builder.rb +13 -3
- data/lib/azeroth/request_handler.rb +3 -2
- data/lib/azeroth/resource_builder.rb +15 -3
- data/lib/azeroth/resourceable/class_methods.rb +15 -2
- data/lib/azeroth/resourceable/endpoints_builder.rb +104 -0
- data/lib/azeroth/resourceable/{builder.rb → resources_builder.rb} +8 -19
- data/lib/azeroth/resourceable.rb +17 -2
- data/lib/azeroth/version.rb +1 -1
- data/spec/dummy/config/environments/production.rb +2 -2
- data/spec/dummy/config/puma.rb +3 -3
- data/spec/dummy/db/schema.rb +1 -1
- data/spec/integration/readme/controllers/games_controller_spec.rb +1 -1
- data/spec/integration/yard/controllers/games_controller_spec.rb +1 -1
- data/spec/integration/yard/controllers/paginated_documents_controller_spec.rb +1 -1
- data/spec/lib/azeroth/controller_interface_spec.rb +1 -1
- data/spec/lib/azeroth/decorator_spec.rb +0 -2
- data/spec/lib/azeroth/params_builder_spec.rb +49 -33
- data/spec/lib/azeroth/request_handler/update_spec.rb +1 -1
- data/spec/lib/azeroth/resource_builder_spec.rb +41 -17
- data/spec/lib/azeroth/resourceable/endpoints_builder_spec.rb +90 -0
- data/spec/lib/azeroth/resourceable/resources_builder_spec.rb +32 -0
- data/spec/lib/azeroth/resourceable_spec.rb +37 -37
- data/spec/spec_helper.rb +1 -1
- data/spec/support/app/controllers/controller.rb +1 -0
- data/spec/support/app/controllers/params_builder_controller.rb +2 -2
- data/spec/support/matchers/add_method.rb +6 -4
- data/spec/support/shared_examples/request_handler.rb +1 -5
- metadata +15 -575
- data/spec/lib/azeroth/resourceable/builder_spec.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bb67d32bc51b4aa26e666ec6d4f942dba16b454d07cf65cb5ebff1f052766ae
|
4
|
+
data.tar.gz: b5d68c84445bde028dcc0038cfe075947de6d45ffb31afb5f7bec088de680a09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2604e2557de1bf029e1fbb0f32d16957e150a302c80b4db0c95e70dc2c7809f4883365b0e7f5756dfb8348aafd304f7262087ca80f95fa3f24e626a4dafe2b0
|
7
|
+
data.tar.gz: a54c254012d8de5f00c799a5cc9fa3e65467d8c624e3ad1d8eff8adf892f3bd7ec6b80134abd61766e0cadf37719a56d607b9d241af7c038fb56591b93255e94
|
data/.circleci/config.yml
CHANGED
@@ -22,7 +22,7 @@ workflows:
|
|
22
22
|
jobs:
|
23
23
|
test:
|
24
24
|
docker:
|
25
|
-
- image: darthjee/circleci_rails_gems:
|
25
|
+
- image: darthjee/circleci_rails_gems:2.0.0
|
26
26
|
environment:
|
27
27
|
PROJECT: azeroth
|
28
28
|
steps:
|
@@ -41,7 +41,7 @@ jobs:
|
|
41
41
|
command: cc-test-reporter after-build --exit-code $?
|
42
42
|
checks:
|
43
43
|
docker:
|
44
|
-
- image: darthjee/circleci_rails_gems:
|
44
|
+
- image: darthjee/circleci_rails_gems:2.0.0
|
45
45
|
environment:
|
46
46
|
PROJECT: azeroth
|
47
47
|
steps:
|
@@ -66,7 +66,7 @@ jobs:
|
|
66
66
|
command: check_specs
|
67
67
|
build-and-release:
|
68
68
|
docker:
|
69
|
-
- image: darthjee/circleci_rails_gems:
|
69
|
+
- image: darthjee/circleci_rails_gems:2.0.0
|
70
70
|
environment:
|
71
71
|
PROJECT: azeroth
|
72
72
|
steps:
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -2,7 +2,8 @@ require: rubocop-rspec
|
|
2
2
|
inherit_from: .rubocop_todo.yml
|
3
3
|
|
4
4
|
AllCops:
|
5
|
-
TargetRubyVersion:
|
5
|
+
TargetRubyVersion: 3.3
|
6
|
+
NewCops: enable
|
6
7
|
|
7
8
|
Metrics/BlockLength:
|
8
9
|
Exclude:
|
@@ -12,7 +13,7 @@ Metrics/BlockLength:
|
|
12
13
|
- 'azeroth.gemspec'
|
13
14
|
|
14
15
|
RSpec/NestedGroups:
|
15
|
-
Max:
|
16
|
+
Max: 5
|
16
17
|
|
17
18
|
RSpec/AlignLeftLetBrace:
|
18
19
|
Enabled: true
|
@@ -35,3 +36,16 @@ RSpec/MultipleExpectations:
|
|
35
36
|
Exclude:
|
36
37
|
- 'spec/integration/readme/**/*_spec.rb'
|
37
38
|
- 'spec/integration/yard/**/*_spec.rb'
|
39
|
+
|
40
|
+
RSpec/MultipleMemoizedHelpers:
|
41
|
+
Enabled: false
|
42
|
+
|
43
|
+
Gemspec/RequireMFA:
|
44
|
+
Enabled: false
|
45
|
+
|
46
|
+
Lint/EmptyBlock:
|
47
|
+
Exclude:
|
48
|
+
- 'spec/**/*_spec.rb'
|
49
|
+
|
50
|
+
Lint/EmptyClass:
|
51
|
+
Enabled: false
|
data/Dockerfile
CHANGED
data/Gemfile
CHANGED
@@ -3,3 +3,33 @@
|
|
3
3
|
source 'https://rubygems.org'
|
4
4
|
|
5
5
|
gemspec
|
6
|
+
|
7
|
+
gem 'actionpack', '7.2.2.1'
|
8
|
+
gem 'activerecord', '7.2.2.1'
|
9
|
+
gem 'bundler', '~> 2.6.8'
|
10
|
+
gem 'factory_bot', '6.2.1'
|
11
|
+
gem 'minitest', '5.25.4'
|
12
|
+
gem 'nokogiri', '1.18.8'
|
13
|
+
gem 'pry', '0.14.2'
|
14
|
+
gem 'pry-nav', '1.0.0'
|
15
|
+
gem 'rails', '7.2.2.1'
|
16
|
+
gem 'rails-controller-testing', '1.0.5'
|
17
|
+
gem 'rake', '13.2.1'
|
18
|
+
gem 'reek', '6.4.0'
|
19
|
+
gem 'rspec', '3.13.0'
|
20
|
+
gem 'rspec-collection_matchers', '1.2.1'
|
21
|
+
gem 'rspec-core', '3.13.3'
|
22
|
+
gem 'rspec-expectations', '3.13.3'
|
23
|
+
gem 'rspec-mocks', '3.13.2'
|
24
|
+
gem 'rspec-rails', '8.0.0'
|
25
|
+
gem 'rspec-support', '3.13.2'
|
26
|
+
gem 'rubocop', '1.75.5'
|
27
|
+
gem 'rubocop-rspec', '3.6.0'
|
28
|
+
gem 'rubycritic', '4.9.2'
|
29
|
+
gem 'shoulda-matchers', '6.5.0'
|
30
|
+
gem 'simplecov', '0.22.0'
|
31
|
+
gem 'sprockets-rails', '3.5.2'
|
32
|
+
gem 'sqlite3', '1.4.2'
|
33
|
+
gem 'tzinfo-data', '~> 1.2025.2'
|
34
|
+
gem 'yard', '0.9.37'
|
35
|
+
gem 'yardstick', '0.9.9'
|
data/Makefile
ADDED
data/README.md
CHANGED
@@ -11,7 +11,7 @@ Azeroth
|
|
11
11
|
|
12
12
|
Yard Documentation
|
13
13
|
-------------------
|
14
|
-
[https://www.rubydoc.info/gems/azeroth/
|
14
|
+
[https://www.rubydoc.info/gems/azeroth/2.1.0](https://www.rubydoc.info/gems/azeroth/2.1.0)
|
15
15
|
|
16
16
|
Azeroth has been designed making the coding of controllers easier
|
17
17
|
as routes in controllers are usually copy, paste and replace of same
|
@@ -25,9 +25,9 @@ does not perform database operations
|
|
25
25
|
Future versions will enable `html` rendering to also perform
|
26
26
|
database operations.
|
27
27
|
|
28
|
-
Current Release: [
|
28
|
+
Current Release: [2.1.0](https://github.com/darthjee/azeroth/tree/2.1.0)
|
29
29
|
|
30
|
-
[Next release](https://github.com/darthjee/azeroth/compare/
|
30
|
+
[Next release](https://github.com/darthjee/azeroth/compare/2.1.0...master)
|
31
31
|
|
32
32
|
Installation
|
33
33
|
---------------
|
@@ -68,6 +68,8 @@ It accepts options
|
|
68
68
|
- update_with: Method/Block to be ran when updating the reource on update
|
69
69
|
- paginated: Flag when pagination should be applied
|
70
70
|
- per_page: Number of items returned when pagination is active
|
71
|
+
- id_key: key used to find a model. id by default
|
72
|
+
- param_key: parameter key used to find the model
|
71
73
|
|
72
74
|
```ruby
|
73
75
|
# publishers_controller.rb
|
data/azeroth.gemspec
CHANGED
@@ -10,46 +10,16 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.authors = ['Darthjee']
|
11
11
|
gem.email = ['darthjee@gmail.com']
|
12
12
|
gem.summary = 'Azeroth'
|
13
|
-
gem.description =
|
13
|
+
gem.description = 'Rails controller builder'
|
14
14
|
gem.homepage = 'https://github.com/darthjee/azeroth'
|
15
|
+
gem.required_ruby_version = '>= 3.3.1'
|
15
16
|
|
16
17
|
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
18
|
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ['lib']
|
20
20
|
|
21
|
-
gem.
|
22
|
-
gem.
|
23
|
-
gem.
|
24
|
-
gem.
|
25
|
-
|
26
|
-
gem.add_development_dependency 'actionpack', '7.0.4.3'
|
27
|
-
gem.add_development_dependency 'activerecord', '7.0.4.3'
|
28
|
-
gem.add_development_dependency 'bundler', '~> 2.4.8'
|
29
|
-
gem.add_development_dependency 'factory_bot', '6.2.1'
|
30
|
-
gem.add_development_dependency 'minitest', '5.16.2'
|
31
|
-
gem.add_development_dependency 'nokogiri', '1.13.8'
|
32
|
-
gem.add_development_dependency 'pry', '0.14.1'
|
33
|
-
gem.add_development_dependency 'pry-nav', '1.0.0'
|
34
|
-
gem.add_development_dependency 'rails', '7.0.4.3'
|
35
|
-
gem.add_development_dependency 'rails-controller-testing', '1.0.5'
|
36
|
-
gem.add_development_dependency 'rake', '13.0.6'
|
37
|
-
gem.add_development_dependency 'reek', '6.0.3'
|
38
|
-
gem.add_development_dependency 'rspec', '3.11.0'
|
39
|
-
gem.add_development_dependency 'rspec-collection_matchers', '1.2.0'
|
40
|
-
gem.add_development_dependency 'rspec-core', '3.11.0'
|
41
|
-
gem.add_development_dependency 'rspec-expectations', '3.11.0'
|
42
|
-
gem.add_development_dependency 'rspec-mocks', '3.11.1'
|
43
|
-
gem.add_development_dependency 'rspec-rails', '5.1.2'
|
44
|
-
gem.add_development_dependency 'rspec-support', '3.11.0'
|
45
|
-
gem.add_development_dependency 'rubocop', '0.80.1'
|
46
|
-
gem.add_development_dependency 'rubocop-rspec', '1.38.1'
|
47
|
-
gem.add_development_dependency 'rubycritic', '4.7.0'
|
48
|
-
gem.add_development_dependency 'shoulda-matchers', '4.3.0'
|
49
|
-
gem.add_development_dependency 'simplecov', '0.21.2'
|
50
|
-
gem.add_development_dependency 'sprockets-rails', '3.4.2'
|
51
|
-
gem.add_development_dependency 'sqlite3', '1.4.2'
|
52
|
-
gem.add_development_dependency 'tzinfo-data', '~> 1.2022.1'
|
53
|
-
gem.add_development_dependency 'yard', '0.9.27'
|
54
|
-
gem.add_development_dependency 'yardstick', '0.9.9'
|
21
|
+
gem.add_dependency 'activesupport', '~> 7.2.x'
|
22
|
+
gem.add_dependency 'darthjee-active_ext', '>= 1.3.2'
|
23
|
+
gem.add_dependency 'jace', '>= 0.1.1'
|
24
|
+
gem.add_dependency 'sinclair', '>= 3.0.0'
|
55
25
|
end
|
@@ -60,6 +60,7 @@ module Azeroth
|
|
60
60
|
private
|
61
61
|
|
62
62
|
attr_reader :controller
|
63
|
+
|
63
64
|
# @method controller
|
64
65
|
# @private
|
65
66
|
# @api private
|
@@ -74,13 +75,11 @@ module Azeroth
|
|
74
75
|
#
|
75
76
|
# @param method_name [Symbol] name of the method
|
76
77
|
# called
|
77
|
-
# @param args [Array<Object>] arguments of the
|
78
|
-
# method called
|
79
78
|
#
|
80
79
|
# @return [Object]
|
81
|
-
def method_missing(method_name, *
|
80
|
+
def method_missing(method_name, *)
|
82
81
|
if controller.respond_to?(method_name, true)
|
83
|
-
controller.send(method_name, *
|
82
|
+
controller.send(method_name, *)
|
84
83
|
else
|
85
84
|
super
|
86
85
|
end
|
data/lib/azeroth/decorator.rb
CHANGED
@@ -94,13 +94,11 @@ module Azeroth
|
|
94
94
|
# When object is an iterator, decoration is applied to each
|
95
95
|
# and an array is returned
|
96
96
|
#
|
97
|
-
# @param args [Hash] options (to be implemented)
|
98
|
-
#
|
99
97
|
# @return [Hash]
|
100
|
-
def as_json(*
|
98
|
+
def as_json(*)
|
101
99
|
return nil if object.nil?
|
102
100
|
|
103
|
-
return array_as_json(*
|
101
|
+
return array_as_json(*) if enum?
|
104
102
|
|
105
103
|
HashBuilder.new(self).as_json
|
106
104
|
end
|
@@ -108,6 +106,7 @@ module Azeroth
|
|
108
106
|
private
|
109
107
|
|
110
108
|
attr_reader :object
|
109
|
+
|
111
110
|
# @method object
|
112
111
|
# @api private
|
113
112
|
#
|
@@ -145,13 +144,11 @@ module Azeroth
|
|
145
144
|
#
|
146
145
|
# @param method_name [Symbol] name of the method
|
147
146
|
# called
|
148
|
-
# @param args [Array<Object>] arguments of the
|
149
|
-
# method called
|
150
147
|
#
|
151
148
|
# @return [Object]
|
152
|
-
def method_missing(method_name, *
|
149
|
+
def method_missing(method_name, *)
|
153
150
|
if object.respond_to?(method_name)
|
154
|
-
object.public_send(method_name, *
|
151
|
+
object.public_send(method_name, *)
|
155
152
|
else
|
156
153
|
super
|
157
154
|
end
|
data/lib/azeroth/model.rb
CHANGED
data/lib/azeroth/options.rb
CHANGED
@@ -17,6 +17,8 @@ module Azeroth
|
|
17
17
|
DEFAULT_OPTIONS = {
|
18
18
|
only: %i[create destroy edit index new show update],
|
19
19
|
except: [],
|
20
|
+
id_key: :id,
|
21
|
+
param_key: :id,
|
20
22
|
decorator: true,
|
21
23
|
before_save: nil,
|
22
24
|
after_save: nil,
|
@@ -65,6 +67,20 @@ module Azeroth
|
|
65
67
|
#
|
66
68
|
# @return [Array<String,Symbol>]
|
67
69
|
|
70
|
+
# @method id_key
|
71
|
+
# @api private
|
72
|
+
#
|
73
|
+
# key used to find a model. id by default
|
74
|
+
#
|
75
|
+
# @return [Symbol]
|
76
|
+
|
77
|
+
# @method param_key
|
78
|
+
# @api private
|
79
|
+
#
|
80
|
+
# parameter key used to find the model
|
81
|
+
#
|
82
|
+
# @return [Symbol]
|
83
|
+
|
68
84
|
# @method decorator
|
69
85
|
# @api private
|
70
86
|
#
|
@@ -6,14 +6,15 @@ module Azeroth
|
|
6
6
|
#
|
7
7
|
# Class responsible for adding params handling methods to a controller
|
8
8
|
class ParamsBuilder < Sinclair::Model
|
9
|
-
# @!method initialize(model:, builder:)
|
9
|
+
# @!method initialize(model:, builder:, options:)
|
10
10
|
# @api private
|
11
11
|
#
|
12
12
|
# @param model [Model] Resource interface
|
13
13
|
# @param builder [Sinclair] Methods builder
|
14
|
+
# @param options [Azeroth::Options] options
|
14
15
|
#
|
15
16
|
# @return [ParamsBuilder]
|
16
|
-
initialize_with(:model, :builder, writter: false)
|
17
|
+
initialize_with(:model, :builder, :options, writter: false)
|
17
18
|
|
18
19
|
# Append the params methods to be built
|
19
20
|
#
|
@@ -22,7 +23,8 @@ module Azeroth
|
|
22
23
|
method_name = name
|
23
24
|
allowed_attributes = permitted_attributes.map(&:to_sym)
|
24
25
|
|
25
|
-
|
26
|
+
param_key = options.param_key
|
27
|
+
add_method("#{name}_id") { params.require(param_key) }
|
26
28
|
add_method("#{name}_params") do
|
27
29
|
params.require(method_name)
|
28
30
|
.permit(*allowed_attributes)
|
@@ -47,6 +49,14 @@ module Azeroth
|
|
47
49
|
#
|
48
50
|
# @return [Sinclair]
|
49
51
|
|
52
|
+
# @method options
|
53
|
+
# @api private
|
54
|
+
# @private
|
55
|
+
#
|
56
|
+
# Methods builder
|
57
|
+
#
|
58
|
+
# @return [Azeroth::Options]
|
59
|
+
|
50
60
|
delegate :add_method, to: :builder
|
51
61
|
# @method add_method
|
52
62
|
# @api private
|
@@ -46,6 +46,7 @@ module Azeroth
|
|
46
46
|
private
|
47
47
|
|
48
48
|
attr_reader :controller, :model, :options
|
49
|
+
|
49
50
|
# @method controller
|
50
51
|
# @api private
|
51
52
|
# @private
|
@@ -119,8 +120,8 @@ module Azeroth
|
|
119
120
|
# Run a block triggering the event
|
120
121
|
#
|
121
122
|
# @return [Object] Result of given block
|
122
|
-
def trigger_event(event, &
|
123
|
-
options.event_registry.trigger(event, controller, &
|
123
|
+
def trigger_event(event, &)
|
124
|
+
options.event_registry.trigger(event, controller, &)
|
124
125
|
end
|
125
126
|
|
126
127
|
# @private
|
@@ -10,14 +10,15 @@ module Azeroth
|
|
10
10
|
# entries of a resource, and one for fetching an specific
|
11
11
|
# entry
|
12
12
|
class ResourceBuilder < Sinclair::Model
|
13
|
-
# @!method initialize(model:, builder:)
|
13
|
+
# @!method initialize(model:, builder:, options:)
|
14
14
|
# @api private
|
15
15
|
#
|
16
16
|
# @param model [Model] Resource model interface
|
17
17
|
# @param builder [Sinclair] method builder
|
18
|
+
# @param options [Azeroth::Options] options
|
18
19
|
#
|
19
20
|
# @return [ResourceBuilder]
|
20
|
-
initialize_with(:model, :builder, writter: false)
|
21
|
+
initialize_with(:model, :builder, :options, writter: false)
|
21
22
|
|
22
23
|
# Append methods to be built to the builder
|
23
24
|
#
|
@@ -27,7 +28,10 @@ module Azeroth
|
|
27
28
|
# @return [Array<Sinclair::MethodDefinition>]
|
28
29
|
def append
|
29
30
|
add_method(plural, "@#{plural} ||= #{model.klass}.all")
|
30
|
-
add_method(
|
31
|
+
add_method(
|
32
|
+
name,
|
33
|
+
"@#{name} ||= #{plural}.find_by!(#{id_key}: #{name}_id)"
|
34
|
+
)
|
31
35
|
end
|
32
36
|
|
33
37
|
# @method model
|
@@ -70,5 +74,13 @@ module Azeroth
|
|
70
74
|
# Return the pluralized version of resource name
|
71
75
|
#
|
72
76
|
# @return [String]
|
77
|
+
|
78
|
+
delegate :id_key, to: :options
|
79
|
+
# @method plural
|
80
|
+
# @api private
|
81
|
+
#
|
82
|
+
# key used to find a model. id by default
|
83
|
+
#
|
84
|
+
# @return [Symbol]
|
73
85
|
end
|
74
86
|
end
|
@@ -7,7 +7,7 @@ module Azeroth
|
|
7
7
|
#
|
8
8
|
# Class methods added by {Resourceable}
|
9
9
|
module ClassMethods
|
10
|
-
# Adds resource methods for resource
|
10
|
+
# Adds resource and routes methods for resource
|
11
11
|
#
|
12
12
|
# @param (see Resourceable.resource_for)
|
13
13
|
# @option (see Resourceable.resource_for)
|
@@ -16,10 +16,23 @@ module Azeroth
|
|
16
16
|
# @see (see Resourceable.resource_for)
|
17
17
|
# @example (see Resourceable.resource_for)
|
18
18
|
def resource_for(name, **options)
|
19
|
-
|
19
|
+
EndpointsBuilder.new(
|
20
20
|
self, name, Azeroth::Options.new(options)
|
21
21
|
).build
|
22
22
|
end
|
23
|
+
|
24
|
+
# Adds resource methods for resource
|
25
|
+
#
|
26
|
+
# @param (see Resourceable.model_for)
|
27
|
+
# @return (see Resourceable.model_for)
|
28
|
+
#
|
29
|
+
# @see (see Resourceable.model_for)
|
30
|
+
# @example (see Resourceable.model_for)
|
31
|
+
def model_for(name)
|
32
|
+
ResourcesBuilder.new(
|
33
|
+
self, name, Azeroth::Options.new({})
|
34
|
+
).build
|
35
|
+
end
|
23
36
|
end
|
24
37
|
end
|
25
38
|
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sinclair'
|
4
|
+
|
5
|
+
module Azeroth
|
6
|
+
module Resourceable
|
7
|
+
# @api private
|
8
|
+
# Builder responsible to add all methods to the controller
|
9
|
+
#
|
10
|
+
# Builder uses other builders to put together it's methods
|
11
|
+
#
|
12
|
+
# @see ResourceBuilder
|
13
|
+
# @see ResourceRouteBuilder
|
14
|
+
# @see RoutesBuilder
|
15
|
+
class EndpointsBuilder
|
16
|
+
# @param klass [ActionController::Base] Controller to
|
17
|
+
# to be changed
|
18
|
+
# @param model_name [Symbol,String]
|
19
|
+
# @param options [Options]
|
20
|
+
def initialize(klass, model_name, options)
|
21
|
+
@klass = klass
|
22
|
+
@options = options
|
23
|
+
@model = Azeroth::Model.new(model_name, options)
|
24
|
+
|
25
|
+
add_routes
|
26
|
+
ResourcesBuilder.new(klass, model_name, options).build
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
attr_reader :klass, :model, :options
|
32
|
+
|
33
|
+
# @method klass
|
34
|
+
# @api private
|
35
|
+
# @private
|
36
|
+
#
|
37
|
+
# Controller to changed
|
38
|
+
#
|
39
|
+
# @return [ActionController::Base]
|
40
|
+
|
41
|
+
# @method model
|
42
|
+
# @api private
|
43
|
+
# @private
|
44
|
+
#
|
45
|
+
# Model interface to resource model
|
46
|
+
#
|
47
|
+
# @return [Model]
|
48
|
+
|
49
|
+
# @method options
|
50
|
+
# @api private
|
51
|
+
# @private
|
52
|
+
#
|
53
|
+
# Options
|
54
|
+
#
|
55
|
+
# @return [Options]
|
56
|
+
|
57
|
+
delegate :build, :add_method, to: :builder
|
58
|
+
# @method build
|
59
|
+
# @api private
|
60
|
+
# @private
|
61
|
+
#
|
62
|
+
# build all the methods
|
63
|
+
#
|
64
|
+
# @return [Array<Sinclair::MethodDefinition>]
|
65
|
+
|
66
|
+
# @method add_method
|
67
|
+
# @api private
|
68
|
+
#
|
69
|
+
# Add method to be built
|
70
|
+
#
|
71
|
+
# @return [Array<Sinclair::MethodDefinition>]
|
72
|
+
|
73
|
+
delegate :name, to: :model
|
74
|
+
# @method name
|
75
|
+
# @api private
|
76
|
+
# @private
|
77
|
+
#
|
78
|
+
# Resource name
|
79
|
+
#
|
80
|
+
# @return [Symbol,String]
|
81
|
+
|
82
|
+
# @api private
|
83
|
+
# @private
|
84
|
+
#
|
85
|
+
# Returns a method builder
|
86
|
+
#
|
87
|
+
# @return [Sinclair]
|
88
|
+
#
|
89
|
+
# @see https://www.rubydoc.info/gems/sinclair Sinclair
|
90
|
+
def builder
|
91
|
+
@builder ||= Sinclair.new(klass)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Add metohods for each route
|
95
|
+
#
|
96
|
+
# @return [Array<Sinclair::MethodDefinition>]
|
97
|
+
def add_routes
|
98
|
+
RoutesBuilder.new(
|
99
|
+
model: model, builder: builder, options: options
|
100
|
+
).append
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -5,14 +5,12 @@ require 'sinclair'
|
|
5
5
|
module Azeroth
|
6
6
|
module Resourceable
|
7
7
|
# @api private
|
8
|
-
# Builder responsible to add
|
8
|
+
# Builder responsible to add resource / model methods to the controller
|
9
9
|
#
|
10
|
-
# Builder uses
|
10
|
+
# Builder uses {ResourceBuilder} to put together it's methods
|
11
11
|
#
|
12
12
|
# @see ResourceBuilder
|
13
|
-
|
14
|
-
# @see RoutesBuilder
|
15
|
-
class Builder
|
13
|
+
class ResourcesBuilder
|
16
14
|
# @param klass [ActionController::Base] Controller to
|
17
15
|
# to be changed
|
18
16
|
# @param model_name [Symbol,String]
|
@@ -24,13 +22,13 @@ module Azeroth
|
|
24
22
|
|
25
23
|
add_params
|
26
24
|
add_resource
|
27
|
-
add_routes
|
28
25
|
add_helpers
|
29
26
|
end
|
30
27
|
|
31
28
|
private
|
32
29
|
|
33
30
|
attr_reader :klass, :model, :options
|
31
|
+
|
34
32
|
# @method klass
|
35
33
|
# @api private
|
36
34
|
# @private
|
@@ -97,7 +95,7 @@ module Azeroth
|
|
97
95
|
# @return [Array<Sinclair::MethodDefinition>]
|
98
96
|
def add_params
|
99
97
|
ParamsBuilder.new(
|
100
|
-
model: model, builder: builder
|
98
|
+
model: model, builder: builder, options: options
|
101
99
|
).append
|
102
100
|
end
|
103
101
|
|
@@ -105,24 +103,15 @@ module Azeroth
|
|
105
103
|
#
|
106
104
|
# @return [Array<Sinclair::MethodDefinition>]
|
107
105
|
def add_resource
|
108
|
-
ResourceBuilder.new(model: model, builder: builder).append
|
109
|
-
end
|
110
|
-
|
111
|
-
# Add metohods for each route
|
112
|
-
#
|
113
|
-
# @return [Array<Sinclair::MethodDefinition>]
|
114
|
-
def add_routes
|
115
|
-
RoutesBuilder.new(
|
116
|
-
model: model, builder: builder, options: options
|
117
|
-
).append
|
106
|
+
ResourceBuilder.new(model: model, builder: builder, options: options).append
|
118
107
|
end
|
119
108
|
|
120
109
|
# Add helpers to render objects on template
|
121
110
|
#
|
122
111
|
# @return [String]
|
123
112
|
def add_helpers
|
124
|
-
klass.
|
125
|
-
klass.
|
113
|
+
klass.helper_method(model.name)
|
114
|
+
klass.helper_method(model.plural)
|
126
115
|
end
|
127
116
|
end
|
128
117
|
end
|