object_identifier 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8ddc2ad9b41c164acd506d459485a07fec316df
4
- data.tar.gz: 1db0b95efe25e89e27dbce11275f7662fccc3b5a
3
+ metadata.gz: 89be2d486507ddbd5182f7fb39bcfcd9afaa6a18
4
+ data.tar.gz: 9b6da56732eb50db9e65ae9f70364d4a64173650
5
5
  SHA512:
6
- metadata.gz: ab5c8a2a62cba5aebfca5ac676b9b3dc3e4221e7112ecaea1027ae7df57dcb42daf09654927ac6fe80ffe6069052f878c1bef8747336fd467943f92576563add
7
- data.tar.gz: 21d76f36afa3abe23f84caf8d9c70e5f52b3e640500675b0aa6ad14030e03978ad05a9c99dab7e3351631ac8b37c9303dd71b1e2873d847d7a091824fec3a697
6
+ metadata.gz: f6649983366ea699aa1f1ae45645b22cb3304a3f8f6a561f73e15a330a73222b084cc664f2cbb43790e6d0fd09b36b93eeaebb843a0a966f60d6ec717c208cca
7
+ data.tar.gz: 8f250fed936c1c3f2f22473832af284c389f5ce013a0de36203739df57200e779b04d2cdd8bceed85606faa8963e705e6b8c32f969ec6d85c9d9336eac2cf79a
@@ -0,0 +1,78 @@
1
+ module ObjectIdentifier
2
+ class Deidentifier
3
+ attr_accessor :str, :options
4
+
5
+ def initialize(str, options = {})
6
+ @str = str.to_s
7
+ @options = options
8
+ end
9
+
10
+ # Class method for reconstructing an object or set of objects from its/their
11
+ # self-identifying string(s).
12
+ #
13
+ # @overload self.identify(str)
14
+ # @param str [String] the String to deidentify
15
+ # @overload self.identify(str, options)
16
+ # @param str [String] the object to identify
17
+ # @param [Hash] options the options for building a customized
18
+ # self-identifier
19
+ # @option options [String, nil] :klass object class name override
20
+ # @option options [Fixnum] :limit maximum number of objects to display
21
+ # from a collection
22
+ #
23
+ # @return [Object] the object represented by the identifier String
24
+ def self.deidentify(obj, options = {})
25
+ new(obj, options).deidentify
26
+ end
27
+
28
+ # @return [Object] the object represented by the identifier String
29
+ def deidentify
30
+ if multiple_objects_to_deidentify?
31
+ # deidentify_multiple_objects
32
+ else
33
+ deidentify_single_object(str)
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def deidentify_multiple_objects
40
+ end
41
+
42
+ def deidentify_single_object(object_str)
43
+ klass = determine_class(object_str)
44
+ attributes = extract_attributes(object_str)
45
+
46
+ case (model = klass.constantize)
47
+ when ActiveRecord::Base
48
+ model.where(select_core_attributes(attributes)).first
49
+ else
50
+ model.new(attributes)
51
+ end
52
+ end
53
+
54
+ def multiple_objects_to_deidentify?
55
+ str.starts_with?("[") && str.ends_with?("]")
56
+ end
57
+
58
+ def determine_class(object_str)
59
+ options.fetch(:klass) {
60
+ object_str[/\A(\w+)/, 1]
61
+ }
62
+ end
63
+
64
+ def extract_attributes(object_str)
65
+ result = object_str[/\[(.+)\]/, 1]
66
+ return if result == "no objects"
67
+ JSON.parse(jsonify_attributes_str(result))
68
+ end
69
+
70
+ def jsonify_attributes_str(attributes_str)
71
+ "{ #{attributes_str} }".gsub(/ (\w+):/, ' "\1":')
72
+ end
73
+
74
+ def select_core_attributes(attributes)
75
+ attributes.select { |key, _| key.in?(klass.column_names) }
76
+ end
77
+ end
78
+ end
@@ -103,7 +103,7 @@ module ObjectIdentifier
103
103
  format_empty(object)
104
104
  else
105
105
  attrs = @attributes.each_with_object({}) do |key, memo|
106
- memo[key] = object.send(key) if object.respond_to?(key)
106
+ memo[key] = object.send(key) if object.respond_to?(key, :include_all)
107
107
  end
108
108
  "#{class_name_of(object)}[#{attribute_formatter(attrs)}]"
109
109
  end
@@ -126,7 +126,7 @@ module ObjectIdentifier
126
126
  end
127
127
 
128
128
  def class_name_of(object)
129
- @options.key?(:klass) ? @options[:klass] : object.class.name
129
+ @options.fetch(:klass) { object.class.name }
130
130
  end
131
131
  end
132
132
  end
@@ -1,3 +1,3 @@
1
1
  module ObjectIdentifier
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -5,4 +5,5 @@ require "object_identifier/core_ext/big_decimal"
5
5
 
6
6
  module ObjectIdentifier
7
7
  autoload :Identifier, "object_identifier/identifier"
8
+ autoload :Deidentifier, "object_identifier/deidentifier"
8
9
  end
@@ -0,0 +1,28 @@
1
+ require "test_helper"
2
+
3
+ describe ObjectIdentifier::Deidentifier do
4
+ describe ".deidentify" do
5
+ it "returns the object, GIVEN just an :id attribute" do
6
+ subject = OpenStruct.new(id: 1)
7
+ result = ObjectIdentifier::Deidentifier.deidentify(subject.identify)
8
+ result.must_be_kind_of OpenStruct
9
+ result.must_equal subject
10
+ end
11
+ end
12
+
13
+ describe "#determine_class" do
14
+ it "returns the class string" do
15
+ subject = "TheClass[id: 1]"
16
+ result = ObjectIdentifier::Deidentifier.new("").send(:determine_class, subject)
17
+ result.must_equal "TheClass"
18
+ end
19
+ end
20
+
21
+ describe "#extract_attributes" do
22
+ it "returns the class string" do
23
+ subject = "TheClass[id: 1]"
24
+ result = ObjectIdentifier::Deidentifier.new("").send(:extract_attributes, subject)
25
+ result.must_equal({ id: 1 }.stringify_keys)
26
+ end
27
+ end
28
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: object_identifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Dobbins
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-30 00:00:00.000000000 Z
12
+ date: 2016-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -68,12 +68,14 @@ files:
68
68
  - lib/object_identifier/core_ext/object.rb
69
69
  - lib/object_identifier/core_ext/string.rb
70
70
  - lib/object_identifier/core_ext/symbol.rb
71
+ - lib/object_identifier/deidentifier.rb
71
72
  - lib/object_identifier/identifier.rb
72
73
  - lib/object_identifier/version.rb
73
74
  - test/core_ext/big_decimal_test.rb
74
75
  - test/core_ext/object_test.rb
75
76
  - test/core_ext/string_test.rb
76
77
  - test/core_ext/symbol_test.rb
78
+ - test/deidentifier_test.rb
77
79
  - test/dummy/README.rdoc
78
80
  - test/dummy/Rakefile
79
81
  - test/dummy/app/assets/javascripts/application.js
@@ -130,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
132
  version: '0'
131
133
  requirements: []
132
134
  rubyforge_project:
133
- rubygems_version: 2.4.1
135
+ rubygems_version: 2.4.5
134
136
  signing_key:
135
137
  specification_version: 4
136
138
  summary: Identify an object by inspecting its class name and attributes.
@@ -139,6 +141,7 @@ test_files:
139
141
  - test/core_ext/object_test.rb
140
142
  - test/core_ext/string_test.rb
141
143
  - test/core_ext/symbol_test.rb
144
+ - test/deidentifier_test.rb
142
145
  - test/dummy/app/assets/javascripts/application.js
143
146
  - test/dummy/app/assets/stylesheets/application.css
144
147
  - test/dummy/app/controllers/application_controller.rb