naranya_ecm-sdk 0.0.23 → 0.0.24
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 +4 -4
- data/lib/aasm/persistence/rest_persistence.rb +134 -0
- data/lib/naranya_ecm-sdk/version.rb +1 -1
- data/lib/naranya_ecm/models/content.rb +47 -1
- data/lib/naranya_ecm/models/content_version.rb +56 -1
- data/lib/naranya_ecm/models/media_resource.rb +1 -3
- data/lib/naranya_ecm/rest/persistence.rb +2 -1
- data/naranya_ecm-sdk.gemspec +3 -3
- metadata +12 -12
- data/lib/naranya_ecm/lifecycles/content_lifecycle.rb +0 -61
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf20207d60a657eefbe8a9834786b1e4e6bacaf3
|
4
|
+
data.tar.gz: 09882c4e68b668d1e9fb5f39f85a0026d2b37d7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e04be8b969c1e197a1cf4eb4b214fe880cc689a6315cb801c7e15d4babf4d7553be6657aab492a213ab07eb243fe2f71d1251aecbfa69c027d015616d6dfa88b
|
7
|
+
data.tar.gz: 41e8ed68137abf1344aac612c3dd4085019beac051aca18fa2aa8ccf8285df6b1d7183607f50c43f84a25e8188da3a30ef4058afb961b0bc2c5e4783ee91ff13
|
@@ -0,0 +1,134 @@
|
|
1
|
+
module AASM
|
2
|
+
module Persistence
|
3
|
+
module RestPersistence
|
4
|
+
# This method:
|
5
|
+
#
|
6
|
+
# * extends the model with ClassMethods
|
7
|
+
# * includes InstanceMethods
|
8
|
+
#
|
9
|
+
# Adds
|
10
|
+
#
|
11
|
+
# before_validation :aasm_ensure_initial_state, :on => :create
|
12
|
+
#
|
13
|
+
# As a result, it doesn't matter when you define your methods - the following 2 are equivalent
|
14
|
+
#
|
15
|
+
# class Foo < ActiveRecord::Base
|
16
|
+
# def aasm_write_state(state)
|
17
|
+
# "bar"
|
18
|
+
# end
|
19
|
+
# include AASM
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# class Foo < ActiveRecord::Base
|
23
|
+
# include AASM
|
24
|
+
# def aasm_write_state(state)
|
25
|
+
# "bar"
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
def self.included(base)
|
30
|
+
base.send(:include, AASM::Persistence::Base)
|
31
|
+
base.extend AASM::Persistence::RestPersistence::ClassMethods
|
32
|
+
base.send(:include, AASM::Persistence::RestPersistence::InstanceMethods)
|
33
|
+
|
34
|
+
base.before_validation(:aasm_ensure_initial_state, :on => :create)
|
35
|
+
|
36
|
+
# ensure initial aasm state even when validations are skipped
|
37
|
+
base.before_create(:aasm_ensure_initial_state)
|
38
|
+
|
39
|
+
# ensure state is in the list of states
|
40
|
+
# base.validate :aasm_validate_states
|
41
|
+
end
|
42
|
+
|
43
|
+
module ClassMethods
|
44
|
+
|
45
|
+
# def find_in_state(number, state, *args)
|
46
|
+
# with_state_scope state do
|
47
|
+
# find(number, *args)
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
|
51
|
+
# def count_in_state(state, *args)
|
52
|
+
# with_state_scope state do
|
53
|
+
# count(*args)
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
|
57
|
+
# def calculate_in_state(state, *args)
|
58
|
+
# with_state_scope state do
|
59
|
+
# calculate(*args)
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
|
63
|
+
# protected
|
64
|
+
# def with_state_scope(state)
|
65
|
+
# with_scope :find => {:conditions => ["#{table_name}.#{aasm_column} = ?", state.to_s]} do
|
66
|
+
# yield if block_given?
|
67
|
+
# end
|
68
|
+
# end
|
69
|
+
end
|
70
|
+
|
71
|
+
module InstanceMethods
|
72
|
+
|
73
|
+
# # Writes <tt>state</tt> to the state column and persists it to the database
|
74
|
+
# #
|
75
|
+
# # foo = Foo.find(1)
|
76
|
+
# # foo.aasm.current_state # => :opened
|
77
|
+
# # foo.close!
|
78
|
+
# # foo.aasm.current_state # => :closed
|
79
|
+
# # Foo.find(1).aasm.current_state # => :closed
|
80
|
+
# #
|
81
|
+
# # NOTE: intended to be called from an event
|
82
|
+
# def aasm_write_state(state)
|
83
|
+
# old_value = self.send self.class.aasm_column.to_sym
|
84
|
+
# write_attribute(self.class.aasm_column, state.to_s)
|
85
|
+
|
86
|
+
# unless self.save(:validate => false)
|
87
|
+
# write_attribute(self.class.aasm_column, old_value)
|
88
|
+
# return false
|
89
|
+
# end
|
90
|
+
|
91
|
+
# true
|
92
|
+
# end
|
93
|
+
|
94
|
+
# # Writes <tt>state</tt> to the state column, but does not persist it to the database
|
95
|
+
# #
|
96
|
+
# # foo = Foo.find(1)
|
97
|
+
# # foo.aasm.current_state # => :opened
|
98
|
+
# # foo.close
|
99
|
+
# # foo.aasm.current_state # => :closed
|
100
|
+
# # Foo.find(1).aasm.current_state # => :opened
|
101
|
+
# # foo.save
|
102
|
+
# # foo.aasm.current_state # => :closed
|
103
|
+
# # Foo.find(1).aasm.current_state # => :closed
|
104
|
+
# #
|
105
|
+
# # NOTE: intended to be called from an event
|
106
|
+
# def aasm_write_state_without_persistence(state)
|
107
|
+
# self.off_band_changes["#{self.class.aasm_column}_event"] = transition.event
|
108
|
+
# end
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
def aasm_ensure_initial_state
|
113
|
+
send("#{self.class.aasm_column}=", aasm.enter_initial_state.to_s) if send(self.class.aasm_column).blank?
|
114
|
+
end
|
115
|
+
|
116
|
+
def aasm_fire_event(name, options, *args, &block)
|
117
|
+
local_success = super
|
118
|
+
|
119
|
+
if local_success
|
120
|
+
data = { name: name, target_type: self.class.name.demodulize, target_id: self.id }
|
121
|
+
response = ::NaranyaEcm::Rest::Client.post "/events.json", body: { state_event: data }
|
122
|
+
remote_success = response.success?
|
123
|
+
unless remote_success
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
local_success && remote_success
|
128
|
+
end
|
129
|
+
|
130
|
+
end # InstanceMethods
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -74,7 +74,53 @@ module NaranyaEcm
|
|
74
74
|
class_name: :MediaResource,
|
75
75
|
inverse_of: :content
|
76
76
|
|
77
|
-
|
77
|
+
###############################################################
|
78
|
+
# StateMachine:
|
79
|
+
include AASM
|
80
|
+
include AASM::Persistence::RestPersistence
|
81
|
+
|
82
|
+
aasm column: :lifecycle_state do
|
83
|
+
|
84
|
+
state :draft, initial: true
|
85
|
+
state :awaiting_acceptance
|
86
|
+
state :accepted
|
87
|
+
state :rejected
|
88
|
+
state :published
|
89
|
+
state :deactivated
|
90
|
+
|
91
|
+
#########################################
|
92
|
+
# Eventos:
|
93
|
+
|
94
|
+
event :request_an_acceptance_review do
|
95
|
+
# Iniciar la transición de :draft a :awaiting_acceptance,
|
96
|
+
transitions from: :draft, to: :awaiting_acceptance, guard: :validatable_lifecycle?
|
97
|
+
end
|
98
|
+
|
99
|
+
event :accept do
|
100
|
+
# Iniciar la transición de :awaiting_acceptance a :accepted:
|
101
|
+
transitions from: :awaiting_acceptance, to: :accepted
|
102
|
+
end
|
103
|
+
|
104
|
+
event :reject do
|
105
|
+
# Iniciar la transición de :awaiting_acceptance a :rejected:
|
106
|
+
transitions from: :awaiting_acceptance, to: :rejected
|
107
|
+
end
|
108
|
+
|
109
|
+
event :publish do
|
110
|
+
# Iniciar la transición de :draft a :published,
|
111
|
+
# si el lifecycle es sencillo:
|
112
|
+
transitions from: :draft, to: :published, guard: :simple_lifecycle?
|
113
|
+
transitions from: :validated, to: :published, guard: :validatable_lifecycle?
|
114
|
+
end
|
115
|
+
|
116
|
+
event :deactivate do
|
117
|
+
# Iniciar la transición de :published a :deactivated:
|
118
|
+
transitions from: :published, to: :deactivated
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def simple_lifecycle?; self.lifecycle_name == 'simple'; end
|
123
|
+
def validatable_lifecycle?; self.lifecycle_name == 'validatable'; end
|
78
124
|
|
79
125
|
private
|
80
126
|
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'aasm'
|
2
|
+
require 'aasm/persistence/base'
|
3
|
+
require 'aasm/persistence/rest_persistence'
|
1
4
|
|
2
5
|
module NaranyaEcm
|
3
6
|
class ContentVersion
|
@@ -51,7 +54,59 @@ module NaranyaEcm
|
|
51
54
|
# - Icons, Banners, screenshots, gallery images
|
52
55
|
has_many :media_resources, class_name: :MediaResource, inverse_of: :content_version
|
53
56
|
|
54
|
-
|
57
|
+
###############################################################
|
58
|
+
# StateMachine:
|
59
|
+
include AASM
|
60
|
+
include AASM::Persistence::RestPersistence
|
61
|
+
|
62
|
+
aasm column: :lifecycle_state do
|
63
|
+
|
64
|
+
state :draft, initial: true
|
65
|
+
state :awaiting_acceptance
|
66
|
+
state :accepted
|
67
|
+
state :rejected
|
68
|
+
state :published
|
69
|
+
state :superseded
|
70
|
+
state :deactivated
|
71
|
+
|
72
|
+
#########################################
|
73
|
+
# Eventos:
|
74
|
+
|
75
|
+
event :request_an_acceptance_review do
|
76
|
+
# Iniciar la transición de :draft a :awaiting_acceptance,
|
77
|
+
transitions from: :draft, to: :awaiting_acceptance, guard: :validatable_lifecycle?
|
78
|
+
end
|
79
|
+
|
80
|
+
event :accept do
|
81
|
+
# Iniciar la transición de :awaiting_acceptance a :accepted:
|
82
|
+
transitions from: :awaiting_acceptance, to: :accepted
|
83
|
+
end
|
84
|
+
|
85
|
+
event :reject do
|
86
|
+
# Iniciar la transición de :awaiting_acceptance a :rejected:
|
87
|
+
transitions from: :awaiting_acceptance, to: :rejected
|
88
|
+
end
|
89
|
+
|
90
|
+
event :publish do
|
91
|
+
# Iniciar la transición de :draft a :published,
|
92
|
+
# si el lifecycle es sencillo:
|
93
|
+
transitions from: :draft, to: :published, guard: :simple_lifecycle?
|
94
|
+
transitions from: :accepted, to: :published, guard: :validatable_lifecycle?
|
95
|
+
end
|
96
|
+
|
97
|
+
event :supersede do
|
98
|
+
# Iniciar la transición de :published a :superseded:
|
99
|
+
transitions from: :published, to: :superseded
|
100
|
+
end
|
101
|
+
|
102
|
+
event :deactivate do
|
103
|
+
# Iniciar la transición de :published a :deactivated:
|
104
|
+
transitions from: :published, to: :deactivated
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def simple_lifecycle?; self.lifecycle_name == 'simple'; end
|
109
|
+
def validatable_lifecycle?; self.lifecycle_name == 'validatable'; end
|
55
110
|
|
56
111
|
end
|
57
112
|
end
|
@@ -25,9 +25,7 @@ module NaranyaEcm
|
|
25
25
|
# The list of compatible device operating systems:
|
26
26
|
field :compatible_device_oses, type: Hash, default: -> { {} }
|
27
27
|
|
28
|
-
belongs_to :
|
29
|
-
belongs_to :content_version
|
30
|
-
belongs_to :category
|
28
|
+
#belongs_to :parent_document
|
31
29
|
|
32
30
|
def private?
|
33
31
|
self.access_type == 'private'
|
@@ -5,7 +5,7 @@ module NaranyaEcm::Rest
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
define_model_callbacks :create, :update, :save, :destroy
|
8
|
+
define_model_callbacks :validation, :create, :update, :save, :destroy
|
9
9
|
end
|
10
10
|
|
11
11
|
def save
|
@@ -29,6 +29,7 @@ module NaranyaEcm::Rest
|
|
29
29
|
|
30
30
|
def new_resource?; self.id.nil?; end
|
31
31
|
alias_method :new?, :new_resource?
|
32
|
+
alias_method :new_record?, :new_resource?
|
32
33
|
|
33
34
|
def persisted?; !new_resource? || !self.changed?; end
|
34
35
|
|
data/naranya_ecm-sdk.gemspec
CHANGED
@@ -22,12 +22,12 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'activesupport', '>= 4.0.4'
|
23
23
|
spec.add_dependency 'activemodel', '>= 4.0.4'
|
24
24
|
spec.add_dependency 'httparty'
|
25
|
-
spec.add_dependency '
|
25
|
+
spec.add_dependency 'aasm'
|
26
26
|
spec.add_dependency 'fog'
|
27
27
|
|
28
|
-
spec.add_development_dependency "bundler"
|
28
|
+
spec.add_development_dependency "bundler"
|
29
29
|
spec.add_development_dependency "rake"
|
30
30
|
spec.add_development_dependency "rspec", "~> 3.0.0.beta2"
|
31
31
|
spec.add_development_dependency "vcr"
|
32
|
-
spec.add_development_dependency "webmock"
|
32
|
+
spec.add_development_dependency "webmock"
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: naranya_ecm-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Quintanilla
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: aasm
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,16 +140,16 @@ dependencies:
|
|
140
140
|
name: webmock
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
145
|
+
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - "
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
152
|
+
version: '0'
|
153
153
|
description: Cliente Ruby de NaranyaEcm
|
154
154
|
email:
|
155
155
|
- roberto.quintanilla@naranya.com
|
@@ -166,12 +166,12 @@ files:
|
|
166
166
|
- dev/init.rb
|
167
167
|
- dev/load_cvm.rb
|
168
168
|
- dev/search.rb
|
169
|
+
- lib/aasm/persistence/rest_persistence.rb
|
169
170
|
- lib/naranya_ecm-sdk.rb
|
170
171
|
- lib/naranya_ecm-sdk/version.rb
|
171
172
|
- lib/naranya_ecm/behaviors/localizable.rb
|
172
173
|
- lib/naranya_ecm/behaviors/media_methods.rb
|
173
174
|
- lib/naranya_ecm/behaviors/timestampable.rb
|
174
|
-
- lib/naranya_ecm/lifecycles/content_lifecycle.rb
|
175
175
|
- lib/naranya_ecm/models/category.rb
|
176
176
|
- lib/naranya_ecm/models/content.rb
|
177
177
|
- lib/naranya_ecm/models/content_version.rb
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
require 'state_machine'
|
3
|
-
|
4
|
-
module NaranyaEcm
|
5
|
-
|
6
|
-
module ContentLifecycle
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
|
9
|
-
included do
|
10
|
-
|
11
|
-
state_machine :lifecycle_state, initial: :draft do
|
12
|
-
|
13
|
-
state :draft
|
14
|
-
state :awaiting_acceptance
|
15
|
-
state :accepted
|
16
|
-
state :rejected
|
17
|
-
state :published
|
18
|
-
state :superseded
|
19
|
-
state :deactivated
|
20
|
-
|
21
|
-
event :request_an_acceptance_review do
|
22
|
-
transition :draft => :awaiting_acceptance
|
23
|
-
end
|
24
|
-
|
25
|
-
event :accept do
|
26
|
-
transition :awaiting_acceptance => :accepted
|
27
|
-
end
|
28
|
-
|
29
|
-
event :reject do
|
30
|
-
transition [:awaiting_acceptance, :published] => :rejected
|
31
|
-
end
|
32
|
-
|
33
|
-
event :publish do
|
34
|
-
transition :draft => :published, if: :simple_lifecycle?
|
35
|
-
transition :accepted => :published, if: :validatable_lifecycle?
|
36
|
-
end
|
37
|
-
|
38
|
-
event :deactivate do
|
39
|
-
transition any => :inactive
|
40
|
-
end
|
41
|
-
|
42
|
-
######
|
43
|
-
after_transition :on => any, do: :commit_lifecycle_state_change!
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
def simple_lifecycle?; self.lifecycle_name == 'simple'; end
|
50
|
-
def validatable_lifecycle?; self.lifecycle_name == 'validatable'; end
|
51
|
-
|
52
|
-
def commit_lifecycle_state_change!(transition)
|
53
|
-
off_band_changes["#{transition.attribute}_event"] = transition.event
|
54
|
-
self.send "reset_#{transition.attribute}!".to_sym
|
55
|
-
self.save
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|