garland 0.13 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 885af5d90937a16db08d2dee34529e2d6607bb79
4
- data.tar.gz: 7c92f361a8e2dca83024d94f5fb0c36201df9266
3
+ metadata.gz: 6acc1a7f250514377aac16a344919064b6aa5a4e
4
+ data.tar.gz: a628e61d15c72b9959ee18e0eef57dbe0ffb5255
5
5
  SHA512:
6
- metadata.gz: 8637428a718c2e83e05347d11c3653ecd61dbe920fa93c5644bfb1ed610a1eace2d69ec29fb0bcdc977150c16d7b523b64c825a6090e5a6e7d21b1efe482ef80
7
- data.tar.gz: e876fa3d283f577b1006889aeda5119301c0b2e73a833255a914380616786de054d02399f800be52552366d7961145dc6d198aa111338c7e3018466724f8f379
6
+ metadata.gz: 5924e559189b60bf41146286c428ad23ca9826a40c46ac44dc5502c1b0a3a99c345454413d1f8c79720ea9cd8bfc74b05a37135fb17db700e4eb76d8aa92d684
7
+ data.tar.gz: c94774db93f0b55a547f432ea062d476b2af5c660778b65820693a8c6cec1892e1bbbc70ef3296a396d81ec2a32e9220cafefc668e39bcde1abf963a87f6d273
@@ -19,7 +19,7 @@ module GarlandRails
19
19
 
20
20
  belongs_to_type = self.name
21
21
  scope = -> { where(belongs_to_type: belongs_to_type) }
22
- options = options.merge({ foreign_key: "belongs_to_id" })
22
+ options = options.merge(foreign_key: "belongs_to_id")
23
23
  end
24
24
 
25
25
  super(name, scope, options, &extension)
@@ -37,8 +37,8 @@ module GarlandRails
37
37
  validates_uniqueness_of :type, scope: [
38
38
  :belongs_to_id,
39
39
  :belongs_to_type,
40
- :next,
41
- ], conditions: -> { where("next IS NULL OR previous IS NULL") }
40
+ :next_id,
41
+ ], conditions: -> { where("next_id IS NULL OR previous_id IS NULL") }
42
42
 
43
43
  # everything seems to work without `polymorphic: true`,
44
44
  # but we will set it just for accordance to docs
@@ -47,7 +47,7 @@ module GarlandRails
47
47
  options = scope
48
48
  scope = nil
49
49
  end
50
- options = options.merge({ foreign_key: "belongs_to_id" })
50
+ options = options.merge(foreign_key: "belongs_to_id")
51
51
 
52
52
  super(name, scope, options, &extension)
53
53
  end
@@ -62,8 +62,8 @@ module GarlandRails
62
62
  belongs_to = args[:belongs_to]
63
63
  if belongs_to
64
64
  belongs_to_params = self._split_belongs_to(belongs_to)
65
- belongs_to_id = belongs_to_params[:belongs_to_id]
66
- belongs_to_type = belongs_to_params[:belongs_to_type]
65
+ belongs_to_id, belongs_to_type =
66
+ belongs_to_params.values_at(:belongs_to_id, :belongs_to_type)
67
67
  end
68
68
  else
69
69
  hash = args
@@ -94,17 +94,17 @@ module GarlandRails
94
94
  end
95
95
 
96
96
  def self.tail(belongs_to = nil)
97
- self.thread(belongs_to).find_by(previous: nil)
97
+ self.thread(belongs_to).find_by(previous_id: nil)
98
98
  end
99
99
 
100
100
  def self.head(belongs_to = nil)
101
- self.thread(belongs_to).find_by(next: nil)
101
+ self.thread(belongs_to).find_by(next_id: nil)
102
102
  end
103
103
 
104
104
  def self.last_diff(belongs_to = nil)
105
105
  head = self.head(belongs_to)
106
106
 
107
- self.find_by(id: head.previous)
107
+ self.find_by(id: head.previous_id)
108
108
  end
109
109
 
110
110
  def self.table_type(record)
@@ -118,14 +118,14 @@ module GarlandRails
118
118
  def self.init(hash, belongs_to = nil)
119
119
  common_props = self._split_belongs_to(belongs_to)
120
120
 
121
- tail_props = common_props.merge({ entity: {}.to_s, entity_type: SNAPSHOT })
121
+ tail_props = common_props.merge(entity: {}.to_s, entity_type: SNAPSHOT)
122
122
  brand_new_tail = self.new(tail_props)
123
123
 
124
124
  diff = HashDiffSym.diff({}, hash)
125
- first_diff_props = common_props.merge({ entity: diff.to_s, entity_type: DIFF })
125
+ first_diff_props = common_props.merge(entity: diff.to_s, entity_type: DIFF)
126
126
  first_diff = self.new(first_diff_props)
127
127
 
128
- head_props = common_props.merge({ entity: hash.to_s, entity_type: SNAPSHOT })
128
+ head_props = common_props.merge(entity: hash.to_s, entity_type: SNAPSHOT)
129
129
  brand_new_head = self.new(head_props)
130
130
 
131
131
  self.transaction do
@@ -144,10 +144,10 @@ module GarlandRails
144
144
  # here and below validations may be skipped as long as we check for continuity later
145
145
  brand_new_head.save(validate: false)
146
146
  first_diff.save(validate: false)
147
- brand_new_tail.update_attribute(:next, first_diff.id)
148
- first_diff.update_attribute(:previous, brand_new_tail.id)
149
- first_diff.update_attribute(:next, brand_new_head.id)
150
- brand_new_head.update_attribute(:previous, first_diff.id)
147
+ brand_new_tail.update_attribute(:next_id, first_diff.id)
148
+ first_diff.update_attribute(:previous_id, brand_new_tail.id)
149
+ first_diff.update_attribute(:next_id, brand_new_head.id)
150
+ brand_new_head.update_attribute(:previous_id, first_diff.id)
151
151
 
152
152
  unless self.continuous?(belongs_to)
153
153
  Rails.logger.error("Initialized garland is not continuous")
@@ -162,18 +162,18 @@ module GarlandRails
162
162
 
163
163
  def self.insert_diff(hash, belongs_to = nil)
164
164
  head = self.head(belongs_to)
165
- last_diff = self.find_by(id: head.previous)
165
+ last_diff = self.find_by(id: head.previous_id)
166
166
  common_props = self._split_belongs_to(belongs_to)
167
167
 
168
168
  diff = HashDiffSym.diff(eval(head.entity), hash)
169
169
  return unless diff.any?
170
170
 
171
- new_diff_props = common_props.merge({
171
+ new_diff_props = common_props.merge(
172
172
  entity: diff.to_s,
173
173
  entity_type: DIFF,
174
- previous: last_diff.id,
175
- next: head.id,
176
- })
174
+ previous_id: last_diff.id,
175
+ next_id: head.id,
176
+ )
177
177
  new_diff = self.new(new_diff_props)
178
178
 
179
179
  self.transaction do
@@ -187,17 +187,17 @@ module GarlandRails
187
187
  return nil
188
188
  end
189
189
 
190
- last_diff.next = new_diff.id
190
+ last_diff.next_id = new_diff.id
191
191
  unless last_diff.save
192
- Rails.logger.error("Unable to save last_diff with 'next' = '#{new_diff.id}'")
192
+ Rails.logger.error("Unable to save last_diff with 'next_id' = '#{new_diff.id}'")
193
193
  ActiveRecord::Base.connection.exec_rollback_to_savepoint("savepoint_before_insert_diff")
194
194
  ActiveRecord::Base.connection.release_savepoint("savepoint_before_init")
195
195
  return nil
196
196
  end
197
197
 
198
- head.previous = new_diff.id
198
+ head.previous_id = new_diff.id
199
199
  unless head.save
200
- Rails.logger.error("Unable to save head with 'previous' = '#{new_diff.id}'")
200
+ Rails.logger.error("Unable to save head with 'previous_id' = '#{new_diff.id}'")
201
201
  ActiveRecord::Base.connection.exec_rollback_to_savepoint("savepoint_before_insert_diff")
202
202
  ActiveRecord::Base.connection.release_savepoint("savepoint_before_init")
203
203
  return nil
@@ -205,7 +205,7 @@ module GarlandRails
205
205
 
206
206
  head.entity = hash.to_s
207
207
  unless head.save
208
- Rails.logger.error("Unable to save head with 'entity' = '#{hash.to_s}'")
208
+ Rails.logger.error("Unable to save head with 'entity' = '#{hash}'")
209
209
  ActiveRecord::Base.connection.exec_rollback_to_savepoint("savepoint_before_insert_diff")
210
210
  ActiveRecord::Base.connection.release_savepoint("savepoint_before_init")
211
211
  return nil
@@ -223,9 +223,9 @@ module GarlandRails
223
223
  current_bulb = tail
224
224
  current_hash = eval(tail.entity)
225
225
  items_counted = 1
226
- while current_bulb.next do
226
+ while current_bulb.next_id do
227
227
  items_counted += 1
228
- current_bulb = self.find_by(id: current_bulb.next)
228
+ current_bulb = self.find_by(id: current_bulb.next_id)
229
229
  if current_bulb.entity_type == DIFF
230
230
  current_hash = HashDiffSym.patch!(current_hash, eval(current_bulb.entity))
231
231
  else
@@ -0,0 +1,35 @@
1
+ # Based on
2
+ # https://github.com/huacnlee/rails-settings-cached/blob/master/lib/generators/settings/install_generator.rb
3
+ # by Jason "huacnlee" Lee.
4
+ require "rails/generators"
5
+ require "rails/generators/migration"
6
+
7
+ module GarlandRails
8
+ # TODO: DRY
9
+ class InstallGenerator < Rails::Generators::Base
10
+ desc 'Generate Garland files.'
11
+ include Rails::Generators::Migration
12
+ source_root File.expand_path("../templates", __FILE__)
13
+
14
+ @@migrations = false
15
+
16
+ def self.next_migration_number(dirname) #:nodoc:
17
+ if ActiveRecord::Base.timestamped_migrations
18
+ if @@migrations
19
+ (current_migration_number(dirname) + 1)
20
+ else
21
+ @@migrations = true
22
+ Time.now.utc.strftime('%Y%m%d%H%M%S')
23
+ end
24
+ else
25
+ format '%.3d', current_migration_number(dirname) + 1
26
+ end
27
+ end
28
+
29
+ def create_migration_file
30
+ source = "install_migration.rb"
31
+ destination = "db/migrate/install_garland.rb"
32
+ migration_template source, destination
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,14 @@
1
+ class InstallGarland < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :garlands do |t|
4
+ t.text :entity, null: false
5
+ t.boolean :entity_type, null: false
6
+ t.integer :previous
7
+ t.integer :next
8
+ t.integer :belongs_to_id
9
+ t.string :belongs_to_type
10
+ t.string :type
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ class UninstallGarland < ActiveRecord::Migration[5.0]
2
+ def change
3
+ drop_table :garlands
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class GarlandV0ToV1 < ActiveRecord::Migration[5.0]
2
+ def change
3
+ rename_column :garlands, :next, :next_id
4
+ rename_column :garlands, :previous, :previous_id
5
+ end
6
+ end
@@ -0,0 +1,35 @@
1
+ # Based on
2
+ # https://github.com/huacnlee/rails-settings-cached/blob/master/lib/generators/settings/install_generator.rb
3
+ # by Jason "huacnlee" Lee.
4
+ require "rails/generators"
5
+ require "rails/generators/migration"
6
+
7
+ module GarlandRails
8
+ # TODO: DRY
9
+ class UninstallGenerator < Rails::Generators::Base
10
+ desc 'Generate Garland files.'
11
+ include Rails::Generators::Migration
12
+ source_root File.expand_path("../templates", __FILE__)
13
+
14
+ @@migrations = false
15
+
16
+ def self.next_migration_number(dirname) #:nodoc:
17
+ if ActiveRecord::Base.timestamped_migrations
18
+ if @@migrations
19
+ (current_migration_number(dirname) + 1)
20
+ else
21
+ @@migrations = true
22
+ Time.now.utc.strftime('%Y%m%d%H%M%S')
23
+ end
24
+ else
25
+ format '%.3d', current_migration_number(dirname) + 1
26
+ end
27
+ end
28
+
29
+ def create_migration_file
30
+ source = "uninstall_migration.rb"
31
+ destination = "db/migrate/uninstall_garland.rb"
32
+ migration_template source, destination
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # Based on
2
+ # https://github.com/huacnlee/rails-settings-cached/blob/master/lib/generators/settings/install_generator.rb
3
+ # by Jason "huacnlee" Lee.
4
+ require "rails/generators"
5
+ require "rails/generators/migration"
6
+
7
+ module GarlandRails
8
+ # TODO: DRY
9
+ class UpgradeGenerator < Rails::Generators::NamedBase
10
+ desc 'Upgrades Garland db.'
11
+ include Rails::Generators::Migration
12
+ source_root File.expand_path("../templates", __FILE__)
13
+
14
+ @@migrations = false
15
+
16
+ def self.next_migration_number(dirname) #:nodoc:
17
+ if ActiveRecord::Base.timestamped_migrations
18
+ if @@migrations
19
+ (current_migration_number(dirname) + 1)
20
+ else
21
+ @@migrations = true
22
+ Time.now.utc.strftime('%Y%m%d%H%M%S')
23
+ end
24
+ else
25
+ format '%.3d', current_migration_number(dirname) + 1
26
+ end
27
+ end
28
+
29
+ def create_migration_file
30
+ source = "#{file_name}_migration.rb"
31
+ destination = "db/migrate/upgrade_garland_#{file_name}.rb"
32
+ migration_template source, destination
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: garland
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.13'
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Morozov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-11 00:00:00.000000000 Z
11
+ date: 2017-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashdiff_sym
@@ -33,6 +33,12 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - lib/garland.rb
35
35
  - lib/garland_rails.rb
36
+ - lib/generators/garland_rails/install_generator.rb
37
+ - lib/generators/garland_rails/templates/install_migration.rb
38
+ - lib/generators/garland_rails/templates/uninstall_migration.rb
39
+ - lib/generators/garland_rails/templates/v0_to_v1_migration.rb
40
+ - lib/generators/garland_rails/uninstall_generator.rb
41
+ - lib/generators/garland_rails/upgrade_generator.rb
36
42
  homepage: https://github.com/kengho/garland
37
43
  licenses:
38
44
  - MIT
@@ -56,5 +62,5 @@ rubyforge_project:
56
62
  rubygems_version: 2.5.2
57
63
  signing_key:
58
64
  specification_version: 4
59
- summary: HashDiff ActiveRecord storage
65
+ summary: HashDiff Rails storage
60
66
  test_files: []