active_metadata 0.7.4 → 0.7.5
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.
- data/db/migrate/{02_active_metadata_migrations.rb → 01_active_metadata_migrations.rb} +0 -0
- data/features/support/env.rb +20 -1
- data/lib/active_metadata/base.rb +32 -13
- data/lib/active_metadata/persistence/history.rb +1 -0
- data/lib/active_metadata/version.rb +1 -1
- data/lib/tasks/active_metadata_tasks.rake +5 -3
- data/spec/dummy/db/.gitkeep +0 -0
- data/spec/dummy/db/schema.rb +1 -30
- data/spec/lib/active_metadata_spec.rb +24 -3
- data/spec/lib/attachments_spec.rb +3 -3
- data/spec/lib/notes_spec.rb +0 -1
- data/spec/spec_helper.rb +15 -10
- data/spec/support/chapter.rb +2 -1
- data/spec/support/document.rb +0 -1
- data/spec/support/migrations.rb +38 -0
- data/spec/support/section.rb +1 -3
- metadata +9 -10
- data/db/migrate/01_create_test_resources.rb +0 -36
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
File without changes
|
data/features/support/env.rb
CHANGED
@@ -3,6 +3,25 @@ require File.expand_path("../../../spec/dummy/config/environment.rb", __FILE__)
|
|
3
3
|
ENV["RAILS_ROOT"] ||= File.dirname(__FILE__) + "../../../spec/dummy"
|
4
4
|
|
5
5
|
require 'cucumber/rails'
|
6
|
+
require_relative "../../spec/support/migrations"
|
6
7
|
|
7
8
|
ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../../')
|
8
|
-
|
9
|
+
|
10
|
+
|
11
|
+
Before do
|
12
|
+
TestDb.up
|
13
|
+
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
|
14
|
+
end
|
15
|
+
|
16
|
+
After do
|
17
|
+
[Document, Section, Chapter, User, ActiveMetadata::Note,
|
18
|
+
ActiveMetadata::Watcher, ActiveMetadata::Attachment, ActiveMetadata::History].each do |i|
|
19
|
+
i.delete_all
|
20
|
+
end
|
21
|
+
FileUtils.remove_dir File.expand_path('public/system/') if Dir.exist?(File.expand_path('public/system/'))
|
22
|
+
Rails.cache.clear
|
23
|
+
end
|
24
|
+
|
25
|
+
at_exit do
|
26
|
+
TestDb.down
|
27
|
+
end
|
data/lib/active_metadata/base.rb
CHANGED
@@ -3,6 +3,10 @@ module ActiveMetadata
|
|
3
3
|
CONFIG = File.exists?('config/active_metadata.yml') ? YAML.load_file('config/active_metadata.yml')[Rails.env] : {}
|
4
4
|
CONFIG['cache_expires_in'] ||= 60
|
5
5
|
|
6
|
+
def self.skip_history?
|
7
|
+
false
|
8
|
+
end
|
9
|
+
|
6
10
|
## Define ModelMethods
|
7
11
|
module Base
|
8
12
|
|
@@ -20,12 +24,16 @@ module ActiveMetadata
|
|
20
24
|
module Config
|
21
25
|
|
22
26
|
def acts_as_metadata *args
|
27
|
+
options = args.extract_options!
|
28
|
+
options[:ancestors] ||= []
|
29
|
+
options[:persists_ancestor] ||= false
|
30
|
+
|
23
31
|
before_update :manage_concurrency
|
24
32
|
after_save :save_history
|
25
33
|
attr_accessor :conflicts
|
26
34
|
attr_accessor :active_metadata_timestamp
|
27
35
|
|
28
|
-
|
36
|
+
instance_variable_set("@active_metadata_options", options)
|
29
37
|
|
30
38
|
include ActiveMetadata::Base::InstanceMethods
|
31
39
|
include ActiveMetadata::Persistence
|
@@ -56,12 +64,16 @@ module ActiveMetadata
|
|
56
64
|
|
57
65
|
end
|
58
66
|
|
59
|
-
|
60
|
-
|
67
|
+
# if force is set to true go directly to the private find method
|
68
|
+
# options integrity will not be checked and ancestor will be looked also if option persists_ancestor is false
|
69
|
+
# usefull to get the ancestor instance also if is not persisted
|
70
|
+
def metadata_id force=false
|
71
|
+
force ? find_metadata_ancestor_instance.id : metadata_root.id
|
61
72
|
end
|
62
73
|
|
63
|
-
|
64
|
-
|
74
|
+
# same as #metadata_id
|
75
|
+
def metadata_class force=false
|
76
|
+
force ? find_metadata_ancestor_instance.class.to_s : metadata_root.class.to_s
|
65
77
|
end
|
66
78
|
|
67
79
|
# Normalize the active_metadata_timestamp into a float to be comparable with the history
|
@@ -80,14 +92,9 @@ module ActiveMetadata
|
|
80
92
|
end
|
81
93
|
|
82
94
|
def metadata_root
|
83
|
-
|
84
|
-
return self
|
85
|
-
|
86
|
-
active_metadata_ancestors.each do |item|
|
87
|
-
receiver = receiver.send item
|
88
|
-
end
|
89
|
-
raise(RuntimeError.new,"[active_metdata] - Ancestor model is not yet persisted") unless receiver
|
90
|
-
receiver
|
95
|
+
options = self.class.instance_variable_get("@active_metadata_options")
|
96
|
+
return self unless (options[:persists_ancestor] && options[:ancestors].size > 0 )
|
97
|
+
find_metadata_ancestor_instance
|
91
98
|
end
|
92
99
|
|
93
100
|
# Resolve concurrency using the provided timestamps and the active_metadata histories.
|
@@ -157,6 +164,18 @@ module ActiveMetadata
|
|
157
164
|
|
158
165
|
end
|
159
166
|
|
167
|
+
private
|
168
|
+
|
169
|
+
def find_metadata_ancestor_instance
|
170
|
+
receiver = self
|
171
|
+
self.class.instance_variable_get("@active_metadata_options")[:ancestors].each do |item|
|
172
|
+
res = receiver.send item
|
173
|
+
receiver = res.is_a?(Array) ? res.first : res
|
174
|
+
end
|
175
|
+
raise(RuntimeError.new,"[active_metdata] - Ancestor model is not yet persisted") unless receiver
|
176
|
+
receiver
|
177
|
+
end
|
178
|
+
|
160
179
|
end # InstanceMethods
|
161
180
|
|
162
181
|
end
|
@@ -7,6 +7,7 @@ module ActiveMetadata::Persistence::History
|
|
7
7
|
module InstanceMethods
|
8
8
|
|
9
9
|
def save_history
|
10
|
+
return if ActiveMetadata.skip_history?
|
10
11
|
self.changes.each do |key, value|
|
11
12
|
next if ActiveMetadata::CONFIG['history_skip_fields'].include?(key)
|
12
13
|
ActiveMetadata::History.create! :value => value[1],:document_class => metadata_class, :document_id => metadata_id,:label => key.to_s, :created_by => current_user_id
|
@@ -4,8 +4,10 @@ namespace :active_metadata do
|
|
4
4
|
ENV['JCI'] = 'on'
|
5
5
|
ENV['RAILS_ENV'] ||= 'test'
|
6
6
|
|
7
|
-
task :migrate do
|
8
|
-
|
7
|
+
task :migrate, :environment do
|
8
|
+
sh "mkdir -p spec/dummy/tmp/cache"
|
9
|
+
Rake::Task["app:db:create"].invoke
|
10
|
+
Rake::Task["app:db:migrate"].invoke
|
9
11
|
end
|
10
12
|
|
11
13
|
task :rspec do
|
@@ -32,7 +34,7 @@ namespace :active_metadata do
|
|
32
34
|
|
33
35
|
puts "Copying migrations"
|
34
36
|
ts = Time.now.utc.strftime('%Y%m%d%H%M%S')
|
35
|
-
FileUtils.cp File.expand_path('../../../db/migrate/
|
37
|
+
FileUtils.cp File.expand_path('../../../db/migrate/01_active_metadata_migrations.rb', __FILE__), File.expand_path("db/migrate/#{ts}_active_metadata_migrations.rb")
|
36
38
|
puts "run rake db:migrate to complete the gem installation"
|
37
39
|
|
38
40
|
end
|
File without changes
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
14
|
+
ActiveRecord::Schema.define(:version => 1) do
|
15
15
|
|
16
16
|
create_table "active_metadata_attachments", :force => true do |t|
|
17
17
|
t.string "label"
|
@@ -82,33 +82,4 @@ ActiveRecord::Schema.define(:version => 2) do
|
|
82
82
|
add_index "active_metadata_watchers", ["label"], :name => "index_active_metadata_watchers_on_label"
|
83
83
|
add_index "active_metadata_watchers", ["owner_id"], :name => "index_active_metadata_watchers_on_owner_id"
|
84
84
|
|
85
|
-
create_table "chapters", :force => true do |t|
|
86
|
-
t.string "title"
|
87
|
-
t.datetime "created_at", :null => false
|
88
|
-
t.datetime "updated_at", :null => false
|
89
|
-
end
|
90
|
-
|
91
|
-
create_table "documents", :force => true do |t|
|
92
|
-
t.string "name"
|
93
|
-
t.string "surname"
|
94
|
-
t.boolean "keep_alive"
|
95
|
-
t.datetime "created_at", :null => false
|
96
|
-
t.datetime "updated_at", :null => false
|
97
|
-
end
|
98
|
-
|
99
|
-
create_table "sections", :force => true do |t|
|
100
|
-
t.string "title"
|
101
|
-
t.integer "document_id"
|
102
|
-
t.datetime "created_at", :null => false
|
103
|
-
t.datetime "updated_at", :null => false
|
104
|
-
end
|
105
|
-
|
106
|
-
create_table "users", :force => true do |t|
|
107
|
-
t.string "email"
|
108
|
-
t.string "firstname"
|
109
|
-
t.string "lastname"
|
110
|
-
t.datetime "created_at", :null => false
|
111
|
-
t.datetime "updated_at", :null => false
|
112
|
-
end
|
113
|
-
|
114
85
|
end
|
@@ -4,19 +4,19 @@ require "time"
|
|
4
4
|
|
5
5
|
describe ActiveMetadata do
|
6
6
|
|
7
|
-
context "
|
7
|
+
context "class methods" do
|
8
8
|
|
9
9
|
it "should exist a method acts_as_metadata in the model" do
|
10
10
|
Document.respond_to?(:acts_as_metadata).should be_true
|
11
11
|
end
|
12
12
|
|
13
|
-
it "should find the
|
13
|
+
it "should find the ancestors if no ancestors params has been provided" do
|
14
14
|
@document = Document.create! { |d| d.name = "John" }
|
15
15
|
@document.metadata_id.should eq @document.id
|
16
16
|
@document.metadata_class.should eq @document.class.to_s
|
17
17
|
end
|
18
18
|
|
19
|
-
it "should find the metadata_root.id if an
|
19
|
+
it "should find the metadata_root.id if an ancestors params has been specified and persists_ancestor is true" do
|
20
20
|
@document = Document.create! { |d| d.name = "John" }
|
21
21
|
@section = @document.create_section :title => "new section"
|
22
22
|
@section.metadata_id.should eq @document.id
|
@@ -33,5 +33,26 @@ describe ActiveMetadata do
|
|
33
33
|
|
34
34
|
end
|
35
35
|
|
36
|
+
context "ancestors" do
|
37
|
+
|
38
|
+
it "should return the base instance class following the ancestor chain" do
|
39
|
+
@document = Document.create! { |d| d.name = "John" }
|
40
|
+
@chapter = Chapter.create(title: "title")
|
41
|
+
@section = @document.create_section
|
42
|
+
@section.metadata_id(true).should eq @document.id
|
43
|
+
@section.metadata_class(true).should eq "Document"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return the base instance class following the ancestor chain passing has_many associations" do
|
47
|
+
@document = Document.create! { |d| d.name = "John" }
|
48
|
+
@chapter = Chapter.create(title: "title")
|
49
|
+
@section = @document.create_section chapter_id: @chapter.id
|
50
|
+
|
51
|
+
@chapter.metadata_id(true).should eq @document.id
|
52
|
+
@chapter.metadata_class(true).should eq "Document"
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
36
57
|
|
37
58
|
end
|
@@ -125,9 +125,9 @@ describe ActiveMetadata do
|
|
125
125
|
end
|
126
126
|
|
127
127
|
it "should has_notes_for verify if defined field has attachments" do
|
128
|
-
@document.has_attachments_for(:
|
129
|
-
@document.save_attachment_for(:
|
130
|
-
@document.has_attachments_for(:
|
128
|
+
@document.has_attachments_for(:surname).should be_false
|
129
|
+
@document.save_attachment_for(:surname, @attachment)
|
130
|
+
@document.has_attachments_for(:surname).should be_true
|
131
131
|
end
|
132
132
|
|
133
133
|
end
|
data/spec/lib/notes_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -8,10 +8,9 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
8
8
|
require 'rails/all'
|
9
9
|
require 'active_metadata'
|
10
10
|
require 'rack/test/uploaded_file'
|
11
|
+
require 'support/migrations'
|
11
12
|
|
12
13
|
ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')
|
13
|
-
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
|
14
|
-
|
15
14
|
require 'rspec/rails'
|
16
15
|
|
17
16
|
|
@@ -25,6 +24,11 @@ RSpec.configure do |config|
|
|
25
24
|
# config.mock_with :rr
|
26
25
|
config.mock_with :rspec
|
27
26
|
|
27
|
+
config.before(:suite) do
|
28
|
+
TestDb.up
|
29
|
+
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
|
30
|
+
end
|
31
|
+
|
28
32
|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
29
33
|
# config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
30
34
|
|
@@ -35,17 +39,18 @@ RSpec.configure do |config|
|
|
35
39
|
|
36
40
|
|
37
41
|
config.before(:each) do
|
38
|
-
Document
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
[Document, Section, Chapter, User, ActiveMetadata::Note,
|
43
|
+
ActiveMetadata::Watcher, ActiveMetadata::Attachment, ActiveMetadata::History].each do |i|
|
44
|
+
i.delete_all
|
45
|
+
end
|
46
|
+
FileUtils.remove_dir File.expand_path('public/system/') if Dir.exist?(File.expand_path('public/system/'))
|
47
|
+
Rails.cache.clear
|
44
48
|
end
|
45
49
|
|
46
|
-
config.after(:suite) do
|
47
|
-
|
50
|
+
config.after(:suite) do
|
51
|
+
TestDb.down
|
48
52
|
end
|
53
|
+
|
49
54
|
end
|
50
55
|
|
51
56
|
def test_pdf name='pdf_test'
|
data/spec/support/chapter.rb
CHANGED
data/spec/support/document.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
module TestDb
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
ActiveRecord::Base.connection.create_table :documents, force: true do |t|
|
5
|
+
t.string :name
|
6
|
+
t.string :surname
|
7
|
+
t.boolean :keep_alive
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
|
11
|
+
ActiveRecord::Base.connection.create_table :sections, force: true do |t|
|
12
|
+
t.string :title
|
13
|
+
t.integer :document_id
|
14
|
+
t.integer :chapter_id
|
15
|
+
t.timestamps
|
16
|
+
end
|
17
|
+
|
18
|
+
ActiveRecord::Base.connection.create_table :chapters, force: true do |t|
|
19
|
+
t.string :title
|
20
|
+
t.timestamps
|
21
|
+
end
|
22
|
+
|
23
|
+
ActiveRecord::Base.connection.create_table :users, force: true do |t|
|
24
|
+
t.string :email
|
25
|
+
t.string :firstname
|
26
|
+
t.string :lastname
|
27
|
+
t.timestamps
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.down
|
32
|
+
ActiveRecord::Base.connection.drop_table :users
|
33
|
+
ActiveRecord::Base.connection.drop_table :chapters
|
34
|
+
ActiveRecord::Base.connection.drop_table :sections
|
35
|
+
ActiveRecord::Base.connection.drop_table :documents
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
data/spec/support/section.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_metadata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-05-
|
13
|
+
date: 2012-05-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -165,8 +165,7 @@ files:
|
|
165
165
|
- config/cucumber.yml
|
166
166
|
- config/database.yml
|
167
167
|
- config/routes.rb
|
168
|
-
- db/migrate/
|
169
|
-
- db/migrate/02_active_metadata_migrations.rb
|
168
|
+
- db/migrate/01_active_metadata_migrations.rb
|
170
169
|
- lib/active_metadata/base.rb
|
171
170
|
- lib/active_metadata/engine.rb
|
172
171
|
- lib/active_metadata/form_helper.rb
|
@@ -219,9 +218,8 @@ files:
|
|
219
218
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
220
219
|
- spec/dummy/config/locales/en.yml
|
221
220
|
- spec/dummy/config/routes.rb
|
222
|
-
- spec/dummy/db
|
221
|
+
- spec/dummy/db/.gitkeep
|
223
222
|
- spec/dummy/db/schema.rb
|
224
|
-
- spec/dummy/db/test.sqlite3
|
225
223
|
- spec/dummy/lib/assets/.gitkeep
|
226
224
|
- spec/dummy/log/.gitkeep
|
227
225
|
- spec/dummy/public/404.html
|
@@ -241,6 +239,7 @@ files:
|
|
241
239
|
- spec/spec_helper.rb
|
242
240
|
- spec/support/chapter.rb
|
243
241
|
- spec/support/document.rb
|
242
|
+
- spec/support/migrations.rb
|
244
243
|
- spec/support/pdf_test.pdf
|
245
244
|
- spec/support/pdf_test_1.pdf
|
246
245
|
- spec/support/pdf_test_2.pdf
|
@@ -262,7 +261,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
261
|
version: '0'
|
263
262
|
segments:
|
264
263
|
- 0
|
265
|
-
hash: -
|
264
|
+
hash: -2239752898165764505
|
266
265
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
266
|
none: false
|
268
267
|
requirements:
|
@@ -271,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
270
|
version: '0'
|
272
271
|
segments:
|
273
272
|
- 0
|
274
|
-
hash: -
|
273
|
+
hash: -2239752898165764505
|
275
274
|
requirements: []
|
276
275
|
rubyforge_project: active_metadata
|
277
276
|
rubygems_version: 1.8.19
|
@@ -315,9 +314,8 @@ test_files:
|
|
315
314
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
316
315
|
- spec/dummy/config/locales/en.yml
|
317
316
|
- spec/dummy/config/routes.rb
|
318
|
-
- spec/dummy/db
|
317
|
+
- spec/dummy/db/.gitkeep
|
319
318
|
- spec/dummy/db/schema.rb
|
320
|
-
- spec/dummy/db/test.sqlite3
|
321
319
|
- spec/dummy/lib/assets/.gitkeep
|
322
320
|
- spec/dummy/log/.gitkeep
|
323
321
|
- spec/dummy/public/404.html
|
@@ -337,6 +335,7 @@ test_files:
|
|
337
335
|
- spec/spec_helper.rb
|
338
336
|
- spec/support/chapter.rb
|
339
337
|
- spec/support/document.rb
|
338
|
+
- spec/support/migrations.rb
|
340
339
|
- spec/support/pdf_test.pdf
|
341
340
|
- spec/support/pdf_test_1.pdf
|
342
341
|
- spec/support/pdf_test_2.pdf
|
@@ -1,36 +0,0 @@
|
|
1
|
-
class CreateTestResources < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table :documents do |t|
|
4
|
-
t.string :name
|
5
|
-
t.string :surname
|
6
|
-
t.boolean :keep_alive
|
7
|
-
t.timestamps
|
8
|
-
end
|
9
|
-
|
10
|
-
create_table :sections do |t|
|
11
|
-
t.string :title
|
12
|
-
t.integer :document_id
|
13
|
-
t.timestamps
|
14
|
-
end
|
15
|
-
|
16
|
-
create_table :chapters do |t|
|
17
|
-
t.string :title
|
18
|
-
t.timestamps
|
19
|
-
end
|
20
|
-
|
21
|
-
create_table :users do |t|
|
22
|
-
t.string :email
|
23
|
-
t.string :firstname
|
24
|
-
t.string :lastname
|
25
|
-
t.timestamps
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.down
|
31
|
-
drop_table :users
|
32
|
-
drop_table :chapters
|
33
|
-
drop_table :sections
|
34
|
-
drop_table :documents
|
35
|
-
end
|
36
|
-
end
|
Binary file
|
data/spec/dummy/db/test.sqlite3
DELETED
Binary file
|