redress 0.1.1 → 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/README.md +4 -2
- data/lib/redress/form.rb +30 -19
- data/lib/redress/identity.rb +1 -1
- data/lib/redress/types.rb +9 -0
- data/lib/redress/utils/build_form_from_model.rb +10 -10
- data/lib/redress/utils/parse_attributes_from_params.rb +1 -1
- data/lib/redress.rb +1 -0
- metadata +6 -8
- data/lib/redress/utils/attribute_node.rb +0 -15
- data/lib/redress/utils/attribute_set.rb +0 -25
- data/lib/redress/utils/attributes_builder.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f35ba289da039ddbe9b65ba1b27384d6dcb25bf
|
4
|
+
data.tar.gz: 3182c116ee253aa615d3aba5e950fa6357278641
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a1ae51dd6951cda34468e64fc5f08eddb8d2a86471ee132885dd9ea04b4e626112d04245029adf952da6bb4948959d2192f795d7f334efaf5e94098851af557
|
7
|
+
data.tar.gz: 885f68704511aaa6165cf00b10e2d05cbe2c306a27c2b53178db6512b9b0597f0e22880ad16cdb29b46351f2623e80a553825229a4c2caae678451642ee14efd
|
data/README.md
CHANGED
@@ -31,7 +31,7 @@ The command pattern is sometimes called a service object, an operation, an actio
|
|
31
31
|
|
32
32
|
0. [Ruby 2.3](https://www.ruby-lang.org)
|
33
33
|
1. wisper
|
34
|
-
2.
|
34
|
+
2. dry-struct
|
35
35
|
3. hashie
|
36
36
|
4. activemodel
|
37
37
|
|
@@ -63,10 +63,12 @@ Let's define simple form:
|
|
63
63
|
class SimpleForm < ApplicationForm
|
64
64
|
mimic :user
|
65
65
|
|
66
|
-
|
66
|
+
define_schema do
|
67
|
+
attribute :nickname, Redress::Types::Strict::String.default("superman")
|
67
68
|
attribute :name, String
|
68
69
|
attribute :email, String
|
69
70
|
attribute :name_with_email, String
|
71
|
+
attribute :age, Redress::Types::Form::Int
|
70
72
|
end
|
71
73
|
|
72
74
|
validates :name, presence: true
|
data/lib/redress/form.rb
CHANGED
@@ -1,18 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "fast_attributes"
|
4
3
|
require "hashie/mash"
|
5
4
|
require "active_model"
|
5
|
+
require "dry-struct"
|
6
6
|
|
7
7
|
require "redress/utils/parse_attributes_from_params"
|
8
8
|
require "redress/utils/build_form_from_model"
|
9
|
-
require "redress/utils/attributes_builder"
|
10
|
-
require "redress/utils/attribute_set"
|
11
9
|
require "redress/utils/attributes_hash"
|
12
10
|
|
13
11
|
module Redress
|
14
|
-
class Form
|
15
|
-
extend FastAttributes
|
12
|
+
class Form < Dry::Struct
|
16
13
|
include ActiveModel::Validations
|
17
14
|
|
18
15
|
DEFAULT_NAME = "Form"
|
@@ -20,6 +17,12 @@ module Redress
|
|
20
17
|
|
21
18
|
attr_reader :context
|
22
19
|
|
20
|
+
# https://github.com/dry-rb/dry-struct/blob/master/lib/dry/struct.rb
|
21
|
+
# schema - missing keys will result in setting them using default values,
|
22
|
+
# unexpected keys will be ignored.
|
23
|
+
#
|
24
|
+
constructor_type :schema
|
25
|
+
|
23
26
|
def self.model_name
|
24
27
|
ActiveModel::Name.new(self, nil, mimicked_model_name.to_s.camelize)
|
25
28
|
end
|
@@ -47,21 +50,19 @@ module Redress
|
|
47
50
|
Redress::Utils::BuildFormFromModel.new(self, model).build
|
48
51
|
end
|
49
52
|
|
50
|
-
def self.
|
51
|
-
options
|
52
|
-
initialize: true,
|
53
|
-
attributes: true
|
54
|
-
}.merge!(options)
|
53
|
+
def self.define_schema(options = nil)
|
54
|
+
options.each { |key, value| public_send(key, value) } if options
|
55
55
|
|
56
|
-
|
57
|
-
builder.instance_eval(&block)
|
58
|
-
builder.compile!
|
56
|
+
yield
|
59
57
|
|
60
|
-
|
61
|
-
|
58
|
+
attribute_names.each do |name|
|
59
|
+
method_name = :"#{name}="
|
60
|
+
next if instance_methods.include?(method_name)
|
62
61
|
|
63
|
-
|
64
|
-
|
62
|
+
define_method(method_name) do |value|
|
63
|
+
writer_attribute(name, value)
|
64
|
+
end
|
65
|
+
end
|
65
66
|
end
|
66
67
|
|
67
68
|
def to_model
|
@@ -76,11 +77,21 @@ module Redress
|
|
76
77
|
@context = Hashie::Mash.new(options)
|
77
78
|
end
|
78
79
|
|
79
|
-
def
|
80
|
-
@
|
80
|
+
def attributes
|
81
|
+
@attributes ||= Redress::Utils::AttributesHash.new(to_hash)
|
81
82
|
end
|
83
|
+
alias properties attributes
|
82
84
|
|
83
85
|
def map_model(model)
|
84
86
|
end
|
87
|
+
|
88
|
+
protected
|
89
|
+
|
90
|
+
def writer_attribute(name, value)
|
91
|
+
return unless self.class.attribute?(name)
|
92
|
+
|
93
|
+
type = self.class.schema[name]
|
94
|
+
instance_variable_set("@#{name}", type[value])
|
95
|
+
end
|
85
96
|
end
|
86
97
|
end
|
data/lib/redress/identity.rb
CHANGED
@@ -9,24 +9,24 @@ module Redress
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def build
|
12
|
-
form.
|
13
|
-
|
14
|
-
model_value = @model.public_send(name)
|
15
|
-
form.public_send("#{name}=", model_value)
|
16
|
-
end
|
17
|
-
|
18
|
-
form.map_model(@model)
|
19
|
-
end
|
12
|
+
form.map_model(@model)
|
13
|
+
form
|
20
14
|
end
|
21
15
|
|
22
16
|
private
|
23
17
|
|
24
18
|
def form
|
25
|
-
@form ||= @form_class.new
|
19
|
+
@form ||= @form_class.new(model_attributes)
|
20
|
+
end
|
21
|
+
|
22
|
+
def model_attributes
|
23
|
+
matching_attributes.each_with_object({}) do |name, hash|
|
24
|
+
hash[name] = @model.public_send(name)
|
25
|
+
end
|
26
26
|
end
|
27
27
|
|
28
28
|
def matching_attributes
|
29
|
-
|
29
|
+
@form_class.attribute_names.select { |name| @model.respond_to?(name) }
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
data/lib/redress.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redress
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Galeta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: wisper
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.6.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: dry-struct
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.3.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.3.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hashie
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -207,9 +207,7 @@ files:
|
|
207
207
|
- lib/redress/command.rb
|
208
208
|
- lib/redress/form.rb
|
209
209
|
- lib/redress/identity.rb
|
210
|
-
- lib/redress/
|
211
|
-
- lib/redress/utils/attribute_set.rb
|
212
|
-
- lib/redress/utils/attributes_builder.rb
|
210
|
+
- lib/redress/types.rb
|
213
211
|
- lib/redress/utils/attributes_hash.rb
|
214
212
|
- lib/redress/utils/build_form_from_model.rb
|
215
213
|
- lib/redress/utils/parse_attributes_from_params.rb
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "redress/utils/attribute_node"
|
4
|
-
|
5
|
-
module Redress
|
6
|
-
module Utils
|
7
|
-
class AttributeSet
|
8
|
-
include Enumerable
|
9
|
-
|
10
|
-
def initialize(raw_attributes)
|
11
|
-
@raw_attributes = Array(raw_attributes)
|
12
|
-
|
13
|
-
@attributes = @raw_attributes.map { |item| AttributeNode.new(item) }
|
14
|
-
end
|
15
|
-
|
16
|
-
def each(&block)
|
17
|
-
@attributes.each(&block)
|
18
|
-
end
|
19
|
-
|
20
|
-
def names
|
21
|
-
@names ||= map(&:name)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|