contentful_bootstrap 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f9506edbc16f70f64a055a68070cc45ab223f659
4
- data.tar.gz: c6264e50faf9279fd7ab8f6b711ef28078429db8
3
+ metadata.gz: 53b22cc778c5ea2cc284ae20b28fdeddeb23ab41
4
+ data.tar.gz: b2da6f2928e023c29e03832b534e210ecdb42cdc
5
5
  SHA512:
6
- metadata.gz: 1f6699a6d573ef6861d375532da40236d2fcc64476108482a27b53a3621788fee0c0b1af917255f8801fb2d133d7c90e550f05caa52b1b5ed1651d6927ee5aec
7
- data.tar.gz: b28410bf29c7bf06b8b593f236736431e40d50c2d772dc374ac205affd780aac60326b0a5326c9f31b5b4f1a0290e272c46f35f4e492d6bf02ecce379c199697
6
+ metadata.gz: 1d9632fac3308458ddce48349c96c193de969a0ae5a77cee06811db6119088100d9405051f8d9320cc3e49abd1746bba4ab7993d0bb5440141f9fe831d096820
7
+ data.tar.gz: 7e3f14690da03181e200651d4ebecf95cfd436a9c0580f722ff9b59909826e0b20f9c2726b46fe11975287434f53af22e7977e4f5440c7193c906f301c267112
data/.gitignore CHANGED
@@ -27,11 +27,11 @@ build/
27
27
 
28
28
  # for a library or gem, you might want to ignore these files since the code is
29
29
  # intended to run in multiple environments; otherwise, check them in:
30
- # Gemfile.lock
30
+ Gemfile.lock
31
31
  # .ruby-version
32
32
  # .ruby-gemset
33
33
 
34
34
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
35
35
  .rvmrc
36
36
 
37
- .contentful_bootstrap
37
+ .contentful_token
data/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # Change Log
2
+ ## Unreleased
3
+
4
+ ## v0.0.4
5
+ ### Added
6
+ * Added support for users with multiple Organizations
7
+ * Added `gallery` template
8
+
9
+ ### Changed
10
+ * Removed `deklarativna` dependency
11
+ * Removed `sinatra` dependency
12
+ * Removed unnecessary `Gemfile.lock` file
13
+
14
+ ## v0.0.3
15
+ ### Added
16
+ * Added `contentful_bootstrap` command
17
+ * Added `blog` template
18
+
19
+ ### Fixed
20
+ * Fixed Dependencies
21
+
22
+ ## v0.0.2 [YANKED]
23
+
24
+ ## v0.0.1 [YANKED]
data/Gemfile CHANGED
@@ -1,7 +1,5 @@
1
1
  # A sample Gemfile
2
2
  source "https://rubygems.org"
3
3
 
4
- gem "sinatra"
5
4
  gem "launchy"
6
5
  gem "contentful-management"
7
- gem "deklarativna"
data/README.md CHANGED
@@ -8,6 +8,10 @@ mobile apps and connected devices. It allows you to create, edit &nbsp;manage co
8
8
  and publish it anywhere via powerful API. Contentful offers tools for managing editorial
9
9
  teams and enabling cooperation between organizations.
10
10
 
11
+ ## What does `contentful_bootstrap` do?
12
+ The aim of `contentful_bootstrap` is to have developers setting up their Contentful environment
13
+ in a single command
14
+
11
15
  ## How to Use
12
16
 
13
17
  ### Installation
@@ -28,6 +32,16 @@ Then you can create other spaces by doing:
28
32
  $ contentful_bootstrap create_space <space_name> [--template template_name]
29
33
  ```
30
34
 
35
+ ### Available templates
36
+
37
+ The available templates for your spaces are:
38
+
39
+ ```
40
+ blog
41
+ gallery
42
+ catalogue
43
+ ```
44
+
31
45
  This will get you started with Contentful by setting up a Space with some Demo Data to get you
32
46
  started as soon as possible with development using our API.
33
47
 
@@ -19,8 +19,6 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_development_dependency "bundler", "~> 1.6"
21
21
  spec.add_development_dependency "rake"
22
- spec.add_runtime_dependency "sinatra"
23
22
  spec.add_runtime_dependency "launchy"
24
23
  spec.add_runtime_dependency "contentful-management"
25
- spec.add_runtime_dependency "deklarativna"
26
24
  end
@@ -1,2 +1,5 @@
1
1
  require "contentful_bootstrap/version"
2
2
  require "contentful_bootstrap/server"
3
+ require "contentful_bootstrap/commands"
4
+ require "contentful_bootstrap/templates"
5
+ require "contentful_bootstrap/token"
@@ -1,4 +1,3 @@
1
- require "thread"
2
1
  require "net/http"
3
2
  require "contentful/management"
4
3
  require "contentful_bootstrap/token"
@@ -26,7 +25,15 @@ module ContentfulBootstrap
26
25
  management_client_init
27
26
 
28
27
  puts "Creating Space '#{space_name}'"
29
- space = Contentful::Management::Space.create(name: space_name)
28
+ space = nil
29
+ begin
30
+ space = Contentful::Management::Space.create(name: space_name)
31
+ rescue Contentful::Management::NotFound
32
+ puts "Your account has multiple organizations"
33
+ print "Please insert the Organization ID you'd want to create the spaces for: "
34
+ organization_id = gets.chomp
35
+ space = Contentful::Management::Space.create(name: space_name, organization_id: organization_id)
36
+ end
30
37
  puts "Space '#{space_name}' created!"
31
38
 
32
39
  return if template_name.nil?
@@ -48,9 +55,11 @@ module ContentfulBootstrap
48
55
 
49
56
  def get_token
50
57
  silence_stderr do # Don't show any Sinatra related stuff
51
- t = Thread.new { Server.run! }
58
+ server = Server.new
59
+
60
+ server.start
52
61
 
53
- while !Server.running? # Wait for Server Init
62
+ while !server.running? # Wait for Server Init
54
63
  sleep(1)
55
64
  end
56
65
 
@@ -60,7 +69,7 @@ module ContentfulBootstrap
60
69
  sleep(1)
61
70
  end
62
71
 
63
- Server.quit!
72
+ server.stop
64
73
  end
65
74
  end
66
75
 
@@ -1,63 +1,91 @@
1
- require "sinatra"
1
+ require "thread"
2
+ require "webrick"
2
3
  require "launchy"
3
- require "deklarativna"
4
- require "thin"
5
4
  require "contentful_bootstrap/constants"
6
5
  require "contentful_bootstrap/token"
7
6
 
8
7
  module ContentfulBootstrap
9
- class OAuthEchoView < BaseTemplate
10
- def _body
11
- script(type: "text/javascript") {
12
- <<-JS
13
- (function() {
14
- var access_token = window.location.hash.split('&')[0].split('=')[1];
15
- window.location.replace('http://localhost:5123/save_token/' + access_token);
16
- })();
17
- JS
18
- }
8
+ class OAuthEchoView
9
+ def render
10
+ <<-JS
11
+ <html><head></head><body>
12
+ <script type="text/javascript">
13
+ (function() {
14
+ var access_token = window.location.hash.split('&')[0].split('=')[1];
15
+ window.location.replace('http://localhost:5123/save_token?token=' + access_token);
16
+ })();
17
+ </script>
18
+ </body></html>
19
+ JS
19
20
  end
20
21
  end
21
22
 
22
- class ThanksView < BaseTemplate
23
- def _head
24
- link(rel: "stylesheet", href: "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css")
25
- end
26
-
27
- def _body
28
- div(class: "container") {
29
- div(class: "jumbotron") {[
30
- h1 { "Contentful Bootstrap" },
31
- h4 { "Thanks! The OAuth Token has been generated" },
32
- p { "The Space you specified will now start to create. You can close this window freely" }
33
- ]}
34
- }
23
+ class ThanksView
24
+ def render
25
+ <<-HTML
26
+ <html><head>
27
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />
28
+ </head><body>
29
+ <div class="container">
30
+ <div class="jumbotron">
31
+ <h1>Contentful Bootstrap</h1>
32
+ <h4>Thanks! The OAuth Token has been generated</h4>
33
+ <p>The Space you specified will now start to create. You can close this window freely</p>
34
+ </div>
35
+ </div>
36
+ </body></html>
37
+ HTML
35
38
  end
36
39
  end
37
40
 
38
- class Server < Sinatra::Base
39
- configure do
40
- set :port, 5123
41
- set :logging, nil
42
- set :quiet, true
43
- Thin::Logging.silent = true # Silence Thin startup message
44
- end
45
-
46
- get '/' do
41
+ class IndexController < WEBrick::HTTPServlet::AbstractServlet
42
+ def do_GET(request, response)
47
43
  client_id = ContentfulBootstrap::Constants::OAUTH_APP_ID
48
44
  redirect_uri = ContentfulBootstrap::Constants::OAUTH_CALLBACK_URL
49
45
  scope = "content_management_manage"
50
46
  Launchy.open("https://be.contentful.com/oauth/authorize?response_type=token&client_id=#{client_id}&redirect_uri=#{redirect_uri}&scope=#{scope}")
51
- ""
47
+ response.status = 200
48
+ response.body = ""
49
+ end
50
+ end
51
+
52
+ class OAuthCallbackController < WEBrick::HTTPServlet::AbstractServlet
53
+ def do_GET(request, response)
54
+ #get '/oauth_callback' do
55
+ response.status = 200
56
+ response.content_type = "text/html"
57
+ response.body = OAuthEchoView.new.render
58
+ end
59
+ end
60
+
61
+ class SaveTokenController < WEBrick::HTTPServlet::AbstractServlet
62
+ def do_GET(request, response)
63
+ Token.write(request.query["token"])
64
+ response.status = 200
65
+ response.content_type = "text/html"
66
+ response.body = ThanksView.new.render
67
+ end
68
+ end
69
+
70
+ class Server
71
+ attr_reader :server
72
+ def initialize
73
+ @server = WEBrick::HTTPServer.new(:Port => 5123)
74
+ @server.mount "/", IndexController
75
+ @server.mount "/oauth_callback", OAuthCallbackController
76
+ @server.mount "/save_token", SaveTokenController
77
+ end
78
+
79
+ def start
80
+ Thread.new { @server.start }
52
81
  end
53
82
 
54
- get '/oauth_callback' do
55
- OAuthEchoView.new.render
83
+ def stop
84
+ @server.shutdown
56
85
  end
57
86
 
58
- get '/save_token/:token' do
59
- Token.write(params[:token])
60
- ThanksView.new.render
87
+ def running?
88
+ @server.status != :Stop
61
89
  end
62
90
  end
63
91
  end
@@ -10,6 +10,34 @@ module ContentfulBootstrap
10
10
  end
11
11
 
12
12
  def run
13
+ create_content_types
14
+ create_assets
15
+ create_entries
16
+ end
17
+
18
+ def content_types
19
+ []
20
+ end
21
+
22
+ def entries
23
+ {}
24
+ end
25
+
26
+ def assets
27
+ []
28
+ end
29
+
30
+ protected
31
+ def create_image(name, url)
32
+ image = Contentful::Management::File.new
33
+ image.properties[:contentType] = 'image/jpeg'
34
+ image.properties[:fileName] = "#{name}.jpg"
35
+ image.properties[:upload] = url
36
+ image
37
+ end
38
+
39
+ private
40
+ def create_content_types
13
41
  content_types.each do |ct|
14
42
  puts "Creating Content Type '#{ct[:name]}'"
15
43
 
@@ -24,7 +52,15 @@ module ContentfulBootstrap
24
52
  field.id = f[:id]
25
53
  field.name = f[:name]
26
54
  field.type = f[:type]
27
- field.link_type = f[:link_type] if f.has_key?(:link_type)
55
+ field.link_type = f[:link_type] if is_link?(f)
56
+
57
+ if is_array?(f)
58
+ array_field = Contentful::Management::Field.new
59
+ array_field.type = f[:items][:type]
60
+ array_field.link_type = f[:items][:link_type]
61
+ field.items = array_field
62
+ end
63
+
28
64
  fields << field
29
65
  end
30
66
 
@@ -32,25 +68,48 @@ module ContentfulBootstrap
32
68
  content_type.save
33
69
  content_type.activate
34
70
  end
71
+ end
35
72
 
73
+ def is_link?(field)
74
+ field.has_key?(:link_type)
75
+ end
76
+
77
+ def is_array?(field)
78
+ field.has_key?(:items)
79
+ end
80
+
81
+ def create_assets
82
+ assets.each do |asset|
83
+ puts "Creating Asset '#{asset[:title]}'"
84
+ asset = space.assets.create(asset)
85
+ asset.process_file
86
+ asset.publish
87
+ end
88
+ end
89
+
90
+ def create_entries
36
91
  entries.each do |content_type_id, entry_list|
37
92
  content_type = space.content_types.find(content_type_id)
38
93
  entry_list.each_with_index do |e, index|
39
94
  puts "Creating Entry #{index} for #{content_type_id.capitalize}"
95
+
96
+ array_fields = []
97
+ e.each_pair do |field_name, value|
98
+ array_fields << field_name if value.is_a? Array
99
+ end
100
+
101
+ array_fields.each do |af|
102
+ e[af].map! do |f|
103
+ space.send(f.kind).find(f.id)
104
+ end
105
+ end
106
+
40
107
  entry = content_type.entries.create(e)
41
108
  entry.save
42
109
  entry.publish
43
110
  end
44
111
  end
45
112
  end
46
-
47
- def content_types
48
- raise "must implement"
49
- end
50
-
51
- def entries
52
- raise "must implement"
53
- end
54
113
  end
55
114
  end
56
115
  end
@@ -1,5 +1,5 @@
1
1
  require "contentful_bootstrap/templates/base"
2
- require "contentful_bootstrap/templates/entry_link"
2
+ require "contentful_bootstrap/templates/links"
3
3
 
4
4
  module ContentfulBootstrap
5
5
  module Templates
@@ -60,12 +60,12 @@ module ContentfulBootstrap
60
60
  {
61
61
  title: "Inferno",
62
62
  content: "Inferno is the last book in Dan Brown's collection...",
63
- author: EntryLink.new("dan_brown")
63
+ author: Links::Entry.new("dan_brown")
64
64
  },
65
65
  {
66
66
  title: "Alturas de Macchu Picchu",
67
67
  content: "Alturas de Macchu Picchu is one of Pablo Neruda's most famous poetry books...",
68
- author: EntryLink.new("pablo_neruda")
68
+ author: Links::Entry.new("pablo_neruda")
69
69
  }
70
70
  ]
71
71
  }
@@ -1,8 +1,116 @@
1
1
  require "contentful_bootstrap/templates/base"
2
+ require "contentful_bootstrap/templates/links"
2
3
 
3
4
  module ContentfulBootstrap
4
5
  module Templates
5
6
  class Gallery < Base
7
+ def content_types
8
+ [
9
+ {
10
+ id: 'author',
11
+ name: "Author",
12
+ display_field: "name",
13
+ fields: [
14
+ {
15
+ name: "Name",
16
+ id: "name",
17
+ type: "Symbol"
18
+ }
19
+ ]
20
+ },
21
+ {
22
+ id: 'image',
23
+ name: 'Image',
24
+ display_field: 'title',
25
+ fields: [
26
+ {
27
+ id: 'title',
28
+ name: 'Title',
29
+ type: 'Symbol'
30
+ },
31
+ {
32
+ id: 'photo',
33
+ name: 'Photo',
34
+ type: 'Link',
35
+ link_type: 'Asset'
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ id: 'gallery',
41
+ name: 'Gallery',
42
+ display_field: 'title',
43
+ fields: [
44
+ {
45
+ id: 'title',
46
+ name: 'Title',
47
+ type: 'Symbol'
48
+ },
49
+ {
50
+ id: 'author',
51
+ name: 'Author',
52
+ type: 'Link',
53
+ link_type: 'Entry'
54
+ },
55
+ {
56
+ id: 'images',
57
+ name: 'Images',
58
+ type: 'Array',
59
+ items: {
60
+ type: 'Link',
61
+ link_type: 'Entry'
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ ]
67
+ end
68
+
69
+ def assets
70
+ [
71
+ {
72
+ id: 'pie',
73
+ title: 'Pie in the Sky',
74
+ file: create_image('pie', 'https://c2.staticflickr.com/6/5245/5335909339_d307a7cbcf_b.jpg')
75
+ },
76
+ {
77
+ id: 'flower',
78
+ title: 'The Flower',
79
+ file: create_image('flower', 'http://c2.staticflickr.com/4/3922/15045568809_b24591e318_b.jpg')
80
+ }
81
+ ]
82
+ end
83
+
84
+ def entries
85
+ {
86
+ 'author' => [
87
+ {
88
+ id: 'dave',
89
+ name: 'Dave'
90
+ }
91
+ ],
92
+ 'image' => [
93
+ {
94
+ id: 'pie_entry',
95
+ title: 'A Pie in the Sky',
96
+ photo: Links::Asset.new('pie')
97
+ },
98
+ {
99
+ id: 'flower_entry',
100
+ title: 'The Flower',
101
+ photo: Links::Asset.new('flower')
102
+ }
103
+ ],
104
+ 'gallery' => [
105
+ {
106
+ id: 'gallery',
107
+ title: 'Photo Gallery',
108
+ author: Links::Entry.new('dave'),
109
+ images: [Links::Entry.new('pie_entry'), Links::Entry.new('flower_entry')]
110
+ }
111
+ ]
112
+ }
113
+ end
6
114
  end
7
115
  end
8
116
  end
@@ -0,0 +1,2 @@
1
+ require "contentful_bootstrap/templates/links/entry"
2
+ require "contentful_bootstrap/templates/links/asset"
@@ -0,0 +1,13 @@
1
+ require "contentful_bootstrap/templates/links/base"
2
+
3
+ module ContentfulBootstrap
4
+ module Templates
5
+ module Links
6
+ class Asset < Base
7
+ def kind
8
+ :assets
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module ContentfulBootstrap
2
+ module Templates
3
+ module Links
4
+ class Base
5
+ attr_reader :id
6
+ def initialize(id)
7
+ @id = id
8
+ end
9
+
10
+ def kind
11
+ raise "must implement"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ require "contentful_bootstrap/templates/links/base"
2
+
3
+ module ContentfulBootstrap
4
+ module Templates
5
+ module Links
6
+ class Entry < Base
7
+ def kind
8
+ :entries
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module ContentfulBootstrap
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contentful_bootstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Litvak Bruno
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-28 00:00:00.000000000 Z
11
+ date: 2015-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: sinatra
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: launchy
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +66,6 @@ dependencies:
80
66
  - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: deklarativna
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
69
  description:
98
70
  email:
99
71
  - david.litvakb@gmail.com
@@ -103,9 +75,9 @@ extensions: []
103
75
  extra_rdoc_files: []
104
76
  files:
105
77
  - ".gitignore"
78
+ - CHANGELOG.md
106
79
  - CONTRIBUTING.md
107
80
  - Gemfile
108
- - Gemfile.lock
109
81
  - LICENSE
110
82
  - README.md
111
83
  - Rakefile
@@ -120,8 +92,11 @@ files:
120
92
  - lib/contentful_bootstrap/templates/base.rb
121
93
  - lib/contentful_bootstrap/templates/blog.rb
122
94
  - lib/contentful_bootstrap/templates/catalogue.rb
123
- - lib/contentful_bootstrap/templates/entry_link.rb
124
95
  - lib/contentful_bootstrap/templates/gallery.rb
96
+ - lib/contentful_bootstrap/templates/links.rb
97
+ - lib/contentful_bootstrap/templates/links/asset.rb
98
+ - lib/contentful_bootstrap/templates/links/base.rb
99
+ - lib/contentful_bootstrap/templates/links/entry.rb
125
100
  - lib/contentful_bootstrap/token.rb
126
101
  - lib/contentful_bootstrap/version.rb
127
102
  homepage: https://www.contentful.com
data/Gemfile.lock DELETED
@@ -1,59 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- addressable (2.3.8)
5
- coderay (1.1.0)
6
- contentful-management (0.7.2)
7
- http (~> 0.8)
8
- multi_json (~> 1)
9
- daemons (1.2.3)
10
- deklarativna (0.0.10)
11
- launchy
12
- sinatra
13
- thin
14
- domain_name (0.5.25)
15
- unf (>= 0.0.5, < 1.0.0)
16
- eventmachine (1.0.8)
17
- http (0.9.8)
18
- addressable (~> 2.3)
19
- http-cookie (~> 1.0)
20
- http-form_data (~> 1.0.1)
21
- http_parser.rb (~> 0.6.0)
22
- http-cookie (1.0.2)
23
- domain_name (~> 0.5)
24
- http-form_data (1.0.1)
25
- http_parser.rb (0.6.0)
26
- launchy (2.4.3)
27
- addressable (~> 2.3)
28
- method_source (0.8.2)
29
- multi_json (1.11.2)
30
- pry (0.10.3)
31
- coderay (~> 1.1.0)
32
- method_source (~> 0.8.1)
33
- slop (~> 3.4)
34
- rack (1.6.4)
35
- rack-protection (1.5.3)
36
- rack
37
- sinatra (1.4.6)
38
- rack (~> 1.4)
39
- rack-protection (~> 1.4)
40
- tilt (>= 1.3, < 3)
41
- slop (3.6.0)
42
- thin (1.6.4)
43
- daemons (~> 1.0, >= 1.0.9)
44
- eventmachine (~> 1.0, >= 1.0.4)
45
- rack (~> 1.0)
46
- tilt (2.0.1)
47
- unf (0.1.4)
48
- unf_ext
49
- unf_ext (0.0.7.1)
50
-
51
- PLATFORMS
52
- ruby
53
-
54
- DEPENDENCIES
55
- contentful-management
56
- deklarativna
57
- launchy
58
- pry
59
- sinatra
@@ -1,10 +0,0 @@
1
- module ContentfulBootstrap
2
- module Templates
3
- class EntryLink
4
- attr_reader :id
5
- def initialize(id)
6
- @id = id
7
- end
8
- end
9
- end
10
- end