transmutable 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|