contentstack 0.6.3 → 0.7.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/check-branch.yml +20 -0
  3. data/.github/workflows/codeql-analysis.yml +68 -68
  4. data/.github/workflows/jira.yml +28 -28
  5. data/.github/workflows/release-gem.yml +30 -30
  6. data/.github/workflows/sast-scan.yml +10 -10
  7. data/.github/workflows/sca-scan.yml +15 -15
  8. data/.github/workflows/secrets-scan.yml +10 -10
  9. data/.gitignore +11 -11
  10. data/.yardopts +6 -6
  11. data/CHANGELOG.md +129 -114
  12. data/CODEOWNERS +1 -1
  13. data/CODE_OF_CONDUCT.md +73 -73
  14. data/Gemfile +2 -2
  15. data/Gemfile.lock +79 -76
  16. data/LICENSE.txt +21 -21
  17. data/README.md +197 -197
  18. data/SECURITY.md +27 -27
  19. data/contentstack.gemspec +29 -29
  20. data/lib/contentstack/api.rb +191 -191
  21. data/lib/contentstack/asset.rb +68 -68
  22. data/lib/contentstack/asset_collection.rb +27 -27
  23. data/lib/contentstack/client.rb +122 -91
  24. data/lib/contentstack/content_type.rb +53 -53
  25. data/lib/contentstack/entry.rb +235 -221
  26. data/lib/contentstack/entry_collection.rb +44 -44
  27. data/lib/contentstack/error.rb +6 -6
  28. data/lib/contentstack/query.rb +665 -653
  29. data/lib/contentstack/region.rb +13 -5
  30. data/lib/contentstack/sync_result.rb +29 -29
  31. data/lib/contentstack/version.rb +2 -2
  32. data/lib/contentstack.rb +31 -31
  33. data/lib/util.rb +110 -110
  34. data/rakefile.rb +3 -3
  35. data/spec/asset_collection_spec.rb +15 -15
  36. data/spec/asset_spec.rb +47 -47
  37. data/spec/content_type_spec.rb +80 -80
  38. data/spec/contentstack_spec.rb +63 -38
  39. data/spec/entry_collection_spec.rb +41 -41
  40. data/spec/entry_spec.rb +116 -101
  41. data/spec/fixtures/asset.json +1 -1
  42. data/spec/fixtures/asset_collection.json +1 -1
  43. data/spec/fixtures/category_content_type.json +1 -1
  44. data/spec/fixtures/category_entry.json +1 -1
  45. data/spec/fixtures/category_entry_collection.json +1 -1
  46. data/spec/fixtures/category_entry_collection_without_count.json +1 -1
  47. data/spec/fixtures/content_types.json +1 -1
  48. data/spec/fixtures/product_entry.json +1 -1
  49. data/spec/fixtures/product_entry_collection.json +1 -1
  50. data/spec/fixtures/sync_init.json +2974 -2974
  51. data/spec/query_spec.rb +210 -205
  52. data/spec/spec_helper.rb +180 -180
  53. data/spec/sync_spec.rb +26 -26
  54. metadata +6 -5
@@ -1,222 +1,236 @@
1
- require 'active_support/core_ext'
2
- require 'util'
3
-
4
- module Contentstack
5
- class Entry
6
- using Utility
7
- attr_reader :fields, :content_type, :uid, :owner, :query, :schema, :content_type
8
- def initialize(attrs, content_type_uid=nil)
9
- setup(attrs, content_type_uid)
10
- end
11
-
12
- # Get entries from the specified locale.
13
- #
14
- # @param [String] code The locale code of the entry
15
- #
16
- # Example
17
- # @entry = @stack.content_type('category').entry(entry_uid)
18
- # @entry.locale('en-us')
19
- #
20
- # @return [Contentstack::Entry]
21
- def locale(code)
22
- @query[:locale] = code
23
- self
24
- end
25
-
26
- # Specifies an array of 'only' keys in BASE object that would be 'included' in the response.
27
- #
28
- # @param [Array] fields Array of the 'only' reference keys to be included in response.
29
- # @param [Array] fields_with_base Can be used to denote 'only' fields of the reference class
30
- #
31
- # Example
32
- # # Include only title and description field in response
33
- # @entry = @stack.content_type('category').entry(entry_uid)
34
- # @entry.only(['title', 'description'])
35
- #
36
- # # Query product and include only the title and description from category reference
37
- # @entry = @stack.content_type('product').entry(entry_uid)
38
- # @entry.include_reference('category')
39
- # .only('category', ['title', 'description'])
40
- #
41
- # @return [Contentstack::Entry]
42
- def only(fields, fields_with_base=nil)
43
- q = {}
44
- if [Array, String].include?(fields_with_base.class)
45
- fields_with_base = [fields_with_base] if fields_with_base.class == String
46
- q[fields.to_sym] = fields_with_base
47
- else
48
- fields = [fields] if fields.class == String
49
- q = {BASE: fields}
50
- end
51
-
52
- @query[:only] = q
53
- self
54
- end
55
-
56
- # Specifies list of field uids that would be 'excluded' from the response.
57
- #
58
- # @param [Array] fields Array of field uid which get 'excluded' from the response.
59
- # @param [Array] fields_with_base Can be used to denote 'except' fields of the reference class
60
- #
61
- # Example
62
- # # Exclude 'description' field in response
63
- # @entry = @stack.content_type('category').entry(entry_uid)
64
- # @entry.except(['description'])
65
- #
66
- # # Query product and exclude the 'description' from category reference
67
- # @entry = @stack.content_type('product').entry(entry_uid)
68
- # @entry.include_reference('category')
69
- # .except('category', ['description'])
70
- #
71
- # @return [Contentstack::Entry]
72
- def except(fields, fields_with_base=nil)
73
- q = {}
74
- if [Array, String].include?(fields_with_base.class)
75
- fields_with_base = [fields_with_base] if fields_with_base.class == String
76
- q[fields.to_sym] = fields_with_base
77
- else
78
- fields = [fields] if fields.class == String
79
- q = {BASE: fields}
80
- end
81
-
82
- @query[:except] = q
83
- self
84
- end
85
-
86
- # Add a constraint that requires a particular reference key details.
87
- #
88
- # @param [String/Array] reference_field_uids Pass string or array of reference fields that must be included in the response
89
- #
90
- # Example
91
- #
92
- # # Include reference of 'category'
93
- # @entry = @stack.content_type('product').entry(entry_uid)
94
- # @entry.include_reference('category')
95
- #
96
- # # Include reference of 'category' and 'reviews'
97
- # @entry = @stack.content_type('product').entry(entry_uid)
98
- # @entry.include_reference(['category', 'reviews'])
99
- #
100
- # @return [Contentstack::Entry]
101
- def include_reference(reference_field_uids)
102
- self.include(reference_field_uids)
103
- end
104
-
105
- # Include schemas of all returned objects along with objects themselves.
106
- #
107
- # Example
108
- #
109
- # @entry = @stack.content_type('product').entry(entry_uid)
110
- # @entry.include_schema
111
- #
112
- # @return [Contentstack::Entry]
113
- def include_schema(flag=true)
114
- @query[:include_schema] = flag
115
- self
116
- end
117
-
118
- # Include object owner's profile in the objects data.
119
- #
120
- # Example
121
- #
122
- # @entry = @stack.content_type('product').entry(entry_uid)
123
- # @entry.include_owner
124
- #
125
- # @return [Contentstack::Entry]
126
- def include_owner(flag=true)
127
- @query[:include_owner] = flag
128
- self
129
- end
130
-
131
- # Include object's content_type in response
132
- #
133
- # Example
134
- #
135
- # @entry = @stack.content_type('product').entry(entry_uid)
136
- # @entry.include_content_type
137
- #
138
- # @return [Contentstack::Entry]
139
- def include_content_type(flag=true)
140
- @query[:include_content_type] = flag
141
- self
142
- end
143
-
144
- # Include the fallback locale publish content, if specified locale content is not publish.
145
- #
146
- # Example
147
- #
148
- # @entry = @stack.content_type('product').entry(entry_uid)
149
- # @entry.include_fallback
150
- #
151
- # @return [Contentstack::Entry]
152
- def include_fallback(flag=true)
153
- @query[:include_fallback] = flag
154
- self
155
- end
156
-
157
- # Include the branch for publish content.
158
- #
159
- # Example
160
- #
161
- # @entry = @stack.content_type('product').entry(entry_uid)
162
- # @entry.include_branch
163
- #
164
- # @return [Contentstack::Entry]
165
- def include_branch(flag=true)
166
- @query[:include_branch] = flag
167
- self
168
- end
169
-
170
- # Include Embedded Objects (Entries and Assets) along with entry/entries details.
171
- #
172
- # Example
173
- #
174
- # @entry = @stack.content_type('product').entry(entry_uid)
175
- # @entry.include_embedded_items
176
- #
177
- # @return [Contentstack::Query]
178
- def include_embedded_items()
179
- @query[:include_embedded_items] = ['BASE']
180
- self
181
- end
182
-
183
- #
184
- # @return [Contentstack::Query]
185
- def include(field_uids)
186
- field_uids = [field_uids] if field_uids.class == String
187
- @query[:include] ||= []
188
- @query[:include] = @query[:include] | field_uids
189
- self
190
- end
191
-
192
- # Execute entry
193
- #
194
- # Example
195
- #
196
- # @entry = @stack.content_type('product').entry(entry_uid)
197
- # @entry.fetch
198
- #
199
- # @return [Contentstack::EntryCollection]
200
- def fetch
201
- entry = API.fetch_entry(@content_type, self.fields[:uid], @query)
202
- setup(entry["entry"])
203
- @schema = entry["schema"].symbolize_keys if entry["schema"]
204
- @content_type = entry["content_type"].symbolize_keys if entry["content_type"]
205
- self
206
- end
207
-
208
- def get(field_uid)
209
- raise Contentstack::Error("Please send a valid Field UID") if field_uid.class != String
210
- @fields[field_uid.to_sym]
211
- end
212
-
213
- private
214
- def setup(attrs, content_type_uid=nil)
215
- @fields = attrs.symbolize_keys
216
- @content_type = content_type_uid if !content_type_uid.blank?
217
- @owner = attrs[:_owner] if attrs[:_owner]
218
- @uid = attrs[:uid]
219
- @query = {}
220
- end
221
- end
1
+ require 'active_support/core_ext'
2
+ require 'util'
3
+
4
+ module Contentstack
5
+ class Entry
6
+ using Utility
7
+ attr_reader :fields, :content_type, :uid, :owner, :query, :schema, :content_type
8
+ def initialize(attrs, content_type_uid=nil)
9
+ setup(attrs, content_type_uid)
10
+ end
11
+
12
+ # Get entries from the specified locale.
13
+ #
14
+ # @param [String] code The locale code of the entry
15
+ #
16
+ # Example
17
+ # @entry = @stack.content_type('category').entry(entry_uid)
18
+ # @entry.locale('en-us')
19
+ #
20
+ # @return [Contentstack::Entry]
21
+ def locale(code)
22
+ @query[:locale] = code
23
+ self
24
+ end
25
+
26
+ # Specifies an array of 'only' keys in BASE object that would be 'included' in the response.
27
+ #
28
+ # @param [Array] fields Array of the 'only' reference keys to be included in response.
29
+ # @param [Array] fields_with_base Can be used to denote 'only' fields of the reference class
30
+ #
31
+ # Example
32
+ # # Include only title and description field in response
33
+ # @entry = @stack.content_type('category').entry(entry_uid)
34
+ # @entry.only(['title', 'description'])
35
+ #
36
+ # # Query product and include only the title and description from category reference
37
+ # @entry = @stack.content_type('product').entry(entry_uid)
38
+ # @entry.include_reference('category')
39
+ # .only('category', ['title', 'description'])
40
+ #
41
+ # @return [Contentstack::Entry]
42
+ def only(fields, fields_with_base=nil)
43
+ q = {}
44
+ if [Array, String].include?(fields_with_base.class)
45
+ fields_with_base = [fields_with_base] if fields_with_base.class == String
46
+ q[fields.to_sym] = fields_with_base
47
+ else
48
+ fields = [fields] if fields.class == String
49
+ q = {BASE: fields}
50
+ end
51
+
52
+ @query[:only] = q
53
+ self
54
+ end
55
+
56
+ # Specifies list of field uids that would be 'excluded' from the response.
57
+ #
58
+ # @param [Array] fields Array of field uid which get 'excluded' from the response.
59
+ # @param [Array] fields_with_base Can be used to denote 'except' fields of the reference class
60
+ #
61
+ # Example
62
+ # # Exclude 'description' field in response
63
+ # @entry = @stack.content_type('category').entry(entry_uid)
64
+ # @entry.except(['description'])
65
+ #
66
+ # # Query product and exclude the 'description' from category reference
67
+ # @entry = @stack.content_type('product').entry(entry_uid)
68
+ # @entry.include_reference('category')
69
+ # .except('category', ['description'])
70
+ #
71
+ # @return [Contentstack::Entry]
72
+ def except(fields, fields_with_base=nil)
73
+ q = {}
74
+ if [Array, String].include?(fields_with_base.class)
75
+ fields_with_base = [fields_with_base] if fields_with_base.class == String
76
+ q[fields.to_sym] = fields_with_base
77
+ else
78
+ fields = [fields] if fields.class == String
79
+ q = {BASE: fields}
80
+ end
81
+
82
+ @query[:except] = q
83
+ self
84
+ end
85
+
86
+ # Add a constraint that requires a particular reference key details.
87
+ #
88
+ # @param [String/Array] reference_field_uids Pass string or array of reference fields that must be included in the response
89
+ #
90
+ # Example
91
+ #
92
+ # # Include reference of 'category'
93
+ # @entry = @stack.content_type('product').entry(entry_uid)
94
+ # @entry.include_reference('category')
95
+ #
96
+ # # Include reference of 'category' and 'reviews'
97
+ # @entry = @stack.content_type('product').entry(entry_uid)
98
+ # @entry.include_reference(['category', 'reviews'])
99
+ #
100
+ # @return [Contentstack::Entry]
101
+ def include_reference(reference_field_uids)
102
+ self.include(reference_field_uids)
103
+ end
104
+
105
+ # Include schemas of all returned objects along with objects themselves.
106
+ #
107
+ # Example
108
+ #
109
+ # @entry = @stack.content_type('product').entry(entry_uid)
110
+ # @entry.include_schema
111
+ #
112
+ # @return [Contentstack::Entry]
113
+ def include_schema(flag=true)
114
+ @query[:include_schema] = flag
115
+ self
116
+ end
117
+
118
+ # Include object owner's profile in the objects data.
119
+ #
120
+ # Example
121
+ #
122
+ # @entry = @stack.content_type('product').entry(entry_uid)
123
+ # @entry.include_owner
124
+ #
125
+ # @return [Contentstack::Entry]
126
+ def include_owner(flag=true)
127
+ @query[:include_owner] = flag
128
+ self
129
+ end
130
+
131
+ # Include object's content_type in response
132
+ #
133
+ # Example
134
+ #
135
+ # @entry = @stack.content_type('product').entry(entry_uid)
136
+ # @entry.include_content_type
137
+ #
138
+ # @return [Contentstack::Entry]
139
+ def include_content_type(flag=true)
140
+ @query[:include_content_type] = flag
141
+ self
142
+ end
143
+
144
+ # Include the fallback locale publish content, if specified locale content is not publish.
145
+ #
146
+ # Example
147
+ #
148
+ # @entry = @stack.content_type('product').entry(entry_uid)
149
+ # @entry.include_fallback
150
+ #
151
+ # @return [Contentstack::Entry]
152
+ def include_fallback(flag=true)
153
+ @query[:include_fallback] = flag
154
+ self
155
+ end
156
+
157
+ # Include the branch for publish content.
158
+ #
159
+ # Example
160
+ #
161
+ # @entry = @stack.content_type('product').entry(entry_uid)
162
+ # @entry.include_branch
163
+ #
164
+ # @return [Contentstack::Entry]
165
+ def include_branch(flag=true)
166
+ @query[:include_branch] = flag
167
+ self
168
+ end
169
+
170
+ # Include the metadata for publish content.
171
+ #
172
+ # Example
173
+ #
174
+ # @entry = @stack.content_type('product').entry(entry_uid)
175
+ # @entry.include_metadata
176
+ #
177
+ # @return [Contentstack::Entry]
178
+ def include_metadata(flag=true)
179
+ @query[:include_metadata] = flag
180
+ self
181
+ end
182
+
183
+
184
+ # Include Embedded Objects (Entries and Assets) along with entry/entries details.
185
+ #
186
+ # Example
187
+ #
188
+ # @entry = @stack.content_type('product').entry(entry_uid)
189
+ # @entry.include_embedded_items
190
+ #
191
+ # @return [Contentstack::Query]
192
+ def include_embedded_items()
193
+ @query[:include_embedded_items] = ['BASE']
194
+ self
195
+ end
196
+
197
+ #
198
+ # @return [Contentstack::Query]
199
+ def include(field_uids)
200
+ field_uids = [field_uids] if field_uids.class == String
201
+ @query[:include] ||= []
202
+ @query[:include] = @query[:include] | field_uids
203
+ self
204
+ end
205
+
206
+ # Execute entry
207
+ #
208
+ # Example
209
+ #
210
+ # @entry = @stack.content_type('product').entry(entry_uid)
211
+ # @entry.fetch
212
+ #
213
+ # @return [Contentstack::EntryCollection]
214
+ def fetch
215
+ entry = API.fetch_entry(@content_type, self.fields[:uid], @query)
216
+ setup(entry["entry"])
217
+ @schema = entry["schema"].symbolize_keys if entry["schema"]
218
+ @content_type = entry["content_type"].symbolize_keys if entry["content_type"]
219
+ self
220
+ end
221
+
222
+ def get(field_uid)
223
+ raise Contentstack::Error("Please send a valid Field UID") if field_uid.class != String
224
+ @fields[field_uid.to_sym]
225
+ end
226
+
227
+ private
228
+ def setup(attrs, content_type_uid=nil)
229
+ @fields = attrs.symbolize_keys
230
+ @content_type = content_type_uid if !content_type_uid.blank?
231
+ @owner = attrs[:_owner] if attrs[:_owner]
232
+ @uid = attrs[:uid]
233
+ @query = {}
234
+ end
235
+ end
222
236
  end
@@ -1,45 +1,45 @@
1
- require 'contentstack/entry'
2
- require 'util'
3
-
4
- module Contentstack
5
- class EntryCollection
6
- using Utility
7
- attr_reader :entries, :count, :content_type, :schema
8
-
9
- def initialize(json, content_type_uid=nil)
10
- @count = json["count"] if json["count"]
11
- @entries = json["entries"].collect{|entry| Entry.new(entry, content_type_uid) }
12
- @schema = json["schema"].symbolize_keys if json["schema"]
13
- @content_type = json["content_type"].symbolize_keys if json["content_type"]
14
- self
15
- end
16
-
17
- def each &block
18
- @entries.map{|e| block.call(e)}
19
- end
20
-
21
- def map &block
22
- self.each(&block)
23
- end
24
-
25
- def collect &block
26
- self.each(&block)
27
- end
28
-
29
- def length
30
- @entries.length
31
- end
32
-
33
- def first
34
- @entries.first
35
- end
36
-
37
- def last
38
- @entries.last
39
- end
40
-
41
- def get(index)
42
- @entries[index]
43
- end
44
- end
1
+ require 'contentstack/entry'
2
+ require 'util'
3
+
4
+ module Contentstack
5
+ class EntryCollection
6
+ using Utility
7
+ attr_reader :entries, :count, :content_type, :schema
8
+
9
+ def initialize(json, content_type_uid=nil)
10
+ @count = json["count"] if json["count"]
11
+ @entries = json["entries"].collect{|entry| Entry.new(entry, content_type_uid) }
12
+ @schema = json["schema"].symbolize_keys if json["schema"]
13
+ @content_type = json["content_type"].symbolize_keys if json["content_type"]
14
+ self
15
+ end
16
+
17
+ def each &block
18
+ @entries.map{|e| block.call(e)}
19
+ end
20
+
21
+ def map &block
22
+ self.each(&block)
23
+ end
24
+
25
+ def collect &block
26
+ self.each(&block)
27
+ end
28
+
29
+ def length
30
+ @entries.length
31
+ end
32
+
33
+ def first
34
+ @entries.first
35
+ end
36
+
37
+ def last
38
+ @entries.last
39
+ end
40
+
41
+ def get(index)
42
+ @entries[index]
43
+ end
44
+ end
45
45
  end
@@ -1,7 +1,7 @@
1
- module Contentstack
2
- class Error < StandardError
3
- def initialize(msg="Something Went Wrong.")
4
- super
5
- end
6
- end
1
+ module Contentstack
2
+ class Error < StandardError
3
+ def initialize(msg="Something Went Wrong.")
4
+ super
5
+ end
6
+ end
7
7
  end