bookkeeper 0.0.4 → 0.0.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.
Files changed (43) hide show
  1. data/app/assets/javascripts/bookkeeper.js +2 -0
  2. data/app/controllers/bookkeeper/balance_controller.rb +15 -0
  3. data/app/controllers/bookkeeper/movements_controller.rb +67 -0
  4. data/app/models/bookkeeper/account.rb +25 -0
  5. data/app/models/bookkeeper/categories.rb +9 -0
  6. data/app/models/bookkeeper/movement.rb +27 -0
  7. data/app/models/bookkeeper/purchase.rb +4 -1
  8. data/app/uploaders/receipt_uploader.rb +8 -8
  9. data/app/views/bookkeeper/balance/index.html.erb +31 -0
  10. data/app/views/bookkeeper/movements/_form.html.erb +15 -0
  11. data/app/views/bookkeeper/movements/_search.html.erb +6 -0
  12. data/app/views/bookkeeper/movements/edit.html.erb +5 -0
  13. data/app/views/bookkeeper/movements/index.html.erb +36 -0
  14. data/app/views/bookkeeper/movements/new.html.erb +5 -0
  15. data/app/views/bookkeeper/purchases/_form.html.erb +7 -1
  16. data/config/locales/en.yml +23 -0
  17. data/config/locales/rails-i18n.en.yml +206 -0
  18. data/config/locales/rails-i18n.it.yml +206 -0
  19. data/config/locales/simple_form.en.yml +3 -2
  20. data/config/routes.rb +2 -0
  21. data/db/migrate/20130228234536_create_bookkeeper_accounts.rb +14 -0
  22. data/db/migrate/20130228234703_create_bookkeeper_movements.rb +14 -0
  23. data/db/migrate/20130308231159_add_details_to_purchases.rb +6 -0
  24. data/db/migrate/20130308231918_create_bookkeeper_categories.rb +9 -0
  25. data/lib/bookkeeper/engine.rb +0 -1
  26. data/lib/bookkeeper/version.rb +1 -1
  27. data/spec/controllers/bookkeeper/balance_controller_spec.rb +26 -0
  28. data/spec/controllers/bookkeeper/movements_controller_spec.rb +147 -0
  29. data/spec/controllers/bookkeeper/purchases_controller_spec.rb +144 -158
  30. data/spec/dummy/db/development.sqlite3 +0 -0
  31. data/spec/dummy/db/schema.rb +37 -3
  32. data/spec/dummy/db/test.sqlite3 +0 -0
  33. data/spec/dummy/log/development.log +69 -0
  34. data/spec/dummy/log/test.log +8485 -0
  35. data/spec/factories/bookkeeper_accounts.rb +10 -0
  36. data/spec/factories/bookkeeper_categories.rb +6 -0
  37. data/spec/factories/bookkeeper_movements.rb +22 -0
  38. data/spec/factories/bookkeeper_purchases.rb +1 -0
  39. data/spec/models/bookkeeper/account_spec.rb +21 -0
  40. data/spec/models/bookkeeper/categories_spec.rb +7 -0
  41. data/spec/models/bookkeeper/movement_spec.rb +28 -0
  42. data/spec/uploaders/receipt_uploader_spec.rb +5 -5
  43. metadata +53 -18
@@ -0,0 +1,206 @@
1
+ #encoding: utf-8
2
+ it:
3
+ date:
4
+ abbr_day_names:
5
+ - Dom
6
+ - Lun
7
+ - Mar
8
+ - Mer
9
+ - Gio
10
+ - Ven
11
+ - Sab
12
+ abbr_month_names:
13
+ -
14
+ - Gen
15
+ - Feb
16
+ - Mar
17
+ - Apr
18
+ - Mag
19
+ - Giu
20
+ - Lug
21
+ - Ago
22
+ - Set
23
+ - Ott
24
+ - Nov
25
+ - Dic
26
+ day_names:
27
+ - Domenica
28
+ - Lunedì
29
+ - Martedì
30
+ - Mercoledì
31
+ - Giovedì
32
+ - Venerdì
33
+ - Sabato
34
+ formats:
35
+ default: ! '%d-%m-%Y'
36
+ long: ! '%d %B %Y'
37
+ short: ! '%d %b'
38
+ month_names:
39
+ -
40
+ - Gennaio
41
+ - Febbraio
42
+ - Marzo
43
+ - Aprile
44
+ - Maggio
45
+ - Giugno
46
+ - Luglio
47
+ - Agosto
48
+ - Settembre
49
+ - Ottobre
50
+ - Novembre
51
+ - Dicembre
52
+ order:
53
+ - :day
54
+ - :month
55
+ - :year
56
+ datetime:
57
+ distance_in_words:
58
+ about_x_hours:
59
+ one: circa un'ora
60
+ other: circa %{count} ore
61
+ about_x_months:
62
+ one: circa un mese
63
+ other: circa %{count} mesi
64
+ about_x_years:
65
+ one: circa un anno
66
+ other: circa %{count} anni
67
+ almost_x_years:
68
+ one: circa 1 anno
69
+ other: circa %{count} anni
70
+ half_a_minute: mezzo minuto
71
+ less_than_x_minutes:
72
+ one: meno di un minuto
73
+ other: meno di %{count} minuti
74
+ less_than_x_seconds:
75
+ one: meno di un secondo
76
+ other: meno di %{count} secondi
77
+ over_x_years:
78
+ one: oltre un anno
79
+ other: oltre %{count} anni
80
+ x_days:
81
+ one: 1 giorno
82
+ other: ! '%{count} giorni'
83
+ x_minutes:
84
+ one: 1 minuto
85
+ other: ! '%{count} minuti'
86
+ x_months:
87
+ one: 1 mese
88
+ other: ! '%{count} mesi'
89
+ x_seconds:
90
+ one: 1 secondo
91
+ other: ! '%{count} secondi'
92
+ prompts:
93
+ day: Giorno
94
+ hour: Ora
95
+ minute: Minuto
96
+ month: Mese
97
+ second: Secondi
98
+ year: Anno
99
+ errors: &errors
100
+ format: ! '%{attribute} %{message}'
101
+ messages:
102
+ accepted: deve essere accettata
103
+ blank: non può essere lasciato in bianco
104
+ confirmation: non coincide con la conferma
105
+ empty: non può essere vuoto
106
+ equal_to: deve essere uguale a %{count}
107
+ even: deve essere pari
108
+ exclusion: è riservato
109
+ greater_than: deve essere superiore a %{count}
110
+ greater_than_or_equal_to: deve essere superiore o uguale a %{count}
111
+ inclusion: non è incluso nella lista
112
+ invalid: non è valido
113
+ less_than: deve essere meno di %{count}
114
+ less_than_or_equal_to: deve essere meno o uguale a %{count}
115
+ not_a_number: non è un numero
116
+ not_an_integer: non è un intero
117
+ odd: deve essere dispari
118
+ record_invalid: ! 'Validazione fallita: %{errors}'
119
+ taken: è già in uso
120
+ too_long:
121
+ one: è troppo lungo (il massimo è 1 carattere)
122
+ other: è troppo lungo (il massimo è %{count} caratteri)
123
+ too_short:
124
+ one: è troppo corto (il minimo è 1 carattere)
125
+ other: è troppo corto (il minimo è %{count} caratteri)
126
+ wrong_length:
127
+ one: è della lunghezza sbagliata (deve essere di 1 carattere)
128
+ other: è della lunghezza sbagliata (deve essere di %{count} caratteri)
129
+ template:
130
+ body: ! 'Per favore ricontrolla i seguenti campi:'
131
+ header:
132
+ one: ! 'Non posso salvare questo %{model}: 1 errore'
133
+ other: ! 'Non posso salvare questo %{model}: %{count} errori.'
134
+ helpers:
135
+ select:
136
+ prompt: Per favore, seleziona
137
+ submit:
138
+ create: Crea %{model}
139
+ submit: Invia %{model}
140
+ update: Aggiorna %{model}
141
+ number:
142
+ currency:
143
+ format:
144
+ delimiter: .
145
+ format: ! '%n %u'
146
+ precision: 2
147
+ separator: ! '.'
148
+ significant: false
149
+ strip_insignificant_zeros: false
150
+ unit: €
151
+ format:
152
+ delimiter: .
153
+ precision: 2
154
+ separator: ! ','
155
+ significant: false
156
+ strip_insignificant_zeros: false
157
+ human:
158
+ decimal_units:
159
+ format: ! '%n %u'
160
+ units:
161
+ billion: Miliardi
162
+ million: Milioni
163
+ quadrillion: Biliardi
164
+ thousand: Mila
165
+ trillion: Bilioni
166
+ unit: ''
167
+ format:
168
+ delimiter: ''
169
+ precision: 1
170
+ significant: true
171
+ strip_insignificant_zeros: true
172
+ storage_units:
173
+ format: ! '%n %u'
174
+ units:
175
+ byte:
176
+ one: Byte
177
+ other: Byte
178
+ gb: GB
179
+ kb: KB
180
+ mb: MB
181
+ tb: TB
182
+ percentage:
183
+ format:
184
+ delimiter: ''
185
+ precision:
186
+ format:
187
+ delimiter: ''
188
+ support:
189
+ array:
190
+ last_word_connector: ! ' e '
191
+ two_words_connector: ! ' e '
192
+ words_connector: ! ', '
193
+ time:
194
+ am: am
195
+ formats:
196
+ default: ! '%a %d %b %Y, %H:%M:%S %z'
197
+ long: ! '%d %B %Y %H:%M'
198
+ short: ! '%d %b %H:%M'
199
+ pm: pm
200
+ # remove these aliases after 'activemodel' and 'activerecord' namespaces are removed from Rails repository
201
+ activemodel:
202
+ errors:
203
+ <<: *errors
204
+ activerecord:
205
+ errors:
206
+ <<: *errors
@@ -3,11 +3,12 @@ en:
3
3
  "yes": 'Yes'
4
4
  "no": 'No'
5
5
  required:
6
- text: 'required'
7
- mark: '*'
6
+ # text: 'required'
7
+ # mark: '*'
8
8
  # You can uncomment the line below if you need to overwrite the whole required html.
9
9
  # When using html, text and mark won't be used.
10
10
  # html: '<abbr title="required">*</abbr>'
11
+ html: '<a href="#" data-toggle="tooltip" title="Required"><i class="icon-exclamation-sign"></i></a>'
11
12
  error_notification:
12
13
  default_message: "Please review the problems below:"
13
14
  # Labels and hints examples
data/config/routes.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  Bookkeeper::Engine.routes.draw do
2
2
  resources :purchases
3
3
  resources :search, only: [:create]
4
+ resources :balance, only: [:index]
5
+ resources :movements
4
6
  end
@@ -0,0 +1,14 @@
1
+ class CreateBookkeeperAccounts < ActiveRecord::Migration
2
+ def change
3
+ create_table :bookkeeper_accounts do |t|
4
+ t.string :title, nil: false
5
+ t.decimal :initial_balance, precision: 8, scale: 2, default: 0
6
+ t.decimal :balance, precision: 8, scale: 2, nil: false
7
+ t.datetime :start_date
8
+ t.datetime :end_date
9
+ t.timestamps
10
+ end
11
+ add_index :bookkeeper_accounts, :title
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ class CreateBookkeeperMovements < ActiveRecord::Migration
2
+ def change
3
+ create_table :bookkeeper_movements do |t|
4
+ t.integer :account_id, nil: false
5
+ t.decimal :amount, precision: 8, scale: 2, nil: false
6
+ t.string :description, nil: false
7
+ t.timestamps
8
+ end
9
+ add_index :bookkeeper_movements, :account_id
10
+ add_index :bookkeeper_movements, :amount
11
+ add_index :bookkeeper_movements, :description
12
+ end
13
+ end
14
+
@@ -0,0 +1,6 @@
1
+ class AddDetailsToPurchases < ActiveRecord::Migration
2
+ def up
3
+ add_column :bookkeeper_purchases, :invoice, :boolean, default: false
4
+ add_column :bookkeeper_purchases, :amount, :decimal, precision: 8, scale: 2
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ class CreateBookkeeperCategories < ActiveRecord::Migration
2
+ def change
3
+ create_table :bookkeeper_categories do |t|
4
+ t.references :categorizable, polymorphic: true, nil: false
5
+ t.string :name, uniq: true, nil: false
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'validates_timeliness'
3
- require 'RMagick'
4
3
  require 'carrierwave'
5
4
  require 'simple_form'
6
5
 
@@ -1,3 +1,3 @@
1
1
  module Bookkeeper
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module Bookkeeper
4
+ describe BalanceController do
5
+ describe "GET index" do
6
+ before :each do
7
+ @account = create(:bookkeeper_account)
8
+ end
9
+
10
+ it "assigns all movements as @movements in reverse creation date" do
11
+ movement1 = create(:bookkeeper_movement, account: @account)
12
+ movement2 = create(:bookkeeper_movement, account: @account)
13
+ movement3 = create(:bookkeeper_movement, account: @account)
14
+ movement4 = create(:bookkeeper_movement, account: @account)
15
+ get :index, { use_route: :movements }
16
+ expect(assigns(:movements)).to eq [movement4, movement3, movement2, movement1]
17
+ end
18
+
19
+ it "renders the :index template" do
20
+ get :index, { use_route: :movements }
21
+ expect(response).to render_template :index
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,147 @@
1
+ require 'spec_helper'
2
+
3
+ # module Bookkeeper
4
+ # describe MovementsController do
5
+ # describe "GET index" do
6
+ # it "assigns all movements as @movements" do
7
+ # movement = create(:bookkeeper_movement)
8
+ # get :index, { use_route: :movements }
9
+ # expect(assigns(:movements)).to match_array [movement]
10
+ # end
11
+ #
12
+ # it "renders the :index template" do
13
+ # movement = create(:bookkeeper_movement)
14
+ # get :index, { use_route: :movements }
15
+ # expect(response).to render_template :index
16
+ # end
17
+ #
18
+ # it "shows all movements ordered by creation" do
19
+ # first_movement = create(:bookkeeper_movement)
20
+ # last_movement = create(:bookkeeper_movement)
21
+ # get :index, { use_route: :movements }
22
+ # expect(assigns(:movements)).to eq([last_movement, first_movement])
23
+ # end
24
+ #
25
+ # end
26
+ #
27
+ # describe "GET new" do
28
+ # it "assigns a new movement as @movement" do
29
+ # get :new, { use_route: :movements }
30
+ # expect(assigns(:movement)).to be_a_new(Movement)
31
+ # end
32
+ #
33
+ # it "renders the :new template" do
34
+ # get :new, { use_route: :movements }
35
+ # expect(response).to render_template :new
36
+ # end
37
+ # end
38
+ #
39
+ # describe "GET edit" do
40
+ # it "assigns the requested movement as @movement" do
41
+ # movement = create(:bookkeeper_movement)
42
+ # get :edit, { id: movement.to_param, use_route: :movements }
43
+ # expect(assigns(:movement)).to eq(movement)
44
+ # end
45
+ #
46
+ # it "renders the :edit template" do
47
+ # movement = create(:bookkeeper_movement)
48
+ # get :edit, { id: movement.to_param, use_route: :movements }
49
+ # expect(response).to render_template :edit
50
+ # end
51
+ # end
52
+ #
53
+ # describe "POST create" do
54
+ # describe "with valid params" do
55
+ # it "creates a new movement" do
56
+ # expect {
57
+ # post :create, {movement: attributes_for(:bookkeeper_movement), use_route: :movements}
58
+ # }.to change(Movement, :count).by(1)
59
+ # end
60
+ #
61
+ # it "assigns a newly created movement as @movement" do
62
+ # post :create, {movement: attributes_for(:bookkeeper_movement), use_route: :movements}
63
+ # expect(assigns(:movement)).to be_a(Movement)
64
+ # expect(assigns(:movement)).to be_persisted
65
+ # end
66
+ #
67
+ # it "redirects to the balance page" do
68
+ # post :create, {movement: attributes_for(:bookkeeper_movement), use_route: :movements}
69
+ # expect(response).to redirect_to :balance_index
70
+ # end
71
+ # end
72
+ #
73
+ # describe "with invalid params" do
74
+ # it "does not save the new movement" do
75
+ # expect {
76
+ # post :create, {movement: attributes_for(:bookkeeper_invalid_movement), use_route: :movements}
77
+ # }.to_not change(Movement, :count).by(1)
78
+ # end
79
+ #
80
+ # it "assigns a newly created but unsaved movement as @movement" do
81
+ # post :create, {movement: attributes_for(:bookkeeper_invalid_movement), use_route: :movements}
82
+ # expect(assigns(:movement)).to be_a_new(Movement)
83
+ # end
84
+ #
85
+ # it "re-renders the 'new' template" do
86
+ # post :create, {movement: attributes_for(:bookkeeper_invalid_movement), use_route: :movements}
87
+ # expect(response).to render_template :new
88
+ # end
89
+ # end
90
+ # end
91
+ #
92
+ # describe "PUT update" do
93
+ # before :each do
94
+ # @movement_amount = 12.0
95
+ # @movement = create(:bookkeeper_movement, amount: @movement_amount, description: 'Test lorem ipsum')
96
+ # end
97
+ #
98
+ # describe "with valid params" do
99
+ # it "updates the requested movement" do
100
+ # put :update, {id: @movement, use_route: :movements, movement: attributes_for(:bookkeeper_movement)}
101
+ # expect(assigns(:movement)).to eq(@movement)
102
+ # end
103
+ #
104
+ # it "assigns the requested movement as @movement" do
105
+ # put :update, {id: @movement.to_param, movement: attributes_for(:bookkeeper_movement), use_route: :movements}
106
+ # expect(assigns(:movement)).to eq(@movement)
107
+ # end
108
+ #
109
+ # it "redirects to the balance page" do
110
+ # put :update, {id: @movement.to_param, movement: attributes_for(:bookkeeper_movement), use_route: :movements}
111
+ # expect(response).to redirect_to :balance_index
112
+ # end
113
+ # end
114
+ #
115
+ # describe "with invalid params" do
116
+ # it "assigns the movement as @movement" do
117
+ # put :update, {id: @movement.to_param, movement: attributes_for(:bookkeeper_invalid_movement), use_route: :movements}
118
+ # @movement.reload
119
+ # expect(@movement.amount).to eq(@movement_amount)
120
+ # end
121
+ #
122
+ # it "re-renders the 'edit' template" do
123
+ # put :update, {id: @movement.to_param, movement: attributes_for(:bookkeeper_invalid_movement), use_route: :movements}
124
+ # expect(response).to render_template :edit
125
+ # end
126
+ # end
127
+ # end
128
+ #
129
+ # describe "DELETE destroy" do
130
+ # before :each do
131
+ # @movement = create(:bookkeeper_movement)
132
+ # end
133
+ # it "destroys the requested movement" do
134
+ # expect {
135
+ # delete :destroy, {id: @movement.to_param, use_route: :movements}
136
+ # }.to change(Movement, :count).by(-1)
137
+ # end
138
+ #
139
+ # it "redirects to the balance page" do
140
+ # delete :destroy, {id: @movement.to_param, use_route: :movements}
141
+ # expect(response).to redirect_to :balance_index
142
+ # end
143
+ # end
144
+ #
145
+ # end
146
+ # end
147
+ #