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 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