eac_rails_utils 0.1.15 → 0.2.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 +4 -4
- data/lib/eac/common_form_helper/form_builder.rb +1 -0
- data/lib/eac/common_form_helper/form_builder/time_field.rb +21 -0
- data/lib/eac_rails_utils.rb +3 -1
- data/lib/eac_rails_utils/patches/action_controller_base.rb +22 -0
- data/lib/eac_rails_utils/tableless_model.rb +90 -0
- data/lib/eac_rails_utils/version.rb +1 -1
- data/test/lib/eac_rails_utils/tableless_model_test.rb +23 -0
- metadata +7 -3
- data/lib/eac/tableless_model.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48317e9de4d255c8f419eb298030496144d85a93
|
4
|
+
data.tar.gz: bba8b002895dcca4c34af057f612b34199226ade
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f609cacab57ddc7427a207d419008678b8fe6e7efcf050f415ba461bd0e3c37c78b6ea162b25cbff58dc3074f6ddaeac2dea3b025fba8e295ea2899cc27195bf
|
7
|
+
data.tar.gz: 3598abd778ff91d1101dabe8a350f7afc240b41d47128a32f5cc28a78a44a6db3f2b3297408b692fefc7ab8becc955f75546a0f254f04f7cdce02180871f0ad9
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Eac
|
3
|
+
module CommonFormHelper
|
4
|
+
class FormBuilder
|
5
|
+
module TimeField
|
6
|
+
def time_field(field_name, options = {})
|
7
|
+
field_options = options.extract!(:use_month_numbers, :use_two_digit_numbers,
|
8
|
+
:use_short_month, :add_month_numbers, :use_month_names,
|
9
|
+
:month_format_string, :date_separator, :start_year,
|
10
|
+
:end_year, :discard_day, :discard_month, :discard_year,
|
11
|
+
:order, :include_blank, :default, :selected, :disabled,
|
12
|
+
:prompt, :with_css_classes)
|
13
|
+
field(field_name, options) do
|
14
|
+
@helper.content_tag(:div, @form.time_select(field_name, field_options),
|
15
|
+
class: 'form-control-complex')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/eac_rails_utils.rb
CHANGED
@@ -5,9 +5,11 @@ module EacRailsUtils
|
|
5
5
|
require 'ofx-parser'
|
6
6
|
require 'virtus'
|
7
7
|
|
8
|
+
require 'eac_rails_utils/patches/action_controller_base'
|
8
9
|
require 'eac_rails_utils/patches/model_attribute_required'
|
9
10
|
require 'eac_rails_utils/patches/ofx_parser'
|
10
11
|
require 'eac_rails_utils/rails/engine'
|
12
|
+
require 'eac_rails_utils/tableless_model'
|
11
13
|
require 'eac/cpf_validator'
|
12
14
|
require 'eac/formatter_helper'
|
13
15
|
require 'eac/common_form_helper/form_builder/association_select_field'
|
@@ -18,6 +20,7 @@ module EacRailsUtils
|
|
18
20
|
require 'eac/common_form_helper/form_builder/radio_select_field'
|
19
21
|
require 'eac/common_form_helper/form_builder/searchable_association_field'
|
20
22
|
require 'eac/common_form_helper/form_builder/select_field'
|
23
|
+
require 'eac/common_form_helper/form_builder/time_field'
|
21
24
|
require 'eac/common_form_helper/form_builder/year_month_field'
|
22
25
|
require 'eac/common_form_helper/form_builder'
|
23
26
|
require 'eac/common_form_helper'
|
@@ -37,7 +40,6 @@ module EacRailsUtils
|
|
37
40
|
require 'eac/parsers/ofx'
|
38
41
|
require 'eac/simple_cache'
|
39
42
|
require 'eac/source_target_fixtures'
|
40
|
-
require 'eac/tableless_model'
|
41
43
|
require 'eac/test_utils'
|
42
44
|
|
43
45
|
ActionView::Base.send :include, Eac::CommonFormHelper
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module EacRailsUtils
|
3
|
+
module Patches
|
4
|
+
module ActionControllerBasePatch
|
5
|
+
def self.included(base)
|
6
|
+
base.include InstanceMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
module InstanceMethods
|
10
|
+
def redirect_back(default_path, options = {})
|
11
|
+
redirect_to :back, options
|
12
|
+
rescue ActionController::RedirectBackError
|
13
|
+
redirect_to default_path, options
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
patch = ::EacRailsUtils::Patches::ActionControllerBasePatch
|
21
|
+
target = ::ActionController::Base
|
22
|
+
target.send(:include, patch) unless target.included_modules.include?(patch)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module EacRailsUtils
|
3
|
+
class TablelessModel
|
4
|
+
include ActiveModel::Model
|
5
|
+
include Virtus.model
|
6
|
+
include ActiveModel::Associations
|
7
|
+
|
8
|
+
def initialize(values = {})
|
9
|
+
super(build_attributes(values))
|
10
|
+
end
|
11
|
+
|
12
|
+
def attributes=(values)
|
13
|
+
super(build_attributes(values))
|
14
|
+
end
|
15
|
+
|
16
|
+
# need hash like accessor, used internal Rails
|
17
|
+
def [](attr)
|
18
|
+
send(attr)
|
19
|
+
end
|
20
|
+
|
21
|
+
# need hash like accessor, used internal Rails
|
22
|
+
def []=(attr, value)
|
23
|
+
send("#{attr}=", value)
|
24
|
+
end
|
25
|
+
|
26
|
+
def save!
|
27
|
+
save || raise("#{self.class}.save failed: #{errors.messages}")
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def build_attributes(values)
|
33
|
+
AttributesBuilder.new(self.class, values).to_attributes
|
34
|
+
end
|
35
|
+
|
36
|
+
class AttributesBuilder
|
37
|
+
DATE_TIME_FIELDS = %i(year month day hour min sec).freeze
|
38
|
+
|
39
|
+
def initialize(model_class, values)
|
40
|
+
@model_class = model_class
|
41
|
+
@values = {}
|
42
|
+
values.each { |k, v| add(k, v) }
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_attributes
|
46
|
+
@values
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def add(key, value)
|
52
|
+
array_attr = parse_array_attr_key(key)
|
53
|
+
if array_attr
|
54
|
+
array_value_set(array_attr, value)
|
55
|
+
else
|
56
|
+
@values[key] = value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def parse_array_attr_key(key)
|
61
|
+
m = /\A(.+)\(([0-9]+)(.)\)\z/.match(key)
|
62
|
+
if m
|
63
|
+
::OpenStruct.new(key: m[1], index: m[2].to_i - 1, converter: array_value_converter(m[3]))
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def array_value_set(array_attr, value)
|
68
|
+
@values[array_attr.key] ||= {}
|
69
|
+
@values[array_attr.key].merge!(
|
70
|
+
DATE_TIME_FIELDS[array_attr.index] => value.send(array_attr.converter)
|
71
|
+
)
|
72
|
+
end
|
73
|
+
|
74
|
+
def array_value_converter(str_type)
|
75
|
+
case str_type
|
76
|
+
when 'i'
|
77
|
+
'to_i'
|
78
|
+
else
|
79
|
+
raise "Unknown array type: \"#{str_type}\""
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def date_time_attribute?(key)
|
84
|
+
attr = @model_class.attributes[key]
|
85
|
+
return false unless attr
|
86
|
+
raise attr.to_s
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module EacRailsUtils
|
6
|
+
class TablelessModelTest < ActiveSupport::TestCase
|
7
|
+
class Stub < ::EacRailsUtils::TablelessModel
|
8
|
+
attribute :tempo, DateTime
|
9
|
+
end
|
10
|
+
|
11
|
+
test 'date time array values' do
|
12
|
+
stub = Stub.new('tempo(1i)' => '9', 'tempo(2i)' => '10', 'tempo(3i)' => '11',
|
13
|
+
'tempo(4i)' => '12', 'tempo(5i)' => '13', 'tempo(6i)' => '14')
|
14
|
+
assert stub.tempo.is_a?(DateTime), "Class: |#{stub.tempo.class}|, Value: |#{stub.tempo}|"
|
15
|
+
assert_equal 9, stub.tempo.year, 'Year'
|
16
|
+
assert_equal 10, stub.tempo.month, 'Month'
|
17
|
+
assert_equal 11, stub.tempo.day, 'Day'
|
18
|
+
assert_equal 12, stub.tempo.hour, 'Hour'
|
19
|
+
assert_equal 13, stub.tempo.minute, 'Minute'
|
20
|
+
assert_equal 14, stub.tempo.second, 'Second'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eac_rails_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- E.A.C.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel-associations
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- lib/eac/common_form_helper/form_builder/radio_select_field.rb
|
151
151
|
- lib/eac/common_form_helper/form_builder/searchable_association_field.rb
|
152
152
|
- lib/eac/common_form_helper/form_builder/select_field.rb
|
153
|
+
- lib/eac/common_form_helper/form_builder/time_field.rb
|
153
154
|
- lib/eac/common_form_helper/form_builder/year_month_field.rb
|
154
155
|
- lib/eac/cpf_validator.rb
|
155
156
|
- lib/eac/data_table_helper.rb
|
@@ -172,12 +173,13 @@ files:
|
|
172
173
|
- lib/eac/parsers/ofx.rb
|
173
174
|
- lib/eac/simple_cache.rb
|
174
175
|
- lib/eac/source_target_fixtures.rb
|
175
|
-
- lib/eac/tableless_model.rb
|
176
176
|
- lib/eac/test_utils.rb
|
177
177
|
- lib/eac_rails_utils.rb
|
178
|
+
- lib/eac_rails_utils/patches/action_controller_base.rb
|
178
179
|
- lib/eac_rails_utils/patches/model_attribute_required.rb
|
179
180
|
- lib/eac_rails_utils/patches/ofx_parser.rb
|
180
181
|
- lib/eac_rails_utils/rails/engine.rb
|
182
|
+
- lib/eac_rails_utils/tableless_model.rb
|
181
183
|
- lib/eac_rails_utils/version.rb
|
182
184
|
- lib/tasks/eac_rails_utils.rake
|
183
185
|
- test/dummy/Rakefile
|
@@ -214,6 +216,7 @@ files:
|
|
214
216
|
- test/lib/eac/source_target_fixtures_test_files/b.source.html
|
215
217
|
- test/lib/eac/source_target_fixtures_test_files/c.target.yaml
|
216
218
|
- test/lib/eac_rails_utils/patches/model_attribute_required_test.rb
|
219
|
+
- test/lib/eac_rails_utils/tableless_model_test.rb
|
217
220
|
- test/test_helper.rb
|
218
221
|
homepage:
|
219
222
|
licenses: []
|
@@ -257,6 +260,7 @@ test_files:
|
|
257
260
|
- test/dummy/app/models/user.rb
|
258
261
|
- test/test_helper.rb
|
259
262
|
- test/lib/eac_rails_utils/patches/model_attribute_required_test.rb
|
263
|
+
- test/lib/eac_rails_utils/tableless_model_test.rb
|
260
264
|
- test/lib/eac/common_form_helper_test.rb
|
261
265
|
- test/lib/eac/source_target_fixtures_test.rb
|
262
266
|
- test/lib/eac/parsers/files_test_test.rb
|
data/lib/eac/tableless_model.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module Eac
|
3
|
-
class TablelessModel
|
4
|
-
include ActiveModel::Model
|
5
|
-
include Virtus.model
|
6
|
-
include ActiveModel::Associations
|
7
|
-
|
8
|
-
# need hash like accessor, used internal Rails
|
9
|
-
def [](attr)
|
10
|
-
send(attr)
|
11
|
-
end
|
12
|
-
|
13
|
-
# need hash like accessor, used internal Rails
|
14
|
-
def []=(attr, value)
|
15
|
-
send("#{attr}=", value)
|
16
|
-
end
|
17
|
-
|
18
|
-
def save!
|
19
|
-
save || raise("#{self.class}.save failed: #{errors.messages}")
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|