dorsale 3.1.6 → 3.1.7

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/app/controllers/dorsale/billing_machine/invoices_controller.rb +1 -1
  4. data/app/controllers/dorsale/billing_machine/quotations_controller.rb +1 -1
  5. data/app/controllers/dorsale/customer_vault/people_controller.rb +3 -1
  6. data/app/controllers/dorsale/expense_gun/expenses_controller.rb +1 -1
  7. data/app/controllers/dorsale/flyboy/tasks_controller.rb +1 -1
  8. data/app/controllers/dorsale/small_data/filters_controller.rb +5 -11
  9. data/app/filters/dorsale/small_data/filter.rb +39 -22
  10. data/app/models/dorsale/address.rb +1 -1
  11. data/app/models/dorsale/alexandrie/attachment.rb +4 -2
  12. data/app/models/dorsale/alexandrie/attachment_type.rb +1 -1
  13. data/app/models/dorsale/application_record.rb +3 -0
  14. data/app/models/dorsale/billing_machine/id_card.rb +1 -1
  15. data/app/models/dorsale/billing_machine/invoice.rb +1 -1
  16. data/app/models/dorsale/billing_machine/invoice_line.rb +1 -1
  17. data/app/models/dorsale/billing_machine/payment_term.rb +1 -1
  18. data/app/models/dorsale/billing_machine/quotation.rb +1 -1
  19. data/app/models/dorsale/billing_machine/quotation_line.rb +1 -1
  20. data/app/models/dorsale/comment.rb +4 -2
  21. data/app/models/dorsale/customer_vault/link.rb +1 -1
  22. data/app/models/dorsale/customer_vault/person.rb +7 -3
  23. data/app/models/dorsale/expense_gun/category.rb +1 -1
  24. data/app/models/dorsale/expense_gun/expense.rb +1 -1
  25. data/app/models/dorsale/expense_gun/expense_line.rb +1 -1
  26. data/app/models/dorsale/flyboy/folder.rb +1 -1
  27. data/app/models/dorsale/flyboy/task.rb +1 -1
  28. data/app/models/dorsale/flyboy/task_comment.rb +1 -1
  29. data/features/step_definitions/flyboy_tasks_steps.rb +1 -1
  30. data/features/support/poltergeist.rb +1 -1
  31. data/lib/dorsale/version.rb +1 -1
  32. data/spec/controllers/dorsale/flyboy/folders_controller_spec.rb +2 -6
  33. data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +2 -2
  34. data/spec/filters/dorsale/small_data/filter_spec.rb +8 -16
  35. data/spec/models/dorsale/i18n_spec.rb +1 -1
  36. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f873a20e46bfa3caee9df65c30c74c9a8451a2e8
4
- data.tar.gz: cc19ee4d7718957697d931b30b654569e86f99c2
3
+ metadata.gz: 4e8255c9d6c9efa78f99a3914f3ca347456faa10
4
+ data.tar.gz: c4bea5ce3821ec79e4fb8ff96fce60869cb49e2e
5
5
  SHA512:
6
- metadata.gz: 39bfb09fcf7dabbc4e863cc69d62f7901ef668b1e53f215135cf1414b20058319fb14b89c329ffcfb78d8cf507178e681b66e55c17933340486fdcaa19c0a725
7
- data.tar.gz: 3fbf7ff0e239aed72868926e6829510dc8b565c627c303850fe4fb1320e387cbbe5a3d78f9ddfbffc687722ad9b5034ba023bae18c7282423ebac37ab0f7f7cf
6
+ metadata.gz: 66c316f9221bf01e9b47a8dccc5da0512b3e374c765cf11595104db3189e068df578814219bb2895fecb1b0cdebd13e28395a5161d5362c7b1887f7464340987
7
+ data.tar.gz: 4a5e092869742218f94c4bcbc126c63f644d41a0dbf130a7370cecddbbaa3e2c27457069ebdacab833d6f1e041190a613a6fd0d7b4a689bd2003365b46ee3626
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.1.7
4
+
5
+ - Filters changes : get/set are now private
6
+ - Add Bullet gem
7
+ - Add ApplicationRecord
8
+
3
9
  ## 3.1.6
4
10
 
5
11
  - Migrate tests to PhantomJS 2
@@ -12,7 +12,7 @@ class Dorsale::BillingMachine::InvoicesController < ::Dorsale::BillingMachine::A
12
12
  # callback in BillingMachine::ApplicationController
13
13
  authorize model, :list?
14
14
 
15
- @invoices ||= scope.all
15
+ @invoices ||= scope.all.preload(:customer)
16
16
  @filters ||= ::Dorsale::BillingMachine::SmallData::FilterForInvoices.new(cookies)
17
17
 
18
18
  @invoices = @filters.apply(@invoices)
@@ -12,7 +12,7 @@ class Dorsale::BillingMachine::QuotationsController < ::Dorsale::BillingMachine:
12
12
  # callback in BillingMachine::ApplicationController
13
13
  authorize model, :list?
14
14
 
15
- @quotations ||= scope.all
15
+ @quotations ||= scope.all.preload(:customer)
16
16
  @filters ||= ::Dorsale::BillingMachine::SmallData::FilterForQuotations.new(cookies)
17
17
 
18
18
  @quotations = @filters.apply(@quotations)
@@ -13,7 +13,9 @@ class Dorsale::CustomerVault::PeopleController < ::Dorsale::CustomerVault::Appli
13
13
 
14
14
  @filters ||= ::Dorsale::CustomerVault::SmallData::FilterForPeople.new(cookies)
15
15
  @tags ||= customer_vault_tag_list
16
- @people ||= policy_scope(model).search(params[:q])
16
+ @people ||= policy_scope(model)
17
+ .search(params[:q])
18
+ .preload(:taggings)
17
19
 
18
20
  if params[:q].blank?
19
21
  @people = @filters.apply(@people)
@@ -15,7 +15,7 @@ class Dorsale::ExpenseGun::ExpensesController < Dorsale::ExpenseGun::Application
15
15
  def index
16
16
  authorize model, :list?
17
17
 
18
- @expenses ||= scope.all
18
+ @expenses ||= scope.all.preload(:user, :expense_lines)
19
19
  @filters ||= Dorsale::ExpenseGun::SmallData::FilterForExpenses.new(cookies)
20
20
  @expenses = @filters.apply(@expenses)
21
21
  @expenses = @expenses.page(params[:page]).per(25)
@@ -13,7 +13,7 @@ class Dorsale::Flyboy::TasksController < ::Dorsale::Flyboy::ApplicationControlle
13
13
  def index
14
14
  authorize model, :list?
15
15
 
16
- @tasks ||= scope.all
16
+ @tasks ||= scope.all.preload(:taskable)
17
17
 
18
18
  @order ||= sortable_column_order do |column, direction|
19
19
  case column
@@ -3,21 +3,15 @@ class Dorsale::SmallData::FiltersController < ::Dorsale::ApplicationController
3
3
  skip_authorization
4
4
  skip_policy_scope
5
5
 
6
- new_filters = params.fetch(:filters, {}).permit!.to_h
7
-
8
- new_filters.each do |key, value|
9
- new_filters[key] = "" if value == "0"
10
- end
11
-
12
6
  filters = ::Dorsale::SmallData::Filter.new(cookies)
13
- new_filters = filters.read.merge(new_filters)
14
- filters.store(new_filters)
7
+ new_filters = params.fetch(:filters, {}).permit!.to_h
8
+ filters.merge new_filters
15
9
 
16
10
  # Rewrite cookie with 1 year expiry
17
11
  cookies[:filters] = {
18
- :value => cookies[:filters],
12
+ :value => cookies[:filters],
19
13
  :expires => 1.year.from_now,
20
- :path => "/",
14
+ :path => "/",
21
15
  }
22
16
 
23
17
  redirect_to back_url
@@ -32,7 +26,7 @@ class Dorsale::SmallData::FiltersController < ::Dorsale::ApplicationController
32
26
  (main_app.root_path rescue "/"),
33
27
  ].select(&:present?).first
34
28
 
35
- # Delete page page
29
+ # Delete page param
36
30
  base, query_string = url.split("?")
37
31
  query_string = query_string.to_s.split("&").delete_if { |p| p.include?("page=") }.join("&")
38
32
  query_string = "?#{query_string}" if query_string.present?
@@ -1,26 +1,10 @@
1
1
  class Dorsale::SmallData::Filter
2
- def initialize(jar)
3
- @jar = jar
4
- end
5
-
6
- def store(filters)
7
- @jar["filters"] = filters.to_json
8
- end
9
-
10
- def read
11
- JSON.parse @jar["filters"].to_s
12
- rescue JSON::ParserError
13
- {}
14
- end
2
+ STRATEGIES = {}
15
3
 
16
- def get(key)
17
- read[key.to_s]
18
- end
4
+ attr_reader :jar
19
5
 
20
- def set(key, value)
21
- array = read
22
- array[key.to_s] = value
23
- store(array)
6
+ def initialize(jar)
7
+ @jar = jar
24
8
  end
25
9
 
26
10
  def strategies
@@ -40,12 +24,45 @@ class Dorsale::SmallData::Filter
40
24
  end
41
25
 
42
26
  def method_missing(method, *args)
43
- key = method.to_s
27
+ if method.to_s.end_with?("=")
28
+ key = method.to_s[0..-2]
29
+ value = args.first
30
+ action = :write
31
+ else
32
+ key = method.to_s
33
+ action = :read
34
+ end
44
35
 
45
- if strategies.key?(key)
36
+ if strategies.key?(key) && action == :read
46
37
  get(key)
38
+ elsif strategies.key?(key) && action == :write
39
+ set(key, value)
47
40
  else
48
41
  super
49
42
  end
50
43
  end
44
+
45
+ def read
46
+ JSON.parse jar["filters"].to_s
47
+ rescue JSON::ParserError
48
+ {}
49
+ end
50
+
51
+ def write(filters)
52
+ jar["filters"] = filters.to_json
53
+ end
54
+
55
+ def merge(new_filters)
56
+ write read.merge(new_filters)
57
+ end
58
+
59
+ private
60
+
61
+ def get(key)
62
+ read[key.to_s]
63
+ end
64
+
65
+ def set(key, value)
66
+ merge(key.to_s => value)
67
+ end
51
68
  end
@@ -1,4 +1,4 @@
1
- class Dorsale::Address < ActiveRecord::Base
1
+ class Dorsale::Address < ::Dorsale::ApplicationRecord
2
2
  belongs_to :addressable, polymorphic: true, inverse_of: :address
3
3
 
4
4
  validates :addressable, presence: true
@@ -1,4 +1,4 @@
1
- class Dorsale::Alexandrie::Attachment < ActiveRecord::Base
1
+ class Dorsale::Alexandrie::Attachment < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_alexandrie_attachments"
3
3
 
4
4
  belongs_to :attachable, polymorphic: true
@@ -14,7 +14,9 @@ class Dorsale::Alexandrie::Attachment < ActiveRecord::Base
14
14
  before_save :set_default_name
15
15
 
16
16
  default_scope -> {
17
- order(id: :desc)
17
+ all
18
+ .order(id: :desc)
19
+ .preload(:attachment_type)
18
20
  }
19
21
 
20
22
  def set_default_name
@@ -1,4 +1,4 @@
1
- class Dorsale::Alexandrie::AttachmentType < ActiveRecord::Base
1
+ class Dorsale::Alexandrie::AttachmentType < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_alexandrie_attachment_types"
3
3
 
4
4
  has_many :attachments, dependent: :nullify
@@ -0,0 +1,3 @@
1
+ class Dorsale::ApplicationRecord < ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
@@ -1,4 +1,4 @@
1
- class Dorsale::BillingMachine::IdCard < ActiveRecord::Base
1
+ class Dorsale::BillingMachine::IdCard < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_billing_machine_id_cards"
3
3
 
4
4
  has_many :invoices
@@ -1,4 +1,4 @@
1
- class Dorsale::BillingMachine::Invoice < ActiveRecord::Base
1
+ class Dorsale::BillingMachine::Invoice < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_billing_machine_invoices"
3
3
 
4
4
  belongs_to :customer, polymorphic: true
@@ -1,4 +1,4 @@
1
- class Dorsale::BillingMachine::InvoiceLine < ActiveRecord::Base
1
+ class Dorsale::BillingMachine::InvoiceLine < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_billing_machine_invoice_lines"
3
3
 
4
4
  belongs_to :invoice, inverse_of: :lines
@@ -1,3 +1,3 @@
1
- class Dorsale::BillingMachine::PaymentTerm < ActiveRecord::Base
1
+ class Dorsale::BillingMachine::PaymentTerm < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_billing_machine_payment_terms"
3
3
  end
@@ -1,4 +1,4 @@
1
- class Dorsale::BillingMachine::Quotation < ActiveRecord::Base
1
+ class Dorsale::BillingMachine::Quotation < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_billing_machine_quotations"
3
3
 
4
4
  STATES = %w(pending accepted refused canceled)
@@ -1,4 +1,4 @@
1
- class Dorsale::BillingMachine::QuotationLine < ActiveRecord::Base
1
+ class Dorsale::BillingMachine::QuotationLine < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_billing_machine_quotation_lines"
3
3
 
4
4
  belongs_to :quotation, inverse_of: :lines
@@ -1,4 +1,4 @@
1
- class Dorsale::Comment < ActiveRecord::Base
1
+ class Dorsale::Comment < ::Dorsale::ApplicationRecord
2
2
  belongs_to :author, polymorphic: true
3
3
  belongs_to :commentable, polymorphic: true
4
4
 
@@ -7,6 +7,8 @@ class Dorsale::Comment < ActiveRecord::Base
7
7
  validates :text, presence: true
8
8
 
9
9
  default_scope -> {
10
- order(created_at: :desc)
10
+ all
11
+ .order(created_at: :desc)
12
+ .preload(:author)
11
13
  }
12
14
  end
@@ -1,4 +1,4 @@
1
- class Dorsale::CustomerVault::Link < ActiveRecord::Base
1
+ class Dorsale::CustomerVault::Link < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_customer_vault_links"
3
3
 
4
4
  belongs_to :alice, class_name: ::Dorsale::CustomerVault::Person
@@ -1,6 +1,6 @@
1
1
  require "dorsale/search"
2
2
 
3
- class Dorsale::CustomerVault::Person < ActiveRecord::Base
3
+ class Dorsale::CustomerVault::Person < ::Dorsale::ApplicationRecord
4
4
  self.table_name = "dorsale_customer_vault_people"
5
5
 
6
6
  extend Forwardable
@@ -50,10 +50,14 @@ class Dorsale::CustomerVault::Person < ActiveRecord::Base
50
50
  end
51
51
 
52
52
  def links
53
- a = ::Dorsale::CustomerVault::Link.where(alice_id: id)
53
+ a = ::Dorsale::CustomerVault::Link
54
+ .where(alice_id: id)
55
+ .preload(:alice => :taggings, :bob => :taggings)
54
56
  .each { |l| l.person = l.alice ; l.other_person = l.bob }
55
57
 
56
- b = ::Dorsale::CustomerVault::Link.where(bob_id: id)
58
+ b = ::Dorsale::CustomerVault::Link
59
+ .where(bob_id: id)
60
+ .preload(:alice => :taggings, :bob => :taggings)
57
61
  .each { |l| l.person = l.bob ; l.other_person = l.alice }
58
62
 
59
63
  return a + b
@@ -1,4 +1,4 @@
1
- class Dorsale::ExpenseGun::Category < ActiveRecord::Base
1
+ class Dorsale::ExpenseGun::Category < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_expense_gun_categories"
3
3
 
4
4
  validates :name, presence: true
@@ -1,4 +1,4 @@
1
- class Dorsale::ExpenseGun::Expense < ActiveRecord::Base
1
+ class Dorsale::ExpenseGun::Expense < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_expense_gun_expenses"
3
3
  include AASM
4
4
 
@@ -1,4 +1,4 @@
1
- class Dorsale::ExpenseGun::ExpenseLine < ActiveRecord::Base
1
+ class Dorsale::ExpenseGun::ExpenseLine < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_expense_gun_expense_lines"
3
3
 
4
4
  belongs_to :expense, class_name: ::Dorsale::ExpenseGun::Expense
@@ -1,7 +1,7 @@
1
1
  require "dorsale/search"
2
2
  require "dorsale/polymorphic_id"
3
3
 
4
- class Dorsale::Flyboy::Folder < ActiveRecord::Base
4
+ class Dorsale::Flyboy::Folder < ::Dorsale::ApplicationRecord
5
5
  self.table_name = "dorsale_flyboy_folders"
6
6
 
7
7
  include AASM
@@ -1,7 +1,7 @@
1
1
  require "dorsale/search"
2
2
  require "dorsale/polymorphic_id"
3
3
 
4
- class Dorsale::Flyboy::Task < ActiveRecord::Base
4
+ class Dorsale::Flyboy::Task < ::Dorsale::ApplicationRecord
5
5
  self.table_name = "dorsale_flyboy_tasks"
6
6
 
7
7
  include ::Dorsale::Search
@@ -1,4 +1,4 @@
1
- class Dorsale::Flyboy::TaskComment < ActiveRecord::Base
1
+ class Dorsale::Flyboy::TaskComment < ::Dorsale::ApplicationRecord
2
2
  self.table_name = "dorsale_flyboy_task_comments"
3
3
 
4
4
  belongs_to :task
@@ -63,7 +63,7 @@ When(/^the flyboy daily crons run$/) do
63
63
  end
64
64
 
65
65
  When(/^I create a task$/) do
66
- all("a[href*='tasks/new']").first.click
66
+ find("#context-main a[href*='tasks/new']").click
67
67
  find("form[id*=task] [type=submit]").click # First submit to see errors
68
68
  fill_in "task_name", with: "I-am-the-task-title"
69
69
  fill_in "task_description", with: "I-am-the-task-description"
@@ -19,4 +19,4 @@ end
19
19
  Capybara.default_driver = :poltergeist
20
20
  Capybara.javascript_driver = :poltergeist
21
21
  Capybara.current_driver = :poltergeist
22
- Capybara.default_max_wait_time = 3
22
+ Capybara.default_max_wait_time = 5
@@ -1,3 +1,3 @@
1
1
  module Dorsale
2
- VERSION = "3.1.6"
2
+ VERSION = "3.1.7"
3
3
  end
@@ -26,17 +26,13 @@ describe Dorsale::Flyboy::FoldersController, type: :controller do
26
26
  end
27
27
 
28
28
  it 'should filter by status closed' do
29
- Dorsale::Flyboy::SmallData::FilterForFolders.new(request.cookies)
30
- .store(fb_status: "closed")
31
-
29
+ cookies["filters"] = {fb_status: "closed"}.to_json
32
30
  get :index
33
31
  expect(assigns(:folders)).to eq [@folder2]
34
32
  end
35
33
 
36
34
  it 'should filter by status open' do
37
- Dorsale::Flyboy::SmallData::FilterForFolders.new(request.cookies)
38
- .store(fb_status: "open")
39
-
35
+ cookies["filters"] = {fb_status: "open"}.to_json
40
36
  get :index
41
37
  expect(assigns(:folders)).to eq [@folder1]
42
38
  end
@@ -65,13 +65,13 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
65
65
  end
66
66
 
67
67
  it 'should filter by status closed' do
68
- Dorsale::Flyboy::SmallData::FilterForTasks.new(request.cookies).store({'fb_status' => "closed"})
68
+ cookies["filters"] = {'fb_status' => "closed"}.to_json
69
69
  get :index
70
70
  expect(assigns(:tasks).to_a).to eq [@task1]
71
71
  end
72
72
 
73
73
  it 'should filter by status opened' do
74
- Dorsale::Flyboy::SmallData::FilterForTasks.new(request.cookies).store({'fb_status' => "opened"})
74
+ cookies["filters"] = {'fb_status' => "opened"}.to_json
75
75
  get :index
76
76
  expect(assigns(:tasks).to_a).to eq [@task2]
77
77
  end
@@ -6,16 +6,16 @@ module Dorsale
6
6
  let(:filter) { {"name" => "bidule"} }
7
7
  let(:f) { Dorsale::SmallData::Filter.new(jar) }
8
8
 
9
- describe "store" do
10
- it "should store the provided hash as json in the jar" do
11
- f.store(filter)
9
+ describe "write" do
10
+ it "should write the provided hash as json in the jar" do
11
+ f.write(filter)
12
12
  expect(jar["filters"]).to eq filter.to_json
13
13
  end
14
14
  end
15
15
 
16
16
  describe "read" do
17
17
  it "should read stored filters" do
18
- f.store(filter)
18
+ f.write(filter)
19
19
  expect(f.read).to eq(filter)
20
20
  end
21
21
 
@@ -29,19 +29,11 @@ module Dorsale
29
29
  end
30
30
  end
31
31
 
32
- describe "get" do
33
- it "should return the value" do
34
- f.store(filter)
35
- expect(f.get("name")).to eq("bidule")
36
- end
32
+ it "should set/get values" do
33
+ filter = Dorsale::CustomerVault::SmallData::FilterForPeople.new({})
34
+ filter.person_type = "truc"
35
+ expect(filter.person_type).to eq "truc"
37
36
  end
38
37
 
39
- describe "set" do
40
- it "should set the value" do
41
- f.store(filter)
42
- f.set("new", "truc")
43
- expect(f.get("new")).to eq("truc")
44
- end
45
- end
46
38
  end
47
39
  end
@@ -7,7 +7,7 @@ RSpec.describe "i18n" do
7
7
 
8
8
  # TODO : test FR + EN
9
9
 
10
- ActiveRecord::Base.descendants.each do |model|
10
+ ::Dorsale::ApplicationRecord.descendants.each do |model|
11
11
  next unless model.to_s.start_with?("Dorsale")
12
12
 
13
13
  it "should i18n #{model} model name" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorsale
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.6
4
+ version: 3.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - agilidée
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-08 00:00:00.000000000 Z
11
+ date: 2016-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -570,6 +570,7 @@ files:
570
570
  - app/models/dorsale/alexandrie.rb
571
571
  - app/models/dorsale/alexandrie/attachment.rb
572
572
  - app/models/dorsale/alexandrie/attachment_type.rb
573
+ - app/models/dorsale/application_record.rb
573
574
  - app/models/dorsale/billing_machine.rb
574
575
  - app/models/dorsale/billing_machine/id_card.rb
575
576
  - app/models/dorsale/billing_machine/invoice.rb