eitil 0.3.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f822863c972553dc89dca4e80fce4b197c89c27f78456342195f46b920fa07f5
4
+ data.tar.gz: 0e852adfd5a9127d3d67f349102bb6000121b730a5a42d0628b09beab45723fe
5
+ SHA512:
6
+ metadata.gz: cc64496f6e70c4d737ddf6bf091988ab01425802852034dd1d0c083bee1cda38ee25381927b498fc74c0094f27c071b71e10b360fc00ac477e81635b509d1915
7
+ data.tar.gz: ac2c18d0bd040e892caf008de55550cd09322fb69b09d15efd6adf6d147ce399b8e5aff547603af1311c7ebb86f0a8051da40211791d70042ee4e87a57ef23b3
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2021 Jurriaan Schrofer
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,272 @@
1
+
2
+
3
+
4
+ # Eitil (Eitje Util)
5
+
6
+ Never stops increasing your life's efficacy and productivity, yay!
7
+
8
+
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+
16
+ gem 'eitil', git: 'https://github.com/eitje-app/eitil_engine', branch: 'production'
17
+
18
+ ```
19
+
20
+ Or this line, with your own path correctly set, for development purposes:
21
+
22
+ ```ruby
23
+
24
+ gem 'eitil', path: "/Users/jurriaanschrofer/Documents/eitil"
25
+
26
+ ```
27
+
28
+
29
+
30
+ # Monkey patches
31
+
32
+
33
+
34
+ ## Kernel
35
+
36
+ ```ruby
37
+ all_args_to_ivars(binding)
38
+ # sets all keywords arguments of the method's local binding to instance variables
39
+ # call as: all_args_to_ivars binding
40
+
41
+ args_to_ivars(binding, *local_vars)
42
+ # sets specified keywords arguments of the method's local binding to instance variables
43
+ # call as: all_args_to_ivars binding :user_id, :user_name
44
+
45
+ all_kwargs_to_ivars(binding)
46
+ # sets the method's **kwargs argument to instance variables, with each key as the ivar's "@#{name}" and the value as its value
47
+ # call as: kwargs_to_ivars binding
48
+
49
+ set_ivars(*ivars)
50
+ # sets instance variables named @"#{ivar}" for each symbol passed, by invoking send("set_#{ivar}")
51
+ # e.g. set_ivars(:user) sets @user with the value returned by your local method .set_user
52
+ # call as: set_ivars :user, :authentication, :connection
53
+
54
+ safe_send(method, *args, return_value: nil)
55
+ # a safe version of .send, which in case of an error rescues and returns return_value (default: nil) instead
56
+
57
+ safe_call(*args, return_value: nil, &block)
58
+ # a safe version of .call, which in case of an error rescues and returns return_value (default: nil) instead
59
+ # accepts either a proc argument or a block
60
+
61
+ raise_error(_class_name, message = nil)
62
+ # creates an error class if currently undefined, inheriting from StandardError, and raises the error with the given message
63
+ # call as: raise_error "SomethingWentWrongError", "check your code, bro!"
64
+ # => SomethingWentWrongError (check your code, bro!)
65
+ ```
66
+
67
+
68
+
69
+ ## Object
70
+
71
+ ```ruby
72
+ all_methods(include_ancestors = true, grep: nil)
73
+ # pretty prints all methods for any object, grouped per type (e.g. private_methods, public_instance_methods)
74
+ # call as: Class.all_methods false, grep: /json/
75
+ ```
76
+
77
+
78
+
79
+ ## Module
80
+
81
+ ```ruby
82
+ include_concerns_of(*directories)
83
+ # includes all models/concerns/{sub_directory}/* within a module or class
84
+ # call as: include_concerns_of :user, :mail
85
+ # => includes all modules of models/concerns/user/* and models/oncerns/mail/*
86
+ ```
87
+
88
+
89
+
90
+ ## Hash
91
+
92
+ ```ruby
93
+ auto_dig(_hash = self, _key)
94
+ # finds the value for the given hash key, irregardless of the amount of nested layers
95
+ # call as: {a: 1, b: {c: 2, d: {e: 3}}}.auto_dig :e
96
+ # => 3
97
+ ```
98
+
99
+
100
+
101
+ ## ApplicationController
102
+
103
+ ```ruby
104
+ slice_params(*args)
105
+ # slices request params, converts them to JSON and symbolizes the keys
106
+ # call as: slice_params :id, :user
107
+ # => { id: 1, user: 69 }
108
+ ```
109
+
110
+
111
+
112
+ ## DateTime
113
+
114
+ ```ruby
115
+ prettify
116
+ # formats DateTime instances into a pretty, simple and filename friendly format
117
+ # call as: DateTime.now.prettify
118
+ # => "2021-04-21.17:51:42"
119
+ ```
120
+
121
+
122
+
123
+ # Wrappers
124
+
125
+
126
+
127
+ ## Decorators
128
+
129
+ ### Info
130
+
131
+ 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.
132
+
133
+ ### Decorate Macro
134
+
135
+ ```ruby
136
+ decorate(dec_item, dec_method: nil, dec_class: nil, **dec_kwargs)
137
+ ```
138
+
139
+ - dec_item is the instance that will be decorated
140
+ - 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.
141
+ - 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).
142
+ - dec_kwargs enables you to provide additional arguments, which will be passed to your decorator method.
143
+
144
+ ### Configuration
145
+
146
+ 1. Your decorator classes should inherit from Eitil::ApplicationDecorator.
147
+ 2. Your controllers should inherit the module Eitil::ControllerDecorator, through inclusion in a superclass.
148
+ 3. If you set controller ivars for each request, you can make them available in your decorators by providing Eitil a method which returns the names of your ivars as an array of symbols:
149
+
150
+ ```ruby
151
+ # initializers/eitil.rb
152
+
153
+ Eitil.set_config do |config|
154
+ config.get_controller_ivars_method = 'API::VerlofVerzoekenController.controller_ivars' # => [:user, :env]
155
+ end
156
+ ```
157
+
158
+
159
+
160
+ ## Router
161
+
162
+ ### Info
163
+
164
+ The Eitil router wrapper enables you to easily create new routes that can be shared among controllers. In that sense, it is as a custom extension of the built-in resourceful routes.
165
+
166
+ ### Create New Route Macro
167
+
168
+ The first macro, new_route, enables you to create new route objects which may be called and used by different controllers.
169
+
170
+ ```ruby
171
+ # config/routes.rb
172
+
173
+ new_route(verb, _method, action, scope)
174
+ # call as: new_route :post, :attachment, "add_attachment", :member
175
+ ```
176
+
177
+ - verb refers to the http_verb, e.g. :put.
178
+ - method refers to the given http method (e.g. 'users/:id'). Additionally, this is the name you will refer to in order to include the route into a controller. Therefore the argument should be unique among all other routes.
179
+ - action refers to the controller action to which you want to redirect to request, e.g. :update_user.
180
+ - scope refers to the url and can be set to either :member or :collection.
181
+
182
+ ### Add Routes Macro
183
+
184
+ The second macro, extended_resources, enables you to create all standard resources for a controller and add your own standardized routes. This macro works the same as the built-in :resources, except that you can pass more arguments to only: [], which adds the routes to your controller.
185
+
186
+ ```ruby
187
+ # config/routes.rb
188
+
189
+ extended_resources(controller, **kwargs)
190
+ # call as: extended_resources :posts, only: [:create, :update, :attachment]
191
+
192
+ ```
193
+
194
+ ### Configuration
195
+
196
+ The router wrapper is a single module which is automatically included into your application's router file, therefore no configuration is required.
197
+
198
+
199
+
200
+ ## Jobs
201
+
202
+ ### Info
203
+
204
+ The Eitil jobs wrapper enables you to create perform_later jobs on the fly, without the need to create a new class and file. The macro new_job accepts a :method as argument and defines a new method :method_job. The newly defined :method_job, when called, performs the orginal :method in the background. The new_job macro accepts both instance methods and singleton methods, which are defined within there own method scope.
205
+
206
+ ### Job Macro
207
+
208
+ ```ruby
209
+ new_job(_method)
210
+ # assuming a method :print_hello_world, call as: new_job :hello_world
211
+ # => method :hello_world_job
212
+ ```
213
+
214
+ - method is
215
+
216
+ ### Configuration
217
+
218
+ The new_job macro is monkey patched into Kernel, therefore no configuration is required.
219
+
220
+
221
+
222
+ ## Scopes
223
+
224
+ ### Info
225
+
226
+ The Eitil scopes wrapper creates various default scopes for a model, simply through including 'use_eitil_scopes' in the top of your model file, for example:
227
+
228
+ ```ruby
229
+ # models/user.rb
230
+
231
+ class User < ApplicationRecord
232
+ use_eitil_scopes
233
+ end
234
+ ```
235
+
236
+ ### The Scopes
237
+
238
+ Scopes are generated through the columns of your model's database table. Which scopes are generated depends on the datatype of a column. For example, if your User model with table users has a column is_manager, a scope :is_manager_true is generated for your User model. A scope method is defined only if it does not already responds to another method of the same name. The scopes generated are:
239
+
240
+ ```ruby
241
+ # columns of datatype: boolean
242
+ .{column_name}_true
243
+ .{column_name}_false
244
+
245
+ # columns of datatype: datetime
246
+ .{column_name}_today
247
+ .{column_name}_past
248
+ .{column_name}_future
249
+ .{column_name}_on_date(date)
250
+ .{column_name}_before_date(date)
251
+ .{column_name}_after_date(date)
252
+ .{column_name}_between_dates(start_date, end_date)
253
+ .{column_name}_oldest_first
254
+ .{column_name}_newest_first
255
+
256
+ # columns of datatype: date
257
+ .{column_name}_today
258
+ .{column_name}_past
259
+ .{column_name}_future
260
+ .{column_name}_on_date(date)
261
+ .{column_name}_before_date(date)
262
+ .{column_name}_after_date(date)
263
+ .{column_name}_between_dates(start_date, end_date)
264
+ .{column_name}_oldest_first
265
+ .{column_name}_newest_first
266
+ ```
267
+
268
+ ### Configuration
269
+
270
+ Your models should inherit the module Eitil::DefaultScopes through inclusion in a superclass, such as ApplicationRecord.
271
+
272
+
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ load "rails/tasks/statistics.rake"
7
+
8
+ require "bundler/gem_tasks"
9
+
10
+ require "rake/testtask"
11
+
12
+ Rake::TestTask.new(:test) do |t|
13
+ t.libs << 'test'
14
+ t.pattern = 'test/**/*_test.rb'
15
+ t.verbose = false
16
+ end
17
+
18
+ task default: :test
@@ -0,0 +1,4 @@
1
+ module Eitil
2
+ class ApplicationController < ActionController::API
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Eitil
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module Eitil
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: 'from@example.com'
4
+ layout 'mailer'
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Eitil
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,14 @@
1
+ module ApplicationMonkey
2
+ extend ActiveSupport::Concern
3
+ included do
4
+
5
+ private
6
+
7
+ def slice_params(*args)
8
+ params.slice(*args).as_json.symbolize_keys
9
+ end
10
+
11
+ end
12
+ end
13
+
14
+ ApplicationController.send :include, ApplicationMonkey
@@ -0,0 +1,7 @@
1
+ class DateTime
2
+
3
+ def prettify
4
+ strftime "%Y-%m-%d.%H:%M:%S"
5
+ end
6
+
7
+ end
@@ -0,0 +1,14 @@
1
+ class Hash
2
+
3
+ def auto_dig(_hash = self, _key)
4
+ return _hash[_key] if _hash.fetch(_key, false)
5
+
6
+ _hash.keys.each do |k|
7
+ answer = auto_dig(_hash[k], _key) if _hash[k].is_a? Hash
8
+ return answer if answer
9
+ end
10
+
11
+ false
12
+ end
13
+
14
+ end
@@ -0,0 +1,44 @@
1
+ Kernel.module_eval do
2
+
3
+ def all_args_to_ivars(local_binding)
4
+ local_binding.local_variables.each do |lvar|
5
+ instance_variable_set("@#{lvar}", local_binding.local_variable_get(lvar))
6
+ end
7
+ end
8
+
9
+ def args_to_ivars(local_binding, *local_vars)
10
+ local_vars.each do |lvar|
11
+ instance_variable_set("@#{lvar}", local_binding.local_variable_get(lvar))
12
+ end
13
+ end
14
+
15
+ def all_kwargs_to_ivars(local_binding)
16
+ local_binding.local_variable_get(:kwargs).each do |name, value|
17
+ instance_variable_set "@#{name}", value
18
+ end
19
+ end
20
+
21
+ def set_ivars(*ivars)
22
+ ivars.each do |ivar|
23
+ instance_variable_set("@#{ivar}", send("set_#{ivar}"))
24
+ end
25
+ end
26
+
27
+ def safe_call(*args, return_value: nil, &block)
28
+ block.call self, *args
29
+ rescue
30
+ return_value
31
+ end
32
+
33
+ def safe_send(method, *args, return_value: nil)
34
+ self.send method, *args
35
+ rescue
36
+ return_value
37
+ end
38
+
39
+ def raise_error(_class_name, message = nil)
40
+ Object.const_set(_class_name, Class.new(StandardError)) unless Object.const_defined?(_class_name)
41
+ raise _class_name.constantize.new message
42
+ end
43
+
44
+ end
@@ -0,0 +1,12 @@
1
+ class Module
2
+
3
+ def include_concerns_of(*directories)
4
+ directories.map! { |dir| dir.to_s.camelcase }
5
+
6
+ directories.each do |dir|
7
+ konstants = dir.constantize.constants(false)
8
+ konstants.each { |kon| include(const_get "#{dir}::#{kon}") }
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,29 @@
1
+ require "awesome_print"
2
+
3
+ class Object
4
+
5
+ def all_methods(include_ancestors = true, grep: nil)
6
+
7
+ _introspection_methods = %i$
8
+ methods
9
+ singleton_methods
10
+ instance_methods
11
+ private_methods
12
+ public_methods
13
+ protected_methods
14
+ private_instance_methods
15
+ public_instance_methods
16
+ protected_instance_methods
17
+ $
18
+
19
+ _introspection_methods.map! do |_m|
20
+ _methods = safe_send _m, include_ancestors
21
+ _methods = grep ? _methods&.grep(grep) : _methods
22
+ { _m => _methods }
23
+ end
24
+
25
+ ap _introspection_methods.inject &:merge
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,19 @@
1
+ module Eitil
2
+ class ApplicationDecorator
3
+
4
+ include ActiveModel::Model
5
+
6
+ def initialize(attributes={}, **kwargs)
7
+ super attributes
8
+ all_kwargs_to_ivars binding
9
+ end
10
+
11
+ def self.method_missing(method_name, *args, **kwargs)
12
+ if %i$ web app $.include?(method_name.to_sym)
13
+ kwargs.any? ? send(:base, *args, **kwargs) : send(:base, *args)
14
+ end
15
+ super
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,63 @@
1
+ module Eitil
2
+ module ControllerDecorator
3
+ extend ActiveSupport::Concern
4
+ included do
5
+
6
+ private
7
+
8
+ def decorate(dec_item, dec_method: nil, dec_class: nil, **dec_kwargs)
9
+ all_args_to_ivars binding
10
+ set_ivars :dec_class, :dec_method, :decorator
11
+ send_to_decorator
12
+ end
13
+
14
+ def send_to_decorator
15
+ @dec_kwargs.any? ? @decorator.send(@dec_method, @dec_item, @dec_kwargs)
16
+ : @decorator.send(@dec_method, @dec_item)
17
+
18
+ rescue NoMethodError => e
19
+ inform_no_method_for_decorator_error
20
+ @dec_item
21
+ end
22
+
23
+ def inform_no_method_for_decorator_error
24
+ message = "Warning: NoMethodError for #{@dec_class}.#{@dec_method}, returned @dec_item instead."
25
+ Logger.new("#{Rails.root}/log/decorator_log.log").warn message
26
+ warn message
27
+ end
28
+
29
+ def set_dec_method
30
+ @dec_method = @dec_method || derived_dec_method || :base
31
+ end
32
+
33
+ def derived_dec_method
34
+ return unless respond_to? :params
35
+ return :app if params["isMobile"]
36
+ return :web if params["isWeb"]
37
+ end
38
+
39
+ def set_dec_class
40
+ @dec_class = @dec_class ? manual_set_dec_class : derived_dec_class
41
+ end
42
+
43
+ def manual_set_dec_class
44
+ "#{@dec_class}Decorator".constantize
45
+ end
46
+
47
+ def derived_dec_class
48
+ "#{@dec_item.class.name}Decorator".constantize
49
+ end
50
+
51
+ def set_decorator
52
+ @decorator = @dec_class.new controller_ivars
53
+ end
54
+
55
+ def controller_ivars
56
+ eval(Eitil.get_controller_ivars_method).map do |ivar|
57
+ { ivar => instance_variable_get("@#{ivar.to_s}") }
58
+ end.inject &:merge
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,18 @@
1
+ Kernel.module_eval do
2
+
3
+ def new_job(_method)
4
+
5
+ if instance_methods(false).include? _method
6
+ define_method "#{_method}_job" do
7
+ Eitil::SingleMethodJob.perform_later(_class: self.class.to_s, _method: _method.to_s, id: id)
8
+ end
9
+
10
+ elsif singleton_methods(false).include? _method
11
+ define_singleton_method "#{_method}_job" do
12
+ Eitil::SingleMethodJob.perform_later(_class: to_s, _method: _method.to_s)
13
+ end
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,10 @@
1
+ module Eitil
2
+ class SingleMethodJob < ApplicationJob
3
+ queue_as :default
4
+
5
+ def perform(_class:, _method:, id: nil)
6
+ object = id ? _class.constantize.find(id) : _class.constantize
7
+ object.send _method
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,40 @@
1
+ module Eitil
2
+ module ExtendedResources
3
+
4
+ RESOURCEFUL_ACTIONS = %i$ index new create show edit update destroy $
5
+
6
+ private
7
+
8
+ def extended_resources(controller, **kwargs)
9
+ all_args_to_ivars binding
10
+
11
+ resources(controller, **resource_args) do
12
+ extended_routes&.each { |route| send(route).call controller }
13
+ yield if block_given?
14
+ end
15
+ end
16
+
17
+ def resource_args
18
+ duplicate = @kwargs.dup
19
+ duplicate[:only] = resourceful_routes
20
+ duplicate
21
+ end
22
+
23
+ def resourceful_routes
24
+ @kwargs.dig(:only) - extended_routes
25
+ end
26
+
27
+ def extended_routes
28
+ @kwargs.dig(:only) - RESOURCEFUL_ACTIONS
29
+ end
30
+
31
+ def new_route(verb, _method, action, scope)
32
+ self.class.send :define_method, _method do
33
+ -> (controller) { send(verb, _method, to: "#{controller}##{action}", on: scope) }
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+
40
+ ActionDispatch::Routing::Mapper.__send__ :include, Eitil::ExtendedResources
@@ -0,0 +1,60 @@
1
+ module Eitil
2
+ module DefaultScopes
3
+ extend ActiveSupport::Concern
4
+ included do
5
+
6
+ SharableDateScopes = -> (column) {
7
+ eitil_scope :"#{column}_today", -> { where("#{column} = ?", Date.today) }
8
+ eitil_scope :"#{column}_past", -> { where("#{column} < ?", Date.today) }
9
+ eitil_scope :"#{column}_future", -> { where("#{column} > ?", Date.today) }
10
+
11
+ eitil_scope :"#{column}_on_date", -> (date) { where("#{column} = ?", date) }
12
+ eitil_scope :"#{column}_before_date", -> (date) { where("#{column} = ?", date) }
13
+ eitil_scope :"#{column}_after_date", -> (date) { where("#{column} = ?", date) }
14
+
15
+ eitil_scope :"#{column}_between_dates", -> (from, till) { where("#{column} >= ? and #{column} <= ?", from, till) }
16
+
17
+ eitil_scope :"#{column}_oldest_first", -> { order("#{column} ASC") }
18
+ eitil_scope :"#{column}_newest_first", -> { order("#{column} DESC") }
19
+ }
20
+
21
+ class << self
22
+
23
+ private
24
+
25
+ def use_eitil_scopes
26
+ %i[boolean datetime date].each { |_type| send :"create_eitil_#{_type}_scopes" }
27
+ end
28
+
29
+ def eitil_scope(_name, _proc)
30
+ scope _name, _proc unless respond_to? _name
31
+ end
32
+
33
+ def columns_of_type(data_type)
34
+ columns_hash.select { |column,v| v.sql_type_metadata.type == data_type }
35
+ end
36
+
37
+ def create_eitil_boolean_scopes
38
+ columns_of_type(:boolean).map do |column, object|
39
+ eitil_scope :"#{column}_true", -> { where(column => true) }
40
+ eitil_scope :"#{column}_false", -> { where(column => [false, nil]) }
41
+ end
42
+ end
43
+
44
+ def create_eitil_datetime_scopes
45
+ columns_of_type(:datetime).map do |column, object|
46
+ SharableDateScopes.call column
47
+ end
48
+ end
49
+
50
+ def create_eitil_date_scopes
51
+ columns_of_type(:date).map do |column, object|
52
+ SharableDateScopes.call column
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+ end
60
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ Eitil::Engine.routes.draw do
2
+ end
data/lib/eitil.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "eitil/version"
2
+ require "eitil/engine"
3
+
4
+ module Eitil
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,14 @@
1
+ module Eitil
2
+
3
+ class Engine < ::Rails::Engine
4
+ isolate_namespace Eitil
5
+ config.generators.api_only = true
6
+ end
7
+
8
+ mattr_accessor :get_controller_ivars_method
9
+
10
+ def self.set_config(&block)
11
+ yield self
12
+ end
13
+
14
+ end
@@ -0,0 +1,3 @@
1
+ module Eitil
2
+ VERSION = '0.3.1'
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :eitil do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eitil
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
5
+ platform: ruby
6
+ authors:
7
+ - Jurriaan Schrofer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-04-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.2.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 5.2.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: awesome_print
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.9.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.9.2
41
+ description: Description of Eitil.
42
+ email:
43
+ - jschrofer@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - MIT-LICENSE
49
+ - README.md
50
+ - Rakefile
51
+ - app/controllers/eitil/application_controller.rb
52
+ - app/jobs/eitil/application_job.rb
53
+ - app/mailers/eitil/application_mailer.rb
54
+ - app/models/eitil/application_record.rb
55
+ - config/initializers/monkeys/application_controller.rb
56
+ - config/initializers/monkeys/date_time.rb
57
+ - config/initializers/monkeys/hash.rb
58
+ - config/initializers/monkeys/kernel.rb
59
+ - config/initializers/monkeys/module.rb
60
+ - config/initializers/monkeys/object.rb
61
+ - config/initializers/wrappers/decorators/application_decorator.rb
62
+ - config/initializers/wrappers/decorators/controller_decorator.rb
63
+ - config/initializers/wrappers/jobs/active_job_macros.rb
64
+ - config/initializers/wrappers/jobs/single_method_job.rb
65
+ - config/initializers/wrappers/routes/extended_resources.rb
66
+ - config/initializers/wrappers/scopes/default_scopes.rb
67
+ - config/routes.rb
68
+ - lib/eitil.rb
69
+ - lib/eitil/engine.rb
70
+ - lib/eitil/version.rb
71
+ - lib/tasks/eitil_tasks.rake
72
+ homepage: https://eitje.app
73
+ licenses:
74
+ - MIT
75
+ metadata:
76
+ homepage_uri: https://eitje.app
77
+ source_code_uri: https://eitje.app
78
+ changelog_uri: https://eitje.app
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubygems_version: 3.1.2
95
+ signing_key:
96
+ specification_version: 4
97
+ summary: Summary of Eitil.
98
+ test_files: []