dato 0.1.17 → 0.1.18
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/dato/local/item.rb +8 -0
- data/lib/dato/local/items_repo.rb +50 -13
- data/lib/dato/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ca87da24b5ba4828b5cc9b96045bed562e57f79
|
4
|
+
data.tar.gz: 07687fceac70df85b38e917b1d00ef4810a112cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90da28a4087d9bbaaa9e29fcc31bafcff7b757b282372949de1fd58bdac8f6b5c94f088b1c28da541ca54ab6cb7e7fbdc07dfe73d14e755baa5f8ea8e9a4ea25
|
7
|
+
data.tar.gz: 44f2d443e6d49df140c6532173f1d66e0881d30ea1723bb970ed5c90ff74c67618594870402e02ea6a04796471941c2b2c8b991f08f12782e7ab7762a02b8f98
|
data/lib/dato/local/item.rb
CHANGED
@@ -117,6 +117,14 @@ module Dato
|
|
117
117
|
else
|
118
118
|
super
|
119
119
|
end
|
120
|
+
rescue NoMethodError
|
121
|
+
message = []
|
122
|
+
message << "Undefined method `#{method}`"
|
123
|
+
message << 'Available fields for this DatoCMS item:'
|
124
|
+
message += fields.map do |f|
|
125
|
+
"* .#{f.api_key}"
|
126
|
+
end
|
127
|
+
raise NoMethodError, message.join("\n")
|
120
128
|
end
|
121
129
|
end
|
122
130
|
end
|
@@ -5,12 +5,13 @@ require 'dato/local/item'
|
|
5
5
|
module Dato
|
6
6
|
module Local
|
7
7
|
class ItemsRepo
|
8
|
-
attr_reader :entities_repo, :collections_by_type
|
8
|
+
attr_reader :entities_repo, :collections_by_type, :item_type_methods
|
9
9
|
|
10
10
|
def initialize(entities_repo)
|
11
11
|
@entities_repo = entities_repo
|
12
12
|
@collections_by_type = {}
|
13
13
|
@items_by_id = {}
|
14
|
+
@item_type_methods = {}
|
14
15
|
|
15
16
|
build_cache!
|
16
17
|
end
|
@@ -29,19 +30,39 @@ module Dato
|
|
29
30
|
|
30
31
|
private
|
31
32
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
def build_cache!
|
34
|
+
build_item_type_methods!
|
35
|
+
build_collections_by_type!
|
36
|
+
end
|
37
|
+
|
38
|
+
def build_item_type_methods!
|
39
|
+
@item_type_methods = {}
|
40
|
+
|
41
|
+
singleton_keys = singleton_item_type_entities.map(&:api_key)
|
42
|
+
collection_keys = collection_item_type_entities.map(&:api_key)
|
43
|
+
.map(&:pluralize)
|
44
|
+
|
45
|
+
clashing_keys = singleton_keys & collection_keys
|
46
|
+
|
47
|
+
item_type_entities.each do |item_type|
|
48
|
+
singleton = item_type.singleton
|
49
|
+
pluralized_api_key = item_type.api_key.pluralize
|
50
|
+
method = singleton ? item_type.api_key : pluralized_api_key
|
51
|
+
|
52
|
+
if clashing_keys.include?(pluralized_api_key)
|
53
|
+
suffix = singleton ? 'instance' : 'collection'
|
54
|
+
method = "#{method}_#{suffix}"
|
55
|
+
end
|
56
|
+
|
57
|
+
@item_type_methods[item_type] = [method.to_sym, singleton]
|
38
58
|
end
|
39
59
|
end
|
40
60
|
|
41
|
-
def
|
61
|
+
def build_collections_by_type!
|
42
62
|
item_type_entities.each do |item_type|
|
43
|
-
|
44
|
-
|
63
|
+
method, singleton = item_type_methods[item_type]
|
64
|
+
|
65
|
+
@collections_by_type[method] = if singleton
|
45
66
|
nil
|
46
67
|
else
|
47
68
|
ItemCollection.new
|
@@ -50,12 +71,12 @@ module Dato
|
|
50
71
|
|
51
72
|
item_entities.each do |item_entity|
|
52
73
|
item = Item.new(item_entity, self)
|
74
|
+
method, singleton = item_type_methods[item_entity.item_type]
|
53
75
|
|
54
|
-
key, singleton = item_type_key(item_entity.item_type)
|
55
76
|
if singleton
|
56
|
-
@collections_by_type[
|
77
|
+
@collections_by_type[method] = item
|
57
78
|
else
|
58
|
-
@collections_by_type[
|
79
|
+
@collections_by_type[method].push item
|
59
80
|
end
|
60
81
|
|
61
82
|
@items_by_id[item.id] = item
|
@@ -70,12 +91,28 @@ module Dato
|
|
70
91
|
entities_repo.find_entities_of_type('item')
|
71
92
|
end
|
72
93
|
|
94
|
+
def singleton_item_type_entities
|
95
|
+
item_type_entities.select(&:singleton)
|
96
|
+
end
|
97
|
+
|
98
|
+
def collection_item_type_entities
|
99
|
+
item_type_entities - singleton_item_type_entities
|
100
|
+
end
|
101
|
+
|
73
102
|
def method_missing(method, *arguments, &block)
|
74
103
|
if collections_by_type.key?(method) && arguments.empty?
|
75
104
|
collections_by_type[method]
|
76
105
|
else
|
77
106
|
super
|
78
107
|
end
|
108
|
+
rescue NoMethodError
|
109
|
+
message = []
|
110
|
+
message << "Undefined method `#{method}`"
|
111
|
+
message << 'Available DatoCMS collections/items:'
|
112
|
+
message += collections_by_type.map do |key, _value|
|
113
|
+
"* .#{key}"
|
114
|
+
end
|
115
|
+
raise NoMethodError, message.join("\n")
|
79
116
|
end
|
80
117
|
|
81
118
|
class ItemCollection < Array
|
data/lib/dato/version.rb
CHANGED