diff options
author | Ahmad Sherif <me@ahmadsherif.com> | 2017-11-13 11:05:16 +0100 |
---|---|---|
committer | Ahmad Sherif <me@ahmadsherif.com> | 2017-11-15 17:46:36 +0100 |
commit | 44c3fb6e817b43f36f21c54b7d1503da45005d2e (patch) | |
tree | 9e80eea702bd10f1f846f8668ad716b661170f7b /lib/gitlab/gitaly_client/attributes_bag.rb | |
parent | f31fb4cd0cec388b610f29e5231b5e9168a3941c (diff) | |
download | gitlab-ce-44c3fb6e817b43f36f21c54b7d1503da45005d2e.tar.gz |
Add an attributes bag class as a GitalyClient helperfix/add-attributes-bag-class-to-gitaly-client
Diffstat (limited to 'lib/gitlab/gitaly_client/attributes_bag.rb')
-rw-r--r-- | lib/gitlab/gitaly_client/attributes_bag.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/gitlab/gitaly_client/attributes_bag.rb b/lib/gitlab/gitaly_client/attributes_bag.rb new file mode 100644 index 00000000000..198a1de91c7 --- /dev/null +++ b/lib/gitlab/gitaly_client/attributes_bag.rb @@ -0,0 +1,31 @@ +module Gitlab + module GitalyClient + # This module expects an `ATTRS` const to be defined on the subclass + # See GitalyClient::WikiFile for an example + module AttributesBag + extend ActiveSupport::Concern + + included do + attr_accessor(*const_get(:ATTRS)) + end + + def initialize(params) + params = params.with_indifferent_access + + attributes.each do |attr| + instance_variable_set("@#{attr}", params[attr]) + end + end + + def ==(other) + attributes.all? do |field| + instance_variable_get("@#{field}") == other.instance_variable_get("@#{field}") + end + end + + def attributes + self.class.const_get(:ATTRS) + end + end + end +end |