eitil 1.3.12 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/eitil_integrate/lib/eitil_integrate/application_exporter/lookups.rb +1 -1
- data/eitil_wrapper/README.md +0 -38
- data/eitil_wrapper/lib/eitil_wrapper/railtie.rb +5 -0
- data/eitil_wrapper/lib/eitil_wrapper.rb +0 -1
- data/lib/eitil/version.rb +1 -1
- data/spec/dummy_app/app/controllers/application_controller.rb +0 -2
- data/spec/dummy_app/app/controllers/users_controller.rb +0 -31
- data/spec/dummy_app/config/routes.rb +0 -5
- data/spec/dummy_app/db/test.sqlite3 +0 -0
- metadata +2 -9
- data/eitil_wrapper/lib/eitil_wrapper/decorators/application_decorator.rb +0 -22
- data/eitil_wrapper/lib/eitil_wrapper/decorators/controller_decorator.rb +0 -72
- data/eitil_wrapper/lib/eitil_wrapper/decorators.rb +0 -3
- data/spec/dummy_app/app/decorators/address_decorator.rb +0 -3
- data/spec/dummy_app/app/decorators/application_decorator.rb +0 -12
- data/spec/dummy_app/app/decorators/user_decorator.rb +0 -19
- data/spec/eitil_wrapper/decorators/decorators_spec.rb +0 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 340d9c03c3202df1622b826be81e2855b873a03dde4855e3b17597d9d4ca0916
|
4
|
+
data.tar.gz: c1aff01a4c23ffe4b9b1fce2e1e6a2e146e932ad21c89da7e619fcbde7774ef5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5481779145b3b57fbc781ecb02cd3e6348bdd1b3318376a2328d2def32a67406dab91cdfceb19c6788f1c9e1096d47cba8294dfd2886e60e36fac2273065cf8b
|
7
|
+
data.tar.gz: 18d72653d077ba48e93e01e5e62e5678d8b64bc751297d8b329678a3d644b710d33f6d9ac7a9bbe8eeceab4633ab13e728753148d6ed2c8b86bef3fe29345122
|
@@ -10,7 +10,7 @@ module EitilIntegrate::RubyXL
|
|
10
10
|
class << self
|
11
11
|
|
12
12
|
def exporter_paths
|
13
|
-
EitilSupport::Directory.files('app/exporters/exporters').select { |path| path.end_with? '_exporter.rb' }
|
13
|
+
EitilSupport::Directory.files('app/views/exporters/exporters').select { |path| path.end_with? '_exporter.rb' }
|
14
14
|
end
|
15
15
|
|
16
16
|
def exporter_names
|
data/eitil_wrapper/README.md
CHANGED
@@ -37,44 +37,6 @@ Callback helper methods are created for use within a model's callbacks. You can
|
|
37
37
|
|
38
38
|
|
39
39
|
|
40
|
-
## EitilWrapper::Decorators
|
41
|
-
|
42
|
-
```ruby
|
43
|
-
|
44
|
-
require "eitil_wrapper/decorators"
|
45
|
-
|
46
|
-
```
|
47
|
-
|
48
|
-
The Eitil decorator wrappers help you to standardize the calling of the right decorator method from within your controller action. Basically it provides you with a decorate macro in each controller.
|
49
|
-
|
50
|
-
```ruby
|
51
|
-
decorate(dec_item, dec_method: nil, dec_class: nil, **dec_kwargs)
|
52
|
-
```
|
53
|
-
|
54
|
-
- dec_item is the instance that will be decorated
|
55
|
-
- dec_method enabled you to set the desired decorator method. If not provided, it will look into the request params: if params["isMobile"] is present it will call .app, if params["isWeb"] is present it will call :app. If neither is provided in the params, it will call the default method :base.
|
56
|
-
- dec_class enables you to overwrite the decorator class that will be called. If not provided, the decorator class will be inferred from the instance model's classname (User => UserDecorator).
|
57
|
-
- dec_kwargs enables you to provide additional arguments, which will be passed to your decorator method.
|
58
|
-
|
59
|
-
|
60
|
-
### Configuration
|
61
|
-
|
62
|
-
1. Your decorator classes should inherit from EitilWrapper::ApplicationDecorator.
|
63
|
-
2. Your controllers should inherit the module EitilWrapper::ControllerDecorator, through inclusion in a superclass.
|
64
|
-
3. If you set controller ivars for each request, you can make them available in your decorators by providing Eitil with the names of your ivars as an array of symbols:
|
65
|
-
|
66
|
-
```ruby
|
67
|
-
# initializers/eitil.rb
|
68
|
-
|
69
|
-
Eitil.set_config do |config|
|
70
|
-
config.controller_ivars = [:user, :env]
|
71
|
-
end
|
72
|
-
```
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
40
|
## EitilWrapper::Jobs
|
79
41
|
|
80
42
|
```ruby
|
@@ -36,6 +36,10 @@ module EitilWrapper
|
|
36
36
|
# works for non database supported instanes, such as an Exporter instance.
|
37
37
|
|
38
38
|
module ::EitilWrapper
|
39
|
+
|
40
|
+
class ::ApplicationJob < ActiveJob::Base
|
41
|
+
end
|
42
|
+
|
39
43
|
class SingleMethodJob < ::ApplicationJob
|
40
44
|
def perform(*args, _class:, _method:, id: nil, _self: nil, **kwargs)
|
41
45
|
object =
|
@@ -85,5 +89,6 @@ module EitilWrapper
|
|
85
89
|
end; end; end; end; end
|
86
90
|
|
87
91
|
end
|
92
|
+
|
88
93
|
end
|
89
94
|
end
|
data/lib/eitil/version.rb
CHANGED
@@ -3,37 +3,6 @@ class UsersController < ApplicationController
|
|
3
3
|
before_action :set_user, only: [:show, :edit, :update, :destroy]
|
4
4
|
|
5
5
|
|
6
|
-
# ---
|
7
|
-
# Tests for EitilWrapper::Decorator
|
8
|
-
|
9
|
-
before_action :set_user, only: [:decorator_a, :decorator_b, :decorator_c, :decorator_d]
|
10
|
-
|
11
|
-
# default
|
12
|
-
def decorator_a
|
13
|
-
hash = decorate(@user)
|
14
|
-
render json: hash
|
15
|
-
end
|
16
|
-
|
17
|
-
# specific dec_method
|
18
|
-
def decorator_b
|
19
|
-
hash = decorate(@user, dec_method: :first_and_last_name)
|
20
|
-
render json: hash
|
21
|
-
end
|
22
|
-
|
23
|
-
# post request, with 'isWeb' and 'isMobile' params
|
24
|
-
def decorator_c
|
25
|
-
hash = decorate(@user)
|
26
|
-
render json: hash
|
27
|
-
end
|
28
|
-
|
29
|
-
# specific dec_class
|
30
|
-
def decorator_d
|
31
|
-
hash = decorate(@user, dec_class: :Application, dec_method: :timestamps)
|
32
|
-
render json: hash
|
33
|
-
end
|
34
|
-
|
35
|
-
# ---
|
36
|
-
|
37
6
|
|
38
7
|
|
39
8
|
# GET /users
|
@@ -4,9 +4,4 @@ Rails.application.routes.draw do
|
|
4
4
|
resources :addresses
|
5
5
|
resources :users
|
6
6
|
|
7
|
-
get 'users/:id/decorator_a' => 'users#decorator_a'
|
8
|
-
get 'users/:id/decorator_b' => 'users#decorator_b'
|
9
|
-
post 'users/:id/decorator_c' => 'users#decorator_c'
|
10
|
-
get 'users/:id/decorator_d' => 'users#decorator_d'
|
11
|
-
|
12
7
|
end
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eitil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jurriaan Schrofer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -275,9 +275,6 @@ files:
|
|
275
275
|
- eitil_wrapper/lib/eitil_wrapper.rb
|
276
276
|
- eitil_wrapper/lib/eitil_wrapper/callbacks.rb
|
277
277
|
- eitil_wrapper/lib/eitil_wrapper/callbacks/helper_methods.rb
|
278
|
-
- eitil_wrapper/lib/eitil_wrapper/decorators.rb
|
279
|
-
- eitil_wrapper/lib/eitil_wrapper/decorators/application_decorator.rb
|
280
|
-
- eitil_wrapper/lib/eitil_wrapper/decorators/controller_decorator.rb
|
281
278
|
- eitil_wrapper/lib/eitil_wrapper/jobs.rb
|
282
279
|
- eitil_wrapper/lib/eitil_wrapper/jobs/new_job.rb
|
283
280
|
- eitil_wrapper/lib/eitil_wrapper/jobs/new_job_now.rb
|
@@ -309,9 +306,6 @@ files:
|
|
309
306
|
- spec/dummy_app/app/controllers/addresses_controller.rb
|
310
307
|
- spec/dummy_app/app/controllers/application_controller.rb
|
311
308
|
- spec/dummy_app/app/controllers/users_controller.rb
|
312
|
-
- spec/dummy_app/app/decorators/address_decorator.rb
|
313
|
-
- spec/dummy_app/app/decorators/application_decorator.rb
|
314
|
-
- spec/dummy_app/app/decorators/user_decorator.rb
|
315
309
|
- spec/dummy_app/app/helpers/addresses_helper.rb
|
316
310
|
- spec/dummy_app/app/helpers/application_helper.rb
|
317
311
|
- spec/dummy_app/app/helpers/users_helper.rb
|
@@ -444,7 +438,6 @@ files:
|
|
444
438
|
- spec/eitil_integrate/application_exporter/auto_sum_spec.rb
|
445
439
|
- spec/eitil_integrate/application_exporter/initialize_spec.rb
|
446
440
|
- spec/eitil_wrapper/callbacks/helper_methods_spec.rb
|
447
|
-
- spec/eitil_wrapper/decorators/decorators_spec.rb
|
448
441
|
- spec/eitil_wrapper/jobs/single_method_job_spec.rb
|
449
442
|
- spec/eitil_wrapper/routes/extended_resources_spec.rb
|
450
443
|
- spec/eitil_wrapper/scopes/default_scopes_spec.rb
|
@@ -1,22 +0,0 @@
|
|
1
|
-
|
2
|
-
require "active_model/railtie"
|
3
|
-
|
4
|
-
module EitilWrapper
|
5
|
-
class ApplicationDecorator
|
6
|
-
|
7
|
-
include ActiveModel::Model
|
8
|
-
|
9
|
-
def initialize(attributes={}, **kwargs)
|
10
|
-
super attributes
|
11
|
-
all_kwargs_to_ivars binding
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.method_missing(method_name, *args, **kwargs)
|
15
|
-
if %i$ web app $.include?(method_name.to_sym)
|
16
|
-
kwargs.any? ? send(:base, *args, **kwargs) : send(:base, *args)
|
17
|
-
end
|
18
|
-
super
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
module EitilWrapper
|
2
|
-
module ControllerDecorator
|
3
|
-
|
4
|
-
private
|
5
|
-
|
6
|
-
def decorate(dec_item, dec_method: nil, dec_class: nil, **dec_kwargs)
|
7
|
-
all_args_to_ivars binding
|
8
|
-
set_ivars :dec_class, :decorator, :dec_method
|
9
|
-
send_to_decorator
|
10
|
-
|
11
|
-
rescue NameError => e
|
12
|
-
puts "EitilWrapper::ControllerDecorator => rescuing uninitialised constant #{e.name}, returning the object's default JSON instead."
|
13
|
-
return dec_item.as_json
|
14
|
-
end
|
15
|
-
|
16
|
-
def send_to_decorator
|
17
|
-
@decorator.send(@dec_method, @dec_item)
|
18
|
-
|
19
|
-
rescue NoMethodError => e
|
20
|
-
inform_no_method_for_decorator_error
|
21
|
-
@dec_item
|
22
|
-
end
|
23
|
-
|
24
|
-
def inform_no_method_for_decorator_error
|
25
|
-
message = "Warning: NoMethodError for #{@dec_class}##{@dec_method}, returned @dec_item instead."
|
26
|
-
Logger.new("#{Rails.root}/log/decorator_log.log").warn message
|
27
|
-
warn message
|
28
|
-
end
|
29
|
-
|
30
|
-
def set_dec_method
|
31
|
-
@dec_method = @dec_method || derived_dec_method || :base
|
32
|
-
end
|
33
|
-
|
34
|
-
def derived_dec_method
|
35
|
-
return unless respond_to? :params
|
36
|
-
return :app if @decorator.respond_to?(:app) && params["isMobile"]
|
37
|
-
return :web if @decorator.respond_to?(:web) && params["isWeb"]
|
38
|
-
end
|
39
|
-
|
40
|
-
def set_dec_class
|
41
|
-
@dec_class = @dec_class ? manual_set_dec_class : derived_dec_class
|
42
|
-
end
|
43
|
-
|
44
|
-
def manual_set_dec_class
|
45
|
-
"#{@dec_class}Decorator".constantize
|
46
|
-
end
|
47
|
-
|
48
|
-
def derived_dec_class
|
49
|
-
"#{@dec_item.class.name}Decorator".constantize
|
50
|
-
end
|
51
|
-
|
52
|
-
def set_decorator
|
53
|
-
@dec_class.new **ivars
|
54
|
-
end
|
55
|
-
|
56
|
-
# Converts the controller_ivars, given in your main application's configuration,
|
57
|
-
# into an hash. If no controller_ivars, continue with converting, in order to avoid
|
58
|
-
# issues due to differing data types.
|
59
|
-
def controller_ivars
|
60
|
-
return {} unless Eitil.controller_ivars.any?
|
61
|
-
|
62
|
-
Eitil.controller_ivars.map do |ivar|
|
63
|
-
{ ivar => instance_variable_get("@#{ivar.to_s}") }
|
64
|
-
end.inject &:merge
|
65
|
-
end
|
66
|
-
|
67
|
-
def ivars
|
68
|
-
@dec_kwargs.any? ? controller_ivars.merge(@dec_kwargs) : controller_ivars
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
class UserDecorator < ApplicationDecorator
|
2
|
-
|
3
|
-
def first_and_last_name(user)
|
4
|
-
user.slice(:first_name, :last_name)
|
5
|
-
end
|
6
|
-
|
7
|
-
def app(user)
|
8
|
-
user.slice(:phone, :email)
|
9
|
-
end
|
10
|
-
|
11
|
-
def web(user)
|
12
|
-
user.slice(:age, :wage)
|
13
|
-
end
|
14
|
-
|
15
|
-
def base(user)
|
16
|
-
user.as_json
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
|
2
|
-
RSpec.describe "EitilWrapper::Decorators" do
|
3
|
-
|
4
|
-
include Rack::Test::Methods
|
5
|
-
|
6
|
-
let(:user) { User.create(first_name: 'slim', last_name: 'shady') }
|
7
|
-
|
8
|
-
def body(endpoint)
|
9
|
-
@body ||= JSON.parse(get("/users/#{user.id}/#{endpoint}").body)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should respond to a request" do
|
13
|
-
response = get "/users/#{user.id}/decorator_a"
|
14
|
-
expect(response).to be_a Rack::MockResponse
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should, by default, return all of a records' columns" do
|
18
|
-
response_keys = body(:decorator_a).keys.map(&:to_sym)
|
19
|
-
table_columns = [:id, :created_at, :updated_at, :first_name, :last_name, :email, :birthday, :phone, :confirmed, :last_sign_in, :age, :wage]
|
20
|
-
expect(table_columns.all? { |column| response_keys.include?(column) }).to be_truthy
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should, if a specific decorator method is passed, return that method's value" do
|
24
|
-
response_keys = body(:decorator_b).keys.map(&:to_sym)
|
25
|
-
decorator_keys = [:first_name, :last_name]
|
26
|
-
expect(response_keys).to eq decorator_keys
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should, if no decorator method is passed, but param['isMobile'] is present, return the :app method's value" do
|
30
|
-
response = post "/users/#{user.id}/decorator_c", { "isMobile" => true }
|
31
|
-
response_keys = JSON.parse(response.body).keys.map(&:to_sym)
|
32
|
-
decorator_keys = [:phone, :email]
|
33
|
-
expect(response_keys).to eq decorator_keys
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should, if no decorator method is passed, but param['isWeb'] is present, return the :web method's value" do
|
37
|
-
response = post "/users/#{user.id}/decorator_c", { "isWeb" => true }
|
38
|
-
response_keys = JSON.parse(response.body).keys.map(&:to_sym)
|
39
|
-
decorator_keys = [:age, :wage]
|
40
|
-
expect(response_keys).to eq decorator_keys
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should, if a decorator class is passed, return the value of that class' method" do
|
44
|
-
response_keys = body(:decorator_d).keys.map(&:to_sym)
|
45
|
-
decorator_keys = [:created_at, :updated_at]
|
46
|
-
expect(response_keys).to eq decorator_keys
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|