mautic 0.1.3 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11db7c9607e84c68c33c020711014b1f6c858073
4
- data.tar.gz: 3bdca3d4ab03eb07970fbdb7d14ac06133694093
3
+ metadata.gz: c77ac23dffbdf501bf3193b5da058a6664aa887a
4
+ data.tar.gz: 5e70349a9999dae0f43725e6b2b0028eec68f858
5
5
  SHA512:
6
- metadata.gz: 47d1a229897761802e43a7fc317ee01bf6b2bdce1ad6bda948e5432fd52a6f8c122e9df5c3b04d606012bb276cac2b8f8d3c99415c91786da0e09c328fd1af62
7
- data.tar.gz: b4e767ec3ede605578d385af2f5091ef8803ac53d6196476a9c9f33c72a1c61024146055138089505fc03e6a523dd3049f5942bbf0f08767a702cda077996d69
6
+ metadata.gz: 403f7b5fefaffc8efd92088b916342051750d234a011d7f57e6bba1fa5a37d500f04cb2467146170e06ed34c6535e2bfad6cd93b7f6ef00641d17be7c0d4c2dc
7
+ data.tar.gz: 91744d8458f445803d0b43021183e1cd9339c739bce7b7382e13edfd906270f96b3dc4dd01499486db02a1b9e571d623900de5e1483d9c01364be2b3d1b227a5
data/README.md CHANGED
@@ -6,6 +6,13 @@ RoR helper / wrapper for Mautic API and forms
6
6
  ### Gem provides API connection to your Mautic(s)
7
7
  1. Create mautic connection
8
8
  2. Authorize it
9
+
10
+ In mautic you need add API oauth2 login.
11
+ For URI callback allow:
12
+ ```
13
+ http://localhost:3000/mautic/connections/:ID/oauth2
14
+ ```
15
+ ID = is your Mautic::Connection ID
9
16
 
10
17
  Find connection which you want to use:
11
18
  ```ruby
@@ -39,9 +39,40 @@ module Mautic
39
39
  end
40
40
 
41
41
  def request(type, path, params = {})
42
- raise NotImplementedError
42
+ @last_request = [type, path, params]
43
+ response = raise NotImplementedError
44
+ parse_response(response)
43
45
  end
44
46
 
47
+ private
48
+
49
+ def parse_response(response)
50
+ case response.status
51
+ when 400
52
+ raise Mautic::ValidationError.new(response)
53
+ when 404
54
+ raise Mautic::RecordNotFound.new(response)
55
+ when 200, 201
56
+ json = JSON.parse(response.body) rescue {}
57
+ Array(json['errors']).each do |error|
58
+ case error['code'].to_i
59
+ when 401
60
+ raise Mautic::TokenExpiredError.new(response) if @try_to_refresh
61
+ @try_to_refresh = true
62
+ refresh!
63
+ json = request(*@last_request)
64
+ when 404
65
+ raise Mautic::RecordNotFound.new(response)
66
+ else
67
+ raise Mautic::RequestError.new(response)
68
+ end
69
+ end
70
+ else
71
+ raise Mautic::RequestError.new(response)
72
+ end
73
+
74
+ json
75
+ end
45
76
 
46
77
  end
47
78
  end
@@ -30,21 +30,9 @@ module Mautic
30
30
  end
31
31
 
32
32
  def request(type, path, params = {})
33
- json = JSON.parse connection.request(type, path, params).body
34
- Array(json['errors']).each do |error|
35
- case error['code']
36
- when 400
37
- # Validation error
38
- when 401
39
- raise Mautic::TokenExpiredError.new(error['message']) if @try_to_refresh
40
- @try_to_refresh = true
41
- refresh!
42
- json = request(type, path, params)
43
- else
44
- raise Mautic::AuthorizeError.new("#{error['code']} - #{error['message']}")
45
- end
46
- end
47
- json
33
+ @last_request = [type, path, params]
34
+ response = connection.request(type, path, params)
35
+ parse_response(response)
48
36
  end
49
37
 
50
38
  private
@@ -1,6 +1,8 @@
1
1
  module Mautic
2
2
  class Contact < Model
3
3
 
4
+ alias_attribute :first_name, :firstname
5
+ alias_attribute :last_name, :lastname
4
6
  def self.in(connection)
5
7
  Proxy.new(connection, endpoint, default_params: { search: '!is:anonymous' })
6
8
  end
data/lib/mautic.rb CHANGED
@@ -9,14 +9,46 @@ module Mautic
9
9
  autoload :Proxy, 'mautic/proxy'
10
10
  autoload :Model, 'mautic/model'
11
11
 
12
- class TokenExpiredError < StandardError
12
+ class RequestError < StandardError
13
+
14
+ attr_reader :response, :errors
15
+
16
+ def initialize(response, message = nil)
17
+ @errors ||= []
18
+ @response = response
19
+ json_body = JSON.parse(response.body) rescue {}
20
+ message ||= Array(json_body['errors']).collect do |error|
21
+ msg = error['code'].to_s
22
+ msg << " (#{error['type']}):" if error['type']
23
+ msg << " #{error['message']}"
24
+ @errors << error['message']
25
+ msg
26
+ end.join(', ')
27
+
28
+ super(message)
29
+ end
30
+
13
31
  end
14
32
 
15
- class ValidationError < StandardError
33
+ class TokenExpiredError < RequestError
34
+ end
35
+
36
+ class ValidationError < RequestError
37
+
38
+ def initialize(response, message = nil)
39
+ @response = response
40
+ json_body = JSON.parse(response.body) rescue {}
41
+ @errors = Array(json_body['errors']).inject({}) { |mem, var| mem.merge!(var['details']); mem }
42
+ message ||= @errors.collect { |field, msg| "#{field}: #{msg.join(', ')}" }.join('; ')
43
+ super(response, message)
44
+ end
45
+
46
+ end
16
47
 
48
+ class AuthorizeError < RequestError
17
49
  end
18
50
 
19
- class AuthorizeError < StandardError
51
+ class RecordNotFound < RequestError
20
52
  end
21
53
 
22
54
  configure do |config|
data/lib/mautic/model.rb CHANGED
@@ -32,6 +32,7 @@ module Mautic
32
32
  @table = MauticHash.new
33
33
  self.attributes = { created_at: hash['dateAdded']&.to_time, updated_at: hash['dateModified']&.to_time } if hash
34
34
  assign_attributes(hash)
35
+ clear_changes
35
36
  end
36
37
 
37
38
  def save(force = false)
@@ -40,29 +41,37 @@ module Mautic
40
41
 
41
42
  def update(force = false)
42
43
  return false if changes.blank?
43
- json = @connection.request((force && :put || :patch), "api/#{endpoint}/#{id}/edit", { body: to_h })
44
- if json['errors']
45
- self.errors = json['errors']
46
- else
44
+ begin
45
+ json = @connection.request((force && :put || :patch), "api/#{endpoint}/#{id}/edit", { body: to_h })
47
46
  self.attributes = json[endpoint.singularize]
47
+ clear_changes
48
+ rescue ValidationError => e
49
+ self.errors = e.errors
48
50
  end
49
- json['errors'].blank?
51
+
52
+ self.errors.blank?
50
53
  end
51
54
 
52
55
  def create
53
- json = @connection.request(:post, "api/#{endpoint}/#{id}/new", { body: to_h })
54
- if json['errors']
55
- self.errors = json['errors']
56
- else
56
+ begin
57
+ json = @connection.request(:post, "api/#{endpoint}/#{id}/new", { body: to_h })
57
58
  self.attributes = json[endpoint.singularize]
59
+ clear_changes
60
+ rescue ValidationError => e
61
+ self.errors = e.errors
58
62
  end
59
- json['errors'].blank?
63
+
64
+ self.errors.blank?
60
65
  end
61
66
 
62
67
  def destroy
63
- json = @connection.request(:delete, "api/#{endpoint}/#{id}/delete")
64
- self.errors = json['errors'] if json['errors']
65
- json['errors'].blank?
68
+ begin
69
+ @connection.request(:delete, "api/#{endpoint}/#{id}/delete")
70
+ true
71
+ rescue RequestError => e
72
+ self.errors = e.errors
73
+ false
74
+ end
66
75
  end
67
76
 
68
77
  def changes
@@ -73,20 +82,23 @@ module Mautic
73
82
  @table.to_h
74
83
  end
75
84
 
76
- private
77
-
78
- def endpoint
79
- self.class.endpoint
80
- end
81
-
82
85
  def attributes=(hash)
83
86
  hash.each_pair do |k, v|
84
87
  k = k.to_sym
85
88
  @table[k] = v
86
89
  end
90
+ end
91
+
92
+ private
93
+
94
+ def clear_changes
87
95
  @table.instance_variable_set(:@changes, nil)
88
96
  end
89
97
 
98
+ def endpoint
99
+ self.class.endpoint
100
+ end
101
+
90
102
  def assign_attributes(source = nil)
91
103
  source ||= {}
92
104
  data = {}
@@ -1,3 +1,3 @@
1
1
  module Mautic
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
data/spec/rails_helper.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  ENV['RAILS_ENV'] ||= 'test'
2
+ require 'simplecov'
3
+ SimpleCov.start
4
+
2
5
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
3
6
  # Prevent database truncation if the environment is production
4
7
  abort('The Rails environment is running in production mode!') if Rails.env.production?
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,7 @@ require 'factory_bot_rails'
3
3
  require 'database_cleaner'
4
4
  require 'faker'
5
5
  require 'webmock/rspec'
6
+ require 'pry-rails'
6
7
  # require 'capybara/rspec'
7
8
 
8
9
  ActiveRecord::Migration.maintain_test_schema!
@@ -34,10 +35,6 @@ RSpec.configure do |config|
34
35
  end
35
36
 
36
37
  config.include FactoryBot::Syntax::Methods
37
- # DatabaseCleaner.clean_with(
38
- # :truncation,
39
- # except: %w(ar_internal_metadata)
40
- # )
41
38
 
42
39
  config.before(:suite) do
43
40
  DatabaseCleaner.clean_with(:truncation, except: %w(ar_internal_metadata))
@@ -47,10 +44,6 @@ RSpec.configure do |config|
47
44
  DatabaseCleaner.strategy = :transaction
48
45
  end
49
46
 
50
- config.before(:each, js: true) do
51
- DatabaseCleaner.strategy = :truncation
52
- end
53
-
54
47
  config.before(:each) do
55
48
  DatabaseCleaner.start
56
49
  end
@@ -65,21 +58,4 @@ RSpec.configure do |config|
65
58
 
66
59
  config.filter_rails_from_backtrace!
67
60
 
68
- # config.before(:each) do |ex|
69
- # meta = ex.metadata
70
- # unless meta[:null]
71
- # case meta[:logged]
72
- # when :admin
73
- # logged(Symphonia::User, FactoryBot.create(:admin_user))
74
- # when true
75
- # logged(Symphonia::User, FactoryBot.create(:user))
76
- # end
77
- # end
78
- # end
79
-
80
- end
81
-
82
-
83
- def logged(model, user)
84
- allow(model).to receive(:current).and_return(user)
85
61
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mautic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukáš Pokorný
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-22 00:00:00.000000000 Z
11
+ date: 2017-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails