contentstack 0.3.0 → 0.4.3

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.
@@ -3,9 +3,10 @@ require 'net/http'
3
3
  require 'active_support'
4
4
  require 'active_support/json'
5
5
  require 'open-uri'
6
-
6
+ require 'util'
7
7
  module Contentstack
8
8
  class API
9
+ using Utility
9
10
  def self.init_api(api_key, delivery_token, environment,host)
10
11
  @host = host
11
12
  @api_version = '/v3'
@@ -54,7 +55,7 @@ module Contentstack
54
55
  query = "?" + q.to_query
55
56
  # puts "Request URL:- #{@host}#{@api_version}#{path}#{query} \n\n"
56
57
 
57
- ActiveSupport::JSON.decode(open("#{@host}#{@api_version}#{path}#{query}",
58
+ ActiveSupport::JSON.decode(URI.open("#{@host}#{@api_version}#{path}#{query}",
58
59
  "api_key" => @api_key,
59
60
  "access_token"=> @access_token,
60
61
  "user_agent"=> "ruby-sdk/#{Contentstack::VERSION}",
@@ -1,7 +1,9 @@
1
+ require 'util'
1
2
  module Contentstack
2
3
 
3
4
  # Asset class to fetch file details on Conentstack server.
4
5
  class Asset
6
+ using Utility
5
7
  attr_reader :uid, :content_type, :filename, :file_size, :tags, :url
6
8
 
7
9
  # @!attribute [r] uid
@@ -1,8 +1,10 @@
1
1
  require 'contentstack/asset'
2
+ require 'util'
2
3
 
3
4
  module Contentstack
4
5
  # Asset class to fetch details of files on Conentstack server.
5
6
  class AssetCollection
7
+ using Utility
6
8
  attr_reader :assets
7
9
 
8
10
  def initialize(assets_array=nil)
@@ -2,8 +2,10 @@ require 'contentstack/api'
2
2
  require 'contentstack/content_type'
3
3
  require 'contentstack/asset_collection'
4
4
  require 'contentstack/sync_result'
5
+ require 'util'
5
6
  module Contentstack
6
7
  class Client
8
+ using Utility
7
9
  attr_reader :region, :host
8
10
  # Initialize "Contentstack" Client instance
9
11
  def initialize(api_key, delivery_token, environment, options={})
@@ -1,7 +1,9 @@
1
1
  require 'contentstack/query'
2
+ require 'util'
2
3
 
3
4
  module Contentstack
4
5
  class ContentType
6
+ using Utility
5
7
  [:title, :uid, :created_at, :updated_at, :attributes].each do |method_name|
6
8
  if [:created_at, :updated_at].include?(method_name)
7
9
  define_method method_name do
@@ -1,7 +1,9 @@
1
1
  require 'active_support/core_ext'
2
+ require 'util'
2
3
 
3
4
  module Contentstack
4
5
  class Entry
6
+ using Utility
5
7
  attr_reader :fields, :content_type, :uid, :owner, :query, :schema, :content_type
6
8
  def initialize(attrs, content_type_uid=nil)
7
9
  setup(attrs, content_type_uid)
@@ -152,6 +154,19 @@ module Contentstack
152
154
  self
153
155
  end
154
156
 
157
+ # Include Embedded Objects (Entries and Assets) along with entry/entries details.
158
+ #
159
+ # Example
160
+ #
161
+ # @entry = @stack.content_type('product').entry(entry_uid)
162
+ # @entry.include_embedded_items
163
+ #
164
+ # @return [Contentstack::Query]
165
+ def include_embedded_items()
166
+ @query[:include_embedded_items] = ['BASE']
167
+ self
168
+ end
169
+
155
170
  #
156
171
  # @return [Contentstack::Query]
157
172
  def include(field_uids)
@@ -1,7 +1,9 @@
1
1
  require 'contentstack/entry'
2
+ require 'util'
2
3
 
3
4
  module Contentstack
4
5
  class EntryCollection
6
+ using Utility
5
7
  attr_reader :entries, :count, :content_type, :schema
6
8
 
7
9
  def initialize(json, content_type_uid=nil)
@@ -1,8 +1,10 @@
1
1
  require 'contentstack/entry_collection'
2
+ require 'util'
2
3
 
3
4
  module Contentstack
4
5
  # A class that defines a query that is used to query for Entry instance.
5
6
  class Query
7
+ using Utility
6
8
  # @!attribute [r] query
7
9
  # Attribute which has all the information about the query which will be executed against Contentstack API
8
10
 
@@ -516,6 +518,19 @@ module Contentstack
516
518
  self
517
519
  end
518
520
 
521
+ # Include Embedded Objects (Entries and Assets) along with entry/entries details.
522
+ #
523
+ # Example
524
+ #
525
+ # @query = @stack.content_type('product').query
526
+ # @query.include_embedded_items
527
+ #
528
+ # @return [Contentstack::Query]
529
+ def include_embedded_items()
530
+ @query[:include_embedded_items] = ['BASE']
531
+ self
532
+ end
533
+
519
534
  # Include objects in 'Draft' mode in response
520
535
  #
521
536
  # Example
@@ -1,3 +1,3 @@
1
1
  module Contentstack
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.3"
3
3
  end
data/lib/contentstack.rb CHANGED
@@ -3,8 +3,7 @@ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
3
3
  require "contentstack/version"
4
4
  require "contentstack/client"
5
5
  require "contentstack/region"
6
- require "util"
7
-
6
+ require "contentstack_utils"
8
7
 
9
8
  # == Contentstack - Ruby SDK
10
9
  # Contentstack is a content management system that facilitates the process of publication by separating the content from site-related programming and design.
@@ -22,4 +21,10 @@ require "util"
22
21
  # ==== Query entries
23
22
  # @stack.content_type('blog').query.regex('title', '.*hello.*').fetch
24
23
  module Contentstack
24
+ def self.render_content(content, options)
25
+ ContentstackUtils.render_content(content, options)
26
+ end
27
+ def self.json_to_html(content, options)
28
+ ContentstackUtils.json_to_html(content, options)
29
+ end
25
30
  end
data/lib/util.rb CHANGED
@@ -1,107 +1,111 @@
1
- class Hash
2
- def to_query(namespace = nil)
3
- collect do |key, value|
4
- value.to_query(namespace ? "#{namespace}[#{key}]" : key)
5
- end.sort * '&'
6
- end
7
-
8
- def symbolize_keys
9
- new_hash = {}
10
- self.each do |key,value|
11
- if [Hash, Array].include?(value.class)
12
- new_hash[key.to_sym] = value.symbolize_keys
13
- else
14
- new_hash[key.to_sym] = value
1
+ module Contentstack
2
+ module Utility
3
+ refine Hash do
4
+ def to_query(namespace = nil)
5
+ collect do |key, value|
6
+ value.to_query(namespace ? "#{namespace}[#{key}]" : key)
7
+ end.sort * '&'
8
+ end
9
+
10
+ def symbolize_keys
11
+ new_hash = {}
12
+ self.each do |key,value|
13
+ if [Hash, Array].include?(value.class)
14
+ new_hash[key.to_sym] = value.symbolize_keys
15
+ else
16
+ new_hash[key.to_sym] = value
17
+ end
18
+ end
19
+ new_hash
20
+ end
21
+ end
22
+
23
+ refine Array do
24
+ def to_query(key)
25
+ prefix = "#{key}[]"
26
+ collect { |value| value.to_query(prefix) }.join '&'
27
+ end
28
+
29
+ def symbolize_keys
30
+ collect do |entry|
31
+ if entry.class == Hash
32
+ entry.symbolize_keys
33
+ else
34
+ entry
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ refine String do
41
+ def to_query(key)
42
+ require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
43
+ "#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}"
44
+ end
45
+
46
+ def to_param
47
+ to_s
48
+ end
49
+ end
50
+
51
+ refine Symbol do
52
+ def to_query(key)
53
+ to_s.to_query(key)
54
+ end
55
+
56
+ def to_param
57
+ to_s
58
+ end
59
+ end
60
+
61
+ refine NilClass do
62
+ def to_query(key)
63
+ to_s.to_query(key)
64
+ end
65
+
66
+ def to_param
67
+ to_s
68
+ end
69
+ end
70
+
71
+ refine TrueClass do
72
+ def to_query(key)
73
+ to_s.to_query(key)
74
+ end
75
+
76
+ def to_query(val)
77
+ "#{CGI.escape(val.to_param)}=#{CGI.escape(to_s)}"
15
78
  end
16
79
  end
17
- new_hash
18
- end
19
- end
20
-
21
- class Array
22
- def to_query(key)
23
- prefix = "#{key}[]"
24
- collect { |value| value.to_query(prefix) }.join '&'
25
- end
26
-
27
- def symbolize_keys
28
- collect do |entry|
29
- if entry.class == Hash
30
- entry.symbolize_keys
31
- else
32
- entry
80
+
81
+ refine FalseClass do
82
+ def to_query(key)
83
+ to_s.to_query(key)
84
+ end
85
+
86
+ def to_query(val)
87
+ "#{CGI.escape(val.to_param)}=#{CGI.escape(to_s)}"
33
88
  end
34
89
  end
35
- end
36
- end
37
-
38
- class String
39
- def to_query(key)
40
- require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
41
- "#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}"
42
- end
43
-
44
- def to_param
45
- to_s
46
- end
47
- end
48
-
49
- class Symbol
50
- def to_query(key)
51
- to_s.to_query(key)
52
- end
53
-
54
- def to_param
55
- to_s
56
- end
57
- end
58
-
59
- class NilClass
60
- def to_query(key)
61
- to_s.to_query(key)
62
- end
63
-
64
- def to_param
65
- to_s
66
- end
67
- end
68
-
69
- class TrueClass
70
- def to_query(key)
71
- to_s.to_query(key)
72
- end
73
-
74
- def to_query(val)
75
- "#{CGI.escape(val.to_param)}=#{CGI.escape(to_s)}"
76
- end
77
- end
78
-
79
- class FalseClass
80
- def to_query(key)
81
- to_s.to_query(key)
82
- end
83
-
84
- def to_query(val)
85
- "#{CGI.escape(val.to_param)}=#{CGI.escape(to_s)}"
86
- end
87
- end
88
-
89
- class Integer
90
- def to_query(key)
91
- to_s.to_query(key)
92
- end
93
-
94
- def to_query(val)
95
- "#{CGI.escape(val.to_param)}=#{CGI.escape(to_s)}"
96
- end
97
- end
98
-
99
- class Numeric
100
- def to_query(key)
101
- to_s.to_query(key)
102
- end
103
-
104
- def to_query(val)
105
- "#{CGI.escape(val.to_param)}=#{CGI.escape(to_s)}"
106
- end
90
+
91
+ refine Integer do
92
+ def to_query(key)
93
+ to_s.to_query(key)
94
+ end
95
+
96
+ def to_query(val)
97
+ "#{CGI.escape(val.to_param)}=#{CGI.escape(to_s)}"
98
+ end
99
+ end
100
+
101
+ refine Numeric do
102
+ def to_query(key)
103
+ to_s.to_query(key)
104
+ end
105
+
106
+ def to_query(val)
107
+ "#{CGI.escape(val.to_param)}=#{CGI.escape(to_s)}"
108
+ end
109
+ end
110
+ end
107
111
  end
@@ -29,4 +29,11 @@ describe Contentstack do
29
29
  expect(custom_host_client.host).to eq 'https://custom-cdn.contentstack.com'
30
30
  end
31
31
 
32
+ it "JSON to HTML" do
33
+ expect(Contentstack::json_to_html({}, ContentstackUtils::Model::Options.new())).to eq ''
34
+ end
35
+
36
+ it "JSON to HTML" do
37
+ expect(Contentstack::render_content('', ContentstackUtils::Model::Options.new())).to eq ''
38
+ end
32
39
  end
data/spec/entry_spec.rb CHANGED
@@ -4,7 +4,6 @@ require_relative '../lib/contentstack.rb'
4
4
  describe Contentstack::Entry do
5
5
  let(:client) { create_client }
6
6
  let(:uid) { "blt05056a2f5e0ebf76" }
7
-
8
7
  let(:category) {client.content_type("category").entry(uid)}
9
8
  let(:product) {client.content_type("product").entry(uid)}
10
9
 
@@ -86,4 +85,10 @@ describe Contentstack::Entry do
86
85
  puts data.get("categories.title")
87
86
  expect(data.fields[:categories][0][:title]).not_to be nil
88
87
  end
88
+
89
+ it "should get data using `include_embedded_items` method" do
90
+ data = product.include_embedded_items().fetch
91
+ puts data.get("categories.title")
92
+ expect(data.fields[:categories][0][:title]).not_to be nil
93
+ end
89
94
  end
data/spec/spec_helper.rb CHANGED
@@ -160,4 +160,11 @@ RSpec.configure do |config|
160
160
  def create_client(delivery_token = ENV['DELIVERY_TOKEN'], api_key = ENV['API_KEY'], environment = ENV['ENVIRONMENT'], options = {})
161
161
  Contentstack::Client.new(api_key, delivery_token, environment, options)
162
162
  end
163
+
164
+ def render(content, entry)
165
+ Contentstack::render_content(content, ContentstackUtils::Model::Options.new(entry))
166
+ end
167
+ def json_to_html(content, entry)
168
+ Contentstack::json_to_html(content, ContentstackUtils::Model::Options.new(entry))
169
+ end
163
170
  end
metadata CHANGED
@@ -1,71 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contentstack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Contentstack
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-17 00:00:00.000000000 Z
11
+ date: 2021-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.2'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: 3.2.5
22
+ version: '6.2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ">"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.2'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: 3.2.5
32
+ version: '6.2'
27
33
  - !ruby/object:Gem::Dependency
28
- name: rspec
34
+ name: contentstack_utils
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
42
+ version: 1.0.1
43
+ type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.0'
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
- version: '0'
52
+ version: 1.0.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 3.10.0
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: 3.10.0
41
67
  - !ruby/object:Gem::Dependency
42
68
  name: webmock
43
69
  requirement: !ruby/object:Gem::Requirement
44
70
  requirements:
45
- - - ">="
71
+ - - "~>"
46
72
  - !ruby/object:Gem::Version
47
- version: '0'
73
+ version: 3.11.0
48
74
  type: :development
49
75
  prerelease: false
50
76
  version_requirements: !ruby/object:Gem::Requirement
51
77
  requirements:
52
- - - ">="
78
+ - - "~>"
53
79
  - !ruby/object:Gem::Version
54
- version: '0'
80
+ version: 3.11.0
55
81
  - !ruby/object:Gem::Dependency
56
82
  name: simplecov
57
83
  requirement: !ruby/object:Gem::Requirement
58
84
  requirements:
59
- - - ">="
85
+ - - "~>"
60
86
  - !ruby/object:Gem::Version
61
- version: '0'
87
+ version: 0.21.1
62
88
  type: :development
63
89
  prerelease: false
64
90
  version_requirements: !ruby/object:Gem::Requirement
65
91
  requirements:
66
- - - ">="
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: 0.21.1
95
+ - !ruby/object:Gem::Dependency
96
+ name: yard
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 0.9.26
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
67
107
  - !ruby/object:Gem::Version
68
- version: '0'
108
+ version: 0.9.26
69
109
  description: Contentstack Ruby client for the Content Delivery API
70
110
  email:
71
111
  - support@contentstack.com
@@ -76,6 +116,7 @@ files:
76
116
  - ".gitignore"
77
117
  - ".yardopts"
78
118
  - CHANGELOG.md
119
+ - CODEOWNERS
79
120
  - CODE_OF_CONDUCT.md
80
121
  - Gemfile
81
122
  - Gemfile.lock