materialize 0.2.6 → 0.3.0
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/.gitignore +3 -0
- data/lib/materialize/base_builder.rb +7 -2
- data/lib/materialize/entity.rb +60 -5
- data/lib/materialize/repo.rb +1 -7
- data/lib/materialize/utils.rb +8 -0
- data/lib/materialize/version.rb +1 -1
- data/lib/materialize.rb +2 -0
- data/materialize-0.2.6.gem +0 -0
- data/materialize.gemspec +3 -0
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39d67c12cf8e34e0ac2c0d2c1b4ad850eb3c80aa
|
4
|
+
data.tar.gz: ef3341c77054ea5b855400b45cb7e7e8b6e39563
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27aae64c6eff10853db633a665e46509ee67b979827bb0d912e7f09c5dc650b581b592ab257766e24307e9ed7dad9abc2009ade7a010f43e1b1e97dc2d6bf094
|
7
|
+
data.tar.gz: fbb18af77707515cd3bc2c9622516b4f4c6ad64b3a7c1a0d36667ae92717ca225539dbaf1151150a0bdf02e29d6ec9c541b216f169c5aff0280c0838f48ac4ea
|
data/.gitignore
CHANGED
@@ -4,11 +4,11 @@ module Materialize
|
|
4
4
|
class << self
|
5
5
|
|
6
6
|
def build(data, repo, options)
|
7
|
-
entity_class.new(data)
|
7
|
+
attach_builder_info(entity_class.new(data), repo, options)
|
8
8
|
end
|
9
9
|
|
10
10
|
def build_all(data, repo, options)
|
11
|
-
entity_class.wrap(data)
|
11
|
+
entity_class.wrap(data).map { |entity| attach_builder_info(entity, repo, options) }
|
12
12
|
end
|
13
13
|
|
14
14
|
def entity_class
|
@@ -17,6 +17,11 @@ module Materialize
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
+
def attach_builder_info(entity, repo, options)
|
21
|
+
entity.__builder_info__ = { repo: repo, options: options }
|
22
|
+
entity
|
23
|
+
end
|
24
|
+
|
20
25
|
def entity_base_class_name
|
21
26
|
"#{self.name[0..-8]}".split('::').last
|
22
27
|
end
|
data/lib/materialize/entity.rb
CHANGED
@@ -1,25 +1,80 @@
|
|
1
|
-
# To test:
|
2
|
-
# 1. Should be able to add extra arguments after attributes in a subclass
|
3
|
-
# 2. Should throw an error if hash is not provided as FIRST argument
|
4
|
-
|
5
1
|
module Materialize
|
6
2
|
class Entity
|
3
|
+
include Utils
|
7
4
|
|
8
5
|
def self.wrap(entities_data)
|
9
6
|
entities_data.map { |entity_data| new(entity_data) }
|
10
7
|
end
|
11
8
|
|
9
|
+
attr_writer :__builder_info__
|
10
|
+
|
12
11
|
def initialize(attributes)
|
13
12
|
raise "Attributes must be a hash" unless attributes.is_a?(Hash)
|
14
13
|
|
15
14
|
attributes.each_pair do |key, value|
|
15
|
+
value = attempt_entity_conversion(key, value) if collection?(value)
|
16
16
|
instance_variable_set("@#{key}", value)
|
17
|
-
|
18
17
|
(class << self; self; end).class_eval do
|
19
18
|
attr_reader key.to_sym
|
20
19
|
end
|
21
20
|
end
|
22
21
|
end
|
23
22
|
|
23
|
+
private
|
24
|
+
|
25
|
+
# START REMARKS ---->
|
26
|
+
|
27
|
+
# These are here to allow for nested data coming from a data source via a repo.
|
28
|
+
# e.g.
|
29
|
+
# blog_post = {
|
30
|
+
# id: 1,
|
31
|
+
# title: 'TDD is dead (wait, what?)'
|
32
|
+
# ...
|
33
|
+
# comments: [...]
|
34
|
+
# }
|
35
|
+
#
|
36
|
+
# In this case, we need to queue a builder, which requires a repo and options (see repo & builder classes).
|
37
|
+
# WARNING:
|
38
|
+
# This should be avoided for deeply nested data, especially when the leaves look up extra data!
|
39
|
+
|
40
|
+
|
41
|
+
def __builder_info__
|
42
|
+
@__builder_info__ ||= {}
|
43
|
+
end
|
44
|
+
|
45
|
+
def repo
|
46
|
+
__builder_info__[:repo]
|
47
|
+
end
|
48
|
+
|
49
|
+
def options
|
50
|
+
__builder_info__[:options]
|
51
|
+
end
|
52
|
+
|
53
|
+
# ----> END REMARKS
|
54
|
+
|
55
|
+
def collection?(value)
|
56
|
+
value.is_a? Enumerable
|
57
|
+
end
|
58
|
+
|
59
|
+
def attempt_entity_conversion(key, value)
|
60
|
+
if class_exists?(covert_to_entity_class_name(key))
|
61
|
+
Module.const_get(builder_class_name_for(key)).build_all(value, repo, options)
|
62
|
+
else
|
63
|
+
value
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def covert_to_entity_class_name(key)
|
68
|
+
"Entities::#{base_name_for(key)}"
|
69
|
+
end
|
70
|
+
|
71
|
+
def builder_class_name_for(key)
|
72
|
+
"#{base_name_for(key)}Builder"
|
73
|
+
end
|
74
|
+
|
75
|
+
def base_name_for(key)
|
76
|
+
key.to_s.singularize.split('_').collect(&:capitalize).join
|
77
|
+
end
|
78
|
+
|
24
79
|
end
|
25
80
|
end
|
data/lib/materialize/repo.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Materialize
|
2
2
|
class Repo
|
3
|
+
include Utils
|
3
4
|
|
4
5
|
attr_reader :token
|
5
6
|
|
@@ -72,12 +73,5 @@ module Materialize
|
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
75
|
-
def class_exists?(class_name)
|
76
|
-
klass = Module.const_get(class_name)
|
77
|
-
return klass.is_a?(Class)
|
78
|
-
rescue NameError
|
79
|
-
return false
|
80
|
-
end
|
81
|
-
|
82
76
|
end
|
83
77
|
end
|
data/lib/materialize/version.rb
CHANGED
data/lib/materialize.rb
CHANGED
Binary file
|
data/materialize.gemspec
CHANGED
@@ -30,7 +30,10 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
31
|
spec.require_paths = ["lib"]
|
32
32
|
|
33
|
+
spec.add_dependency "activesupport", "~> 5.0"
|
34
|
+
|
33
35
|
spec.add_development_dependency "bundler", "~> 1.13"
|
34
36
|
spec.add_development_dependency "rake", "~> 10.0"
|
35
37
|
spec.add_development_dependency "rspec", "~> 3.0"
|
38
|
+
spec.add_development_dependency "pry"
|
36
39
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: materialize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Fiser
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,20 @@ dependencies:
|
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
description: This is the description
|
56
84
|
email:
|
57
85
|
- stephen@bluebear.io
|
@@ -77,7 +105,9 @@ files:
|
|
77
105
|
- lib/materialize/entity.rb
|
78
106
|
- lib/materialize/repo.rb
|
79
107
|
- lib/materialize/response.rb
|
108
|
+
- lib/materialize/utils.rb
|
80
109
|
- lib/materialize/version.rb
|
110
|
+
- materialize-0.2.6.gem
|
81
111
|
- materialize.gemspec
|
82
112
|
homepage: http://bluebear.io
|
83
113
|
licenses:
|