redress 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|