invoicing 0.2.1 → 1.0.0
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.
- checksums.yaml +7 -0
- data/LICENSE +1 -0
- data/README.md +57 -0
- data/Rakefile +16 -37
- data/lib/invoicing.rb +20 -10
- data/lib/invoicing/cached_record.rb +9 -6
- data/lib/invoicing/class_info.rb +34 -34
- data/lib/invoicing/connection_adapter_ext.rb +4 -4
- data/lib/invoicing/countries/uk.rb +6 -6
- data/lib/invoicing/currency_value.rb +39 -32
- data/lib/invoicing/find_subclasses.rb +40 -15
- data/lib/invoicing/ledger_item.rb +166 -145
- data/lib/invoicing/ledger_item/pdf_generator.rb +108 -0
- data/lib/invoicing/ledger_item/render_html.rb +76 -73
- data/lib/invoicing/ledger_item/render_ubl.rb +37 -35
- data/lib/invoicing/line_item.rb +43 -38
- data/lib/invoicing/price.rb +1 -1
- data/lib/invoicing/tax_rate.rb +3 -6
- data/lib/invoicing/taxable.rb +37 -32
- data/lib/invoicing/time_dependent.rb +40 -40
- data/lib/invoicing/version.rb +4 -4
- data/lib/rails/generators/invoicing/invoicing_generator.rb +14 -0
- data/lib/rails/generators/invoicing/ledger_item/ledger_item_generator.rb +17 -0
- data/lib/rails/generators/invoicing/ledger_item/templates/migration.rb +25 -0
- data/lib/rails/generators/invoicing/ledger_item/templates/model.rb +5 -0
- data/lib/rails/generators/invoicing/line_item/line_item_generator.rb +17 -0
- data/lib/rails/generators/invoicing/line_item/templates/migration.rb +20 -0
- data/lib/rails/generators/invoicing/line_item/templates/model.rb +5 -0
- data/lib/rails/generators/invoicing/tax_rate/tax_rate_generator.rb +17 -0
- data/lib/rails/generators/invoicing/tax_rate/templates/migration.rb +14 -0
- data/lib/rails/generators/invoicing/tax_rate/templates/model.rb +3 -0
- metadata +110 -153
- data.tar.gz.sig +0 -1
- data/History.txt +0 -31
- data/Manifest.txt +0 -62
- data/PostInstall.txt +0 -10
- data/README.rdoc +0 -58
- data/script/console +0 -10
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/tasks/rcov.rake +0 -4
- data/test/cached_record_test.rb +0 -100
- data/test/class_info_test.rb +0 -253
- data/test/connection_adapter_ext_test.rb +0 -79
- data/test/currency_value_test.rb +0 -209
- data/test/find_subclasses_test.rb +0 -120
- data/test/fixtures/README +0 -7
- data/test/fixtures/cached_record.sql +0 -22
- data/test/fixtures/class_info.sql +0 -28
- data/test/fixtures/currency_value.sql +0 -29
- data/test/fixtures/find_subclasses.sql +0 -43
- data/test/fixtures/ledger_item.sql +0 -39
- data/test/fixtures/line_item.sql +0 -33
- data/test/fixtures/price.sql +0 -4
- data/test/fixtures/tax_rate.sql +0 -4
- data/test/fixtures/taxable.sql +0 -14
- data/test/fixtures/time_dependent.sql +0 -35
- data/test/ledger_item_test.rb +0 -444
- data/test/line_item_test.rb +0 -139
- data/test/models/README +0 -4
- data/test/models/test_subclass_in_another_file.rb +0 -3
- data/test/models/test_subclass_not_in_database.rb +0 -6
- data/test/price_test.rb +0 -9
- data/test/ref-output/creditnote3.html +0 -82
- data/test/ref-output/creditnote3.xml +0 -89
- data/test/ref-output/invoice1.html +0 -93
- data/test/ref-output/invoice1.xml +0 -111
- data/test/ref-output/invoice2.html +0 -86
- data/test/ref-output/invoice2.xml +0 -98
- data/test/ref-output/invoice_null.html +0 -36
- data/test/render_html_test.rb +0 -70
- data/test/render_ubl_test.rb +0 -44
- data/test/setup.rb +0 -37
- data/test/tax_rate_test.rb +0 -9
- data/test/taxable_test.rb +0 -180
- data/test/test_helper.rb +0 -72
- data/test/time_dependent_test.rb +0 -180
- metadata.gz.sig +0 -4
data.tar.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
���G�*���%0<N�t��^��2�$�P����3xő�����0�d�&k�U�t;2����k�ߚp���aP$V#�=@���`�f%m|��MaM,�SQ�g�.$� 8�7Ҥ,<�,��&��Y��u����GM8@���(b�nG�"���RuS��� �]�xK���PU�������.h�t��3��{(���y�~��)�kgI��dz���T#�ر �UC5ےּ0��=�v�hE�G��
|
data/History.txt
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
== 0.2.1
|
2
|
-
|
3
|
-
* 2 minor enhancements:
|
4
|
-
* Added option to LedgerItem#account_summary which enables inclusion of open/pending
|
5
|
-
ledger items in the summary
|
6
|
-
* Improved robustness and documentation for test suite
|
7
|
-
* 2 bugfixes:
|
8
|
-
* Compatibility with recent versions of ActiveRecord
|
9
|
-
* Cleaned up unnecessary gem dependencies (mocha, uuid)
|
10
|
-
|
11
|
-
== 0.2.0 2009-04-20
|
12
|
-
|
13
|
-
* 4 major enhancements:
|
14
|
-
* New associated gem invoicing_generator for generating an invoicing component in a Rails project
|
15
|
-
(script/generate invoicing_ledger)
|
16
|
-
* Generated controller and views for rendering statements and ledger
|
17
|
-
* Comes with a nice default stylesheet out of the box
|
18
|
-
* More flexible formatting of currency values
|
19
|
-
* 1 bugfix:
|
20
|
-
* Accidental overwriting of total_amount value on payment LedgerItems without LineItems
|
21
|
-
|
22
|
-
== 0.1.0 2009-02-10
|
23
|
-
|
24
|
-
* 2 major enhancements:
|
25
|
-
* Core API is now usable
|
26
|
-
* RCov reports 100% test coverage
|
27
|
-
|
28
|
-
== 0.0.1 2009-01-05
|
29
|
-
|
30
|
-
* 1 major enhancement:
|
31
|
-
* Initial public release
|
data/Manifest.txt
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
History.txt
|
2
|
-
LICENSE
|
3
|
-
Manifest.txt
|
4
|
-
PostInstall.txt
|
5
|
-
README.rdoc
|
6
|
-
Rakefile
|
7
|
-
lib/invoicing.rb
|
8
|
-
lib/invoicing/cached_record.rb
|
9
|
-
lib/invoicing/class_info.rb
|
10
|
-
lib/invoicing/connection_adapter_ext.rb
|
11
|
-
lib/invoicing/countries/uk.rb
|
12
|
-
lib/invoicing/currency_value.rb
|
13
|
-
lib/invoicing/find_subclasses.rb
|
14
|
-
lib/invoicing/ledger_item.rb
|
15
|
-
lib/invoicing/ledger_item/render_html.rb
|
16
|
-
lib/invoicing/ledger_item/render_ubl.rb
|
17
|
-
lib/invoicing/line_item.rb
|
18
|
-
lib/invoicing/price.rb
|
19
|
-
lib/invoicing/tax_rate.rb
|
20
|
-
lib/invoicing/taxable.rb
|
21
|
-
lib/invoicing/time_dependent.rb
|
22
|
-
lib/invoicing/version.rb
|
23
|
-
script/console
|
24
|
-
script/destroy
|
25
|
-
script/generate
|
26
|
-
tasks/rcov.rake
|
27
|
-
test/cached_record_test.rb
|
28
|
-
test/class_info_test.rb
|
29
|
-
test/connection_adapter_ext_test.rb
|
30
|
-
test/currency_value_test.rb
|
31
|
-
test/find_subclasses_test.rb
|
32
|
-
test/fixtures/README
|
33
|
-
test/fixtures/cached_record.sql
|
34
|
-
test/fixtures/class_info.sql
|
35
|
-
test/fixtures/currency_value.sql
|
36
|
-
test/fixtures/find_subclasses.sql
|
37
|
-
test/fixtures/ledger_item.sql
|
38
|
-
test/fixtures/line_item.sql
|
39
|
-
test/fixtures/price.sql
|
40
|
-
test/fixtures/tax_rate.sql
|
41
|
-
test/fixtures/taxable.sql
|
42
|
-
test/fixtures/time_dependent.sql
|
43
|
-
test/ledger_item_test.rb
|
44
|
-
test/line_item_test.rb
|
45
|
-
test/models/README
|
46
|
-
test/models/test_subclass_in_another_file.rb
|
47
|
-
test/models/test_subclass_not_in_database.rb
|
48
|
-
test/price_test.rb
|
49
|
-
test/ref-output/creditnote3.html
|
50
|
-
test/ref-output/creditnote3.xml
|
51
|
-
test/ref-output/invoice1.html
|
52
|
-
test/ref-output/invoice1.xml
|
53
|
-
test/ref-output/invoice2.html
|
54
|
-
test/ref-output/invoice2.xml
|
55
|
-
test/ref-output/invoice_null.html
|
56
|
-
test/render_html_test.rb
|
57
|
-
test/render_ubl_test.rb
|
58
|
-
test/setup.rb
|
59
|
-
test/tax_rate_test.rb
|
60
|
-
test/taxable_test.rb
|
61
|
-
test/test_helper.rb
|
62
|
-
test/time_dependent_test.rb
|
data/PostInstall.txt
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
|
2
|
-
Thanks for trying the Ruby Invoicing Gem. Hope you find it useful.
|
3
|
-
Do please blog and tweet about it (tag your posts with #invgem).
|
4
|
-
|
5
|
-
Now please go to the root of your Rails project and type:
|
6
|
-
script/generate invoicing_ledger billing --currency=GBP
|
7
|
-
(replace GBP with your currency if you do not use Pounds Sterling).
|
8
|
-
For more information please go to http://ept.github.com/invoicing/
|
9
|
-
|
10
|
-
|
data/README.rdoc
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
= Ruby Invoicing Framework
|
2
|
-
|
3
|
-
* {Ruby Invoicing Framework website}[http://ept.github.com/invoicing/]
|
4
|
-
* {API Reference Docs}[http://invoicing.rubyforge.org/doc/]
|
5
|
-
* {Browse the code on GitHub}[http://github.com/ept/invoicing/]
|
6
|
-
* {RubyForge project}[http://rubyforge.org/projects/invoicing/]
|
7
|
-
* Email: Martin Kleppmann <ept@rubyforge.org>
|
8
|
-
|
9
|
-
== DESCRIPTION
|
10
|
-
|
11
|
-
This is a framework for generating and displaying invoices (ideal for
|
12
|
-
commercial Rails apps). It allows for flexible business logic; provides tools
|
13
|
-
for tax handling, commission calculation etc. It aims to be both
|
14
|
-
developer-friendly and accountant-friendly.
|
15
|
-
|
16
|
-
The Ruby Invoicing Framework is based on
|
17
|
-
{ActiveRecord}[http://api.rubyonrails.org/classes/ActiveRecord/Base.html].
|
18
|
-
|
19
|
-
Please see {the website}[http://ept.github.com/invoicing/] for an introduction
|
20
|
-
to using Invoicing, and check the
|
21
|
-
{API reference}[http://invoicing.rubyforge.org/doc/] for in-depth details.
|
22
|
-
|
23
|
-
If you're interested in contributing to the invoicing gem itself, please see the file
|
24
|
-
{HACKING.md}[http://github.com/ept/invoicing/blob/master/HACKING.md].
|
25
|
-
|
26
|
-
== FEATURES
|
27
|
-
|
28
|
-
* TODO
|
29
|
-
|
30
|
-
== REQUIREMENTS
|
31
|
-
|
32
|
-
* ActiveRecord >= 2.1
|
33
|
-
* Only MySQL and PostgreSQL databases are currently supported
|
34
|
-
|
35
|
-
== INSTALL
|
36
|
-
|
37
|
-
sudo gem install invoicing
|
38
|
-
|
39
|
-
== STATUS
|
40
|
-
|
41
|
-
So far, the Ruby Invoicing Framework has been tested with ActiveRecord 2.2.2,
|
42
|
-
MySQL 5.0.67 and PostgreSQL 8.3.5. We will be testing it across a wider
|
43
|
-
variety of versions soon.
|
44
|
-
|
45
|
-
== CREDITS
|
46
|
-
|
47
|
-
The Ruby invoicing framework originated as part of the website
|
48
|
-
{Bid for Wine}[http://www.bidforwine.co.uk], developed by Patrick Dietrich,
|
49
|
-
Conrad Irwin, Michael Arnold and Martin Kleppmann for Ept Computing Ltd.
|
50
|
-
It was extracted from the Bid for Wine codebase and substantially extended
|
51
|
-
by Martin Kleppmann.
|
52
|
-
|
53
|
-
== LICENSE
|
54
|
-
|
55
|
-
Copyright (c) 2009 Martin Kleppmann, Ept Computing Limited.
|
56
|
-
|
57
|
-
This gem is made publicly available under the terms of the MIT license.
|
58
|
-
See LICENSE and/or COPYING for details.
|
data/script/console
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# File: script/console
|
3
|
-
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
|
-
|
5
|
-
libs = " -r irb/completion"
|
6
|
-
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
7
|
-
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
8
|
-
libs << " -r #{File.dirname(__FILE__) + '/../lib/invoicing.rb'}"
|
9
|
-
puts "Loading invoicing gem"
|
10
|
-
exec "#{irb} #{libs} --simple-prompt"
|
data/script/destroy
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'rubigen'
|
6
|
-
rescue LoadError
|
7
|
-
require 'rubygems'
|
8
|
-
require 'rubigen'
|
9
|
-
end
|
10
|
-
require 'rubigen/scripts/destroy'
|
11
|
-
|
12
|
-
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
-
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
-
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/generate
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'rubigen'
|
6
|
-
rescue LoadError
|
7
|
-
require 'rubygems'
|
8
|
-
require 'rubigen'
|
9
|
-
end
|
10
|
-
require 'rubigen/scripts/generate'
|
11
|
-
|
12
|
-
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
-
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
-
RubiGen::Scripts::Generate.new.run(ARGV)
|
data/tasks/rcov.rake
DELETED
data/test/cached_record_test.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper.rb')
|
2
|
-
|
3
|
-
class CachedRecordTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
class CachedRecord < ActiveRecord::Base
|
6
|
-
set_primary_key 'id2'
|
7
|
-
acts_as_cached_record :id => 'id2'
|
8
|
-
has_many :referrers, :class_name => 'RefersToCachedRecord', :foreign_key => 'cached_record_id'
|
9
|
-
end
|
10
|
-
|
11
|
-
class RefersToCachedRecord < ActiveRecord::Base
|
12
|
-
belongs_to :cached_record
|
13
|
-
end
|
14
|
-
|
15
|
-
class CachedRecordMockDatabase < ActiveRecord::Base
|
16
|
-
set_table_name 'cached_records'
|
17
|
-
set_primary_key 'id2'
|
18
|
-
acts_as_cached_record :id => 'id2'
|
19
|
-
|
20
|
-
def self.connection
|
21
|
-
@connection_mock ||= FlexMock.new('connection')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
def test_find_with_valid_id_should_return_record
|
27
|
-
record = CachedRecord.find(1)
|
28
|
-
assert_not_nil record
|
29
|
-
assert record.kind_of?(CachedRecord)
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_find_with_invalid_id_should_raise_exception
|
33
|
-
assert_raise ActiveRecord::RecordNotFound do
|
34
|
-
CachedRecord.find(99)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_find_with_valid_id_should_not_access_database
|
39
|
-
CachedRecordMockDatabase.connection.should_receive(:select).and_throw('should not access database')
|
40
|
-
assert_not_nil CachedRecordMockDatabase.find(1)
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_find_with_invalid_id_should_not_access_database
|
44
|
-
CachedRecordMockDatabase.connection.should_receive(:select).and_throw('should not access database')
|
45
|
-
assert_raise ActiveRecord::RecordNotFound do
|
46
|
-
CachedRecordMockDatabase.find(99)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_find_with_conditions_should_still_work
|
51
|
-
assert_equal CachedRecord.find_by_value('Two'), CachedRecord.find(2)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_find_with_conditions_should_not_use_the_cache
|
55
|
-
assert !CachedRecord.find_by_value('Two').equal?(CachedRecord.find(2))
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_find_without_ids_should_raise_exception
|
59
|
-
assert_raise ActiveRecord::RecordNotFound do
|
60
|
-
CachedRecord.find
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_find_with_empty_list_of_ids_should_raise_exception
|
65
|
-
assert_raise ActiveRecord::RecordNotFound do
|
66
|
-
CachedRecord.find(:conditions => {:id => []})
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_find_with_list_of_ids_should_return_list_of_objects
|
71
|
-
expected = CachedRecord.cached_record_list.sort{|r1, r2| r1.id - r2.id}
|
72
|
-
assert_equal expected, CachedRecord.find([1,2])
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_cached_record_associations_should_still_work
|
76
|
-
assert_equal 2, CachedRecord.find(1).referrers.length
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_foreign_key_to_cached_record_should_use_cache
|
80
|
-
assert RefersToCachedRecord.find(1).cached_record.equal?(CachedRecord.find(1))
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_cached_record_list_should_return_all_objects
|
84
|
-
assert_equal 2, CachedRecord.cached_record_list.length
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_cached_record_list_should_not_access_database
|
88
|
-
CachedRecordMockDatabase.connection.should_receive(:select).and_throw('should not access database')
|
89
|
-
assert_not_nil CachedRecordMockDatabase.cached_record_list
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_reload_cache_should_do_what_it_says_on_the_tin
|
93
|
-
CachedRecord.connection.execute "insert into cached_records (id2, value) values(3, 'Three')"
|
94
|
-
CachedRecord.reload_cache
|
95
|
-
record = CachedRecord.find(3)
|
96
|
-
assert_not_nil record
|
97
|
-
assert record.kind_of?(CachedRecord)
|
98
|
-
assert_equal 3, CachedRecord.cached_record_list.length
|
99
|
-
end
|
100
|
-
end
|
data/test/class_info_test.rb
DELETED
@@ -1,253 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper.rb')
|
2
|
-
|
3
|
-
# Mini implementation of the ClassInfo pattern, at which we can fire our tests
|
4
|
-
|
5
|
-
module MyNamespace
|
6
|
-
module ClassInfoTestModule
|
7
|
-
module ActMethods
|
8
|
-
def acts_as_class_info_test(*args)
|
9
|
-
Invoicing::ClassInfo.acts_as(MyNamespace::ClassInfoTestModule, self, args)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def get_class_info
|
14
|
-
class_info_test_module_class_info
|
15
|
-
end
|
16
|
-
|
17
|
-
def my_instance_method
|
18
|
-
class_info_test_module_class_info.the_answer / value
|
19
|
-
end
|
20
|
-
|
21
|
-
def my_other_instance_method
|
22
|
-
class_info_test_module_class_info.not_the_answer / value
|
23
|
-
end
|
24
|
-
|
25
|
-
module ClassMethods
|
26
|
-
def my_class_method(number)
|
27
|
-
class_info_test_module_class_info.the_answer / number
|
28
|
-
end
|
29
|
-
|
30
|
-
def my_other_class_method(number)
|
31
|
-
class_info_test_module_class_info.not_the_answer / number
|
32
|
-
end
|
33
|
-
|
34
|
-
def get_class_info
|
35
|
-
class_info_test_module_class_info
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
class ClassInfo < Invoicing::ClassInfo::Base
|
40
|
-
def foo
|
41
|
-
'foo'
|
42
|
-
end
|
43
|
-
|
44
|
-
def the_answer
|
45
|
-
all_args.first
|
46
|
-
end
|
47
|
-
|
48
|
-
def not_the_answer
|
49
|
-
all_args.last
|
50
|
-
end
|
51
|
-
|
52
|
-
def option_defaults
|
53
|
-
{:option1 => :baa, :option2 => :blah}
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
module ClassInfoTest2
|
60
|
-
module ActMethods
|
61
|
-
def acts_as_class_info_test2(*args)
|
62
|
-
Invoicing::ClassInfo.acts_as(MyNamespace::ClassInfoTest2, self, args)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
module ClassMethods
|
67
|
-
def test2_class_info
|
68
|
-
class_info_test2_class_info
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
class ClassInfo < Invoicing::ClassInfo::Base
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
ActiveRecord::Base.send(:extend, MyNamespace::ClassInfoTestModule::ActMethods)
|
78
|
-
ActiveRecord::Base.send(:extend, MyNamespace::ClassInfoTest2::ActMethods)
|
79
|
-
|
80
|
-
|
81
|
-
# Model objects which use the acts_as feature defined above
|
82
|
-
|
83
|
-
class ClassInfoTestRecord < ActiveRecord::Base
|
84
|
-
acts_as_class_info_test 42, :option1 => :moo
|
85
|
-
acts_as_class_info_test 84, 42, 168, :option3 => :asdf
|
86
|
-
|
87
|
-
def self.class_foo
|
88
|
-
class_info_test_module_class_info.foo
|
89
|
-
end
|
90
|
-
|
91
|
-
def instance_foo
|
92
|
-
class_info_test_module_class_info.foo
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
class ClassInfoTestSubclass < ClassInfoTestRecord
|
97
|
-
acts_as_class_info_test 336, :option1 => :quack, :option4 => :fdsa
|
98
|
-
end
|
99
|
-
|
100
|
-
class ClassInfoTestSubclass2 < ClassInfoTestRecord
|
101
|
-
acts_as_class_info_test2 :option1 => :badger
|
102
|
-
end
|
103
|
-
|
104
|
-
class ClassInfoTestSubSubclass < ClassInfoTestSubclass2
|
105
|
-
acts_as_class_info_test 112, :option3 => 1234
|
106
|
-
end
|
107
|
-
|
108
|
-
class ClassInfoTestEmptySubclass < ClassInfoTestRecord
|
109
|
-
end
|
110
|
-
|
111
|
-
class ClassInfoTest2Record < ActiveRecord::Base
|
112
|
-
acts_as_class_info_test2 :option1 => :okapi, :option3 => :kangaroo
|
113
|
-
|
114
|
-
def option1; 'this is option1'; end
|
115
|
-
def option2; 'this is option2'; end
|
116
|
-
def kangaroo; 'bounce'; end
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
#######################################################################################
|
121
|
-
|
122
|
-
class ClassInfoTest < Test::Unit::TestCase
|
123
|
-
|
124
|
-
def test_call_into_class_info_via_class
|
125
|
-
assert_equal 'foo', ClassInfoTestRecord.class_foo
|
126
|
-
end
|
127
|
-
|
128
|
-
def test_call_into_class_info_via_instance
|
129
|
-
assert_equal 'foo', ClassInfoTestRecord.new.instance_foo
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_mixin_superclass_instance_methods
|
133
|
-
assert_equal 21, ClassInfoTestRecord.find(1).my_instance_method
|
134
|
-
assert_equal 84, ClassInfoTestRecord.find(1).my_other_instance_method
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_mixin_superclass_class_methods
|
138
|
-
assert_equal 14, ClassInfoTestRecord.my_class_method(3)
|
139
|
-
assert_equal 28, ClassInfoTestRecord.my_other_class_method(6)
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_mixin_subclass_instance_methods
|
143
|
-
assert_equal 14, ClassInfoTestRecord.find(2).my_instance_method
|
144
|
-
assert_equal 112, ClassInfoTestRecord.find(2).my_other_instance_method
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_mixin_subclass_class_methods
|
148
|
-
assert_equal 14, ClassInfoTestSubclass.my_class_method(3)
|
149
|
-
assert_equal 56, ClassInfoTestSubclass.my_other_class_method(6)
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_all_args_in_superclass
|
153
|
-
assert_equal [42, 84, 168], ClassInfoTestRecord.get_class_info.all_args
|
154
|
-
end
|
155
|
-
|
156
|
-
def test_all_args_in_subclass
|
157
|
-
assert_equal [42, 84, 168, 336], ClassInfoTestSubclass.get_class_info.all_args
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_all_args_in_sub_subclass
|
161
|
-
assert_equal [42, 84, 168, 112], ClassInfoTestSubSubclass.get_class_info.all_args
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_current_args_in_superclass
|
165
|
-
assert_equal [84, 42, 168], ClassInfoTestRecord.get_class_info.current_args
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_current_args_in_subclass
|
169
|
-
assert_equal [336], ClassInfoTestSubclass.get_class_info.current_args
|
170
|
-
end
|
171
|
-
|
172
|
-
def test_current_args_in_sub_subclass
|
173
|
-
assert_equal [112], ClassInfoTestSubSubclass.get_class_info.current_args
|
174
|
-
end
|
175
|
-
|
176
|
-
def test_new_args_in_superclass
|
177
|
-
assert_equal [84, 168], ClassInfoTestRecord.get_class_info.new_args
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_new_args_in_subclass
|
181
|
-
assert_equal [336], ClassInfoTestSubclass.get_class_info.new_args
|
182
|
-
end
|
183
|
-
|
184
|
-
def test_new_args_in_sub_subclass
|
185
|
-
assert_equal [112], ClassInfoTestSubSubclass.get_class_info.new_args
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_all_options_in_superclass
|
189
|
-
assert_equal :moo, ClassInfoTestRecord.get_class_info.all_options[:option1]
|
190
|
-
assert_equal :blah, ClassInfoTestRecord.get_class_info.all_options[:option2]
|
191
|
-
assert_equal :asdf, ClassInfoTestRecord.get_class_info.all_options[:option3]
|
192
|
-
assert_nil ClassInfoTestRecord.get_class_info.all_options[:option4]
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_all_options_in_subclass
|
196
|
-
assert_equal :quack, ClassInfoTestSubclass.get_class_info.all_options[:option1]
|
197
|
-
assert_equal :blah, ClassInfoTestSubclass.get_class_info.all_options[:option2]
|
198
|
-
assert_equal :asdf, ClassInfoTestSubclass.get_class_info.all_options[:option3]
|
199
|
-
assert_equal :fdsa, ClassInfoTestSubclass.get_class_info.all_options[:option4]
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_all_options_in_sub_subclass
|
203
|
-
assert_equal :moo, ClassInfoTestSubSubclass.get_class_info.all_options[:option1]
|
204
|
-
assert_equal :blah, ClassInfoTestSubSubclass.get_class_info.all_options[:option2]
|
205
|
-
assert_equal 1234, ClassInfoTestSubSubclass.get_class_info.all_options[:option3]
|
206
|
-
assert_nil ClassInfoTestSubSubclass.get_class_info.all_options[:option4]
|
207
|
-
end
|
208
|
-
|
209
|
-
def test_current_options_in_superclass
|
210
|
-
assert_equal({:option3 => :asdf}, ClassInfoTestRecord.get_class_info.current_options)
|
211
|
-
end
|
212
|
-
|
213
|
-
def test_current_options_in_subclass
|
214
|
-
assert_equal({:option1 => :quack, :option4 => :fdsa}, ClassInfoTestSubclass.get_class_info.current_options)
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_two_features_in_the_same_model
|
218
|
-
assert_equal({:option1 => :badger}, ClassInfoTestSubclass2.test2_class_info.all_options)
|
219
|
-
assert_equal({:option1 => :badger}, ClassInfoTestSubSubclass.test2_class_info.all_options)
|
220
|
-
end
|
221
|
-
|
222
|
-
def test_the_same_feature_in_two_models
|
223
|
-
assert_equal({:option1 => :okapi, :option3 => :kangaroo}, ClassInfoTest2Record.test2_class_info.all_options)
|
224
|
-
end
|
225
|
-
|
226
|
-
def test_method_renamed
|
227
|
-
assert_equal 'kangaroo', ClassInfoTest2Record.test2_class_info.method(:option3)
|
228
|
-
assert_equal 'bounce', ClassInfoTest2Record.test2_class_info.get(ClassInfoTest2Record.find(1), :option3)
|
229
|
-
end
|
230
|
-
|
231
|
-
def test_database_column_renamed
|
232
|
-
assert_equal 'okapi', ClassInfoTest2Record.test2_class_info.method(:option1)
|
233
|
-
assert_equal 'OKAPI!', ClassInfoTest2Record.test2_class_info.get(ClassInfoTest2Record.find(1), :option1)
|
234
|
-
end
|
235
|
-
|
236
|
-
def test_method_not_renamed
|
237
|
-
assert_equal 'option2', ClassInfoTest2Record.test2_class_info.method(:option2)
|
238
|
-
assert_equal 'this is option2', ClassInfoTest2Record.test2_class_info.get(ClassInfoTest2Record.find(1), :option2)
|
239
|
-
end
|
240
|
-
|
241
|
-
def test_method_on_nil_object
|
242
|
-
assert_nil ClassInfoTest2Record.test2_class_info.get(nil, :option2)
|
243
|
-
end
|
244
|
-
|
245
|
-
def test_method_not_found_via_class_info
|
246
|
-
assert_nil ClassInfoTest2Record.test2_class_info.get(ClassInfoTest2Record.find(1), :this_method_does_not_exist)
|
247
|
-
end
|
248
|
-
|
249
|
-
def test_inherited_to_empty_subclass
|
250
|
-
assert_not_nil ClassInfoTestEmptySubclass.new.get_class_info
|
251
|
-
assert_equal ClassInfoTestEmptySubclass.new.get_class_info, ClassInfoTestRecord.new.get_class_info
|
252
|
-
end
|
253
|
-
end
|