has_response 0.0.1 → 0.0.2

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,48 @@
1
+ module HasResponse
2
+ extend ActiveSupport::Concern
3
+
4
+ def to_response_with(*attributes)
5
+ raise "Class `#{self.class.name}' does not have a `to_response' method defined" if !respond_to?(:to_response)
6
+ response = self.to_response
7
+ attributes.each do |attribute|
8
+ if attribute.is_a?(Hash)
9
+ attribute.each do |key, value|
10
+ response[format_response_key(key)] = format_response_value(self.send(key), value)
11
+ end
12
+ elsif attribute.is_a?(Array)
13
+ attribute.each do |key|
14
+ response[format_response_key(key)] = format_response_value(self.send(key))
15
+ end
16
+ elsif attribute.is_a?(Symbol)
17
+ response[format_response_key(attribute)] = format_response_value(self.send(attribute))
18
+ end
19
+ end
20
+ response
21
+ end
22
+
23
+ protected
24
+
25
+ def format_response_key(key)
26
+ key = key.to_s
27
+ key.sub!(/\?$/, '')
28
+ key.to_sym
29
+ end
30
+
31
+ def format_response_value(value, with=nil)
32
+ if value.nil?
33
+ nil
34
+ elsif value.is_a?(TrueClass) || value.is_a?(FalseClass) || value.is_a?(String) || value.is_a?(Symbol) || value.is_a?(Integer)
35
+ value
36
+ elsif value.is_a?(ActiveRecord::Relation) || value.is_a?(Array)
37
+ format_response_collection(value, with)
38
+ else
39
+ with.nil? ? value.to_response : value.to_response_with(with)
40
+ end
41
+ end
42
+
43
+ def format_response_collection(collection, with=nil)
44
+ collection.collect do |record|
45
+ with.nil? ? record.to_response : record.to_response_with(with)
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module HasResponse
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_response
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -82,6 +82,7 @@ executables: []
82
82
  extensions: []
83
83
  extra_rdoc_files: []
84
84
  files:
85
+ - app/concerns/has_response.rb
85
86
  - lib/has_response/version.rb
86
87
  - lib/has_response.rb
87
88
  - MIT-LICENSE