bulky 0.9.1 → 2.0.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: 1a45d126e1968738d9f33985879957c942ee7967
4
- data.tar.gz: 4cef29b207f4fef17f494866d95a9dd78835c322
3
+ metadata.gz: 999ba588ee91221f137ec28ba41c87dbb6175abf
4
+ data.tar.gz: 8bb0db2a47673d74a37931ced4af31f798bde1a1
5
5
  SHA512:
6
- metadata.gz: 61819e46dfb0f506bc216015012d754d00d8ddea1b2539e79399b72c027dde363130e45bab96bd5668cf3c714896efd0900486f57d327db2e8d8121e1e116b53
7
- data.tar.gz: f8e3b4919d8cfa5b43805041c0cb8e73df8ca4a16ce2facc432f89dfe769fb79bacb082c39ef625fe37ab2216c1f6e90ea56cc4b9f6712b00cf5a1c6944929ab
6
+ metadata.gz: 8ce5fe1e6170abf327e8157b29236f303c7e91d469247540d087b328c892771bb1e34ba9c497c04fee4b414fed2887d0a622c7988c4bef5f6f3c677c08b2b674
7
+ data.tar.gz: 33b23828b38639dda4db435bec6a32ca37da8faa299f32b1e6ff0c8c7d625dd704722648af701f498ffa9f96ea74c718439df7b82e949bf3fb60b2571d24a8b7
data/README.md CHANGED
@@ -1,18 +1,31 @@
1
1
  # Bulky
2
2
 
3
+ [![Circle CI](https://circleci.com/gh/tma1/bulky.svg?style=svg)](https://circleci.com/gh/tma1/bulky)
4
+
3
5
  ## Installation
4
6
 
5
- In your Gemfile
7
+ In your Gemfile use one of the following
6
8
  ``` ruby
7
- gem 'bulky', github: 'adamhunter/bulky'
9
+ gem 'bulky', '~> 2.0.0'
10
+ # or
11
+ gem 'bulky', github: 'tma1/bulky'
12
+ # or in bash run
13
+ git submodule add git@github.com:tma1/bulky.git vendor/bulky
14
+ # then add to your gemfile
15
+ gem 'bulky', path: 'vendor/bulky'
16
+ # users add a submodule (aka path...) need to run
17
+ git submodule init --update
18
+ ```
19
+ ```bash
8
20
  ```
21
+ Then edit your
9
22
 
10
23
  Then in your shell prompt
11
24
  ```bash
12
25
  bundle
13
26
  rake bulky_engine:install:migrations
14
27
  rake db:migrate
15
- rake bulky:work # (starts the resque worker for bulky)
28
+ sidekiq
16
29
  ```
17
30
 
18
31
  ## Usage
@@ -27,4 +40,5 @@ Command Line
27
40
  Bulky.enqueue_update(Account, [10,25], {"contact" => "Yes, please."})
28
41
  ```
29
42
 
30
- This will enqueue the `Bulky::Updater` to update each account when the job is processed by Resque
43
+ This will enqueue the `Bulky::Updater` to update each account when the job is
44
+ processed by Sidekiq
data/Rakefile CHANGED
@@ -1,17 +1,10 @@
1
- #!/usr/bin/env rake
2
-
3
1
  begin
4
2
  require 'bundler/setup'
5
3
  rescue LoadError
6
4
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
5
  end
8
- begin
9
- require 'rdoc/task'
10
- rescue LoadError
11
- require 'rdoc/rdoc'
12
- require 'rake/rdoctask'
13
- RDoc::Task = Rake::RDocTask
14
- end
6
+
7
+ require 'rdoc/task'
15
8
 
16
9
  RDoc::Task.new(:rdoc) do |rdoc|
17
10
  rdoc.rdoc_dir = 'rdoc'
@@ -21,8 +14,21 @@ RDoc::Task.new(:rdoc) do |rdoc|
21
14
  rdoc.rdoc_files.include('lib/**/*.rb')
22
15
  end
23
16
 
17
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
24
19
 
25
-
20
+ # load 'rails/tasks/statistics.rake'
26
21
 
27
22
  Bundler::GemHelper.install_tasks
28
23
 
24
+ # require 'rake/testtask'
25
+
26
+ # Rake::TestTask.new(:test) do |t|
27
+ # t.libs << 'lib'
28
+ # t.libs << 'test'
29
+ # t.pattern = 'test/**/*_test.rb'
30
+ # t.verbose = false
31
+ # end
32
+
33
+
34
+ # task default: :test
@@ -1,7 +1,5 @@
1
1
  class Bulky::UpdatesController < ApplicationController
2
2
 
3
- helper_method :model
4
-
5
3
  def edit
6
4
  end
7
5
 
@@ -18,20 +16,24 @@ class Bulky::UpdatesController < ApplicationController
18
16
  redirect_to bulky_edit_path(model: params[:model]), notice: I18n.t('flash.notice.enqueue_update')
19
17
  end
20
18
 
19
+ def params
20
+ @params ||= delete_blank(super)
21
+ end
22
+
21
23
  private
22
24
 
23
- def model
24
- @model ||= params[:model].classify.constantize
25
+ helper_method def model_name
26
+ params.require(:model)
27
+ end
28
+
29
+ helper_method def model
30
+ @model ||= model_name.classify.constantize
25
31
  end
26
32
 
27
33
  def ids
28
34
  Bulky.parse_ids(params[:ids])
29
35
  end
30
36
 
31
- def params
32
- @params ||= delete_blank(super)
33
- end
34
-
35
37
  def delete_blank(hash)
36
38
  hash.delete_if { |k,v| v.empty? or Hash === v && delete_blank(v).empty? }
37
39
  end
@@ -2,7 +2,7 @@ module Bulky
2
2
  module FormHelper
3
3
 
4
4
  def whitelisted_attributes_collection(model)
5
- model.accessible_attributes.select(&:present?).map {|a| [a.titleize, a]}
5
+ model.bulky_attributes.map(&:to_s).map {|a| [a.titleize, a]}
6
6
  end
7
7
 
8
8
  end
@@ -7,12 +7,4 @@ class Bulky::BulkUpdate < ActiveRecord::Base
7
7
  validates :ids, :updates, presence: true
8
8
 
9
9
  has_many :updated_records, class_name: 'Bulky::UpdatedRecord', foreign_key: :bulk_update_id
10
-
11
- validates_each :updates do |record, attr, value|
12
- record.errors[:updates] << "must be a hash" unless Hash === value
13
- end
14
-
15
- validates_each :ids do |record, attr, value|
16
- record.errors[:ids] << "must be an Array" unless Array === value
17
- end
18
10
  end
@@ -1,6 +1,6 @@
1
1
  %h1 Bulky
2
2
 
3
- = form_for :bulk, url: bulky_update_path(model: params[:model]), html: {method: :put} do |f|
3
+ = form_for :bulk, url: bulky_update_path(model: model_name), html: {method: :put} do |f|
4
4
  %p
5
5
  = f.select :attribute, whitelisted_attributes_collection(model), {include_blank: "Choose an Attribute"},
6
6
  name: "attribute", onchange: "document.getElementById('bulk_value').name = 'bulk[' + this.value + ']'"
@@ -1,11 +1,11 @@
1
1
  class CreateBulkyTables < ActiveRecord::Migration
2
- def up
2
+ def change
3
3
  create_table :bulky_bulk_updates, force: true do |t|
4
4
  t.text :ids, null: false
5
5
  t.text :updates, null: false
6
6
  t.integer :initiated_by_id
7
7
 
8
- t.timestamps
8
+ t.timestamps null: false
9
9
  end
10
10
  add_index :bulky_bulk_updates, :initiated_by_id
11
11
 
@@ -17,14 +17,9 @@ class CreateBulkyTables < ActiveRecord::Migration
17
17
  t.string :error_message
18
18
  t.text :error_backtrace
19
19
 
20
- t.timestamps
20
+ t.timestamps null: false
21
21
  end
22
22
  add_index :bulky_updated_records, :bulk_update_id
23
23
  add_index :bulky_updated_records, [:updatable_type, :updatable_id]
24
24
  end
25
-
26
- def down
27
- drop_table :bulky_updated_records
28
- drop_table :bulky_bulk_updates
29
- end
30
25
  end
@@ -7,7 +7,7 @@ module Bulky
7
7
  bulk_update = log_bulk_update(ids, updates)
8
8
 
9
9
  ids.each do |update_id|
10
- Resque.enqueue(Bulky::Updater, model.name, update_id, bulk_update.id)
10
+ Bulky::Worker.perform_async model.name, update_id, bulk_update.id
11
11
  end
12
12
  end
13
13
 
@@ -24,4 +24,6 @@ module Bulky
24
24
 
25
25
  end
26
26
 
27
+ require 'bulky/model'
27
28
  require 'bulky/updater'
29
+ require 'bulky/worker'
@@ -1,11 +1,7 @@
1
1
  require 'haml'
2
- require 'resque'
2
+ require 'sidekiq'
3
3
 
4
4
  module Bulky
5
5
  class Engine < ::Rails::Engine
6
- initializer "bulky.engine.queue_name" do |app|
7
- Bulky::Updater::QUEUE = :"#{app.class.parent_name.underscore}_bulky_updates"
8
- Bulky::Updater.instance_variable_set(:@queue, Bulky::Updater::QUEUE)
9
- end
10
6
  end
11
7
  end
@@ -0,0 +1,14 @@
1
+ module Bulky
2
+ module Model
3
+
4
+ def self.extended(base)
5
+ base.class_attribute :bulky_attributes
6
+ base.bulky_attributes = []
7
+ end
8
+
9
+ def bulky(*attributes)
10
+ self.bulky_attributes += attributes
11
+ end
12
+
13
+ end
14
+ end
@@ -1,34 +1,35 @@
1
1
  module Bulky
2
2
  class Updater
3
3
 
4
- def self.perform(model_name, update_id, bulk_update_id)
5
- model = model_name.constantize.find(update_id)
6
- new(model, bulk_update_id).update!
7
- end
4
+ attr_reader :model, :bulk_update
8
5
 
9
6
  def initialize(model, bulk_update_id)
10
7
  @bulk_update = Bulky::BulkUpdate.find(bulk_update_id)
11
8
  @model = model
12
- @updates = @bulk_update.updates
13
9
  end
14
10
 
15
- def update!
16
- @model.tap do
17
- @log = @bulk_update.updated_records.build { |r| r.updatable = @model }
11
+ def log
12
+ @log ||= bulk_update.updated_records.build { |r| r.updatable = model }
13
+ end
18
14
 
19
- begin
20
- @model.attributes = @updates
21
- @log.updatable_changes = @model.changes
22
- @model.save!
23
- rescue => e
24
- @log.error_message = e.message
25
- @log.error_backtrace = e.backtrace.join("\n")
26
- raise e
27
- ensure
28
- @log.save!
29
- end
30
- end
15
+ def strong_updates
16
+ ActionController::Parameters.new(bulk_update.updates)
31
17
  end
32
18
 
19
+ def updates
20
+ @updates ||= strong_updates.permit(*model.bulky_attributes)
21
+ end
22
+
23
+ def update!
24
+ model.attributes = updates
25
+ log.updatable_changes = model.changes
26
+ model.save!
27
+ rescue => e
28
+ log.error_message = e.message
29
+ log.error_backtrace = e.backtrace.join("\n")
30
+ raise e
31
+ ensure
32
+ log.save!
33
+ end
33
34
  end
34
35
  end
@@ -1,3 +1,3 @@
1
1
  module Bulky
2
- VERSION = "0.9.1"
2
+ VERSION = File.read(File.expand_path '../../../VERSION', __FILE__)
3
3
  end
@@ -0,0 +1,14 @@
1
+ module Bulky
2
+ class Worker
3
+ QUEUE = ENV.fetch('BULKY_QUEUE', 'default').freeze
4
+
5
+ include Sidekiq::Worker
6
+ sidekiq_options queue: QUEUE
7
+
8
+ def perform(model_name, update_id, bulk_update_id)
9
+ model = model_name.constantize.find(update_id)
10
+ Bulky::Updater.new(model, bulk_update_id).update!
11
+ end
12
+
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bulky
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Hunter
8
+ - Ben Vandgrift
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-04-22 00:00:00.000000000 Z
12
+ date: 2015-08-18 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rails
@@ -16,44 +17,44 @@ dependencies:
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: 3.2.8
20
+ version: 4.2.0
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: 3.2.8
27
+ version: 4.2.0
27
28
  - !ruby/object:Gem::Dependency
28
- name: resque
29
+ name: sidekiq
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: '1.22'
34
+ version: 3.4.2
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: '1.22'
41
+ version: 3.4.2
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: haml
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - ">="
46
47
  - !ruby/object:Gem::Version
47
- version: '3.1'
48
+ version: '4.0'
48
49
  type: :runtime
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
53
  - - ">="
53
54
  - !ruby/object:Gem::Version
54
- version: '3.1'
55
+ version: '4.0'
55
56
  - !ruby/object:Gem::Dependency
56
- name: sqlite3
57
+ name: pry
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - ">="
@@ -67,66 +68,53 @@ dependencies:
67
68
  - !ruby/object:Gem::Version
68
69
  version: '0'
69
70
  - !ruby/object:Gem::Dependency
70
- name: mysql2
71
+ name: sqlite3
71
72
  requirement: !ruby/object:Gem::Requirement
72
73
  requirements:
73
- - - "~>"
74
+ - - ">="
74
75
  - !ruby/object:Gem::Version
75
- version: 0.3.11
76
+ version: '0'
76
77
  type: :development
77
78
  prerelease: false
78
79
  version_requirements: !ruby/object:Gem::Requirement
79
80
  requirements:
80
- - - "~>"
81
+ - - ">="
81
82
  - !ruby/object:Gem::Version
82
- version: 0.3.11
83
+ version: '0'
83
84
  - !ruby/object:Gem::Dependency
84
85
  name: rspec-rails
85
86
  requirement: !ruby/object:Gem::Requirement
86
87
  requirements:
87
88
  - - "~>"
88
89
  - !ruby/object:Gem::Version
89
- version: 2.11.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 2.11.0
97
- - !ruby/object:Gem::Dependency
98
- name: capybara
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 1.1.2
90
+ version: 3.3.3
104
91
  type: :development
105
92
  prerelease: false
106
93
  version_requirements: !ruby/object:Gem::Requirement
107
94
  requirements:
108
95
  - - "~>"
109
96
  - !ruby/object:Gem::Version
110
- version: 1.1.2
97
+ version: 3.3.3
111
98
  - !ruby/object:Gem::Dependency
112
99
  name: database_cleaner
113
100
  requirement: !ruby/object:Gem::Requirement
114
101
  requirements:
115
102
  - - ">="
116
103
  - !ruby/object:Gem::Version
117
- version: 0.8.0
104
+ version: 1.4.1
118
105
  type: :development
119
106
  prerelease: false
120
107
  version_requirements: !ruby/object:Gem::Requirement
121
108
  requirements:
122
109
  - - ">="
123
110
  - !ruby/object:Gem::Version
124
- version: 0.8.0
111
+ version: 1.4.1
125
112
  description: Bulky allows you bulk update your ActiveRecord models. It will enqueue
126
113
  the bulk update and run it through the model's lifecycle to ensure validation are
127
114
  performed. Bulky also provides logging of bulk update success or failure.
128
115
  email:
129
- - adamhunter@me.com
116
+ - adamhunter@tma1.com
117
+ - ben@tma1.com
130
118
  executables: []
131
119
  extensions: []
132
120
  extra_rdoc_files: []
@@ -141,13 +129,14 @@ files:
141
129
  - app/views/bulky/updates/edit.html.haml
142
130
  - config/locales/en.yml
143
131
  - config/routes.rb
144
- - db/migrate/20120911145530_create_bulky_tables.rb
132
+ - db/migrate/20150817161700_create_bulky_tables.rb
145
133
  - lib/bulky.rb
146
134
  - lib/bulky/engine.rb
135
+ - lib/bulky/model.rb
147
136
  - lib/bulky/updater.rb
148
137
  - lib/bulky/version.rb
149
- - lib/tasks/bulky_tasks.rake
150
- homepage: https://github.com/adamhuner/bulky
138
+ - lib/bulky/worker.rb
139
+ homepage: https://github.com/tma1/bulky
151
140
  licenses: []
152
141
  metadata: {}
153
142
  post_install_message:
@@ -166,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
155
  version: '0'
167
156
  requirements: []
168
157
  rubyforge_project:
169
- rubygems_version: 2.2.2
158
+ rubygems_version: 2.4.6
170
159
  signing_key:
171
160
  specification_version: 4
172
161
  summary: Bulk update your ActiveRecord models.
@@ -1,11 +0,0 @@
1
- load "tasks/resque.rake"
2
-
3
- namespace :bulky do
4
- task :setup do
5
- ENV['QUEUE'] = Bulky::Updater::QUEUE.to_s
6
- ENV['BACKGROUND'] = true.to_s
7
- end
8
-
9
- desc "start a bulky queue worker (in the background)"
10
- task :work => [:environment, :setup, :"resque:work"]
11
- end