effective_resources 2.2.12 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2e1045a3f584c05b66281ec3239905cd43100ee124bf9c0fdcfeff7d289fd6f
4
- data.tar.gz: 6276115c7a5104f3f51ce56c54681c0ab775fb63c8ff2f362e3f6fd51fcfebde
3
+ metadata.gz: 9fc4b2cb86902bbdc801204584d765041a0dded527e894eace36d5ea8d923f3f
4
+ data.tar.gz: ff36581881c3d5dd3667787cf0395c8b6b7b15676e583ac90e85c3e681a02a10
5
5
  SHA512:
6
- metadata.gz: b5dfd7efe2f70a7b9b5aa337cfbe915700fa211006e95d5d754e631565a1301367e7690b650394c19681bf3a47f2645ecdc1a02fef850abc3931d65c36893228
7
- data.tar.gz: 768dbb29366b8ad1df0cc5e9deed4f3e2c216df6de6175c60384033524f12a49c5425b900e16f6c71cd5fa0cf7e4c537aab28f4b824955ec0ee95e651422bd2f
6
+ metadata.gz: a6bf9ede63c06935ee24d72e7b11d78950b7b1b2e3540338513ab18be3570a13e14189252279872f485f1755378ab180f4d3b517ad1e2c2b2564b2a9952035e9
7
+ data.tar.gz: 72aa0f77cef8f2f8477a50e50990a51eaf592e5889811a689e4a9fa095e5adb072d6cd8c626fd3945e831f22e4fb6b37d53a2b2349648d71320561b7244ad26a
@@ -6,7 +6,7 @@ module Effective
6
6
  Rails.logger.info 'Processed by Effective::CrudController#index'
7
7
 
8
8
  EffectiveResources.authorize!(self, :index, resource_klass)
9
- @page_title ||= resource_plural_name.titleize
9
+ @page_title ||= resource_human_plural_name
10
10
 
11
11
  self.resources ||= resource_scope.all if resource_scope.respond_to?(:all)
12
12
  @datatable = resource_datatable()
@@ -42,12 +42,12 @@ module Effective
42
42
 
43
43
  if (message = flash[:success].to_s).present?
44
44
  flash.delete(:success)
45
- flash.now[:success] = "#{message.chomp('.')}. Adding another #{resource_name.titleize} based on previous."
45
+ flash.now[:success] = "#{message.chomp('.')}. Adding another #{resource_human_name} based on previous."
46
46
  end
47
47
  end
48
48
 
49
49
  EffectiveResources.authorize!(self, :new, resource)
50
- @page_title ||= "New #{resource_name.titleize}"
50
+ @page_title ||= "New #{resource_human_name}"
51
51
 
52
52
  run_callbacks(:resource_render)
53
53
 
@@ -74,7 +74,7 @@ module Effective
74
74
  resource.assign_attributes(send(resource_params_method_name))
75
75
 
76
76
  EffectiveResources.authorize!(self, action, resource)
77
- @page_title ||= "New #{resource_name.titleize}"
77
+ @page_title ||= "New #{resource_human_name}"
78
78
 
79
79
  if save_resource(resource, action)
80
80
  respond_with_success(resource, action)
@@ -211,7 +211,7 @@ module Effective
211
211
  self.resources ||= resource_scope.all
212
212
 
213
213
  EffectiveResources.authorize!(self, action, resource_klass)
214
- @page_title ||= "#{action.to_s.titleize} #{resource_plural_name.titleize}"
214
+ @page_title ||= "#{action.to_s.titleize} #{resource_human_name}"
215
215
 
216
216
  if request.get?
217
217
  @datatable = resource_datatable()
@@ -238,7 +238,7 @@ module Effective
238
238
  end.length
239
239
  end
240
240
 
241
- render json: { status: 200, message: "Successfully #{action_verb(action)} #{successes} / #{resources.length} selected #{resource_plural_name}" }
241
+ render json: { status: 200, message: "Successfully #{action_verb(action)} #{successes} / #{resources.length} selected #{resource_human_plural_name.downcase}" }
242
242
  end
243
243
  end
244
244
 
@@ -34,8 +34,10 @@ module Effective
34
34
  # submit :toggle, 'Blacklist', if: -> { sync? }, class: 'btn btn-primary'
35
35
  # submit :toggle, 'Whitelist', if: -> { !sync? }, class: 'btn btn-primary'
36
36
  # submit :save, 'Save', success: -> { "#{resource} was saved okay!" }
37
- def submit(action, label = nil, args = {})
38
- _insert_submit(action, label, args)
37
+ def submit(action, label, args = {})
38
+ instance_exec do
39
+ before_action { _insert_submit(action, label, args) }
40
+ end
39
41
  end
40
42
 
41
43
  # This controls the resource buttons section of the page
@@ -46,13 +48,17 @@ module Effective
46
48
  # button :approve, 'Approve', unless: -> { resource.approved? }, redirect: :show
47
49
  # button :decline, false
48
50
  def button(action, label = nil, args = {})
49
- _insert_button(action, label, args)
51
+ instance_exec do
52
+ before_action { _insert_button(action, label, args) }
53
+ end
50
54
  end
51
55
 
52
56
  # This is a way of defining the redirect, flash etc of any action without tweaking defaults
53
57
  # submit and buttons options will be merged ontop of these
54
58
  def on(action, args = {})
55
- _insert_on(action, args)
59
+ instance_exec do
60
+ before_action { _insert_on(action, args) }
61
+ end
56
62
  end
57
63
 
58
64
  # page_title 'My Title', only: [:new]
@@ -4,10 +4,8 @@ module Effective
4
4
 
5
5
  # Based on the incoming params[:commit] or passed action. Merges all options.
6
6
  def commit_action(action = nil)
7
- #config = (['create', 'update'].include?(params[:action]) ? self.class.submits : self.class.buttons)
8
-
9
- config = self.class.submits
10
- ons = self.class.ons
7
+ config = self.submits()
8
+ ons = self.ons()
11
9
 
12
10
  commit = config[params[:commit].to_s]
13
11
  commit ||= config.find { |_, v| v[:action] == action }.try(:last)
@@ -1,122 +1,122 @@
1
1
  module Effective
2
2
  module CrudController
3
3
  module Submits
4
- extend ActiveSupport::Concern
5
4
 
6
- module ClassMethods
7
- # { 'Save' => { action: save, ...}}
8
- def submits
9
- @_effective_submits ||= effective_resource.submits
10
- end
11
-
12
- # { 'Approve' => { action: approve, ...}}
13
- def buttons
14
- @_effective_buttons ||= effective_resource.buttons
15
- end
16
-
17
- # { :approve => { redirect: .. }}
18
- def ons
19
- @_effective_ons ||= effective_resource.ons
20
- end
5
+ # { 'Save' => { action: save, ...}}
6
+ def submits
7
+ @_effective_submits ||= effective_resource.submits()
8
+ end
21
9
 
22
- # :only, :except, :if, :unless, :redirect, :success, :danger, :class
23
- def _insert_submit(action, label = nil, args = {})
24
- raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
10
+ # { 'Approve' => { action: approve, ...}}
11
+ def buttons
12
+ @_effective_buttons ||= effective_resource.buttons()
13
+ end
25
14
 
26
- if label == false
27
- submits.delete_if { |label, args| args[:action] == action }; return
28
- end
15
+ # { :approve => { redirect: .. }}
16
+ def ons
17
+ @_effective_ons ||= effective_resource.ons()
18
+ end
29
19
 
30
- if args == false
31
- submits.delete(label); return
32
- end
20
+ # :only, :except, :if, :unless, :redirect, :success, :danger, :class
21
+ def _insert_submit(action, label = nil, args = {})
22
+ raise "expected first argument to be a Symbol. Try submit :approve, 'Approve'" unless action.kind_of?(Symbol)
23
+ raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
33
24
 
34
- if label # Overwrite the default member action when given a custom submit
35
- submits.delete_if { |label, args| args[:default] && args[:action] == action }
36
- end
25
+ if label == false
26
+ submits.delete_if { |label, args| args[:action] == action }; return
27
+ end
37
28
 
38
- if args.key?(:if) && args[:if].respond_to?(:call) == false
39
- raise "expected if: to be callable. Try submit :approve, 'Save and Approve', if: -> { resource.finished? }"
40
- end
29
+ if args == false
30
+ submits.delete(label); return
31
+ end
41
32
 
42
- if args.key?(:unless) && args[:unless].respond_to?(:call) == false
43
- raise "expected unless: to be callable. Try submit :approve, 'Save and Approve', unless: -> { resource.declined? }"
44
- end
33
+ if label # Overwrite the default member action when given a custom submit
34
+ submits.delete_if { |label, args| args[:default] && args[:action] == action }
35
+ end
45
36
 
46
- if args.key?(:only)
47
- args[:only] = Array(args[:only])
48
- raise "expected only: to be a symbol or array of symbols. Try submit :approve, 'Save and Approve', only: [:edit]" unless args[:only].all? { |v| v.kind_of?(Symbol) }
49
- end
37
+ if args.key?(:if) && args[:if].respond_to?(:call) == false
38
+ raise "expected if: to be callable. Try submit :approve, 'Save and Approve', if: -> { resource.finished? }"
39
+ end
50
40
 
51
- if args.key?(:except)
52
- args[:except] = Array(args[:except])
53
- raise "expected except: to be a symbol or array of symbols. Try submit :approve, 'Save and Approve', except: [:edit]" unless args[:except].all? { |v| v.kind_of?(Symbol) }
54
- end
41
+ if args.key?(:unless) && args[:unless].respond_to?(:call) == false
42
+ raise "expected unless: to be callable. Try submit :approve, 'Save and Approve', unless: -> { resource.declined? }"
43
+ end
55
44
 
56
- if args.key?(:redirect_to) # Normalize this option to redirect
57
- args[:redirect] = args.delete(:redirect_to)
58
- end
45
+ if args.key?(:only)
46
+ args[:only] = Array(args[:only])
47
+ raise "expected only: to be a symbol or array of symbols. Try submit :approve, 'Save and Approve', only: [:edit]" unless args[:only].all? { |v| v.kind_of?(Symbol) }
48
+ end
59
49
 
60
- args[:action] = action
50
+ if args.key?(:except)
51
+ args[:except] = Array(args[:except])
52
+ raise "expected except: to be a symbol or array of symbols. Try submit :approve, 'Save and Approve', except: [:edit]" unless args[:except].all? { |v| v.kind_of?(Symbol) }
53
+ end
61
54
 
62
- (submits[label] ||= {}).merge!(args)
55
+ if args.key?(:redirect_to) # Normalize this option to redirect
56
+ args[:redirect] = args.delete(:redirect_to)
63
57
  end
64
58
 
65
- def _insert_button(action, label = nil, args = {})
66
- raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
59
+ args[:action] = action
67
60
 
68
- if label == false
69
- buttons.delete_if { |label, args| args[:action] == action }; return
70
- end
61
+ (submits[label] ||= {}).merge!(args)
62
+ end
71
63
 
72
- if args == false
73
- buttons.delete(label); return
74
- end
64
+ def _insert_button(action, label = nil, args = {})
65
+ raise "expected first argument to be a Symbol. Try button :approve, 'Approve'" unless action.kind_of?(Symbol)
66
+ raise 'expected args to be a Hash or false' unless args.kind_of?(Hash) || args == false
75
67
 
76
- if label # Overwrite the default member action when given a custom label
77
- buttons.delete_if { |label, args| args[:default] && args[:action] == action }
78
- end
68
+ if label == false
69
+ buttons.delete_if { |label, args| args[:action] == action }; return
70
+ end
79
71
 
80
- if args.key?(:if) && args[:if].respond_to?(:call) == false
81
- raise "expected if: to be callable. Try button :approve, 'Approve', if: -> { resource.finished? }"
82
- end
72
+ if args == false
73
+ buttons.delete(label); return
74
+ end
83
75
 
84
- if args.key?(:unless) && args[:unless].respond_to?(:call) == false
85
- raise "expected unless: to be callable. Try button :approve, 'Approve', unless: -> { resource.declined? }"
86
- end
76
+ if label # Overwrite the default member action when given a custom label
77
+ buttons.delete_if { |label, args| args[:default] && args[:action] == action }
78
+ end
87
79
 
88
- if args.key?(:only)
89
- args[:only] = Array(args[:only])
90
- raise "expected only: to be a symbol or array of symbols. Try button :approve, 'Save and Approve', only: [:edit]" unless args[:only].all? { |v| v.kind_of?(Symbol) }
91
- end
80
+ if args.key?(:if) && args[:if].respond_to?(:call) == false
81
+ raise "expected if: to be callable. Try button :approve, 'Approve', if: -> { resource.finished? }"
82
+ end
92
83
 
93
- if args.key?(:except)
94
- args[:except] = Array(args[:except])
95
- raise "expected except: to be a symbol or array of symbols. Try button :approve, 'Save and Approve', except: [:edit]" unless args[:except].all? { |v| v.kind_of?(Symbol) }
96
- end
84
+ if args.key?(:unless) && args[:unless].respond_to?(:call) == false
85
+ raise "expected unless: to be callable. Try button :approve, 'Approve', unless: -> { resource.declined? }"
86
+ end
97
87
 
98
- if args.key?(:redirect_to) # Normalize this option to redirect
99
- args[:redirect] = args.delete(:redirect_to)
100
- end
88
+ if args.key?(:only)
89
+ args[:only] = Array(args[:only])
90
+ raise "expected only: to be a symbol or array of symbols. Try button :approve, 'Save and Approve', only: [:edit]" unless args[:only].all? { |v| v.kind_of?(Symbol) }
91
+ end
101
92
 
102
- args[:action] = action
93
+ if args.key?(:except)
94
+ args[:except] = Array(args[:except])
95
+ raise "expected except: to be a symbol or array of symbols. Try button :approve, 'Save and Approve', except: [:edit]" unless args[:except].all? { |v| v.kind_of?(Symbol) }
96
+ end
103
97
 
104
- (buttons[label] ||= {}).merge!(args)
98
+ if args.key?(:redirect_to) # Normalize this option to redirect
99
+ args[:redirect] = args.delete(:redirect_to)
105
100
  end
106
101
 
107
- def _insert_on(action, args = {})
108
- raise 'expected args to be a Hash' unless args.kind_of?(Hash)
102
+ args[:action] = action
109
103
 
110
- if args.key?(:redirect_to) # Normalize this option to redirect
111
- args[:redirect] = args.delete(:redirect_to)
112
- end
104
+ (buttons[label] ||= {}).merge!(args)
105
+ end
113
106
 
114
- args[:action] = action
107
+ def _insert_on(action, args = {})
108
+ raise "expected first argument to be a Symbol. Try on :approve, success: -> { ... }" unless action.kind_of?(Symbol)
109
+ raise 'expected args to be a Hash' unless args.kind_of?(Hash)
115
110
 
116
- (ons[action] ||= {}).merge!(args)
111
+ if args.key?(:redirect_to) # Normalize this option to redirect
112
+ args[:redirect] = args.delete(:redirect_to)
117
113
  end
118
- end
119
114
 
115
+ args[:action] = action
116
+
117
+ (ons[action] ||= {}).merge!(args)
118
+ end
120
119
  end
120
+
121
121
  end
122
122
  end
@@ -18,11 +18,7 @@ module Effective
18
18
  module ClassMethods
19
19
  include Effective::CrudController::Dsl
20
20
 
21
- # This is used for the buttons/submits/ons
22
- # It doesn't really work with the resource_scope correctly but the routes are important here
23
- def effective_resource
24
- @_effective_resource ||= Effective::Resource.new(controller_path)
25
- end
21
+ def effective_crud_controller?; true; end
26
22
  end
27
23
 
28
24
  def resource # @thing
@@ -84,6 +80,10 @@ module Effective
84
80
  effective_resource.relation
85
81
  end
86
82
 
83
+ def resource_klass # Thing
84
+ effective_resource.klass
85
+ end
86
+
87
87
  def resource_name # 'thing'
88
88
  effective_resource.name
89
89
  end
@@ -92,16 +92,16 @@ module Effective
92
92
  (effective_resource.name + '_id').to_sym
93
93
  end
94
94
 
95
- def resource_klass # Thing
96
- effective_resource.klass
95
+ def resource_plural_name # 'things'
96
+ effective_resource.plural_name
97
97
  end
98
98
 
99
- def resource_human_name
99
+ def resource_human_name # I18n
100
100
  effective_resource.human_name
101
101
  end
102
102
 
103
- def resource_plural_name # 'things'
104
- effective_resource.plural_name
103
+ def resource_human_plural_name # I18n
104
+ effective_resource.human_plural_name
105
105
  end
106
106
 
107
107
  def resource_datatable_attributes
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EffectiveResourcesHelper
4
-
5
4
  # effective_bootstrap
6
5
  def effective_submit(form, options = {}, &block)
7
- actions = (controller.respond_to?(:effective_resource) ? controller.class : find_effective_resource).submits
6
+ actions = controller.try(:submits) || raise('controller must be an Effective::CrudController')
8
7
  actions = actions.select { |k, v| v[:default] != true } if options.delete(:defaults) == false
9
8
  actions = permitted_resource_actions(form.object, actions)
10
9
 
@@ -17,7 +16,7 @@ module EffectiveResourcesHelper
17
16
 
18
17
  # effective_form_inputs
19
18
  def simple_form_submit(form, options = {}, &block)
20
- actions = (controller.respond_to?(:effective_resource) ? controller.class : find_effective_resource).submits
19
+ actions = controller.try(:submits) || raise('controller must be an Effective::CrudController')
21
20
  actions = permitted_resource_actions(form.object, actions)
22
21
 
23
22
  submits = actions.map { |name, opts| form.button(:submit, name, opts.except(:action, :title, 'data-method')) }
@@ -38,7 +37,7 @@ module EffectiveResourcesHelper
38
37
 
39
38
  def render_resource_buttons(resource, atts = {}, &block)
40
39
  effective_resource = find_effective_resource
41
- actions = (controller.respond_to?(:effective_resource) ? controller.class : effective_resource).buttons
40
+ actions = controller.try(:buttons) || raise('controller must be an Effective::CrudController')
42
41
 
43
42
  actions = if resource.kind_of?(Class)
44
43
  actions.select { |_, v| effective_resource.collection_get_actions.include?(v[:action]) }
@@ -301,4 +300,15 @@ module EffectiveResourcesHelper
301
300
  path || '/'
302
301
  end
303
302
 
303
+ def effective_translate(resource, attribute = nil)
304
+ EffectiveResources.et(resource, attribute)
305
+ end
306
+
307
+ def effective_translates(resource, attribute = nil)
308
+ EffectiveResources.ets(resource, attribute)
309
+ end
310
+
311
+ alias_method :et, :effective_translate
312
+ alias_method :ets, :effective_translates
313
+
304
314
  end
@@ -8,6 +8,7 @@ module Effective
8
8
  include Effective::Resources::Instance
9
9
  include Effective::Resources::Forms
10
10
  include Effective::Resources::Generator
11
+ include Effective::Resources::I18n
11
12
  include Effective::Resources::Klass
12
13
  include Effective::Resources::Model
13
14
  include Effective::Resources::Naming
@@ -31,7 +32,7 @@ module Effective
31
32
  end
32
33
 
33
34
  def to_s
34
- name
35
+ human_name
35
36
  end
36
37
 
37
38
  end
@@ -7,11 +7,11 @@ module Effective
7
7
  # This is the attributes as defined by ActiveRecord table
8
8
  # { :name => [:string], ... }
9
9
  def attributes
10
- (klass_attributes.presence || model_attributes.presence)
10
+ klass_attributes.presence || model_attributes.presence
11
11
  end
12
12
 
13
13
  def primary_key_attribute
14
- {klass.primary_key.to_sym => [:integer]}
14
+ { klass.primary_key.to_sym => [:integer] }
15
15
  end
16
16
 
17
17
  # The attributes for each belongs_to
@@ -54,11 +54,11 @@ module Effective
54
54
  end
55
55
 
56
56
  if collection_get_actions.find { |a| a == :index }
57
- buttons["All #{human_plural_name}".titleize] = { action: :index, default: true }
57
+ buttons["All #{human_plural_name}"] = { action: :index, default: true }
58
58
  end
59
59
 
60
60
  if collection_get_actions.find { |a| a == :new }
61
- buttons["New #{human_name}".titleize] = { action: :new, default: true }
61
+ buttons["New #{human_name}"] = { action: :new, default: true }
62
62
  end
63
63
 
64
64
  (collection_get_actions - crud_actions).each do |action|
@@ -122,11 +122,11 @@ module Effective
122
122
  def resource_klass_actions
123
123
  {}.tap do |buttons|
124
124
  if collection_get_actions.find { |a| a == :index }
125
- buttons["All #{human_plural_name}".titleize] = { action: :index, default: true }
125
+ buttons["All #{human_plural_name}"] = { action: :index, default: true }
126
126
  end
127
127
 
128
128
  if collection_get_actions.find { |a| a == :new }
129
- buttons["New #{human_name}".titleize] = { action: :new, default: true }
129
+ buttons["New #{human_name}"] = { action: :new, default: true }
130
130
  end
131
131
 
132
132
  (collection_get_actions - crud_actions).each do |action|
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Effective
4
+ module Resources
5
+ module I18n
6
+
7
+ def human_name
8
+ if klass.respond_to?(:model_name)
9
+ klass.model_name.human
10
+ else
11
+ name.gsub('::', ' ').underscore.gsub('_', ' ')
12
+ end
13
+ end
14
+
15
+ def human_plural_name
16
+ if klass.respond_to?(:model_name)
17
+ klass.model_name.human.pluralize
18
+ else
19
+ name.pluralize.gsub('::', ' ').underscore.gsub('_', ' ')
20
+ end
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -10,7 +10,7 @@ module Effective
10
10
  @model.read(&block)
11
11
 
12
12
  # If effective_developer is in live mode, this will cause it to refresh the class
13
- ActiveSupport.run_load_hooks(:effective_resource, self)
13
+ # ActiveSupport.run_load_hooks(:effective_resource, self)
14
14
  end
15
15
 
16
16
  def model
@@ -63,13 +63,6 @@ module Effective
63
63
  @namespaces || []
64
64
  end
65
65
 
66
- def human_name
67
- name.gsub('::', ' ').underscore.gsub('_', ' ')
68
- end
69
-
70
- def human_plural_name
71
- name.pluralize.gsub('::', ' ').underscore.gsub('_', ' ')
72
- end
73
66
  end
74
67
  end
75
68
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveResources
2
- VERSION = '2.2.12'.freeze
2
+ VERSION = '2.4.0'.freeze
3
3
  end
@@ -178,4 +178,20 @@ module EffectiveResources
178
178
  end
179
179
  end
180
180
 
181
+ def self.et(resource, attribute = nil)
182
+ return I18n.t(resource) unless resource.respond_to?(:model_name)
183
+
184
+ if attribute.blank?
185
+ resource.model_name.human
186
+ elsif resource.respond_to?(:human_attribute_name)
187
+ resource.human_attribute_name(attribute)
188
+ else
189
+ resource.class.human_attribute_name(attribute)
190
+ end
191
+ end
192
+
193
+ def self.ets(resource, attribute = nil)
194
+ et(resource, attribute).pluralize
195
+ end
196
+
181
197
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.12
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-01 00:00:00.000000000 Z
11
+ date: 2023-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -182,6 +182,7 @@ files:
182
182
  - app/models/effective/resources/controller.rb
183
183
  - app/models/effective/resources/forms.rb
184
184
  - app/models/effective/resources/generator.rb
185
+ - app/models/effective/resources/i18n.rb
185
186
  - app/models/effective/resources/init.rb
186
187
  - app/models/effective/resources/instance.rb
187
188
  - app/models/effective/resources/klass.rb