contentful_model 0.1.5 → 0.1.6
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/contentful_model/associations/has_many_nested.rb +1 -1
- data/lib/contentful_model/base.rb +32 -4
- data/lib/contentful_model/chainable_queries.rb +15 -3
- data/lib/contentful_model/client.rb +14 -0
- data/lib/contentful_model/query.rb +5 -2
- data/lib/contentful_model/version.rb +1 -1
- data/lib/contentful_model.rb +7 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 038d352d42cc8f428379d27b2db70bccb7661244
|
4
|
+
data.tar.gz: 1b370619c14aecd9ee170ff0f82b72315a9cef7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0692c693706a5211fc011398e410dc79b70557cfd8f260950f56548a0136875da82f6d7aaf6cbecdf45f2a9f4d1e26419d7c0d24249db480b80d78ab004c6313
|
7
|
+
data.tar.gz: 3e20613dea10448a65e96a6f449389f6683dc967016ed26a9a0ba868247f8f90523709bbe5cffa6322da4cd7862d8871b9bfd38afdeaa2f1c1ff916d46565ce5
|
@@ -60,7 +60,7 @@ module ContentfulModel
|
|
60
60
|
# Return the last member of the enumerable, which is the root
|
61
61
|
# @return the root instance of this object
|
62
62
|
define_method :root do
|
63
|
-
find_ancestors.last
|
63
|
+
find_ancestors.to_a.last
|
64
64
|
end
|
65
65
|
|
66
66
|
# @return [Boolean] whether or not this instance has children
|
@@ -12,7 +12,13 @@ module ContentfulModel
|
|
12
12
|
def method_missing(method, *args, &block)
|
13
13
|
result = fields[:"#{method.to_s.camelize(:lower)}"]
|
14
14
|
if result.nil?
|
15
|
-
|
15
|
+
# if self.class.rescue_from_no_attribute_fields.member?()
|
16
|
+
# end
|
17
|
+
if self.class.return_nil_for_empty_attribute_fields && self.class.return_nil_for_empty_attribute_fields.include?(method)
|
18
|
+
return nil
|
19
|
+
else
|
20
|
+
raise ContentfulModel::AttributeNotFoundError, "no attribute #{method} found"
|
21
|
+
end
|
16
22
|
else
|
17
23
|
# if there's no coercion specified, return the result
|
18
24
|
if self.class.coercions[method].nil?
|
@@ -56,7 +62,7 @@ module ContentfulModel
|
|
56
62
|
alias_method :create, :save
|
57
63
|
|
58
64
|
class << self
|
59
|
-
attr_accessor :content_type_id, :coercions
|
65
|
+
attr_accessor :content_type_id, :coercions, :return_nil_for_empty_attribute_fields
|
60
66
|
|
61
67
|
def descendents
|
62
68
|
ObjectSpace.each_object(Class).select { |klass| klass < self }
|
@@ -69,8 +75,14 @@ module ContentfulModel
|
|
69
75
|
end
|
70
76
|
|
71
77
|
def client
|
78
|
+
# add an entry mapping for this content type
|
72
79
|
self.add_entry_mapping
|
73
|
-
|
80
|
+
if ContentfulModel.use_preview_api
|
81
|
+
@preview_client ||= ContentfulModel::Client.new(ContentfulModel.configuration.to_hash)
|
82
|
+
else
|
83
|
+
@client ||= ContentfulModel::Client.new(ContentfulModel.configuration.to_hash)
|
84
|
+
end
|
85
|
+
|
74
86
|
end
|
75
87
|
|
76
88
|
def content_type
|
@@ -85,6 +97,22 @@ module ContentfulModel
|
|
85
97
|
@coercions
|
86
98
|
end
|
87
99
|
|
100
|
+
def return_nil_for_empty(*fields)
|
101
|
+
@return_nil_for_empty_attribute_fields ||= []
|
102
|
+
|
103
|
+
fields.each do |field|
|
104
|
+
define_method field do
|
105
|
+
begin
|
106
|
+
super()
|
107
|
+
rescue ContentfulModel::AttributeNotFoundError
|
108
|
+
nil
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
@return_nil_for_empty_attribute_fields.push(field)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
88
116
|
end
|
89
117
|
|
90
118
|
|
@@ -93,4 +121,4 @@ module ContentfulModel
|
|
93
121
|
|
94
122
|
|
95
123
|
end
|
96
|
-
end
|
124
|
+
end
|
@@ -22,6 +22,11 @@ module ContentfulModel
|
|
22
22
|
self
|
23
23
|
end
|
24
24
|
|
25
|
+
def limit(n)
|
26
|
+
@query << {'limit' => n}
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
25
30
|
def order(args)
|
26
31
|
prefix = ''
|
27
32
|
if args.is_a?(Hash)
|
@@ -32,7 +37,6 @@ module ContentfulModel
|
|
32
37
|
prefix = ''
|
33
38
|
end
|
34
39
|
@query << {'order' => "#{prefix}fields.#{column.camelize(:lower)}"}
|
35
|
-
puts @query.inspect
|
36
40
|
self
|
37
41
|
end
|
38
42
|
|
@@ -43,8 +47,16 @@ module ContentfulModel
|
|
43
47
|
#query is a hash
|
44
48
|
if query.values.first.is_a?(Array) #we need to do an 'in' query
|
45
49
|
@query << {"fields.#{query.keys.first.to_s.camelize(:lower)}[in]" => query.values.first.join(",")}
|
46
|
-
elsif query.values.first.is_a?(String)
|
50
|
+
elsif query.values.first.is_a?(String) || [TrueClass,FalseClass].member?(query.values.first.class)
|
47
51
|
@query << {"fields.#{query.keys.first.to_s.camelize(:lower)}" => query.values.first}
|
52
|
+
elsif query.values.first.is_a?(Hash)
|
53
|
+
# if the search is a hash, use the key to specify the search field operator
|
54
|
+
# For example
|
55
|
+
# Model.search(start_date: {gte: DateTime.now}) => "fields.start_date[gte]" => DateTime.now
|
56
|
+
query.each do |field, condition|
|
57
|
+
search_predicate, search_value = *condition.flatten
|
58
|
+
@query << {"fields.#{field.to_s.camelize(:lower)}[#{search_predicate}]" => search_value}
|
59
|
+
end
|
48
60
|
end
|
49
61
|
end
|
50
62
|
self
|
@@ -64,4 +76,4 @@ module ContentfulModel
|
|
64
76
|
end
|
65
77
|
|
66
78
|
end
|
67
|
-
end
|
79
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ContentfulModel
|
2
|
+
class Client < Contentful::Client
|
3
|
+
|
4
|
+
PREVIEW_API_URL = "preview.contentful.com"
|
5
|
+
|
6
|
+
def initialize(configuration)
|
7
|
+
if ContentfulModel.use_preview_api
|
8
|
+
configuration[:api_url] = PREVIEW_API_URL
|
9
|
+
configuration[:access_token] = configuration[:preview_access_token]
|
10
|
+
end
|
11
|
+
super(configuration)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -3,7 +3,6 @@ module ContentfulModel
|
|
3
3
|
attr_accessor :parameters
|
4
4
|
def initialize(referenced_class, parameters=nil)
|
5
5
|
@parameters = parameters || {}
|
6
|
-
@client = referenced_class.send(:client)
|
7
6
|
@referenced_class = referenced_class
|
8
7
|
end
|
9
8
|
|
@@ -17,7 +16,11 @@ module ContentfulModel
|
|
17
16
|
|
18
17
|
def execute
|
19
18
|
query = @parameters.merge!(default_parameters)
|
20
|
-
return
|
19
|
+
return client.send(:entries,query)
|
20
|
+
end
|
21
|
+
|
22
|
+
def client
|
23
|
+
@client ||= @referenced_class.send(:client)
|
21
24
|
end
|
22
25
|
|
23
26
|
def reset
|
data/lib/contentful_model.rb
CHANGED
@@ -6,6 +6,9 @@ require "active_support/all"
|
|
6
6
|
|
7
7
|
module ContentfulModel
|
8
8
|
class << self
|
9
|
+
#accessor to set the preview API for use instead of the production one
|
10
|
+
attr_accessor :use_preview_api
|
11
|
+
|
9
12
|
#access the configuration class as ContentfulModel.configuration
|
10
13
|
attr_accessor :configuration
|
11
14
|
|
@@ -17,7 +20,10 @@ module ContentfulModel
|
|
17
20
|
end
|
18
21
|
|
19
22
|
class Configuration
|
20
|
-
attr_accessor :access_token,
|
23
|
+
attr_accessor :access_token,
|
24
|
+
:preview_access_token,
|
25
|
+
:space,
|
26
|
+
:entry_mapping
|
21
27
|
|
22
28
|
def initialize
|
23
29
|
@entry_mapping ||= {}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contentful_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Error Creative Studio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: contentful
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- lib/contentful_model/associations/has_one.rb
|
86
86
|
- lib/contentful_model/base.rb
|
87
87
|
- lib/contentful_model/chainable_queries.rb
|
88
|
+
- lib/contentful_model/client.rb
|
88
89
|
- lib/contentful_model/errors.rb
|
89
90
|
- lib/contentful_model/queries.rb
|
90
91
|
- lib/contentful_model/query.rb
|