locomotivecms_coal 1.0.0.pre.alpha.1 → 1.0.0.pre.alpha.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/.gitignore +1 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +23 -12
- data/README.md +167 -10
- data/lib/locomotive/coal/client.rb +70 -20
- data/lib/locomotive/coal/client_v2.rb +31 -0
- data/lib/locomotive/coal/error.rb +46 -5
- data/lib/locomotive/coal/resources/base.rb +57 -0
- data/lib/locomotive/coal/resources/concerns/request.rb +101 -0
- data/lib/locomotive/coal/resources/content_assets.rb +9 -0
- data/lib/locomotive/coal/resources/content_entries.rb +17 -11
- data/lib/locomotive/coal/resources/{contents.rb → content_types.rb} +4 -5
- data/lib/locomotive/coal/resources/engine_version.rb +15 -0
- data/lib/locomotive/coal/resources/my_account.rb +14 -2
- data/lib/locomotive/coal/resources/pages.rb +25 -0
- data/lib/locomotive/coal/resources/sites.rb +5 -17
- data/lib/locomotive/coal/resources/snippets.rb +9 -0
- data/lib/locomotive/coal/resources/theme_assets.rb +13 -0
- data/lib/locomotive/coal/resources/token.rb +2 -2
- data/lib/locomotive/coal/resources/translations.rb +9 -0
- data/lib/locomotive/coal/upload_io.rb +11 -0
- data/lib/locomotive/coal/version.rb +1 -1
- data/lib/locomotive/coal.rb +11 -3
- data/locomotivecms_coal.gemspec +4 -4
- data/spec/fixtures/assets/locomotive.png +0 -0
- data/spec/fixtures/assets/rails.png +0 -0
- data/spec/fixtures/coal_cassettes/client.yml +333 -69
- data/spec/fixtures/coal_cassettes/content_assets.yml +595 -0
- data/spec/fixtures/coal_cassettes/content_entries.yml +1134 -223
- data/spec/fixtures/coal_cassettes/content_types.yml +616 -0
- data/spec/fixtures/coal_cassettes/my_account.yml +167 -47
- data/spec/fixtures/coal_cassettes/pages.yml +281 -0
- data/spec/fixtures/coal_cassettes/sites.yml +93 -117
- data/spec/fixtures/coal_cassettes/snippets.yml +227 -0
- data/spec/fixtures/coal_cassettes/theme_assets.yml +406 -0
- data/spec/fixtures/coal_cassettes/token.yml +37 -55
- data/spec/fixtures/coal_cassettes/translations.yml +227 -0
- data/spec/fixtures/coal_cassettes/version.yml +89 -0
- data/spec/integration/client_spec.rb +37 -3
- data/spec/integration/resources/content_assets_spec.rb +42 -0
- data/spec/integration/resources/content_entries_spec.rb +45 -18
- data/spec/integration/resources/content_types_spec.rb +44 -0
- data/spec/integration/resources/engine_version_spec.rb +17 -0
- data/spec/integration/resources/my_account_spec.rb +22 -5
- data/spec/integration/resources/pages_spec.rb +43 -0
- data/spec/integration/resources/sites_spec.rb +9 -9
- data/spec/integration/resources/snippets_spec.rb +38 -0
- data/spec/integration/resources/theme_assets_spec.rb +43 -0
- data/spec/integration/resources/token_spec.rb +7 -7
- data/spec/integration/resources/translations_spec.rb +38 -0
- data/spec/spec_helper.rb +2 -13
- data/spec/support/api_settings.rb +7 -3
- data/spec/support/assets.rb +4 -0
- data/spec/support/vcr.rb +10 -0
- data/spec/unit/error_spec.rb +28 -0
- metadata +71 -13
- data/lib/locomotive/coal/request.rb +0 -63
- data/spec/fixtures/coal_cassettes/contents.yml +0 -120
- data/spec/integration/resources/contents_spec.rb +0 -22
@@ -0,0 +1,101 @@
|
|
1
|
+
module Locomotive::Coal::Resources
|
2
|
+
module Concerns
|
3
|
+
|
4
|
+
module Request
|
5
|
+
|
6
|
+
def get(endpoint, parameters = {}, raw = false)
|
7
|
+
do_request :get, endpoint, parameters, raw
|
8
|
+
end
|
9
|
+
|
10
|
+
def post(endpoint, parameters = {}, raw = false)
|
11
|
+
do_request :post, endpoint, parameters, raw
|
12
|
+
end
|
13
|
+
|
14
|
+
def put(endpoint, parameters = {}, raw = false)
|
15
|
+
do_request :put, endpoint, parameters, raw
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete(endpoint, parameters = {}, raw = false)
|
19
|
+
do_request :delete, endpoint, parameters, raw
|
20
|
+
end
|
21
|
+
|
22
|
+
def do_request(action, endpoint, parameters = {}, raw = false)
|
23
|
+
response = begin
|
24
|
+
_do_request(action, "#{uri.path}/#{endpoint}.json", parameters)
|
25
|
+
rescue ::Timeout::Error, ::Errno::ETIMEDOUT, Faraday::Error::TimeoutError => e
|
26
|
+
raise Locomotive::Coal::TimeoutError.new(e)
|
27
|
+
rescue Locomotive::Coal::Error
|
28
|
+
raise
|
29
|
+
rescue Exception => e
|
30
|
+
raise Locomotive::Coal::BadRequestError.new(e)
|
31
|
+
end
|
32
|
+
|
33
|
+
if response.success?
|
34
|
+
raw ? response : response.body
|
35
|
+
else
|
36
|
+
raise Locomotive::Coal::Error.from_response(response)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def without_authentication(&block)
|
41
|
+
@without_token = true
|
42
|
+
yield.tap do
|
43
|
+
@without_token = false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def _do_request(action, endpoint, parameters)
|
50
|
+
# compatibility with v2.5.x
|
51
|
+
parameters = parameters.merge(auth_token: credentials[:token]) if _token
|
52
|
+
|
53
|
+
_connection.send(action, endpoint) do |request|
|
54
|
+
request.headers = _request_headers(parameters)
|
55
|
+
|
56
|
+
if %i(create update).include?(action)
|
57
|
+
request.params = parameters
|
58
|
+
else
|
59
|
+
request.body = parameters
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def _request_headers(parameters)
|
65
|
+
{ 'Accept' => 'application/json' }.tap do |headers|
|
66
|
+
if _token
|
67
|
+
headers['X-Locomotive-Account-Email'] = credentials[:email]
|
68
|
+
headers['X-Locomotive-Account-Token'] = credentials[:token]
|
69
|
+
headers['X-Locomotive-Site-Handle'] = credentials[:handle] if credentials[:handle].present?
|
70
|
+
end
|
71
|
+
|
72
|
+
headers['X-Locomotive-Locale'] = parameters.delete(:_locale).to_s if parameters.try(:has_key?, :_locale)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def _connection
|
77
|
+
@_connection ||= Faraday.new(url: "#{uri.scheme}://#{uri.host}:#{uri.port}") do |faraday|
|
78
|
+
faraday.request :multipart
|
79
|
+
faraday.request :url_encoded # form-encode POST params
|
80
|
+
faraday.basic_auth uri.userinfo.values if uri.userinfo
|
81
|
+
|
82
|
+
faraday.use FaradayMiddleware::ParseJson, content_type: /\bjson$/
|
83
|
+
|
84
|
+
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def _token
|
89
|
+
return if !!@without_token
|
90
|
+
|
91
|
+
if credentials[:token].respond_to?(:call)
|
92
|
+
credentials[:token] = credentials[:token].call
|
93
|
+
end
|
94
|
+
|
95
|
+
credentials[:token]
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
@@ -2,13 +2,20 @@ module Locomotive::Coal
|
|
2
2
|
|
3
3
|
module Resources
|
4
4
|
|
5
|
-
class ContentEntries <
|
5
|
+
class ContentEntries < Base
|
6
6
|
|
7
|
-
|
7
|
+
attr_accessor :content_type
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
9
|
+
def initialize(uri, credentials, content_type)
|
10
|
+
@content_type = content_type
|
11
|
+
super(uri, credentials)
|
12
|
+
end
|
13
|
+
|
14
|
+
def index(query = nil, options = nil, locale = nil)
|
15
|
+
parameters = { where: (query || {}).to_json }.merge(options || {})
|
16
|
+
parameters[:_locale] = locale if locale
|
17
|
+
|
18
|
+
response = get(resources_name, parameters, true)
|
12
19
|
|
13
20
|
list = response.body.map { |attributes| Resource.new(attributes) }
|
14
21
|
|
@@ -18,15 +25,14 @@ module Locomotive::Coal
|
|
18
25
|
response.headers[:x_total_entries].to_i)
|
19
26
|
end
|
20
27
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
28
|
+
alias :all :index
|
29
|
+
|
30
|
+
alias :update :update_with_locale
|
25
31
|
|
26
32
|
private
|
27
33
|
|
28
|
-
def
|
29
|
-
"content_types/#{content_type.slug}
|
34
|
+
def resources_name
|
35
|
+
"content_types/#{content_type.slug}/entries"
|
30
36
|
end
|
31
37
|
|
32
38
|
end
|
@@ -1,19 +1,18 @@
|
|
1
1
|
module Locomotive::Coal
|
2
2
|
module Resources
|
3
3
|
|
4
|
-
class
|
5
|
-
|
6
|
-
include Locomotive::Coal::Request
|
4
|
+
class ContentTypes < Base
|
7
5
|
|
8
6
|
def by_slug(slug)
|
9
7
|
get('content_types').each do |attributes|
|
10
|
-
return Resource.new(attributes) if attributes['slug'] == slug.to_s
|
8
|
+
return Resource.new(attributes) if attributes['slug'].to_s == slug.to_s
|
11
9
|
end
|
10
|
+
nil
|
12
11
|
end
|
13
12
|
|
14
13
|
def method_missing(meth, *args)
|
15
14
|
if content_type = by_slug(meth)
|
16
|
-
Locomotive::Coal::Resources::ContentEntries.new(uri,
|
15
|
+
Locomotive::Coal::Resources::ContentEntries.new(uri, credentials, content_type)
|
17
16
|
else
|
18
17
|
super
|
19
18
|
end
|
@@ -1,14 +1,26 @@
|
|
1
1
|
module Locomotive::Coal
|
2
2
|
module Resources
|
3
3
|
|
4
|
-
class MyAccount < Struct.new(:uri, :
|
4
|
+
class MyAccount < Struct.new(:uri, :credentials)
|
5
5
|
|
6
|
-
include
|
6
|
+
include Concerns::Request
|
7
7
|
|
8
8
|
def get
|
9
9
|
Resource.new(super('my_account'))
|
10
10
|
end
|
11
11
|
|
12
|
+
def create(attributes = {})
|
13
|
+
without_authentication do
|
14
|
+
data = post('my_account', account: attributes)
|
15
|
+
Resource.new(data)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def update(attributes = {})
|
20
|
+
data = put('my_account', account: attributes)
|
21
|
+
Resource.new(data)
|
22
|
+
end
|
23
|
+
|
12
24
|
end
|
13
25
|
|
14
26
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Locomotive::Coal
|
2
|
+
module Resources
|
3
|
+
|
4
|
+
class Pages < Base
|
5
|
+
|
6
|
+
def index(locale)
|
7
|
+
get(resources_name, _locale: locale).map do |attributes|
|
8
|
+
Resource.new(attributes)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
alias :all :index
|
13
|
+
|
14
|
+
def fullpaths(locale)
|
15
|
+
get("#{resources_name}/fullpaths", _locale: locale).map do |attributes|
|
16
|
+
Resource.new(attributes)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
alias :update :update_with_locale
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -1,28 +1,16 @@
|
|
1
1
|
module Locomotive::Coal
|
2
2
|
module Resources
|
3
3
|
|
4
|
-
class Sites <
|
5
|
-
|
6
|
-
include Locomotive::Coal::Request
|
7
|
-
|
8
|
-
def all
|
9
|
-
get('sites').map do |attributes|
|
10
|
-
Resource.new(attributes)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def create(attributes = {})
|
15
|
-
data = post('sites', { site: attributes })
|
16
|
-
Resource.new(data)
|
17
|
-
end
|
4
|
+
class Sites < Base
|
18
5
|
|
6
|
+
# Only v2.x
|
19
7
|
def by_subdomain(subdomain)
|
20
8
|
all.find { |site| site.subdomain == subdomain.to_s }
|
21
9
|
end
|
22
10
|
|
23
|
-
|
24
|
-
|
25
|
-
|
11
|
+
# Only >= v3
|
12
|
+
def by_handle(handle)
|
13
|
+
all.find { |site| site.handle == handle.to_s }
|
26
14
|
end
|
27
15
|
|
28
16
|
end
|
data/lib/locomotive/coal.rb
CHANGED
@@ -2,7 +2,8 @@ require 'active_support'
|
|
2
2
|
require 'active_support/concern'
|
3
3
|
require 'active_support/deprecation'
|
4
4
|
require 'active_support/core_ext'
|
5
|
-
require '
|
5
|
+
require 'faraday'
|
6
|
+
require 'faraday_middleware'
|
6
7
|
|
7
8
|
module Locomotive
|
8
9
|
module Coal
|
@@ -10,12 +11,19 @@ module Locomotive
|
|
10
11
|
end
|
11
12
|
|
12
13
|
require_relative 'coal/error'
|
13
|
-
require_relative 'coal/
|
14
|
+
require_relative 'coal/upload_io'
|
14
15
|
require_relative 'coal/paginated_resources'
|
15
16
|
require_relative 'coal/resource'
|
17
|
+
require_relative 'coal/resources/base'
|
16
18
|
require_relative 'coal/resources/token'
|
17
19
|
require_relative 'coal/resources/my_account'
|
18
20
|
require_relative 'coal/resources/sites'
|
19
|
-
require_relative 'coal/resources/
|
21
|
+
require_relative 'coal/resources/pages'
|
22
|
+
require_relative 'coal/resources/snippets'
|
23
|
+
require_relative 'coal/resources/content_assets'
|
24
|
+
require_relative 'coal/resources/theme_assets'
|
25
|
+
require_relative 'coal/resources/translations'
|
26
|
+
require_relative 'coal/resources/content_types'
|
20
27
|
require_relative 'coal/resources/content_entries'
|
28
|
+
require_relative 'coal/resources/engine_version'
|
21
29
|
require_relative 'coal/client'
|
data/locomotivecms_coal.gemspec
CHANGED
@@ -5,9 +5,8 @@ Gem::Specification.new do |spec|
|
|
5
5
|
spec.version = Locomotive::Coal::VERSION
|
6
6
|
spec.authors = ['Didier Lafforgue']
|
7
7
|
spec.email = ['did@locomotivecms.com']
|
8
|
-
spec.description = %q{The LocomotiveCMS
|
9
|
-
spec.summary = %q{The LocomotiveCMS
|
10
|
-
spec.homepage = 'http://www.locomotivecms.com'
|
8
|
+
spec.description = %q{The LocomotiveCMS Coal is the API ruby client for the LocomotiveCMS platform}
|
9
|
+
spec.summary = %q{The LocomotiveCMS Coal is the API ruby client for the LocomotiveCMS platform}
|
11
10
|
spec.homepage = 'https://github.com/locomotivecms/coal'
|
12
11
|
spec.license = 'MIT'
|
13
12
|
|
@@ -19,7 +18,8 @@ Gem::Specification.new do |spec|
|
|
19
18
|
spec.add_development_dependency 'bundler', '~> 1.9.1'
|
20
19
|
spec.add_development_dependency 'rake', '~> 10.4.2'
|
21
20
|
|
22
|
-
spec.add_dependency '
|
21
|
+
spec.add_dependency 'faraday', '~> 0.9.1'
|
22
|
+
spec.add_dependency 'faraday_middleware', '~> 0.9.1'
|
23
23
|
spec.add_dependency 'activesupport', '~> 4.2.1'
|
24
24
|
|
25
25
|
spec.required_ruby_version = '>= 2.0'
|
Binary file
|
Binary file
|