contentful-management 0.0.1.pre

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 (188) hide show
  1. data/.gitignore +24 -0
  2. data/.reek +3 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +16 -0
  5. data/.travis.yml +9 -0
  6. data/CHANGELOG.md +2 -0
  7. data/Gemfile +13 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +408 -0
  10. data/Rakefile +37 -0
  11. data/bin/cma-console +8 -0
  12. data/contentful-management.gemspec +33 -0
  13. data/examples/blog.rb +82 -0
  14. data/examples/content_types.rb +45 -0
  15. data/examples/create_space.rb +35 -0
  16. data/lib/contentful/management.rb +12 -0
  17. data/lib/contentful/management/array.rb +35 -0
  18. data/lib/contentful/management/asset.rb +163 -0
  19. data/lib/contentful/management/client.rb +160 -0
  20. data/lib/contentful/management/content_type.rb +180 -0
  21. data/lib/contentful/management/dynamic_entry.rb +71 -0
  22. data/lib/contentful/management/entry.rb +213 -0
  23. data/lib/contentful/management/error.rb +62 -0
  24. data/lib/contentful/management/field.rb +34 -0
  25. data/lib/contentful/management/file.rb +15 -0
  26. data/lib/contentful/management/http_client.rb +22 -0
  27. data/lib/contentful/management/link.rb +23 -0
  28. data/lib/contentful/management/locale.rb +48 -0
  29. data/lib/contentful/management/location.rb +15 -0
  30. data/lib/contentful/management/request.rb +82 -0
  31. data/lib/contentful/management/resource.rb +166 -0
  32. data/lib/contentful/management/resource/array_like.rb +37 -0
  33. data/lib/contentful/management/resource/fields.rb +69 -0
  34. data/lib/contentful/management/resource/refresher.rb +21 -0
  35. data/lib/contentful/management/resource/system_properties.rb +56 -0
  36. data/lib/contentful/management/resource_builder.rb +269 -0
  37. data/lib/contentful/management/response.rb +72 -0
  38. data/lib/contentful/management/space.rb +159 -0
  39. data/lib/contentful/management/support.rb +24 -0
  40. data/lib/contentful/management/version.rb +6 -0
  41. data/spec/fixtures/vcr_cassettes/array_page_1.yml +1337 -0
  42. data/spec/fixtures/vcr_cassettes/asset/all.yml +611 -0
  43. data/spec/fixtures/vcr_cassettes/asset/archive.yml +228 -0
  44. data/spec/fixtures/vcr_cassettes/asset/archive_published.yml +177 -0
  45. data/spec/fixtures/vcr_cassettes/asset/archived_false.yml +228 -0
  46. data/spec/fixtures/vcr_cassettes/asset/archived_true.yml +228 -0
  47. data/spec/fixtures/vcr_cassettes/asset/create.yml +150 -0
  48. data/spec/fixtures/vcr_cassettes/asset/create_with_already_used_id.yml +56 -0
  49. data/spec/fixtures/vcr_cassettes/asset/create_with_custom_id.yml +150 -0
  50. data/spec/fixtures/vcr_cassettes/asset/destroy.yml +159 -0
  51. data/spec/fixtures/vcr_cassettes/asset/destroy_published.yml +175 -0
  52. data/spec/fixtures/vcr_cassettes/asset/find.yml +108 -0
  53. data/spec/fixtures/vcr_cassettes/asset/find_not_found.yml +64 -0
  54. data/spec/fixtures/vcr_cassettes/asset/image_url.yml +133 -0
  55. data/spec/fixtures/vcr_cassettes/asset/locale.yml +110 -0
  56. data/spec/fixtures/vcr_cassettes/asset/publish.yml +228 -0
  57. data/spec/fixtures/vcr_cassettes/asset/publish_already_published.yml +176 -0
  58. data/spec/fixtures/vcr_cassettes/asset/published_false.yml +228 -0
  59. data/spec/fixtures/vcr_cassettes/asset/published_true.yml +226 -0
  60. data/spec/fixtures/vcr_cassettes/asset/save_update.yml +242 -0
  61. data/spec/fixtures/vcr_cassettes/asset/set_locale.yml +110 -0
  62. data/spec/fixtures/vcr_cassettes/asset/unarchive.yml +228 -0
  63. data/spec/fixtures/vcr_cassettes/asset/unarchive_already_unarchive.yml +168 -0
  64. data/spec/fixtures/vcr_cassettes/asset/unarchive_already_unarchived.yml +168 -0
  65. data/spec/fixtures/vcr_cassettes/asset/unpublish.yml +228 -0
  66. data/spec/fixtures/vcr_cassettes/asset/unpublish_already_unpublished.yml +168 -0
  67. data/spec/fixtures/vcr_cassettes/asset/update_file.yml +207 -0
  68. data/spec/fixtures/vcr_cassettes/asset/update_to_specified_locale.yml +224 -0
  69. data/spec/fixtures/vcr_cassettes/asset/update_with_default_locale_without_file.yml +214 -0
  70. data/spec/fixtures/vcr_cassettes/content_type/activate.yml +246 -0
  71. data/spec/fixtures/vcr_cassettes/content_type/activate_with_invalid_version.yml +186 -0
  72. data/spec/fixtures/vcr_cassettes/content_type/activated_false.yml +246 -0
  73. data/spec/fixtures/vcr_cassettes/content_type/activated_true.yml +257 -0
  74. data/spec/fixtures/vcr_cassettes/content_type/all.yml +190 -0
  75. data/spec/fixtures/vcr_cassettes/content_type/create.yml +87 -0
  76. data/spec/fixtures/vcr_cassettes/content_type/create_content_type_with_id.yml +87 -0
  77. data/spec/fixtures/vcr_cassettes/content_type/create_with_Array_field.yml +94 -0
  78. data/spec/fixtures/vcr_cassettes/content_type/create_with_Boolean_field.yml +94 -0
  79. data/spec/fixtures/vcr_cassettes/content_type/create_with_Date_field.yml +94 -0
  80. data/spec/fixtures/vcr_cassettes/content_type/create_with_Integer_field.yml +94 -0
  81. data/spec/fixtures/vcr_cassettes/content_type/create_with_Link_field.yml +95 -0
  82. data/spec/fixtures/vcr_cassettes/content_type/create_with_Location_field.yml +94 -0
  83. data/spec/fixtures/vcr_cassettes/content_type/create_with_Number_field.yml +94 -0
  84. data/spec/fixtures/vcr_cassettes/content_type/create_with_Object_field.yml +94 -0
  85. data/spec/fixtures/vcr_cassettes/content_type/create_with_Symbol_field.yml +94 -0
  86. data/spec/fixtures/vcr_cassettes/content_type/create_with_Text_field.yml +94 -0
  87. data/spec/fixtures/vcr_cassettes/content_type/deactivate.yml +246 -0
  88. data/spec/fixtures/vcr_cassettes/content_type/deactivate_already_deactivated.yml +176 -0
  89. data/spec/fixtures/vcr_cassettes/content_type/deactivate_with_entries.yml +236 -0
  90. data/spec/fixtures/vcr_cassettes/content_type/deactivate_with_version_change.yml +248 -0
  91. data/spec/fixtures/vcr_cassettes/content_type/destroy.yml +148 -0
  92. data/spec/fixtures/vcr_cassettes/content_type/destroy_activated.yml +164 -0
  93. data/spec/fixtures/vcr_cassettes/content_type/entry/create.yml +1344 -0
  94. data/spec/fixtures/vcr_cassettes/content_type/entry/create_with_camel_case_id_to_multiple_locales.yml +235 -0
  95. data/spec/fixtures/vcr_cassettes/content_type/entry/create_with_entries.yml +398 -0
  96. data/spec/fixtures/vcr_cassettes/content_type/entry/create_with_entries_for_multiple_locales.yml +3157 -0
  97. data/spec/fixtures/vcr_cassettes/content_type/entry/create_with_multiple_locales.yml +230 -0
  98. data/spec/fixtures/vcr_cassettes/content_type/fields/add.yml +345 -0
  99. data/spec/fixtures/vcr_cassettes/content_type/fields/create.yml +353 -0
  100. data/spec/fixtures/vcr_cassettes/content_type/fields/create_array_with_params.yml +228 -0
  101. data/spec/fixtures/vcr_cassettes/content_type/fields/create_with_params.yml +221 -0
  102. data/spec/fixtures/vcr_cassettes/content_type/fields/destroy.yml +349 -0
  103. data/spec/fixtures/vcr_cassettes/content_type/fields/update_field.yml +358 -0
  104. data/spec/fixtures/vcr_cassettes/content_type/find.yml +180 -0
  105. data/spec/fixtures/vcr_cassettes/content_type/find_not_found.yml +64 -0
  106. data/spec/fixtures/vcr_cassettes/content_type/save_new.yml +876 -0
  107. data/spec/fixtures/vcr_cassettes/content_type/save_updated.yml +345 -0
  108. data/spec/fixtures/vcr_cassettes/content_type/save_with_added_field.yml +217 -0
  109. data/spec/fixtures/vcr_cassettes/content_type/update.yml +175 -0
  110. data/spec/fixtures/vcr_cassettes/content_type/update_change_field_name.yml +222 -0
  111. data/spec/fixtures/vcr_cassettes/content_type/update_remove_field.yml +231 -0
  112. data/spec/fixtures/vcr_cassettes/content_type/update_with_fields.yml +222 -0
  113. data/spec/fixtures/vcr_cassettes/content_type/update_with_one_new_field.yml +251 -0
  114. data/spec/fixtures/vcr_cassettes/entry/all.yml +139 -0
  115. data/spec/fixtures/vcr_cassettes/entry/archive.yml +222 -0
  116. data/spec/fixtures/vcr_cassettes/entry/archive_published.yml +187 -0
  117. data/spec/fixtures/vcr_cassettes/entry/archived_false.yml +178 -0
  118. data/spec/fixtures/vcr_cassettes/entry/archived_true.yml +248 -0
  119. data/spec/fixtures/vcr_cassettes/entry/create.yml +245 -0
  120. data/spec/fixtures/vcr_cassettes/entry/create_test.yml +150 -0
  121. data/spec/fixtures/vcr_cassettes/entry/create_with_asset.yml +403 -0
  122. data/spec/fixtures/vcr_cassettes/entry/create_with_assets.yml +419 -0
  123. data/spec/fixtures/vcr_cassettes/entry/create_with_entries.yml +418 -0
  124. data/spec/fixtures/vcr_cassettes/entry/create_with_entry.yml +493 -0
  125. data/spec/fixtures/vcr_cassettes/entry/create_with_location.yml +259 -0
  126. data/spec/fixtures/vcr_cassettes/entry/create_with_symbols.yml +271 -0
  127. data/spec/fixtures/vcr_cassettes/entry/destory_published.yml +172 -0
  128. data/spec/fixtures/vcr_cassettes/entry/destroy.yml +156 -0
  129. data/spec/fixtures/vcr_cassettes/entry/find.yml +129 -0
  130. data/spec/fixtures/vcr_cassettes/entry/find_not_found.yml +64 -0
  131. data/spec/fixtures/vcr_cassettes/entry/publish.yml +248 -0
  132. data/spec/fixtures/vcr_cassettes/entry/publish_already_published.yml +186 -0
  133. data/spec/fixtures/vcr_cassettes/entry/published_false.yml +248 -0
  134. data/spec/fixtures/vcr_cassettes/entry/published_true.yml +257 -0
  135. data/spec/fixtures/vcr_cassettes/entry/save_update.yml +211 -0
  136. data/spec/fixtures/vcr_cassettes/entry/unarchive.yml +248 -0
  137. data/spec/fixtures/vcr_cassettes/entry/unarchive_already_unarchived.yml +178 -0
  138. data/spec/fixtures/vcr_cassettes/entry/unpublish.yml +248 -0
  139. data/spec/fixtures/vcr_cassettes/entry/unpublish_already_unpublished.yml +178 -0
  140. data/spec/fixtures/vcr_cassettes/entry/update.yml +626 -0
  141. data/spec/fixtures/vcr_cassettes/entry/update_unlocalized_field.yml +308 -0
  142. data/spec/fixtures/vcr_cassettes/entry/update_with_custom_locale.yml +332 -0
  143. data/spec/fixtures/vcr_cassettes/get_request.yml +37 -0
  144. data/spec/fixtures/vcr_cassettes/locale/all_for_space.yml +321 -0
  145. data/spec/fixtures/vcr_cassettes/locale/create_for_space.yml +95 -0
  146. data/spec/fixtures/vcr_cassettes/locale/find.yml +95 -0
  147. data/spec/fixtures/vcr_cassettes/locale/find_for_space_not_found.yml +67 -0
  148. data/spec/fixtures/vcr_cassettes/space/all.yml +1201 -0
  149. data/spec/fixtures/vcr_cassettes/space/asset/all.yml +475 -0
  150. data/spec/fixtures/vcr_cassettes/space/asset/assets.yml +826 -0
  151. data/spec/fixtures/vcr_cassettes/space/asset/create.yml +508 -0
  152. data/spec/fixtures/vcr_cassettes/space/asset/create_with_multiple_locales.yml +1062 -0
  153. data/spec/fixtures/vcr_cassettes/space/asset/find.yml +634 -0
  154. data/spec/fixtures/vcr_cassettes/space/content_type/all.yml +470 -0
  155. data/spec/fixtures/vcr_cassettes/space/content_type/content_types.yml +341 -0
  156. data/spec/fixtures/vcr_cassettes/space/content_type/create.yml +425 -0
  157. data/spec/fixtures/vcr_cassettes/space/content_type/find.yml +493 -0
  158. data/spec/fixtures/vcr_cassettes/space/create.yml +85 -0
  159. data/spec/fixtures/vcr_cassettes/space/create_when_limit_has_been_reached.yml +67 -0
  160. data/spec/fixtures/vcr_cassettes/space/create_with_unknown_organization.yml +65 -0
  161. data/spec/fixtures/vcr_cassettes/space/create_without_organization.yml +83 -0
  162. data/spec/fixtures/vcr_cassettes/space/destory.yml +196 -0
  163. data/spec/fixtures/vcr_cassettes/space/entry/all.yml +634 -0
  164. data/spec/fixtures/vcr_cassettes/space/entry/entries.yml +498 -0
  165. data/spec/fixtures/vcr_cassettes/space/entry/find.yml +624 -0
  166. data/spec/fixtures/vcr_cassettes/space/find.yml +270 -0
  167. data/spec/fixtures/vcr_cassettes/space/find_not_found.yml +67 -0
  168. data/spec/fixtures/vcr_cassettes/space/locale/all.yml +690 -0
  169. data/spec/fixtures/vcr_cassettes/space/locale/create.yml +572 -0
  170. data/spec/fixtures/vcr_cassettes/space/locale/create_with_the_same_code.yml +585 -0
  171. data/spec/fixtures/vcr_cassettes/space/locale/find.yml +572 -0
  172. data/spec/fixtures/vcr_cassettes/space/locale/find_not_found.yml +580 -0
  173. data/spec/fixtures/vcr_cassettes/space/locale/locales.yml +480 -0
  174. data/spec/fixtures/vcr_cassettes/space/locale/update.yml +700 -0
  175. data/spec/fixtures/vcr_cassettes/space/save_new_space.yml +67 -0
  176. data/spec/fixtures/vcr_cassettes/space/save_update_space.yml +352 -0
  177. data/spec/fixtures/vcr_cassettes/space/update.yml +350 -0
  178. data/spec/fixtures/vcr_cassettes/space/update_with_the_same_data.yml +350 -0
  179. data/spec/lib/contentful/management/array_spec.rb +59 -0
  180. data/spec/lib/contentful/management/asset_spec.rb +321 -0
  181. data/spec/lib/contentful/management/client_spec.rb +80 -0
  182. data/spec/lib/contentful/management/content_type_spec.rb +455 -0
  183. data/spec/lib/contentful/management/entry_spec.rb +308 -0
  184. data/spec/lib/contentful/management/locale_spec.rb +53 -0
  185. data/spec/lib/contentful/management/space_spec.rb +317 -0
  186. data/spec/spec_helper.rb +10 -0
  187. data/spec/support/vcr.rb +17 -0
  188. metadata +554 -0
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'bundler/gem_tasks'
3
+ require 'rubygems'
4
+ require 'rake'
5
+
6
+ begin
7
+ require 'bundler'
8
+ rescue LoadError => e
9
+ warn e.message
10
+ warn 'Run `gem install bundler` to install Bundler.'
11
+ exit 1
12
+ end
13
+
14
+ begin
15
+ Bundler.setup(:development)
16
+ rescue Bundler::BundlerError => e
17
+ warn e.message
18
+ warn 'Run `bundle install` to install missing gems.'
19
+ exit e.status_code
20
+ end
21
+
22
+ require 'rspec/core/rake_task'
23
+ RSpec::Core::RakeTask.new
24
+
25
+ require 'rubocop/rake_task'
26
+ RuboCop::RakeTask.new
27
+
28
+ require 'reek/rake/task'
29
+ Reek::Rake::Task.new do |t|
30
+ t.fail_on_error = false
31
+ end
32
+
33
+ desc 'Run specs, rubocop and reek'
34
+ task ci: %w(spec reek rubocop)
35
+
36
+ task test: :spec
37
+ task default: :spec
data/bin/cma-console ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- encoding: utf-8 -*-
3
+
4
+ $LOAD_PATH << 'lib'
5
+ require 'contentful/management/client'
6
+ require 'pry'
7
+
8
+ Pry::CLI.parse_options
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'contentful/management/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'contentful-management'
8
+ spec.version = Contentful::Management::VERSION
9
+ spec.authors = ['Piotr Protas','Tomasz Warkocki','Contentful GmbH (Andreas Tiefenthaler)']
10
+ spec.email = ['piotrek@codequest.com','warkocz@gmail.com', 'rubygems@contentful.com']
11
+ spec.summary = %q{contentful management api}
12
+ spec.description = %q{Ruby client for the https://www.contentful.com Content Management API}
13
+ spec.homepage = 'https://github.com/contentful/contentful-management.rb'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_dependency 'http', '~> 0.6'
22
+ spec.add_dependency 'multi_json', '~> 1'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.6'
25
+ spec.add_development_dependency 'rake'
26
+
27
+ spec.add_development_dependency 'rspec', '~> 3'
28
+ spec.add_development_dependency 'rspec-its'
29
+ spec.add_development_dependency 'rubocop'
30
+ spec.add_development_dependency 'reek'
31
+ spec.add_development_dependency 'vcr'
32
+ spec.add_development_dependency 'webmock', '~> 1', '>= 1.17.3'
33
+ end
data/examples/blog.rb ADDED
@@ -0,0 +1,82 @@
1
+ ###
2
+ # This should be and behave like a living example that grows with the code itself.
3
+ #
4
+ # TODO:
5
+ # - localisation
6
+ # - create links between posts and categories
7
+ # - link assets to posts
8
+ # - unpublish all posts
9
+ # - update assets
10
+ # - remove assets
11
+
12
+ require 'pry'
13
+
14
+ access_token = 'access token'
15
+ organization = 'organization id'
16
+
17
+ require 'contentful/management'
18
+
19
+ client = Contentful::Management::Client.new(access_token)
20
+
21
+ blog_space = Contentful::Management::Space.create(name: 'Blog', organization_id: organization)
22
+ # blog_space = Contentful::Management::Space.find('zlso53r1zad6')
23
+
24
+ blog_space.locales.create(name: 'English', code: 'en-US')
25
+ blog_space.locales.create(name: 'German', code: 'de-DE')
26
+
27
+ category_type = blog_space.content_types.create(name: 'Category')
28
+ category_type.fields.create(id: 'category_name', name: 'Category Name', type: 'Text', localized: true)
29
+ category_type.fields.create(id: 'category_description', name: 'Category Description', type: 'Text', localized: true)
30
+
31
+ post_type = blog_space.content_types.create(name: 'Post')
32
+ post_type.fields.create(id: 'post_title', name: 'Post Title', type: 'Text', localized: true)
33
+ post_type.fields.create(id: 'post_author', name: 'Post Author', type: 'Text', localized: true)
34
+ post_type.fields.create(id: 'post_body', name: 'Post Body', type: 'Text', localized: true)
35
+
36
+ categories = Contentful::Management::Field.new
37
+ categories.id = 'post_category'
38
+ categories.type = 'link'
39
+ categories.link_type = 'Entry'
40
+ post_type.fields.create(id: 'post_categories', name: 'Post Categories', type: 'Array', items: categories)
41
+
42
+ # category_type = blog_space.content_types.find('3bMvEx9ROwEQCmyGcYOI8c')
43
+ # post_type = blog_space.content_types.find('1D93omOM0YocSsGwY8wY6u')
44
+
45
+ post_type.activate
46
+ category_type.activate
47
+
48
+ sleep 10 # prevent race conditions
49
+
50
+ puts "creating categories"
51
+ entries = []
52
+ entries << category_type.entries.create(category_name: 'Misc', category_description: 'Misc stuff')
53
+ entries << category_type.entries.create(category_name: 'Serious', category_description: 'Serious stuff')
54
+
55
+ # TODO: add links to categories
56
+ entries << post_type.entries.create(post_title: 'First Post', post_author: 'Andy', post_body: 'Letterpress sustainable authentic, disrupt semiotics actually kitsch. Direct trade Cosby sweater Austin, Pitchfork flexitarian small batch authentic roof party 8-bit YOLO literally Neutra pour-over American Apparel dreamcatcher. High Life distillery cliche YOLO, flexitarian four loko put a bird on it plaid Marfa Shoreditch seitan Echo Park bicycle rights Pinterest PBR. Drinking vinegar Banksy gastropub, stumptown occupy farm-to-table Blue Bottle tattooed Truffaut single-origin coffee iPhone locavore pug. Blue Bottle cray quinoa farm-to-table Bushwick tousled. Kitsch beard tousled, American Apparel XOXO vegan readymade Pitchfork church-key 3 wolf moon direct trade lo-fi. Food truck try-hard deep v salvia raw denim.', locale: 'en-US')
57
+ entries << post_type.entries.create(post_title: 'Second Post', post_author: 'Andy', post_body: "Fixie hashtag pour-over disrupt raw denim bespoke semiotics, typewriter Shoreditch messenger bag Thundercats chillwave DIY. Forage hoodie squid hella Kickstarter Thundercats, Banksy scenester flannel disrupt PBR&B fap chia. Small batch Brooklyn Williamsburg hella viral banh mi selfies organic. Semiotics Brooklyn skateboard cray messenger bag Echo Park. PBR&B High Life wolf meh, typewriter Bushwick VHS Cosby sweater mlkshk farm-to-table. Fingerstache readymade PBR literally, fixie letterpress swag fap. Authentic distillery banh mi, forage pork belly craft beer locavore DIY 90's iPhone 3 wolf moon synth.", locale: 'de-DE')
58
+
59
+ asset = blog_space.assets.new
60
+
61
+ asset.title_with_locales = {'en-US' => 'title picture 1', 'de-DE' => 'title picture 2'}
62
+ asset.description_with_locales = {'en-US' => 'space_asset_desc', 'de-DE' => 'space_asset_desc'}
63
+
64
+ file1 = Contentful::Management::File.new
65
+ file1.properties[:contentType] = 'image/jpeg'
66
+ file1.properties[:fileName] = 'pic1.jpg'
67
+ file1.properties[:upload] = 'https://upload.wikimedia.org/wikipedia/commons/c/c7/Gasometer_Berlin_Sch%C3%B6neberg_2011.jpg'
68
+
69
+ file2 = Contentful::Management::File.new
70
+ file2.properties[:contentType] = 'image/jpeg'
71
+ file2.properties[:fileName] = 'pic1.jpg'
72
+ file2.properties[:upload] = 'https://upload.wikimedia.org/wikipedia/commons/b/bd/Gasometer_Schoeneberg_innen.jpg'
73
+
74
+ asset.file_with_locales = {'en-US' => file1, 'de-DE' => file2}
75
+ asset.save
76
+
77
+ entries.map(&:publish)
78
+
79
+ puts "Press any key to destroy space"
80
+ gets
81
+
82
+ blog_space.destroy
@@ -0,0 +1,45 @@
1
+ require 'pry'
2
+
3
+ access_token = 'access token'
4
+ organization = 'organization id'
5
+
6
+ require 'contentful/management'
7
+
8
+
9
+ client = Contentful::Management::Client.new(access_token)
10
+ space = Contentful::Management::Space.create(name: 'MySpace', organization_id: organization)
11
+
12
+ p space.content_types
13
+
14
+ type1 = space.content_types.create(name: 'ContentType 1')
15
+
16
+ p space.content_types.all
17
+
18
+ field = Contentful::Management::Field.new
19
+ field.id = 'such_content'
20
+ field.name = 'Such Content'
21
+ field.type = 'Text' #content types maybe as symbol?
22
+
23
+ type2 = space.content_types.new
24
+ type2.name = 'ContentType 2'
25
+ type2.fields = [field]
26
+ type2.save
27
+
28
+ field2 = Contentful::Management::Field.new
29
+ field2.id = 'wow_content'
30
+ field2.name = 'Wow Content'
31
+ field2.type = 'Location' #content types maybe as symbol?
32
+
33
+
34
+ type2.update(name: 'whoat', fields: [field, field2])
35
+
36
+ type2.fields.add(field2)
37
+
38
+ type2.activate
39
+ p type2.active?
40
+ type2.deactivate
41
+
42
+ type1.destroy
43
+
44
+ #clean up afterwards!
45
+ space.destroy
@@ -0,0 +1,35 @@
1
+ require 'pry'
2
+
3
+ access_token = 'access token'
4
+ organization = 'organization id'
5
+
6
+ require 'contentful/management'
7
+
8
+ client = Contentful::Management::Client.new(access_token)
9
+
10
+ spaces = Contentful::Management::Space.all
11
+
12
+ my_space = Contentful::Management::Space.create(name: 'MySpace', organization_id: organization)
13
+
14
+ my_space.update(name: 'MyNewSpace')
15
+
16
+ dat_space = Contentful::Management::Space.find(my_space.id)
17
+
18
+
19
+ dat_space.locales.create(name: 'English', code: 'en-US')
20
+
21
+ locales = dat_space.locales
22
+ # locales.map(&:destroy) # not implemented yet?
23
+
24
+ dat_space.destroy
25
+
26
+
27
+ # XXX: This does not set the organization_id when a space should be created
28
+ #
29
+ your_space = Contentful::Management::Space.new
30
+ your_space.organization = organization
31
+ your_space.name = 'YourSpace'
32
+ your_space.save
33
+
34
+
35
+ your_space.destroy
@@ -0,0 +1,12 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'contentful/management/version'
3
+ require 'contentful/management/support'
4
+ require 'contentful/management/resource'
5
+ require 'contentful/management/client'
6
+ require 'contentful/management/space'
7
+
8
+ module Contentful
9
+ module Management
10
+ # Your code goes here...
11
+ end
12
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require_relative 'resource'
3
+ require_relative 'resource/array_like'
4
+
5
+ module Contentful
6
+ module Management
7
+ # Resource Class for Arrays (e.g. search results)
8
+ # https://www.contentful.com/developers/documentation/content-delivery-api/#arrays
9
+ # It also provides an #each method and includes Ruby's Enumerable module (gives you methods like #min, #first, etc)
10
+ class Array
11
+ DEFAULT_LIMIT = 100
12
+
13
+ include Contentful::Management::Resource
14
+ include Contentful::Management::Resource::SystemProperties
15
+ include Contentful::Management::Resource::ArrayLike
16
+
17
+ property :total, :integer
18
+ property :limit, :integer
19
+ property :skip, :integer
20
+ property :items
21
+
22
+ # Simplifies pagination
23
+ def next_page
24
+ if request
25
+ new_skip = (skip || 0) + (limit || DEFAULT_LIMIT)
26
+ new_request = request.copy
27
+ new_request.query[:skip] = new_skip
28
+ new_request.get
29
+ else
30
+ false
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,163 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require_relative 'resource'
3
+ require_relative 'resource/fields'
4
+
5
+ module Contentful
6
+ module Management
7
+ class Asset
8
+
9
+ FIELDS_COERCIONS = {
10
+ title: :hash,
11
+ description: :hash,
12
+ file: Contentful::Management::File
13
+ }
14
+
15
+ def self.fields_coercions
16
+ FIELDS_COERCIONS
17
+ end
18
+
19
+ include Contentful::Management::Resource
20
+ include Contentful::Management::Resource::Fields
21
+ include Contentful::Management::Resource::SystemProperties
22
+ include Contentful::Management::Resource::Refresher
23
+
24
+ def self.all(space_id)
25
+ request = Request.new("/#{ space_id }/assets")
26
+ response = request.get
27
+ result = ResourceBuilder.new(self, response, {}, {})
28
+ result.run
29
+ end
30
+
31
+ def self.find(space_id, asset_id)
32
+ request = Request.new("/#{ space_id }/assets/#{ asset_id }")
33
+ response = request.get
34
+ result = ResourceBuilder.new(self, response, {}, {})
35
+ result.run
36
+ end
37
+
38
+ def self.create(space_id, attributes)
39
+ asset = self.new
40
+ asset.instance_variable_set(:@fields, attributes[:fields] || {})
41
+ asset.locale = attributes[:locale] if attributes[:locale]
42
+ asset.title = attributes[:title] if attributes[:title]
43
+ asset.description = attributes[:description] if attributes[:description]
44
+ asset.file = attributes[:file] if attributes[:file]
45
+
46
+ request = Request.new("/#{ space_id }/assets/#{ attributes[:id] || ''}", { fields: asset.fields_for_query })
47
+ response = attributes[:id].nil? ? request.post : request.put
48
+ result = ResourceBuilder.new(self, response, {}, {}).run
49
+ result.process_files if result.is_a? self
50
+ result
51
+ end
52
+
53
+ def process_files
54
+ instance_variable_get(:@fields).keys.each do |locale|
55
+ request = Request.new("/#{ space.id }/assets/#{ id }/files/#{ locale }/process", {}, id = nil, version: sys[:version])
56
+ request.put
57
+ end
58
+ end
59
+
60
+ def update(attributes)
61
+ self.title = attributes[:title] if attributes[:title]
62
+ self.description = attributes[:description] if attributes[:description]
63
+ self.file = attributes[:file] if attributes[:file]
64
+ request = Request.new("/#{ space.id }/assets/#{ id }", { fields: fields_for_query }, id = nil, version: sys[:version])
65
+ response = request.put
66
+ result = ResourceBuilder.new(self, response, {}, {}).run
67
+ refresh_data(result)
68
+ end
69
+
70
+ def save
71
+ if id.nil?
72
+ new_instance = self.class.create(self.sys[:space].id, { fields: instance_variable_get(:@fields) })
73
+ refresh_data(new_instance)
74
+ else
75
+ update(title: title, description: description, file: file)
76
+ end
77
+ end
78
+
79
+ def destroy
80
+ request = Request.new("/#{ space.id }/assets/#{ id }")
81
+ response = request.delete
82
+ if response.status == :no_content
83
+ return true
84
+ else
85
+ result = ResourceBuilder.new(self, response, {}, {})
86
+ result.run
87
+ end
88
+ end
89
+
90
+ def publish
91
+ request = Request.new("/#{ space.id }/assets/#{ id }/published", {}, id = nil, version: sys[:version])
92
+ response = request.put
93
+ result = ResourceBuilder.new(self, response, {}, {}).run
94
+ refresh_data(result)
95
+ end
96
+
97
+ def unpublish
98
+ request = Request.new("/#{ space.id }/assets/#{ id }/published", {}, id = nil, version: sys[:version])
99
+ response = request.delete
100
+ result = ResourceBuilder.new(self, response, {}, {}).run
101
+ refresh_data(result)
102
+ end
103
+
104
+ def archive
105
+ request = Request.new("/#{ space.id }/assets/#{ id }/archived", {}, id = nil, version: sys[:version])
106
+ response = request.put
107
+ result = ResourceBuilder.new(self, response, {}, {}).run
108
+ refresh_data(result)
109
+ end
110
+
111
+ def unarchive
112
+ request = Request.new("/#{ space.id }/assets/#{ id }/archived", {}, id = nil, version: sys[:version])
113
+ response = request.delete
114
+ result = ResourceBuilder.new(self, response, {}, {}).run
115
+ refresh_data(result)
116
+ end
117
+
118
+ def published?
119
+ !sys[:publishedAt].nil?
120
+ end
121
+
122
+ def archived?
123
+ !sys[:archivedAt].nil?
124
+ end
125
+
126
+ def locale
127
+ sys && sys[:locale] ? sys[:locale] : default_locale
128
+ end
129
+
130
+ def fields_for_query
131
+ self.class.fields_coercions.keys.each_with_object({}) do |field_name, results|
132
+ results[field_name] = @fields.each_with_object({}) do |(locale, fields), field_results|
133
+ field_results[locale] = field_name == :file ? (fields[field_name] ? fields[field_name].properties : nil) : fields[field_name]
134
+ end
135
+ end
136
+ end
137
+
138
+ # Returns the image url of an asset
139
+ # Allows you to pass in the following options for image resizing:
140
+ # :width
141
+ # :height
142
+ # :format
143
+ # :quality
144
+ # See https://www.contentful.com/developers/documentation/content-delivery-api/#image-asset-resizing
145
+ def image_url(options = {})
146
+ query = {
147
+ w: options[:w] || options[:width],
148
+ h: options[:h] || options[:height],
149
+ fm: options[:fm] || options[:format],
150
+ q: options[:q] || options[:quality]
151
+ }.reject { |_k, v| v.nil? }
152
+
153
+ if query.empty?
154
+ file.url
155
+ else
156
+ "#{ file.url }?#{ URI.encode_www_form(query) }"
157
+ end
158
+ end
159
+
160
+ end
161
+ end
162
+ end
163
+