contentful-management 0.8.0 → 0.9.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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -29
  3. data/.rubocop_todo.yml +24 -0
  4. data/.travis.yml +1 -1
  5. data/.yardopts +4 -0
  6. data/CHANGELOG.md +12 -0
  7. data/Gemfile +1 -0
  8. data/Guardfile +39 -34
  9. data/README.md +42 -1
  10. data/Rakefile +2 -0
  11. data/contentful-management.gemspec +2 -1
  12. data/lib/contentful/management/api_key.rb +65 -0
  13. data/lib/contentful/management/array.rb +3 -2
  14. data/lib/contentful/management/asset.rb +124 -58
  15. data/lib/contentful/management/client.rb +60 -19
  16. data/lib/contentful/management/content_type.rb +104 -49
  17. data/lib/contentful/management/content_type_entry_methods_factory.rb +21 -0
  18. data/lib/contentful/management/dynamic_entry.rb +22 -18
  19. data/lib/contentful/management/entry.rb +138 -80
  20. data/lib/contentful/management/error.rb +23 -23
  21. data/lib/contentful/management/field.rb +16 -13
  22. data/lib/contentful/management/http_client.rb +29 -0
  23. data/lib/contentful/management/link.rb +3 -3
  24. data/lib/contentful/management/locale.rb +55 -26
  25. data/lib/contentful/management/location.rb +1 -1
  26. data/lib/contentful/management/request.rb +11 -12
  27. data/lib/contentful/management/resource.rb +27 -12
  28. data/lib/contentful/management/resource/array_like.rb +1 -1
  29. data/lib/contentful/management/resource/asset_fields.rb +1 -0
  30. data/lib/contentful/management/resource/entry_fields.rb +2 -0
  31. data/lib/contentful/management/resource/field_aware.rb +16 -5
  32. data/lib/contentful/management/resource/fields.rb +16 -8
  33. data/lib/contentful/management/resource/refresher.rb +1 -0
  34. data/lib/contentful/management/resource/system_properties.rb +13 -6
  35. data/lib/contentful/management/resource_builder.rb +43 -40
  36. data/lib/contentful/management/space.rb +67 -28
  37. data/lib/contentful/management/space_api_key_methods_factory.rb +15 -0
  38. data/lib/contentful/management/space_asset_methods_factory.rb +4 -0
  39. data/lib/contentful/management/space_association_all_published_method_factory.rb +11 -0
  40. data/lib/contentful/management/space_association_methods_factory.rb +4 -2
  41. data/lib/contentful/management/space_content_type_methods_factory.rb +4 -0
  42. data/lib/contentful/management/space_entry_methods_factory.rb +4 -0
  43. data/lib/contentful/management/space_locale_methods_factory.rb +2 -0
  44. data/lib/contentful/management/space_webhook_methods_factory.rb +2 -0
  45. data/lib/contentful/management/validation.rb +3 -2
  46. data/lib/contentful/management/version.rb +4 -1
  47. data/lib/contentful/management/webhook.rb +42 -21
  48. data/spec/fixtures/vcr_cassettes/api_key/all_for_space.yml +194 -0
  49. data/spec/fixtures/vcr_cassettes/api_key/create_for_space.yml +113 -0
  50. data/spec/fixtures/vcr_cassettes/api_key/find.yml +113 -0
  51. data/spec/fixtures/vcr_cassettes/api_key/find_for_space_not_found.yml +71 -0
  52. data/spec/fixtures/vcr_cassettes/asset/all_public.yml +112 -0
  53. data/spec/fixtures/vcr_cassettes/content_type/all_public.yml +106 -0
  54. data/spec/fixtures/vcr_cassettes/entry/all_public.yml +102 -0
  55. data/spec/fixtures/vcr_cassettes/locale/destroy.yml +330 -0
  56. data/spec/fixtures/vcr_cassettes/locale/update_both.yml +306 -0
  57. data/spec/fixtures/vcr_cassettes/locale/update_code.yml +306 -0
  58. data/spec/fixtures/vcr_cassettes/locale/update_name.yml +306 -0
  59. data/spec/fixtures/vcr_cassettes/space/api_key/all.yml +410 -0
  60. data/spec/fixtures/vcr_cassettes/space/api_key/create.yml +329 -0
  61. data/spec/fixtures/vcr_cassettes/space/api_key/find.yml +329 -0
  62. data/spec/fixtures/vcr_cassettes/space/asset/all_public.yml +328 -0
  63. data/spec/fixtures/vcr_cassettes/space/content_type/all_public.yml +322 -0
  64. data/spec/fixtures/vcr_cassettes/space/entry/all_public.yml +318 -0
  65. data/spec/lib/contentful/management/api_key_spec.rb +55 -0
  66. data/spec/lib/contentful/management/asset_spec.rb +10 -0
  67. data/spec/lib/contentful/management/content_type_spec.rb +10 -0
  68. data/spec/lib/contentful/management/entry_spec.rb +10 -0
  69. data/spec/lib/contentful/management/locale_spec.rb +58 -0
  70. data/spec/lib/contentful/management/space_spec.rb +53 -0
  71. metadata +58 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42f0a71eab4ad41c748aebb12abdcf07b5a28b49
4
- data.tar.gz: e8c7b508d8dfd513d14ea65e9ff41cb0d6764a2c
3
+ metadata.gz: 7374c6a0e9550339b72a54bc9e834b7f3bca3a8a
4
+ data.tar.gz: 058292ffa85f933dc083712cd918cdd91ecea921
5
5
  SHA512:
6
- metadata.gz: afe225415231cfe9df74f92b9b8489379b273d0ed88d5e263d6cb5bb28a842c237f81cb39f92b9ccfbcc43de5f566db1c74a3cb37c5c90240001278d5f2f7bcf
7
- data.tar.gz: 91405326650913dd79f0fd85485c67503bedbbb8c16fd13a108b8395d26073cf5bb14de90a1d374735de3894dab0b8807c2f9b4fef98b28b43ff2f99bdd1ece3
6
+ metadata.gz: eaa6b839013fb7af7536e753a561fb18a92dabe287f6c782c1d87033fb2c0a927fca286e5fa9728da88d71fcaa93084ff77e1565f4a6cf06af8f207aa1c0cf86
7
+ data.tar.gz: a0e156706275fbc0611f3dba7ddc2fa7d6688a06fb5a59ed7e8906defa426576c81a2e9d9dc359eeb9440275ba88d3d24035809a3d4151e600af7e937ba7add1
data/.rubocop.yml CHANGED
@@ -1,40 +1,23 @@
1
- Encoding:
2
- Enabled: false
1
+ inherit_from: .rubocop_todo.yml
3
2
 
4
- Documentation:
3
+ Encoding:
5
4
  Enabled: false
6
5
 
7
- ClassLength:
8
- Enabled: false
6
+ Metrics/ClassLength:
7
+ CountComments: false
9
8
 
10
9
  AllCops:
11
10
  Exclude:
12
11
  - contentful-management.gemspec
13
12
  - bin/cma-console
13
+ - spec/**/*
14
+ - examples/**/*
15
+ - Guardfile
16
+ - Gemfile
17
+ - Rakefile
14
18
 
15
- LineLength:
19
+ Metrics/LineLength:
16
20
  Max: 135
17
- Style/MethodLength:
18
- Max: 15
19
-
20
- Style/SpaceInsideBrackets:
21
- Enabled: false
22
-
23
- Style/CyclomaticComplexity:
24
- Max: 8
25
-
26
- Style/SpaceInsideHashLiteralBraces:
27
- EnforcedStyle: no_space
28
- EnforcedStyleForEmptyBraces: no_space
29
-
30
- Style/CaseIndentation:
31
- Enabled: false
32
-
33
- Lint/UselessAssignment:
34
- Enabled: false
35
-
36
- Style/IndentationWidth:
37
- Enabled: false
38
21
 
39
- Style/GuardClause:
40
- Enabled: false
22
+ Metrics/ClassLength:
23
+ Max: 230
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,24 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-02-01 08:50:00 -0300 using RuboCop version 0.34.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 16
10
+ Metrics/AbcSize:
11
+ Max: 49
12
+
13
+ # Offense count: 4
14
+ Metrics/CyclomaticComplexity:
15
+ Max: 10
16
+
17
+ # Offense count: 21
18
+ # Configuration parameters: CountComments.
19
+ Metrics/MethodLength:
20
+ Max: 45
21
+
22
+ # Offense count: 2
23
+ Metrics/PerceivedComplexity:
24
+ Max: 8
data/.travis.yml CHANGED
@@ -8,7 +8,7 @@ rvm:
8
8
  - jruby-19mode
9
9
 
10
10
  before_install: gem install bundler -v 1.10.6
11
- script: bundle exec rake spec
11
+ script: bundle exec rake rspec_rubocop
12
12
  notifications:
13
13
  slack:
14
14
  secure: P+BWOt+sKPUlIwxUMaD7o4bVG19nIsedyv9D1MCBJELKxTYkXOyJECSNw1f5SDf9z0n4lKhfp8SY0dVigvxdUBd9/wsGqRZMMI2sykDJ8E85cYsUb8corEnIgQtwwzkAzWzhCbmWrZe39ai1Sr5ET/7bdEJ7SXIKbFS350SOn9s=
data/.yardopts ADDED
@@ -0,0 +1,4 @@
1
+ --no-private
2
+ -
3
+ CHANGELOG.md
4
+ LICENSE.txt
data/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## Master
4
4
 
5
+ ## Master
6
+ ### 0.9.0
7
+ * Locales can now update `:code` value
8
+
9
+ ### Added
10
+ * Added `#destroy` method to Locales
11
+ * Added `ApiKey` class, methods and `Space` associations
12
+ * Added `.all_published` methods for `ContentType`, `Asset` and `Entry`
13
+
14
+ ### Changed
15
+ * Changed documentation format to YARD
16
+
5
17
  ## 0.8.0
6
18
  ### Added
7
19
  * Added `:dynamic_entries` parameter on Client initialization
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ gemspec
6
6
  group :development do
7
7
  gem 'guard'
8
8
  gem 'guard-rspec'
9
+ gem 'guard-rubocop'
9
10
  gem 'pry'
10
11
  end
11
12
 
data/Guardfile CHANGED
@@ -24,47 +24,52 @@
24
24
  # * zeus: 'zeus rspec' (requires the server to be started separately)
25
25
  # * 'just' rspec: 'rspec'
26
26
 
27
- guard :rspec, cmd: "bundle exec rspec --format documentation" do
28
- require "guard/rspec/dsl"
29
- dsl = Guard::RSpec::Dsl.new(self)
27
+ group :green_red_refactor, halt_on_fail: true do
28
+ guard :rspec, cmd: "bundle exec rspec --format documentation" do
29
+ require "guard/rspec/dsl"
30
+ dsl = Guard::RSpec::Dsl.new(self)
30
31
 
31
- # Feel free to open issues for suggestions and improvements
32
+ # Feel free to open issues for suggestions and improvements
32
33
 
33
- # RSpec files
34
- rspec = dsl.rspec
35
- watch(rspec.spec_helper) { rspec.spec_dir }
36
- watch(rspec.spec_support) { rspec.spec_dir }
37
- watch(rspec.spec_files)
34
+ # RSpec files
35
+ rspec = dsl.rspec
36
+ watch(rspec.spec_helper) { rspec.spec_dir }
37
+ watch(rspec.spec_support) { rspec.spec_dir }
38
+ watch(rspec.spec_files)
38
39
 
39
- # Ruby files
40
- ruby = dsl.ruby
41
- dsl.watch_spec_files_for(ruby.lib_files)
40
+ # Ruby files
41
+ ruby = dsl.ruby
42
+ dsl.watch_spec_files_for(ruby.lib_files)
42
43
 
43
- # Rails files
44
- rails = dsl.rails(view_extensions: %w(erb haml slim))
45
- dsl.watch_spec_files_for(rails.app_files)
46
- dsl.watch_spec_files_for(rails.views)
44
+ # Rails files
45
+ rails = dsl.rails(view_extensions: %w(erb haml slim))
46
+ dsl.watch_spec_files_for(rails.app_files)
47
+ dsl.watch_spec_files_for(rails.views)
47
48
 
48
- watch(rails.controllers) do |m|
49
- [
50
- rspec.spec.("routing/#{m[1]}_routing"),
51
- rspec.spec.("controllers/#{m[1]}_controller"),
52
- rspec.spec.("acceptance/#{m[1]}")
53
- ]
54
- end
49
+ watch(rails.controllers) do |m|
50
+ [
51
+ rspec.spec.("routing/#{m[1]}_routing"),
52
+ rspec.spec.("controllers/#{m[1]}_controller"),
53
+ rspec.spec.("acceptance/#{m[1]}")
54
+ ]
55
+ end
56
+
57
+ # Rails config changes
58
+ watch(rails.spec_helper) { rspec.spec_dir }
59
+ watch(rails.routes) { "#{rspec.spec_dir}/routing" }
60
+ watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
55
61
 
56
- # Rails config changes
57
- watch(rails.spec_helper) { rspec.spec_dir }
58
- watch(rails.routes) { "#{rspec.spec_dir}/routing" }
59
- watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
62
+ # Capybara features specs
63
+ watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") }
64
+ watch(rails.layouts) { |m| rspec.spec.("features/#{m[1]}") }
60
65
 
61
- # Capybara features specs
62
- watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") }
63
- watch(rails.layouts) { |m| rspec.spec.("features/#{m[1]}") }
66
+ # Turnip features and steps
67
+ watch(%r{^spec/acceptance/(.+)\.feature$})
68
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
69
+ Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
70
+ end
71
+ end
64
72
 
65
- # Turnip features and steps
66
- watch(%r{^spec/acceptance/(.+)\.feature$})
67
- watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
68
- Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
73
+ guard :rubocop, cmd: "rubocop" do
69
74
  end
70
75
  end
data/README.md CHANGED
@@ -93,6 +93,12 @@ Retrieving all content types from a space:
93
93
  blog_post_content_types = blog_space.content_types.all
94
94
  ```
95
95
 
96
+ Retrieving all published content types from a space:
97
+
98
+ ```ruby
99
+ blog_post_content_types = blog_space.content_types.all_published
100
+ ```
101
+
96
102
  Retrieving one content type by id from a space:
97
103
 
98
104
  ```ruby
@@ -199,15 +205,25 @@ Updating a locale
199
205
  blog_post_locale.update(name: 'German', code: 'de-DE')
200
206
  ```
201
207
 
208
+ Destroying a locale
209
+ ```ruby
210
+ blog_post_locale.destroy
211
+ ```
212
+
202
213
  ### Assets
203
214
 
204
215
  Retrieving all assets from the space:
205
216
 
206
-
207
217
  ```ruby
208
218
  blog_post_assets = blog_space.assets.all
209
219
  ```
210
220
 
221
+ Retrieving all published assets from the space:
222
+
223
+ ```ruby
224
+ blog_post_assets = blog_space.assets.all_published
225
+ ```
226
+
211
227
  Retrieving an asset by id:
212
228
 
213
229
  ```ruby
@@ -314,6 +330,12 @@ Retrieving all entries from the space:
314
330
  entries = blog_space.entries.all
315
331
  ```
316
332
 
333
+ Retrieving all published entries from the space:
334
+
335
+ ```ruby
336
+ entries = blog_space.entries.all_published
337
+ ```
338
+
317
339
  Retrieving all entries from the space with given content type:
318
340
 
319
341
  ```ruby
@@ -444,6 +466,25 @@ Destroying webhook:
444
466
  blog_post_webhook.destroy
445
467
  ```
446
468
 
469
+ ### Api Keys
470
+
471
+ Retrieving all api keys from the space:
472
+
473
+ ```ruby
474
+ blog_post_api_keys = blog_space.api_keys.all
475
+ ```
476
+
477
+ Retrieving one api key by the api-key-id from the space:
478
+
479
+ ```ruby
480
+ blog_post_api_key = blog_space.api_keys.find(api_key_id)
481
+ ```
482
+
483
+ Creating an api key
484
+ ```ruby
485
+ blog_space.api_keys.create(name: 'foobar key', description: 'key for foobar mobile app')
486
+ ```
487
+
447
488
  ## Validations
448
489
 
449
490
  #### in
data/Rakefile CHANGED
@@ -32,5 +32,7 @@ end
32
32
  desc 'Run specs, rubocop and reek'
33
33
  task ci: %w(spec reek rubocop)
34
34
 
35
+ task rspec_rubocop: %w(spec rubocop)
36
+
35
37
  task test: :spec
36
38
  task default: :spec
@@ -26,7 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rspec', '~> 3'
27
27
  spec.add_development_dependency 'rspec-its'
28
28
  spec.add_development_dependency 'rubocop'
29
- spec.add_development_dependency 'reek', '~> 2', '>= 2.0.4'
29
+ spec.add_development_dependency 'reek', '~> 2.2.1'
30
+ spec.add_development_dependency 'unparser', '0.2.4'
30
31
  spec.add_development_dependency 'vcr'
31
32
  spec.add_development_dependency 'webmock', '~> 1', '>= 1.17.3'
32
33
  end
@@ -0,0 +1,65 @@
1
+ require_relative 'resource'
2
+
3
+ module Contentful
4
+ module Management
5
+ # Resource class for ApiKey.
6
+ # @see _ https://www.contentful.com/developers/docs/references/content-management-api/#/reference/api-keys
7
+ class ApiKey
8
+ include Contentful::Management::Resource
9
+ include Contentful::Management::Resource::SystemProperties
10
+ include Contentful::Management::Resource::Refresher
11
+
12
+ property :name
13
+ property :description
14
+ property :accessToken
15
+ property :policies
16
+
17
+ # Gets a collection of api keys.
18
+ #
19
+ # @param [String] space_id
20
+ # @param [Hash] _parameters the parameters for search query
21
+ # @option _parameters [String] :name The ApiKey name
22
+ # @option _parameters [String] :description The ApiKey description
23
+ #
24
+ # @return [Contentful::Management::Array<Contentful::Management::ApiKey>]
25
+ def self.all(space_id = nil, _parameters = {})
26
+ request = Request.new("/#{space_id}/api_keys")
27
+ response = request.get
28
+ result = ResourceBuilder.new(response, { 'ApiKey' => ApiKey }, {})
29
+ result.run
30
+ end
31
+
32
+ # Gets a specific api key.
33
+ #
34
+ # @param [String] space_id
35
+ # @param [String] api_key_id
36
+ #
37
+ # @return [Contentful::Management::ApiKey]
38
+ def self.find(space_id, api_key_id)
39
+ request = Request.new("/#{space_id}/api_keys/#{api_key_id}")
40
+ response = request.get
41
+ result = ResourceBuilder.new(response, { 'ApiKey' => ApiKey }, {})
42
+ result.run
43
+ end
44
+
45
+ # Creates an api key.
46
+ #
47
+ # @param [String] space_id
48
+ # @param [Hash] attributes
49
+ # @option attributes [String] :name The ApiKey name
50
+ # @option attributes [String] :description The ApiKey description
51
+ #
52
+ # @return [Contentful::Management::ApiKey]
53
+ def self.create(space_id, attributes)
54
+ request = Request.new(
55
+ "/#{space_id}/api_keys",
56
+ 'name' => attributes.fetch(:name),
57
+ 'description' => attributes.fetch(:description, nil)
58
+ )
59
+ response = request.post
60
+ result = ResourceBuilder.new(response, { 'ApiKey' => ApiKey }, {})
61
+ result.run
62
+ end
63
+ end
64
+ end
65
+ end
@@ -4,9 +4,10 @@ require_relative 'resource/array_like'
4
4
  module Contentful
5
5
  module Management
6
6
  # Resource Class for Arrays (e.g. search results)
7
- # https://www.contentful.com/developers/documentation/content-delivery-api/#arrays
8
- # It also provides an #each method and includes Ruby's Enumerable module (gives you methods like #min, #first, etc)
7
+ # @see _ https://www.contentful.com/developers/documentation/content-delivery-api/#arrays
8
+ # @note It also provides an #each method and includes Ruby's Enumerable module (gives you methods like #min, #first, etc)
9
9
  class Array
10
+ # @private
10
11
  DEFAULT_LIMIT = 100
11
12
 
12
13
  include Contentful::Management::Resource
@@ -5,7 +5,7 @@ require_relative 'resource/fields'
5
5
  module Contentful
6
6
  module Management
7
7
  # Resource class for Asset.
8
- # https://www.contentful.com/developers/documentation/content-management-api/#resources-assets
8
+ # @see _ https://www.contentful.com/developers/documentation/content-management-api/#resources-assets
9
9
  class Asset
10
10
  include Contentful::Management::Resource
11
11
  extend Contentful::Management::Resource::AssetFields
@@ -14,12 +14,41 @@ module Contentful
14
14
  include Contentful::Management::Resource::Refresher
15
15
 
16
16
  # Gets a collection of assets.
17
- # Takes an id of space and an optional hash of query options
18
- # Returns a Contentful::Management::Array of Contentful::Management::Asset.
17
+ #
18
+ # @param [String] space_id
19
+ # @param [Hash] query Search Options
20
+ # @see _ For complete option list: http://docs.contentfulcda.apiary.io/#reference/search-parameters
21
+ # @option query [String] 'sys.id' Asset ID
22
+ # @option query [String] :mimetype_group Kind of Asset
23
+ # @option query [Integer] :limit
24
+ # @option query [Integer] :skip
25
+ #
26
+ # @return [Contentful::Management::Array<Contentful::Management::Asset>]
19
27
  def self.all(space_id, query = {})
20
28
  request = Request.new(
21
- "/#{ space_id }/assets",
22
- query
29
+ "/#{space_id}/assets",
30
+ query
31
+ )
32
+ response = request.get
33
+ result = ResourceBuilder.new(response, {}, {})
34
+ result.run
35
+ end
36
+
37
+ # Gets a collection of published assets.
38
+ #
39
+ # @param [String] space_id
40
+ # @param [Hash] query Search Options
41
+ # @see _ For complete option list: http://docs.contentfulcda.apiary.io/#reference/search-parameters
42
+ # @option query [String] 'sys.id' Asset ID
43
+ # @option query [String] :mimetype_group Kind of Asset
44
+ # @option query [Integer] :limit
45
+ # @option query [Integer] :skip
46
+ #
47
+ # @return [Contentful::Management::Array<Contentful::Management::Asset>]
48
+ def self.all_published(space_id, query = {})
49
+ request = Request.new(
50
+ "/#{space_id}/public/assets",
51
+ query
23
52
  )
24
53
  response = request.get
25
54
  result = ResourceBuilder.new(response, {}, {})
@@ -27,18 +56,31 @@ module Contentful
27
56
  end
28
57
 
29
58
  # Gets a specific asset.
30
- # Takes an id of space and asset.
31
- # Returns a Contentful::Management::Asset.
59
+ #
60
+ # @param [String] space_id
61
+ # @param [String] asset_id
62
+ #
63
+ # @return [Contentful::Management::Asset]
32
64
  def self.find(space_id, asset_id)
33
- request = Request.new("/#{ space_id }/assets/#{ asset_id }")
65
+ request = Request.new("/#{space_id}/assets/#{asset_id}")
34
66
  response = request.get
35
67
  result = ResourceBuilder.new(response, {}, {})
36
68
  result.run
37
69
  end
38
70
 
39
71
  # Creates an asset.
40
- # Takes a space id and hash with attributes (title, description, file)
41
- # Returns a Contentful::Management::Asset.
72
+ #
73
+ # @param [String] space_id
74
+ # @param [Hash] attributes
75
+ # @option attributes [String] :title
76
+ # @option attributes [String] :description
77
+ # @option attributes [Contentful::Management::File] :file
78
+ # @option attributes [String] :locale
79
+ # @option attributes [Hash] :fields
80
+ #
81
+ # @see _ README for more information on how to create an Asset
82
+ #
83
+ # @return [Contentful::Management::Asset]
42
84
  def self.create(space_id, attributes)
43
85
  locale = attributes[:locale]
44
86
  asset = new
@@ -49,8 +91,8 @@ module Contentful
49
91
  asset.file = attributes[:file] if attributes[:file]
50
92
 
51
93
  request = Request.new(
52
- "/#{ space_id }/assets/#{ attributes[:id]}",
53
- fields: asset.fields_for_query
94
+ "/#{space_id}/assets/#{attributes[:id]}",
95
+ fields: asset.fields_for_query
54
96
  )
55
97
  response = attributes[:id].nil? ? request.post : request.put
56
98
  result = ResourceBuilder.new(response, {}, {}).run
@@ -59,13 +101,15 @@ module Contentful
59
101
  end
60
102
 
61
103
  # Processing an Asset file
104
+ #
105
+ # @return [Contentful::Management::Asset]
62
106
  def process_file
63
107
  instance_variable_get(:@fields).keys.each do |locale|
64
108
  request = Request.new(
65
- "/#{ space.id }/assets/#{ id }/files/#{ locale }/process",
66
- {},
67
- id = nil,
68
- version: sys[:version]
109
+ "/#{space.id}/assets/#{id}/files/#{locale}/process",
110
+ {},
111
+ nil,
112
+ version: sys[:version]
69
113
  )
70
114
  request.put
71
115
  end
@@ -74,17 +118,25 @@ module Contentful
74
118
  end
75
119
 
76
120
  # Updates an asset.
77
- # Takes hash with attributes (title, description, file)
78
- # Returns a Contentful::Management::Asset.
121
+ #
122
+ # @param [Hash] attributes
123
+ # @option attributes [String] :title
124
+ # @option attributes [String] :description
125
+ # @option attributes [Contentful::Management::File] :file
126
+ # @option attributes [String] :locale
127
+ #
128
+ # @see _ README for more information on how to create an Asset
129
+ #
130
+ # @return [Contentful::Management::Asset]
79
131
  def update(attributes)
80
132
  self.title = attributes[:title] if attributes[:title]
81
133
  self.description = attributes[:description] if attributes[:description]
82
134
  self.file = attributes[:file] if attributes[:file]
83
135
  request = Request.new(
84
- "/#{ space.id }/assets/#{ id }",
85
- {fields: fields_for_query},
86
- id = nil,
87
- version: sys[:version]
136
+ "/#{space.id}/assets/#{id}",
137
+ { fields: fields_for_query },
138
+ nil,
139
+ version: sys[:version]
88
140
  )
89
141
  response = request.put
90
142
  result = ResourceBuilder.new(response, {}, {}).run
@@ -92,7 +144,9 @@ module Contentful
92
144
  end
93
145
 
94
146
  # If an asset is a new object gets created in the Contentful, otherwise the existing asset gets updated.
95
- # See README for details.
147
+ # @see _ https://github.com/contentful/contentful-management.rb for details.
148
+ #
149
+ # @return [Contentful::Management::Asset]
96
150
  def save
97
151
  if id
98
152
  update(title: title, description: description, file: file)
@@ -103,9 +157,10 @@ module Contentful
103
157
  end
104
158
 
105
159
  # Destroys an asset.
106
- # Returns true if succeed.
160
+ #
161
+ # @return [true, Contentful::Management::Error] success
107
162
  def destroy
108
- request = Request.new("/#{ space.id }/assets/#{ id }")
163
+ request = Request.new("/#{space.id}/assets/#{id}")
109
164
  response = request.delete
110
165
  if response.status == :no_content
111
166
  return true
@@ -116,13 +171,14 @@ module Contentful
116
171
  end
117
172
 
118
173
  # Publishes an asset.
119
- # Returns a Contentful::Management::Asset.
174
+ #
175
+ # @return [Contentful::Management::Asset]
120
176
  def publish
121
177
  request = Request.new(
122
- "/#{ space.id }/assets/#{ id }/published",
123
- {},
124
- id = nil,
125
- version: sys[:version]
178
+ "/#{space.id}/assets/#{id}/published",
179
+ {},
180
+ nil,
181
+ version: sys[:version]
126
182
  )
127
183
  response = request.put
128
184
  result = ResourceBuilder.new(response, {}, {}).run
@@ -130,13 +186,14 @@ module Contentful
130
186
  end
131
187
 
132
188
  # Unpublishes an asset.
133
- # Returns a Contentful::Management::Asset.
189
+ #
190
+ # @return [Contentful::Management::Asset]
134
191
  def unpublish
135
192
  request = Request.new(
136
- "/#{ space.id }/assets/#{ id }/published",
137
- {},
138
- id = nil,
139
- version: sys[:version]
193
+ "/#{space.id}/assets/#{id}/published",
194
+ {},
195
+ nil,
196
+ version: sys[:version]
140
197
  )
141
198
  response = request.delete
142
199
  result = ResourceBuilder.new(response, {}, {}).run
@@ -144,13 +201,14 @@ module Contentful
144
201
  end
145
202
 
146
203
  # Archive an asset.
147
- # Returns a Contentful::Management::Asset.
204
+ #
205
+ # @return [Contentful::Management::Asset]
148
206
  def archive
149
207
  request = Request.new(
150
- "/#{ space.id }/assets/#{ id }/archived",
151
- {},
152
- id = nil,
153
- version: sys[:version]
208
+ "/#{space.id}/assets/#{id}/archived",
209
+ {},
210
+ nil,
211
+ version: sys[:version]
154
212
  )
155
213
  response = request.put
156
214
  result = ResourceBuilder.new(response, {}, {}).run
@@ -158,13 +216,14 @@ module Contentful
158
216
  end
159
217
 
160
218
  # Unarchvie an asset.
161
- # Returns a Contentful::Management::Asset.
219
+ #
220
+ # @return [Contentful::Management::Asset]
162
221
  def unarchive
163
222
  request = Request.new(
164
- "/#{ space.id }/assets/#{ id }/archived",
165
- {},
166
- id = nil,
167
- version: sys[:version]
223
+ "/#{space.id}/assets/#{id}/archived",
224
+ {},
225
+ nil,
226
+ version: sys[:version]
168
227
  )
169
228
  response = request.delete
170
229
  result = ResourceBuilder.new(response, {}, {}).run
@@ -172,18 +231,21 @@ module Contentful
172
231
  end
173
232
 
174
233
  # Checks if an asset is published.
175
- # Returns true if published.
234
+ #
235
+ # @return [Boolean]
176
236
  def published?
177
237
  sys[:publishedAt] ? true : false
178
238
  end
179
239
 
180
240
  # Checks if an asset is archvied.
181
- # Returns true if archived.
241
+ #
242
+ # @return [Boolean]
182
243
  def archived?
183
244
  sys[:archivedAt] ? true : false
184
245
  end
185
246
 
186
247
  # Returns currently supported local or default locale.
248
+ # @return [String] current_locale
187
249
  def locale
188
250
  sys && sys[:locale] ? sys[:locale] : default_locale
189
251
  end
@@ -197,6 +259,7 @@ module Contentful
197
259
  end
198
260
  end
199
261
 
262
+ # @private
200
263
  def get_value_from(fields, field_name)
201
264
  if field_name == :file
202
265
  fields[field_name].properties if fields[field_name]
@@ -205,19 +268,22 @@ module Contentful
205
268
  end
206
269
  end
207
270
 
208
- # Returns the image url of an asset
209
- # Allows you to pass in the following options for image resizing:
210
- # :width
211
- # :height
212
- # :format
213
- # :quality
214
- # See https://www.contentful.com/developers/documentation/content-delivery-api/#image-asset-resizing
271
+ # Generates a URL for the Contentful Image API
272
+ #
273
+ # @param [Hash] options
274
+ # @option options [Integer] :width
275
+ # @option options [Integer] :height
276
+ # @option options [String] :format
277
+ # @option options [String] :quality
278
+ # @see _ https://www.contentful.com/developers/documentation/content-delivery-api/#image-asset-resizing
279
+ #
280
+ # @return [String] Image API URL
215
281
  def image_url(options = {})
216
282
  query = {
217
- w: options[:w] || options[:width],
218
- h: options[:h] || options[:height],
219
- fm: options[:fm] || options[:format],
220
- q: options[:q] || options[:quality]
283
+ w: options[:w] || options[:width],
284
+ h: options[:h] || options[:height],
285
+ fm: options[:fm] || options[:format],
286
+ q: options[:q] || options[:quality]
221
287
  }.select { |_k, value| value }
222
288
 
223
289
  query.empty? ? file.url : "#{file.url}?#{URI.encode_www_form(query)}"