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.
@@ -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,5 @@
1
+ require 'telemetry/logger'
2
+ require 'dependency'; Dependency.activate
3
+
4
+ require 'set_attributes/attribute'
5
+ require 'set_attributes/set_attributes'
@@ -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: []