azeroth 0.0.3 → 0.0.4
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 +5 -5
- data/.circleci/config.yml +22 -8
- data/.rubocop_todo.yml +3 -3
- data/Dockerfile +6 -0
- data/README.md +4 -0
- data/Rakefile +4 -0
- data/azeroth.gemspec +10 -7
- data/config/yardstick.rb +13 -0
- data/config/yardstick.yml +33 -0
- data/docker-compose.yml +14 -9
- data/lib/azeroth.rb +5 -2
- data/lib/azeroth/resource_builder.rb +17 -0
- data/lib/azeroth/resource_route_builder.rb +21 -0
- data/lib/azeroth/resourceable.rb +1 -4
- data/lib/azeroth/routes_builder.rb +35 -0
- data/lib/azeroth/version.rb +1 -1
- data/scripts/check_readme.sh +6 -0
- data/spec/lib/azeroth/resource_builder_spec.rb +47 -0
- data/spec/lib/azeroth/resource_route_builder_spec.rb +18 -0
- data/spec/lib/azeroth/resourceable/builder_spec.rb +4 -80
- data/spec/lib/azeroth/routes_builder_spec.rb +34 -0
- data/spec/support/{models → app/controllers}/controller.rb +0 -0
- data/spec/support/app/controllers/resource_builder_controller.rb +9 -0
- data/spec/support/app/controllers/resource_route_builder_controller.rb +18 -0
- data/spec/support/app/controllers/routes_builder_controller.rb +21 -0
- data/spec/support/{models → app/models}/document.rb +0 -0
- data/spec/support/{models → app/serializers}/serializer.rb +0 -0
- data/spec/support/matchers/add_method.rb +80 -0
- data/spec/support/shared_examples/resource_routes.rb +88 -0
- metadata +92 -36
- data/lib/azeroth/resourceable/resource_builder.rb +0 -19
- data/lib/azeroth/resourceable/resource_route_builder.rb +0 -23
- data/lib/azeroth/resourceable/routes_builder.rb +0 -37
- data/spec/lib/azeroth/resourceable/resource_builder_spec.rb +0 -5
- data/spec/lib/azeroth/resourceable/resource_route_builder_spec.rb +0 -5
- data/spec/lib/azeroth/resourceable/routes_builder_spec.rb +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 564c4da855e8fb88cf9baadf79b22cc26574777869979c4e746ae4a2341334b4
|
|
4
|
+
data.tar.gz: 32fd29efed31108ec9c5a6a260a18b5238bbb995af0863917c91f6a7fc564d47
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9dc5c3dd01694a0fd7a1d171938a7a612dcea48d3631760b1b7de851cdd3f379194ae6f79ed2201fd009f4c3b4290ff550b9c154650f8a5f9e4128cbf6a5f636
|
|
7
|
+
data.tar.gz: b9233fa302ec9a94c1fb6947ef31f2ccfb5d4b8e37b7c8837c741883edaeef21851616ebdb6be098d7c74fd2a4af3d8a0bd81311d4de2930ed2ea6cb5715afbd
|
data/.circleci/config.yml
CHANGED
|
@@ -2,13 +2,27 @@ version: 2
|
|
|
2
2
|
jobs:
|
|
3
3
|
build:
|
|
4
4
|
docker:
|
|
5
|
-
- image:
|
|
5
|
+
- image: darthjee/circleci_ruby_gems:0.0.1
|
|
6
6
|
steps:
|
|
7
7
|
- checkout
|
|
8
|
-
- run:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- run:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- run:
|
|
8
|
+
- run:
|
|
9
|
+
name: Prepare Coverage Test Report
|
|
10
|
+
command: cc-test-reporter before-build
|
|
11
|
+
- run:
|
|
12
|
+
name: Bundle Install
|
|
13
|
+
command: bundle install
|
|
14
|
+
- run:
|
|
15
|
+
name: RSpec
|
|
16
|
+
command: bundle exec rspec
|
|
17
|
+
- run:
|
|
18
|
+
name: Rubocop
|
|
19
|
+
command: rubocop
|
|
20
|
+
- run:
|
|
21
|
+
name: Coverage Test Report
|
|
22
|
+
command: cc-test-reporter after-build --exit-code $?
|
|
23
|
+
- run:
|
|
24
|
+
name: Yardstick coverage check
|
|
25
|
+
command: bundle exec rake verify_measurements
|
|
26
|
+
- run:
|
|
27
|
+
name: Check version documentation
|
|
28
|
+
command: scripts/check_readme.sh
|
data/.rubocop_todo.yml
CHANGED
|
@@ -29,9 +29,9 @@ Style/Documentation:
|
|
|
29
29
|
- 'lib/azeroth/model.rb'
|
|
30
30
|
- 'lib/azeroth/resourceable.rb'
|
|
31
31
|
- 'lib/azeroth/resourceable/builder.rb'
|
|
32
|
-
- 'lib/azeroth/
|
|
33
|
-
- 'lib/azeroth/
|
|
34
|
-
- 'lib/azeroth/
|
|
32
|
+
- 'lib/azeroth/resource_builder.rb'
|
|
33
|
+
- 'lib/azeroth/resource_route_builder.rb'
|
|
34
|
+
- 'lib/azeroth/routes_builder.rb'
|
|
35
35
|
|
|
36
36
|
# Offense count: 6
|
|
37
37
|
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
data/Dockerfile
ADDED
data/README.md
CHANGED
|
@@ -5,3 +5,7 @@ Azeroth
|
|
|
5
5
|
[](https://codeclimate.com/github/darthjee/azeroth)
|
|
6
6
|
|
|
7
7
|

|
|
8
|
+
|
|
9
|
+
Yard Documentation
|
|
10
|
+
-------------------
|
|
11
|
+
https://www.rubydoc.info/gems/azeroth/0.0.4
|
data/Rakefile
CHANGED
data/azeroth.gemspec
CHANGED
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
|
16
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
17
17
|
gem.require_paths = ['lib']
|
|
18
18
|
|
|
19
|
-
gem.add_runtime_dependency 'sinclair', '>= 1.
|
|
19
|
+
gem.add_runtime_dependency 'sinclair', '>= 1.1.2'
|
|
20
20
|
|
|
21
21
|
gem.add_runtime_dependency 'activesupport', '~> 5.x'
|
|
22
22
|
gem.add_runtime_dependency 'darthjee-active_ext', '>= 1.3.2'
|
|
@@ -25,10 +25,13 @@ Gem::Specification.new do |gem|
|
|
|
25
25
|
gem.add_development_dependency 'activerecord', '~> 5.x'
|
|
26
26
|
gem.add_development_dependency 'sqlite3', '>= 1.3.13'
|
|
27
27
|
|
|
28
|
-
gem.add_development_dependency 'bundler',
|
|
29
|
-
gem.add_development_dependency 'pry-nav'
|
|
30
|
-
gem.add_development_dependency 'rake',
|
|
31
|
-
gem.add_development_dependency 'rspec',
|
|
32
|
-
gem.add_development_dependency 'rubocop'
|
|
33
|
-
gem.add_development_dependency '
|
|
28
|
+
gem.add_development_dependency 'bundler', '~> 1.16.1'
|
|
29
|
+
gem.add_development_dependency 'pry-nav', '~> 0.2.4'
|
|
30
|
+
gem.add_development_dependency 'rake', '>= 12.3.1'
|
|
31
|
+
gem.add_development_dependency 'rspec', '>= 3.8'
|
|
32
|
+
gem.add_development_dependency 'rubocop', '0.58.1'
|
|
33
|
+
gem.add_development_dependency 'rubocop-rspec', '1.30.0'
|
|
34
|
+
gem.add_development_dependency 'simplecov', '~> 0.16.x'
|
|
35
|
+
gem.add_development_dependency 'yard', '>= 0.9.18'
|
|
36
|
+
gem.add_development_dependency 'yardstick', '>= 0.9.9'
|
|
34
37
|
end
|
data/config/yardstick.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yardstick/rake/measurement'
|
|
4
|
+
require 'yardstick/rake/verify'
|
|
5
|
+
require 'yaml'
|
|
6
|
+
|
|
7
|
+
options = YAML.load_file('config/yardstick.yml')
|
|
8
|
+
|
|
9
|
+
Yardstick::Rake::Measurement.new(:yardstick_measure, options) do |measurement|
|
|
10
|
+
measurement.output = 'measurement/report.txt'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Yardstick::Rake::Verify.new(:verify_measurements, options)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
threshold: 52.6
|
|
2
|
+
require_exact_threshold: false
|
|
3
|
+
rules:
|
|
4
|
+
ApiTag::Presence:
|
|
5
|
+
enabled: true
|
|
6
|
+
exclude: []
|
|
7
|
+
ApiTag::Inclusion:
|
|
8
|
+
enabled: true
|
|
9
|
+
exclude: []
|
|
10
|
+
ApiTag::ProtectedMethod:
|
|
11
|
+
enabled: true
|
|
12
|
+
exclude: []
|
|
13
|
+
ApiTag::PrivateMethod:
|
|
14
|
+
enabled: true
|
|
15
|
+
exclude: []
|
|
16
|
+
ExampleTag:
|
|
17
|
+
enabled: true
|
|
18
|
+
exclude: []
|
|
19
|
+
ReturnTag:
|
|
20
|
+
enabled: true
|
|
21
|
+
exclude: []
|
|
22
|
+
Summary::Presence:
|
|
23
|
+
enabled: true
|
|
24
|
+
exclude: []
|
|
25
|
+
Summary::Length:
|
|
26
|
+
enabled: true
|
|
27
|
+
exclude: []
|
|
28
|
+
Summary::Delimiter:
|
|
29
|
+
enabled: true
|
|
30
|
+
exclude: []
|
|
31
|
+
Summary::SingleLine:
|
|
32
|
+
enabled: true
|
|
33
|
+
exclude: []
|
data/docker-compose.yml
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
version: '
|
|
1
|
+
version: '3'
|
|
2
2
|
services:
|
|
3
3
|
base: &base
|
|
4
|
-
image:
|
|
5
|
-
working_dir: /home/app/
|
|
4
|
+
image: azeroth
|
|
5
|
+
working_dir: /home/app/app
|
|
6
6
|
volumes:
|
|
7
|
-
- .:/home/app/
|
|
8
|
-
- azeroth_gems_2_4_0:/usr/local/bundle
|
|
7
|
+
- .:/home/app/app
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
base_build:
|
|
10
|
+
<<: *base
|
|
11
|
+
build: .
|
|
12
|
+
command: echo done
|
|
11
13
|
|
|
12
14
|
azeroth:
|
|
13
15
|
<<: *base
|
|
14
16
|
container_name: azeroth
|
|
15
|
-
|
|
17
|
+
depends_on: [base_build]
|
|
18
|
+
command: /bin/bash -c 'rspec'
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
test_all:
|
|
21
|
+
<<: *base
|
|
22
|
+
depends_on: [base_build]
|
|
23
|
+
command: /bin/bash -c 'rspec && yard && rake yardstick_measure && rake verify_measurements'
|
data/lib/azeroth.rb
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
module Azeroth
|
|
2
|
-
autoload :Resourceable,
|
|
3
|
-
autoload :Model,
|
|
2
|
+
autoload :Resourceable, 'azeroth/resourceable'
|
|
3
|
+
autoload :Model, 'azeroth/model'
|
|
4
|
+
autoload :RoutesBuilder, 'azeroth/routes_builder'
|
|
5
|
+
autoload :ResourceRouteBuilder, 'azeroth/resource_route_builder'
|
|
6
|
+
autoload :ResourceBuilder, 'azeroth/resource_builder'
|
|
4
7
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Azeroth
|
|
2
|
+
class ResourceBuilder
|
|
3
|
+
attr_reader :model, :builder
|
|
4
|
+
|
|
5
|
+
delegate :add_method, to: :builder
|
|
6
|
+
|
|
7
|
+
def initialize(model, builder)
|
|
8
|
+
@model = model
|
|
9
|
+
@builder = builder
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def append
|
|
13
|
+
add_method(model.plural, "@#{model.plural} ||= #{model.klass}.all")
|
|
14
|
+
add_method(model.name, "@#{model.name} ||= #{model.plural}.find(#{model.name}_id)")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Azeroth
|
|
2
|
+
class ResourceRouteBuilder
|
|
3
|
+
attr_reader :model, :builder
|
|
4
|
+
|
|
5
|
+
delegate :add_method, to: :builder
|
|
6
|
+
|
|
7
|
+
def initialize(model, builder)
|
|
8
|
+
@model = model
|
|
9
|
+
@builder = builder
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def append
|
|
13
|
+
add_method(:new_resource, "@new_resource ||= #{model.klass}.new")
|
|
14
|
+
add_method(:create_resource, "@create_resource ||= #{model.klass}.create(#{model.name}_params)")
|
|
15
|
+
add_method(:update_resource, "@update_resource ||= #{model.name}.tap { |v| v.update(#{model.name}_params) }")
|
|
16
|
+
add_method(:index_resource, model.plural)
|
|
17
|
+
add_method(:edit_resource, model.name)
|
|
18
|
+
add_method(:show_resource, model.name)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/lib/azeroth/resourceable.rb
CHANGED
|
@@ -4,10 +4,7 @@ module Azeroth
|
|
|
4
4
|
module Resourceable
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
6
|
|
|
7
|
-
autoload :Builder,
|
|
8
|
-
autoload :RoutesBuilder, 'azeroth/resourceable/routes_builder'
|
|
9
|
-
autoload :ResourceBuilder, 'azeroth/resourceable/resource_builder'
|
|
10
|
-
autoload :ResourceRouteBuilder, 'azeroth/resourceable/resource_route_builder'
|
|
7
|
+
autoload :Builder, 'azeroth/resourceable/builder'
|
|
11
8
|
|
|
12
9
|
class_methods do
|
|
13
10
|
def resource_for(name, **options)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Azeroth
|
|
2
|
+
class RoutesBuilder
|
|
3
|
+
attr_reader :model, :builder
|
|
4
|
+
|
|
5
|
+
delegate :add_method, to: :builder
|
|
6
|
+
|
|
7
|
+
def initialize(model, builder)
|
|
8
|
+
@model = model
|
|
9
|
+
@builder = builder
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def append
|
|
13
|
+
%i[index show new edit create update destroy].each do |route|
|
|
14
|
+
add_method(route, route_code[route].to_s)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def route_code
|
|
21
|
+
{
|
|
22
|
+
index: :render_basic,
|
|
23
|
+
show: :render_basic,
|
|
24
|
+
new: :render_basic,
|
|
25
|
+
edit: :render_basic,
|
|
26
|
+
create: :render_basic,
|
|
27
|
+
update: :render_basic,
|
|
28
|
+
destroy: <<-RUBY
|
|
29
|
+
#{model.name}.destroy
|
|
30
|
+
head :no_content
|
|
31
|
+
RUBY
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/lib/azeroth/version.rb
CHANGED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Azeroth::ResourceBuilder do
|
|
4
|
+
subject { described_class.new(model, builder) }
|
|
5
|
+
|
|
6
|
+
let(:model) { Azeroth::Model.new(:document) }
|
|
7
|
+
let(:builder) { Sinclair.new(klass) }
|
|
8
|
+
let(:klass) { Class.new(ResourceBuilderController) }
|
|
9
|
+
|
|
10
|
+
before do
|
|
11
|
+
subject.append
|
|
12
|
+
10.times { Document.create }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe '#append' do
|
|
16
|
+
it 'adds the listing method' do
|
|
17
|
+
expect { builder.build }
|
|
18
|
+
.to change { klass.new.respond_to?(:documents) }
|
|
19
|
+
.to(true)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'adds the fetching method' do
|
|
23
|
+
expect { builder.build }
|
|
24
|
+
.to change { klass.new.respond_to?(:document) }
|
|
25
|
+
.to(true)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context 'after the build' do
|
|
29
|
+
let(:controller) { klass.new(document_id: document.id) }
|
|
30
|
+
let(:document) { Document.create }
|
|
31
|
+
|
|
32
|
+
before { builder.build }
|
|
33
|
+
|
|
34
|
+
context 'when requesting the list of documents' do
|
|
35
|
+
it 'returns the list of documents' do
|
|
36
|
+
expect(controller.documents).to eq(Document.all)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'when requesting one document' do
|
|
41
|
+
it 'returns the requested document' do
|
|
42
|
+
expect(controller.document).to eq(document)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Azeroth::ResourceRouteBuilder do
|
|
4
|
+
subject { described_class.new(model, builder) }
|
|
5
|
+
|
|
6
|
+
let(:model) { Azeroth::Model.new(:document) }
|
|
7
|
+
let(:builder) { Sinclair.new(klass) }
|
|
8
|
+
let(:klass) { Class.new(ResourceRouteBuilderController) }
|
|
9
|
+
|
|
10
|
+
before do
|
|
11
|
+
subject.append
|
|
12
|
+
10.times { Document.create }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe '#append' do
|
|
16
|
+
it_behaves_like 'a route resource build'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -1,92 +1,16 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
shared_examples 'a builder that adds a resource for route' do |route|
|
|
4
|
-
let(:params) { {} }
|
|
5
|
-
let(:instance) { clazz.new(params) }
|
|
6
|
-
let(:value) { instance.public_send("#{route}_resource") }
|
|
7
|
-
|
|
8
|
-
it "adds #{route}_resource" do
|
|
9
|
-
expect { subject.build }
|
|
10
|
-
.to change { clazz.new.respond_to?(:"#{route}_resource") }
|
|
11
|
-
.from(false).to(true)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it "#{route}_resource responds with correct resource" do
|
|
15
|
-
subject.build
|
|
16
|
-
expect(value.to_json).to eq(expected.to_json)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
3
|
describe Azeroth::Resourceable::Builder do
|
|
21
|
-
subject { described_class.new(
|
|
4
|
+
subject { described_class.new(klass, :document) }
|
|
22
5
|
|
|
23
|
-
let(:
|
|
24
|
-
let(:document_params) { { name: name } }
|
|
25
|
-
|
|
26
|
-
let(:clazz) do
|
|
6
|
+
let(:klass) do
|
|
27
7
|
Class.new(Controller) do
|
|
28
8
|
end
|
|
29
9
|
end
|
|
30
10
|
|
|
31
11
|
describe '#build' do
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
let(:expected) { Document.all }
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
describe 'new_resource' do
|
|
39
|
-
it_behaves_like 'a builder that adds a resource for route', :new do
|
|
40
|
-
let(:expected) { Document.new }
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
describe 'create_resource' do
|
|
45
|
-
it_behaves_like 'a builder that adds a resource for route', :create do
|
|
46
|
-
let(:expected) { Document.last }
|
|
47
|
-
let(:params) { { document: document_params } }
|
|
48
|
-
|
|
49
|
-
it 'creates the resource' do
|
|
50
|
-
subject.build
|
|
51
|
-
expect do
|
|
52
|
-
instance.create_resource
|
|
53
|
-
end.to change(Document, :count).by(1)
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
describe 'show_resource' do
|
|
59
|
-
let(:document) { Document.create }
|
|
60
|
-
|
|
61
|
-
it_behaves_like 'a builder that adds a resource for route', :show do
|
|
62
|
-
let(:expected) { document }
|
|
63
|
-
let(:params) { { id: document.id } }
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
describe 'update_resource' do
|
|
68
|
-
let!(:document) { Document.create }
|
|
69
|
-
|
|
70
|
-
it_behaves_like 'a builder that adds a resource for route', :update do
|
|
71
|
-
let(:expected) { Document.find(document.id) }
|
|
72
|
-
let(:params) { { id: document.id, document: document_params } }
|
|
73
|
-
|
|
74
|
-
context 'after the methods has been built' do
|
|
75
|
-
before { subject.build }
|
|
76
|
-
|
|
77
|
-
it 'updates the resource the resource' do
|
|
78
|
-
expect do
|
|
79
|
-
instance.update_resource
|
|
80
|
-
end.to change { document.reload.name }.to(name)
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it 'does not create the resource' do
|
|
84
|
-
expect do
|
|
85
|
-
instance.update_resource
|
|
86
|
-
end.not_to change(Document, :count)
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
12
|
+
it_behaves_like 'a route resource build' do
|
|
13
|
+
let(:builder) { subject }
|
|
90
14
|
end
|
|
91
15
|
end
|
|
92
16
|
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Azeroth::RoutesBuilder do
|
|
4
|
+
subject { described_class.new(model, builder) }
|
|
5
|
+
|
|
6
|
+
let(:model) { Azeroth::Model.new(:document) }
|
|
7
|
+
let(:builder) { Sinclair.new(klass) }
|
|
8
|
+
let(:klass) { Class.new(RoutesBuilderController) }
|
|
9
|
+
let(:instance) { klass.new(params) }
|
|
10
|
+
let(:params) { {} }
|
|
11
|
+
|
|
12
|
+
before do
|
|
13
|
+
subject.append
|
|
14
|
+
10.times { Document.create }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#append' do
|
|
18
|
+
before { subject.append }
|
|
19
|
+
|
|
20
|
+
it 'adds index route' do
|
|
21
|
+
expect do
|
|
22
|
+
builder.build
|
|
23
|
+
end.to add_method(:index).to(klass.new)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe 'when calling index' do
|
|
27
|
+
before { builder.build }
|
|
28
|
+
|
|
29
|
+
it 'returns the index object' do
|
|
30
|
+
expect(instance.perform(:index)).to eq(json: 'index_json')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
class ResourceRouteBuilderController
|
|
2
|
+
def initialize(id: nil, document: nil)
|
|
3
|
+
@id = id
|
|
4
|
+
@document_params = document
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
attr_reader :id, :document_params
|
|
10
|
+
|
|
11
|
+
def document
|
|
12
|
+
documents.find(id)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def documents
|
|
16
|
+
Document.all
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class RoutesBuilderController
|
|
2
|
+
def initialize(id: nil, document: nil)
|
|
3
|
+
@id = id
|
|
4
|
+
@document_params = document
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def perform(action)
|
|
8
|
+
@action = action
|
|
9
|
+
send(action)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
attr_reader :id, :document_params, :action
|
|
15
|
+
|
|
16
|
+
def render_basic
|
|
17
|
+
{
|
|
18
|
+
json: "#{action}_json"
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
end
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
module RSpec
|
|
2
|
+
module CustomMatchers
|
|
3
|
+
class AddMethod < Matchers::BuiltIn::BaseMatcher
|
|
4
|
+
attr_reader :method
|
|
5
|
+
|
|
6
|
+
def initialize(method = nil)
|
|
7
|
+
@method = method
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def to(instance = nil, &block)
|
|
11
|
+
AddMethodTo.new(instance, method, &block)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class AddMethodTo < Matchers::BuiltIn::BaseMatcher
|
|
16
|
+
attr_reader :method, :instance, :block
|
|
17
|
+
|
|
18
|
+
def initialize(instance, method, &block)
|
|
19
|
+
@instance = instance
|
|
20
|
+
@method = method
|
|
21
|
+
@block = block
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def description
|
|
25
|
+
"Adds method #{method} to #{instance_class}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def failure_message
|
|
29
|
+
"expected #{method} to be added to #{instance_class} but " \
|
|
30
|
+
"#{@initial_state ? 'it already existed' : "it didn't"}"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def matches?(event_proc)
|
|
34
|
+
@event_proc = event_proc
|
|
35
|
+
return false unless event_proc.is_a?(Proc)
|
|
36
|
+
raise_block_syntax_error if block_given?
|
|
37
|
+
perform_change(event_proc)
|
|
38
|
+
changed?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def supports_block_expectations?
|
|
42
|
+
true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def changed?
|
|
48
|
+
!@initial_state && @final_state
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def perform_change(event_proc)
|
|
52
|
+
@initial_state = evaluated_instance.respond_to?(method)
|
|
53
|
+
@evaluated_instance = nil
|
|
54
|
+
event_proc.call
|
|
55
|
+
@final_state = evaluated_instance.respond_to?(method)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def evaluated_instance
|
|
59
|
+
@evaluated_instance ||= instance || block.call
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def instance_class
|
|
63
|
+
@instance_class ||= evaluated_instance.class
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def raise_block_syntax_error
|
|
67
|
+
raise SyntaxError, 'Block not received by the `add_method_to` matcher. ' \
|
|
68
|
+
'Perhaps you want to use `{ ... }` instead of do/end?'
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
module RSpec
|
|
75
|
+
module Matchers
|
|
76
|
+
def add_method(_method)
|
|
77
|
+
CustomMatchers::AddMethod.new(:index)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
shared_examples 'a builder that adds a resource for route' do |route|
|
|
2
|
+
let(:params) { {} }
|
|
3
|
+
let(:instance) { klass.new(params) }
|
|
4
|
+
let(:value) { instance.public_send("#{route}_resource") }
|
|
5
|
+
|
|
6
|
+
it "adds #{route}_resource" do
|
|
7
|
+
expect { builder.build }
|
|
8
|
+
.to change { klass.new.respond_to?(:"#{route}_resource") }
|
|
9
|
+
.from(false).to(true)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "#{route}_resource responds with correct resource" do
|
|
13
|
+
builder.build
|
|
14
|
+
expect(value.to_json).to eq(expected.to_json)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
shared_examples 'a route resource build' do
|
|
19
|
+
let(:name) { 'The Doc' }
|
|
20
|
+
let(:document_params) { { name: name } }
|
|
21
|
+
|
|
22
|
+
describe 'index_resource' do
|
|
23
|
+
it_behaves_like 'a builder that adds a resource for route', :index do
|
|
24
|
+
let(:expected) { Document.all }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe 'new_resource' do
|
|
29
|
+
it_behaves_like 'a builder that adds a resource for route', :new do
|
|
30
|
+
let(:expected) { Document.new }
|
|
31
|
+
|
|
32
|
+
it 'does not create the resource' do
|
|
33
|
+
builder.build
|
|
34
|
+
expect do
|
|
35
|
+
instance.new_resource
|
|
36
|
+
end.not_to change(Document, :count)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe 'create_resource' do
|
|
42
|
+
it_behaves_like 'a builder that adds a resource for route', :create do
|
|
43
|
+
let(:expected) { Document.last }
|
|
44
|
+
let(:params) { { document: document_params } }
|
|
45
|
+
|
|
46
|
+
it 'creates the resource' do
|
|
47
|
+
builder.build
|
|
48
|
+
expect do
|
|
49
|
+
instance.create_resource
|
|
50
|
+
end.to change(Document, :count).by(1)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe 'show_resource' do
|
|
56
|
+
let(:document) { Document.create }
|
|
57
|
+
|
|
58
|
+
it_behaves_like 'a builder that adds a resource for route', :show do
|
|
59
|
+
let(:expected) { document }
|
|
60
|
+
let(:params) { { id: document.id } }
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe 'update_resource' do
|
|
65
|
+
let!(:document) { Document.create }
|
|
66
|
+
|
|
67
|
+
it_behaves_like 'a builder that adds a resource for route', :update do
|
|
68
|
+
let(:expected) { Document.find(document.id) }
|
|
69
|
+
let(:params) { { id: document.id, document: document_params } }
|
|
70
|
+
|
|
71
|
+
context 'after the methods has been built' do
|
|
72
|
+
before { builder.build }
|
|
73
|
+
|
|
74
|
+
it 'updates the resource the resource' do
|
|
75
|
+
expect do
|
|
76
|
+
instance.update_resource
|
|
77
|
+
end.to change { document.reload.name }.to(name)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'does not create the resource' do
|
|
81
|
+
expect do
|
|
82
|
+
instance.update_resource
|
|
83
|
+
end.not_to change(Document, :count)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
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.
|
|
4
|
+
version: 0.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Darthjee
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2019-03-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sinclair
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.
|
|
19
|
+
version: 1.1.2
|
|
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: 1.
|
|
26
|
+
version: 1.1.2
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: activesupport
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,84 +100,126 @@ dependencies:
|
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
103
|
+
version: 1.16.1
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
110
|
+
version: 1.16.1
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: pry-nav
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- - "
|
|
115
|
+
- - "~>"
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version:
|
|
117
|
+
version: 0.2.4
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- - "
|
|
122
|
+
- - "~>"
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version:
|
|
124
|
+
version: 0.2.4
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: rake
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
129
|
- - ">="
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
131
|
+
version: 12.3.1
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
136
|
- - ">="
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
138
|
+
version: 12.3.1
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
140
|
name: rspec
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
142
142
|
requirements:
|
|
143
143
|
- - ">="
|
|
144
144
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '3.
|
|
145
|
+
version: '3.8'
|
|
146
146
|
type: :development
|
|
147
147
|
prerelease: false
|
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
149
|
requirements:
|
|
150
150
|
- - ">="
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '3.
|
|
152
|
+
version: '3.8'
|
|
153
153
|
- !ruby/object:Gem::Dependency
|
|
154
154
|
name: rubocop
|
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
|
156
156
|
requirements:
|
|
157
|
-
- -
|
|
157
|
+
- - '='
|
|
158
158
|
- !ruby/object:Gem::Version
|
|
159
|
-
version:
|
|
159
|
+
version: 0.58.1
|
|
160
160
|
type: :development
|
|
161
161
|
prerelease: false
|
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
163
|
requirements:
|
|
164
|
-
- -
|
|
164
|
+
- - '='
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
|
-
version:
|
|
166
|
+
version: 0.58.1
|
|
167
|
+
- !ruby/object:Gem::Dependency
|
|
168
|
+
name: rubocop-rspec
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - '='
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: 1.30.0
|
|
174
|
+
type: :development
|
|
175
|
+
prerelease: false
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - '='
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: 1.30.0
|
|
167
181
|
- !ruby/object:Gem::Dependency
|
|
168
182
|
name: simplecov
|
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
|
170
184
|
requirements:
|
|
171
185
|
- - "~>"
|
|
172
186
|
- !ruby/object:Gem::Version
|
|
173
|
-
version: 0.16.
|
|
187
|
+
version: 0.16.x
|
|
174
188
|
type: :development
|
|
175
189
|
prerelease: false
|
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
191
|
requirements:
|
|
178
192
|
- - "~>"
|
|
179
193
|
- !ruby/object:Gem::Version
|
|
180
|
-
version: 0.16.
|
|
194
|
+
version: 0.16.x
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: yard
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - ">="
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: 0.9.18
|
|
202
|
+
type: :development
|
|
203
|
+
prerelease: false
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - ">="
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: 0.9.18
|
|
209
|
+
- !ruby/object:Gem::Dependency
|
|
210
|
+
name: yardstick
|
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
|
212
|
+
requirements:
|
|
213
|
+
- - ">="
|
|
214
|
+
- !ruby/object:Gem::Version
|
|
215
|
+
version: 0.9.9
|
|
216
|
+
type: :development
|
|
217
|
+
prerelease: false
|
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
+
requirements:
|
|
220
|
+
- - ">="
|
|
221
|
+
- !ruby/object:Gem::Version
|
|
222
|
+
version: 0.9.9
|
|
181
223
|
description: ''
|
|
182
224
|
email:
|
|
183
225
|
- dev@gmail.com
|
|
@@ -189,31 +231,40 @@ files:
|
|
|
189
231
|
- ".gitignore"
|
|
190
232
|
- ".rubocop.yml"
|
|
191
233
|
- ".rubocop_todo.yml"
|
|
234
|
+
- Dockerfile
|
|
192
235
|
- Gemfile
|
|
193
236
|
- LICENSE
|
|
194
237
|
- README.md
|
|
195
238
|
- Rakefile
|
|
196
239
|
- azeroth.gemspec
|
|
197
240
|
- azeroth.jpg
|
|
241
|
+
- config/yardstick.rb
|
|
242
|
+
- config/yardstick.yml
|
|
198
243
|
- docker-compose.yml
|
|
199
244
|
- lib/azeroth.rb
|
|
200
245
|
- lib/azeroth/model.rb
|
|
246
|
+
- lib/azeroth/resource_builder.rb
|
|
247
|
+
- lib/azeroth/resource_route_builder.rb
|
|
201
248
|
- lib/azeroth/resourceable.rb
|
|
202
249
|
- lib/azeroth/resourceable/builder.rb
|
|
203
|
-
- lib/azeroth/
|
|
204
|
-
- lib/azeroth/resourceable/resource_route_builder.rb
|
|
205
|
-
- lib/azeroth/resourceable/routes_builder.rb
|
|
250
|
+
- lib/azeroth/routes_builder.rb
|
|
206
251
|
- lib/azeroth/version.rb
|
|
252
|
+
- scripts/check_readme.sh
|
|
207
253
|
- spec/lib/azeroth/model_spec.rb
|
|
254
|
+
- spec/lib/azeroth/resource_builder_spec.rb
|
|
255
|
+
- spec/lib/azeroth/resource_route_builder_spec.rb
|
|
208
256
|
- spec/lib/azeroth/resourceable/builder_spec.rb
|
|
209
|
-
- spec/lib/azeroth/
|
|
210
|
-
- spec/lib/azeroth/resourceable/resource_route_builder_spec.rb
|
|
211
|
-
- spec/lib/azeroth/resourceable/routes_builder_spec.rb
|
|
257
|
+
- spec/lib/azeroth/routes_builder_spec.rb
|
|
212
258
|
- spec/spec_helper.rb
|
|
213
|
-
- spec/support/
|
|
214
|
-
- spec/support/
|
|
215
|
-
- spec/support/
|
|
259
|
+
- spec/support/app/controllers/controller.rb
|
|
260
|
+
- spec/support/app/controllers/resource_builder_controller.rb
|
|
261
|
+
- spec/support/app/controllers/resource_route_builder_controller.rb
|
|
262
|
+
- spec/support/app/controllers/routes_builder_controller.rb
|
|
263
|
+
- spec/support/app/models/document.rb
|
|
264
|
+
- spec/support/app/serializers/serializer.rb
|
|
265
|
+
- spec/support/matchers/add_method.rb
|
|
216
266
|
- spec/support/schema.rb
|
|
267
|
+
- spec/support/shared_examples/resource_routes.rb
|
|
217
268
|
homepage: https://github.com/darthjee/azeroth
|
|
218
269
|
licenses: []
|
|
219
270
|
metadata: {}
|
|
@@ -233,18 +284,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
233
284
|
version: '0'
|
|
234
285
|
requirements: []
|
|
235
286
|
rubyforge_project:
|
|
236
|
-
rubygems_version: 2.6
|
|
287
|
+
rubygems_version: 2.7.6
|
|
237
288
|
signing_key:
|
|
238
289
|
specification_version: 4
|
|
239
290
|
summary: Azeroth
|
|
240
291
|
test_files:
|
|
241
292
|
- spec/lib/azeroth/model_spec.rb
|
|
293
|
+
- spec/lib/azeroth/resource_builder_spec.rb
|
|
294
|
+
- spec/lib/azeroth/resource_route_builder_spec.rb
|
|
242
295
|
- spec/lib/azeroth/resourceable/builder_spec.rb
|
|
243
|
-
- spec/lib/azeroth/
|
|
244
|
-
- spec/lib/azeroth/resourceable/resource_route_builder_spec.rb
|
|
245
|
-
- spec/lib/azeroth/resourceable/routes_builder_spec.rb
|
|
296
|
+
- spec/lib/azeroth/routes_builder_spec.rb
|
|
246
297
|
- spec/spec_helper.rb
|
|
247
|
-
- spec/support/
|
|
248
|
-
- spec/support/
|
|
249
|
-
- spec/support/
|
|
298
|
+
- spec/support/app/controllers/controller.rb
|
|
299
|
+
- spec/support/app/controllers/resource_builder_controller.rb
|
|
300
|
+
- spec/support/app/controllers/resource_route_builder_controller.rb
|
|
301
|
+
- spec/support/app/controllers/routes_builder_controller.rb
|
|
302
|
+
- spec/support/app/models/document.rb
|
|
303
|
+
- spec/support/app/serializers/serializer.rb
|
|
304
|
+
- spec/support/matchers/add_method.rb
|
|
250
305
|
- spec/support/schema.rb
|
|
306
|
+
- spec/support/shared_examples/resource_routes.rb
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module Azeroth
|
|
2
|
-
module Resourceable
|
|
3
|
-
class ResourceBuilder
|
|
4
|
-
attr_reader :model, :builder
|
|
5
|
-
|
|
6
|
-
delegate :add_method, to: :builder
|
|
7
|
-
|
|
8
|
-
def initialize(model, builder)
|
|
9
|
-
@model = model
|
|
10
|
-
@builder = builder
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def append
|
|
14
|
-
add_method(model.plural, "@#{model.plural} ||= #{model.klass}.all")
|
|
15
|
-
add_method(model.name, "@#{model.name} ||= #{model.plural}.find(#{model.name}_id)")
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module Azeroth
|
|
2
|
-
module Resourceable
|
|
3
|
-
class ResourceRouteBuilder
|
|
4
|
-
attr_reader :model, :builder
|
|
5
|
-
|
|
6
|
-
delegate :add_method, to: :builder
|
|
7
|
-
|
|
8
|
-
def initialize(model, builder)
|
|
9
|
-
@model = model
|
|
10
|
-
@builder = builder
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def append
|
|
14
|
-
add_method(:new_resource, "@new_resource ||= #{model.klass}.new")
|
|
15
|
-
add_method(:create_resource, "@create_resource ||= #{model.klass}.create(#{model.name}_params)")
|
|
16
|
-
add_method(:update_resource, "@update_resource ||= #{model.name}.tap { |v| v.update(#{model.name}_params) }")
|
|
17
|
-
add_method(:index_resource, model.plural)
|
|
18
|
-
add_method(:edit_resource, model.name)
|
|
19
|
-
add_method(:show_resource, model.name)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module Azeroth
|
|
2
|
-
module Resourceable
|
|
3
|
-
class RoutesBuilder
|
|
4
|
-
attr_reader :model, :builder
|
|
5
|
-
|
|
6
|
-
delegate :add_method, to: :builder
|
|
7
|
-
|
|
8
|
-
def initialize(model, builder)
|
|
9
|
-
@model = model
|
|
10
|
-
@builder = builder
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def append
|
|
14
|
-
%i[index show new edit create update destroy].each do |route|
|
|
15
|
-
add_method(route, route_code[route].to_s)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def route_code
|
|
22
|
-
{
|
|
23
|
-
index: :render_basic,
|
|
24
|
-
show: :render_basic,
|
|
25
|
-
new: :render_basic,
|
|
26
|
-
edit: :render_basic,
|
|
27
|
-
create: :render_basic,
|
|
28
|
-
update: :render_basic,
|
|
29
|
-
destroy: <<-RUBY
|
|
30
|
-
#{model.name}.destroy
|
|
31
|
-
head :no_content
|
|
32
|
-
RUBY
|
|
33
|
-
}
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|