evt-set_attributes 0.1.1.1
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 +7 -0
- data/lib/set_attributes.rb +5 -0
- data/lib/set_attributes/attribute.rb +27 -0
- data/lib/set_attributes/set_attributes.rb +97 -0
- metadata +74 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cbc6084d9ea63d512c0a99b9dbc7d085b3ec4aac
|
4
|
+
data.tar.gz: 54df5dbd3c2eaa78e40acc809864021dbfd6721b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2913e78e0a97ed157299de4578ebf9a7c400b37d19e6ddd8dac2e3535824b089cb37ad48ca665bda19163fbf4da3e6686224ac2a4ac6e625edd269992cec1fd3
|
7
|
+
data.tar.gz: 4e15abf30f9ca5792a70dadadaa7ef01fb2f4f66b437a0a6500bd1b4dfeb3655213a411182f817ddfb95ef2a5cc9b27b7c7212d230aa2529030791ab3c012b0e
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class SetAttributes
|
2
|
+
module Attribute
|
3
|
+
class Error < RuntimeError; end
|
4
|
+
|
5
|
+
def self.set(receiver, attribute, value, strict: nil)
|
6
|
+
logger = Telemetry::Logger.build self
|
7
|
+
|
8
|
+
strict ||= false
|
9
|
+
|
10
|
+
setter = :"#{attribute}="
|
11
|
+
|
12
|
+
if receiver.respond_to? setter
|
13
|
+
receiver.send setter, value
|
14
|
+
else
|
15
|
+
if strict
|
16
|
+
error_msg = "#{receiver} has no setter for #{attribute}"
|
17
|
+
logger.error error_msg
|
18
|
+
raise Error, error_msg
|
19
|
+
else
|
20
|
+
logger.opt_debug "#{receiver} has no setter for #{attribute}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
value
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
class SetAttributes
|
2
|
+
dependency :logger, Telemetry::Logger
|
3
|
+
|
4
|
+
attr_reader :receiver
|
5
|
+
attr_reader :data
|
6
|
+
attr_writer :include
|
7
|
+
attr_writer :exclude
|
8
|
+
attr_writer :strict
|
9
|
+
|
10
|
+
def include
|
11
|
+
@include ||= []
|
12
|
+
end
|
13
|
+
|
14
|
+
def exclude
|
15
|
+
@exclude ||= []
|
16
|
+
end
|
17
|
+
|
18
|
+
def strict
|
19
|
+
@strict ||= false
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(receiver, data)
|
23
|
+
@receiver = receiver
|
24
|
+
@data = data
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.build(receiver, data, copy: nil, include: nil, exclude: nil, strict: nil)
|
28
|
+
strict ||= false
|
29
|
+
|
30
|
+
unless data.respond_to? :to_h
|
31
|
+
raise ArgumentError, "#{data} can't be used to set attributes. It can't be converted to Hash."
|
32
|
+
end
|
33
|
+
|
34
|
+
unless data.is_a? Hash
|
35
|
+
data = data.to_h
|
36
|
+
end
|
37
|
+
|
38
|
+
exclude ||= []
|
39
|
+
exclude = Array(exclude)
|
40
|
+
|
41
|
+
unless copy.nil?
|
42
|
+
include = copy
|
43
|
+
end
|
44
|
+
|
45
|
+
include ||= []
|
46
|
+
include = Array(include)
|
47
|
+
include = data.keys if include.empty?
|
48
|
+
|
49
|
+
new(receiver, data).tap do |instance|
|
50
|
+
instance.include = include
|
51
|
+
instance.exclude = exclude
|
52
|
+
instance.strict = strict
|
53
|
+
Telemetry::Logger.configure instance
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.call(receiver, data, include: nil, copy: nil, exclude: nil, strict: nil)
|
58
|
+
instance = build(receiver, data, copy: copy, include: include, exclude: exclude, strict: strict)
|
59
|
+
|
60
|
+
instance.()
|
61
|
+
end
|
62
|
+
class << self; alias :! :call; end # TODO: Remove deprecated actuator [Kelsey, Thu Oct 08 2015]
|
63
|
+
|
64
|
+
def call
|
65
|
+
include_mapping = self.include_mapping
|
66
|
+
attributes = (data.keys & include_mapping.keys) - exclude
|
67
|
+
|
68
|
+
set_attributes = []
|
69
|
+
attributes.each do |from_attribute|
|
70
|
+
to_attribute = include_mapping[from_attribute]
|
71
|
+
|
72
|
+
value = data[from_attribute]
|
73
|
+
|
74
|
+
Attribute.set(receiver, to_attribute, value, strict: strict)
|
75
|
+
|
76
|
+
set_attributes << to_attribute
|
77
|
+
end
|
78
|
+
set_attributes
|
79
|
+
end
|
80
|
+
alias :! :call # TODO: Remove deprecated actuator [Kelsey, Thu Oct 08 2015]
|
81
|
+
|
82
|
+
def include_mapping
|
83
|
+
mapping = {}
|
84
|
+
include.each do |item|
|
85
|
+
if item.is_a? Hash
|
86
|
+
mapping[item.keys.first] = item.values.first
|
87
|
+
else
|
88
|
+
mapping[item] = item
|
89
|
+
end
|
90
|
+
end
|
91
|
+
mapping
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.logger
|
95
|
+
@logger ||= Telemetry::Logger.get self
|
96
|
+
end
|
97
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: evt-set_attributes
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- The Eventide Project
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: evt-telemetry-logger
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ntl-test_bench
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: " "
|
42
|
+
email: opensource@eventide-project.org
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- lib/set_attributes.rb
|
48
|
+
- lib/set_attributes/attribute.rb
|
49
|
+
- lib/set_attributes/set_attributes.rb
|
50
|
+
homepage: https://github.com/eventide-project/set-attributes
|
51
|
+
licenses:
|
52
|
+
- MIT
|
53
|
+
metadata: {}
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 2.3.3
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
requirements: []
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 2.5.2
|
71
|
+
signing_key:
|
72
|
+
specification_version: 4
|
73
|
+
summary: Set an object's attributes from an object or hash with a similar attributes
|
74
|
+
test_files: []
|