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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f4eb1c2d626257e3cb1d8d5e0c167a21595439b
4
- data.tar.gz: 57eecc8bedb73fdb4ce9f86fe41da1c8441845f6
3
+ metadata.gz: d76eb93f56e525530152300eb985f28084403b75
4
+ data.tar.gz: 4d4a099a4d5b1705b73ddf0694d63dbcb8d14ea6
5
5
  SHA512:
6
- metadata.gz: 71a79f706637962a6c4f56964d32b3912142f531fbc3fa77a42d6fc54ec3d6dc53a9ec30e130ad04e0a1c7741218573c6668e85fcc7982712deedbfab641dae7
7
- data.tar.gz: 4f2d388d6fc62a98cdb73c229cff4ef451a5259424f804dbf66e5eeada0d50b4f370e6563e6f782947a87b2ec1f2fe4ff31d43df103235373467f8b328df1cc3
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
@@ -0,0 +1,11 @@
1
+ module Transmutable
2
+ module TransmutableClassMethods
3
+ def transmuter(transmuter_class)
4
+ class_eval do
5
+ define_method :transmuter do
6
+ transmuter_class
7
+ end
8
+ end
9
+ end
10
+ end
11
+ 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.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