effective_resources 2.2.12 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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