evt-set_attributes 0.1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []