transmutable 1.0.0 → 1.0.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.
- checksums.yaml +4 -4
- data/lib/transmutable/base.rb +53 -0
- data/lib/transmutable/transmutable_class_methods.rb +11 -0
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d76eb93f56e525530152300eb985f28084403b75
|
|
4
|
+
data.tar.gz: 4d4a099a4d5b1705b73ddf0694d63dbcb8d14ea6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 54a71cbd69fde5e9a67bebcb2f59b794301782ef874ce30f50509ec9cff96527f232af6e1aafcca0f66a64f7a84b7a1c5071479f8813d3d66c58cbb42a176ec5
|
|
7
|
+
data.tar.gz: 66e2d1cb0abd9dd6d26ed74d9a010367edddb1e6315e87a67136a13e2e24fa26204a838de4895b3da919d2475f96656c4e43dff4c7b189d5fcba310582d24374
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module Transmutable
|
|
2
|
+
class Base
|
|
3
|
+
attr_accessor :model
|
|
4
|
+
|
|
5
|
+
def self.add_to_transmute(*methods)
|
|
6
|
+
define_method :transmute_addons do
|
|
7
|
+
methods
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.remove_from_transmute(*methods)
|
|
12
|
+
define_method :transmute_skips do
|
|
13
|
+
methods
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.serialize_attrs(*methods)
|
|
18
|
+
define_method :default_attrs do
|
|
19
|
+
methods
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def initialize(model)
|
|
24
|
+
@model = model
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def transmute
|
|
28
|
+
Hash[serialize_methods.map { |attribute| [attribute, model.send(attribute)] }]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
def serialize_methods
|
|
33
|
+
default_attrs - transmute_skips + transmute_addons
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def transmute_addons
|
|
37
|
+
[]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def transmute_skips
|
|
41
|
+
[]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def default_attrs
|
|
45
|
+
# Guard clause for Rails-esque models
|
|
46
|
+
return model.attributes.keys.map(&:to_sym) if model.respond_to? :attributes
|
|
47
|
+
|
|
48
|
+
model.instance_variables
|
|
49
|
+
.reject { |var| model.instance_variable_get(var).respond_to? :serialize }
|
|
50
|
+
.map { |var| var.to_s.gsub('@', '').to_sym }
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: transmutable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mitch Monsen
|
|
@@ -19,6 +19,8 @@ extensions: []
|
|
|
19
19
|
extra_rdoc_files: []
|
|
20
20
|
files:
|
|
21
21
|
- "./lib/transmutable.rb"
|
|
22
|
+
- "./lib/transmutable/base.rb"
|
|
23
|
+
- "./lib/transmutable/transmutable_class_methods.rb"
|
|
22
24
|
homepage: https://github.com/blarshk/transmutable
|
|
23
25
|
licenses:
|
|
24
26
|
- MIT
|