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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d79823461b0001b4f7559d10806b5d80c9010fcf
4
- data.tar.gz: b8302cc1f957e309f4d7d45e33c1507c4565204d
3
+ metadata.gz: cf20207d60a657eefbe8a9834786b1e4e6bacaf3
4
+ data.tar.gz: 09882c4e68b668d1e9fb5f39f85a0026d2b37d7d
5
5
  SHA512:
6
- metadata.gz: 52cd6c2eb08f9bf803d6a87473fce85c2efd5e39f95f3592f5c371eb88fc32a6f23bf863d0f587301723f442827c371ae4612a87e5c59a482e4dd89c52a8ab0a
7
- data.tar.gz: 8da103e715e0b4484bfd75b1ecaf954269c0406d2c139692bd4511ab3c2506fd75ad8db620d5281af3f63c06cd23de80c4c909141e3ec143d1e7863bd228ecc1
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
@@ -1,3 +1,3 @@
1
1
  module NaranyaEcm
2
- VERSION = "0.0.23"
2
+ VERSION = "0.0.24"
3
3
  end
@@ -74,7 +74,53 @@ module NaranyaEcm
74
74
  class_name: :MediaResource,
75
75
  inverse_of: :content
76
76
 
77
- include NaranyaEcm::ContentLifecycle
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
- include NaranyaEcm::ContentLifecycle
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 :content
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
 
@@ -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 'state_machine'
25
+ spec.add_dependency 'aasm'
26
26
  spec.add_dependency 'fog'
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.5"
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", "~> 1.16"
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.23
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-05 00:00:00.000000000 Z
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: state_machine
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: '1.5'
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: '1.5'
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: '1.16'
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: '1.16'
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