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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -3
  3. data/.gitignore +2 -0
  4. data/.rubocop.yml +16 -2
  5. data/Dockerfile +2 -2
  6. data/Gemfile +30 -0
  7. data/Makefile +6 -0
  8. data/README.md +5 -3
  9. data/azeroth.gemspec +6 -36
  10. data/lib/azeroth/controller_interface.rb +3 -4
  11. data/lib/azeroth/decorator/hash_builder.rb +1 -0
  12. data/lib/azeroth/decorator.rb +5 -8
  13. data/lib/azeroth/model.rb +1 -0
  14. data/lib/azeroth/options.rb +16 -0
  15. data/lib/azeroth/params_builder.rb +13 -3
  16. data/lib/azeroth/request_handler.rb +3 -2
  17. data/lib/azeroth/resource_builder.rb +15 -3
  18. data/lib/azeroth/resourceable/class_methods.rb +15 -2
  19. data/lib/azeroth/resourceable/endpoints_builder.rb +104 -0
  20. data/lib/azeroth/resourceable/{builder.rb → resources_builder.rb} +8 -19
  21. data/lib/azeroth/resourceable.rb +17 -2
  22. data/lib/azeroth/version.rb +1 -1
  23. data/spec/dummy/config/environments/production.rb +2 -2
  24. data/spec/dummy/config/puma.rb +3 -3
  25. data/spec/dummy/db/schema.rb +1 -1
  26. data/spec/integration/readme/controllers/games_controller_spec.rb +1 -1
  27. data/spec/integration/yard/controllers/games_controller_spec.rb +1 -1
  28. data/spec/integration/yard/controllers/paginated_documents_controller_spec.rb +1 -1
  29. data/spec/lib/azeroth/controller_interface_spec.rb +1 -1
  30. data/spec/lib/azeroth/decorator_spec.rb +0 -2
  31. data/spec/lib/azeroth/params_builder_spec.rb +49 -33
  32. data/spec/lib/azeroth/request_handler/update_spec.rb +1 -1
  33. data/spec/lib/azeroth/resource_builder_spec.rb +41 -17
  34. data/spec/lib/azeroth/resourceable/endpoints_builder_spec.rb +90 -0
  35. data/spec/lib/azeroth/resourceable/resources_builder_spec.rb +32 -0
  36. data/spec/lib/azeroth/resourceable_spec.rb +37 -37
  37. data/spec/spec_helper.rb +1 -1
  38. data/spec/support/app/controllers/controller.rb +1 -0
  39. data/spec/support/app/controllers/params_builder_controller.rb +2 -2
  40. data/spec/support/matchers/add_method.rb +6 -4
  41. data/spec/support/shared_examples/request_handler.rb +1 -5
  42. metadata +15 -575
  43. 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: 7c8e0229917b320108b25371d2c30ca48f83663288d50d2e767b8cf45c037c95
4
- data.tar.gz: 2e6fe774d10fa5b5ca3f22c0b4deac4828a28480ebd3ebb1cce370c84c0f359c
3
+ metadata.gz: 2bb67d32bc51b4aa26e666ec6d4f942dba16b454d07cf65cb5ebff1f052766ae
4
+ data.tar.gz: b5d68c84445bde028dcc0038cfe075947de6d45ffb31afb5f7bec088de680a09
5
5
  SHA512:
6
- metadata.gz: b517e33573aa729a94fee810f0f4cea17a39533359332017e1dea8a3d80c74aacaac1010754739d8ba312d42353c57bb93d0c172aa640453450383ea1ff99328
7
- data.tar.gz: 7bdfbfce3bdc6f40c2c82ea904a5778b5d0e7cc037f4fbf73f2e7d5fe8a449b7dacbac41f55523afea298bea5de998cc5d442e395fbf4949e555775aeabccff4
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:1.2.0
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:1.2.0
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:1.2.0
69
+ - image: darthjee/circleci_rails_gems:2.0.0
70
70
  environment:
71
71
  PROJECT: azeroth
72
72
  steps:
data/.gitignore CHANGED
@@ -12,3 +12,5 @@ spec/dummy/log/*
12
12
  spec/dummy/tmp/*
13
13
  spec/dummy/db/*.sqlite3
14
14
  spec/dummy/db/*.sqlite3-journal
15
+ spec/dummy/db/*.sqlite3-shm
16
+ spec/dummy/db/*.sqlite3-wal
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: 2.5
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: 4
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
@@ -1,6 +1,6 @@
1
- FROM darthjee/scripts:0.3.1 as scripts
1
+ FROM darthjee/scripts:0.4.3 as scripts
2
2
 
3
- FROM darthjee/rails_gems:1.2.0 as base
3
+ FROM darthjee/rails_gems:2.0.0 as base
4
4
 
5
5
  COPY --chown=app:app ./ /home/app/app/
6
6
 
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
@@ -0,0 +1,6 @@
1
+ .PHONY: dev
2
+
3
+ PROJECT?=azeroth
4
+
5
+ dev:
6
+ docker-compose run $(PROJECT) /bin/bash
data/README.md CHANGED
@@ -11,7 +11,7 @@ Azeroth
11
11
 
12
12
  Yard Documentation
13
13
  -------------------
14
- [https://www.rubydoc.info/gems/azeroth/1.1.0](https://www.rubydoc.info/gems/azeroth/1.1.0)
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: [1.1.0](https://github.com/darthjee/azeroth/tree/1.1.0)
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/1.1.0...master)
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 = 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.add_runtime_dependency 'activesupport', '~> 7.0.x'
22
- gem.add_runtime_dependency 'darthjee-active_ext', '>= 1.3.2'
23
- gem.add_runtime_dependency 'jace', '>= 0.1.1'
24
- gem.add_runtime_dependency 'sinclair', '>= 2.0.0'
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, *args)
80
+ def method_missing(method_name, *)
82
81
  if controller.respond_to?(method_name, true)
83
- controller.send(method_name, *args)
82
+ controller.send(method_name, *)
84
83
  else
85
84
  super
86
85
  end
@@ -35,6 +35,7 @@ module Azeroth
35
35
  private
36
36
 
37
37
  attr_reader :decorator
38
+
38
39
  # @method decorator
39
40
  # @api private
40
41
  # @private
@@ -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(*args)
98
+ def as_json(*)
101
99
  return nil if object.nil?
102
100
 
103
- return array_as_json(*args) if enum?
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, *args)
149
+ def method_missing(method_name, *)
153
150
  if object.respond_to?(method_name)
154
- object.public_send(method_name, *args)
151
+ object.public_send(method_name, *)
155
152
  else
156
153
  super
157
154
  end
data/lib/azeroth/model.rb CHANGED
@@ -54,6 +54,7 @@ module Azeroth
54
54
  private
55
55
 
56
56
  attr_reader :options
57
+
57
58
  # @method options
58
59
  # @api private
59
60
  # @private
@@ -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
- add_method("#{name}_id") { params.require(:id) }
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, &block)
123
- options.event_registry.trigger(event, controller, &block)
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(name, "@#{name} ||= #{plural}.find(#{name}_id)")
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
- Builder.new(
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 all methods to the controller
8
+ # Builder responsible to add resource / model methods to the controller
9
9
  #
10
- # Builder uses other builders to put together it's methods
10
+ # Builder uses {ResourceBuilder} to put together it's methods
11
11
  #
12
12
  # @see ResourceBuilder
13
- # @see ResourceRouteBuilder
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.public_send(:helper_method, model.name)
125
- klass.public_send(:helper_method, model.plural)
113
+ klass.helper_method(model.name)
114
+ klass.helper_method(model.plural)
126
115
  end
127
116
  end
128
117
  end