payday 1.0.0beta1 → 1.0.0beta2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,6 +2,17 @@ Payday!
2
2
  ===
3
3
  Payday is a library for rendering invoices. At present it supports rendering invoices to pdfs, but we're planning on adding support for other formats in the near future.
4
4
 
5
+ Installing
6
+ ===
7
+ Payday is available as a Rubygem, so installing it is as easy as running:
8
+
9
+ gem install payday --pre
10
+
11
+ Or, using bundler:
12
+
13
+ gem "payday"
14
+
15
+
5
16
  Using Payday
6
17
  ===
7
18
  It's pretty easy to use Payday with the built in objects. We include the Invoice and LineItem classes, and with them you can get started pretty quickly.
@@ -14,6 +25,10 @@ Example:
14
25
  i.line_items << LineItem.new(:price => 5, :quantity => 200, :description => "Hats")
15
26
  i.render_pdf_to_file("/path/to_file.pdf")
16
27
 
28
+ Documentation
29
+ ===
30
+ Documentation for the latest version of Payday is available at [rdoc.info](http://rdoc.info/github/commondream/payday/v1.0.0beta1/frames).
31
+
17
32
  Customizing Your Logo and Company Name
18
33
  ===
19
34
  Check out Payday::Config to customize your company's name, details, and logo.
@@ -27,7 +42,47 @@ Example:
27
42
  Using Payday with ActiveRecord Objects (or any other objects, for that matter)
28
43
  ===
29
44
 
30
- TODO
45
+ Payday focuses on two main objects, an invoice and a line item, so to Payday with ActiveRecord you'll want to create your own classes for those objects. We include the Payday::Invoiceable and Payday::LineItemable modules to help out with that.
46
+
47
+ Here's the simplest possible implementation of a custom invoice and line item with Payday:
48
+
49
+ In a new migration:
50
+
51
+ create_table :invoices do |t|
52
+ # invoices will work without anything but bill_to, but there are quite a few options for the fields you can save, like ship_to
53
+ # due_at, and paid_at
54
+ t.string bill_to
55
+
56
+ t.timestamps
57
+ end
58
+
59
+ create_table :line_items do |t|
60
+ t.decimal :price
61
+ t.string :description
62
+ t.integer :quantity # can also be :decimal or :float - just needs to be numeric
63
+
64
+ t.integer :invoice_id
65
+
66
+ t.timestamps
67
+ end
68
+
69
+ In app/models/invoice.rb:
70
+
71
+ class Invoice < ActiveRecord::Base
72
+ include Payday::Invoiceable
73
+
74
+ has_many :line_items
75
+ end
76
+
77
+ In app/models/line_item.rb:
78
+
79
+ class LineItem < ActiveRecord::Base
80
+ include Payday::LineItemable
81
+
82
+ belongs_to :invoice
83
+ end
84
+
85
+ For a bit more fleshed out example, be sure to check out [http://github.com/commondream/payday-example](http://github.com/commondream/payday-example).
31
86
 
32
87
  Rendering Payday PDFs To The Web
33
88
  ===
@@ -49,6 +104,12 @@ In your controller:
49
104
 
50
105
  Be sure to restart your server after you edit the mime_types initializer. The updating setting won't take effect until you do.
51
106
 
107
+ Examples
108
+ ===
109
+ Here's an [example PDF Invoice](https://github.com/downloads/commondream/payday/testing.pdf)
110
+
111
+ There's also an example Rails application running on Heroku at [http://payday-example.heroku.com](http://payday-example.heroku.com). You can check out the source at [http://github.com/commondream/payday-example](http://github.com/commondream/payday-example).
112
+
52
113
  Contributing
53
114
  ===
54
115
  Payday is pretty young, so there's still a good bit of work to be done. Feel free to fork the project, make some changes, and send a pull request. If you're unsure about what to work on, send me a message on GitHub. I'd love the help!
@@ -57,10 +118,10 @@ To Do
57
118
  ===
58
119
  Here's what we're planning on working on with Payday in the near future:
59
120
 
60
- * Package as gem
61
- * Document how to use with ActiveRecord
121
+ * Let some folks use it for a bit.
62
122
  * Release 1.0!
63
123
 
124
+ * Actually get a designer to style the invoices.
64
125
  * Add support for currencies other than USD
65
126
  * Add support for Money gem or BigDecimal or general numerics (right now we support BigDecimal and general numerics)
66
127
  * Add support for blank line items
@@ -4,7 +4,7 @@ module Payday
4
4
  class Invoice
5
5
  include Payday::Invoiceable
6
6
 
7
- attr_accessor :invoice_number, :bill_to, :ship_to, :notes, :line_items, :tax_rate, :tax_description, :due_on, :paid_at
7
+ attr_accessor :invoice_number, :bill_to, :ship_to, :notes, :line_items, :tax_rate, :tax_description, :due_at, :paid_at
8
8
 
9
9
  def initialize(options = {})
10
10
  self.invoice_number = options[:invoice_number] || nil
@@ -14,7 +14,7 @@ module Payday
14
14
  self.line_items = options[:line_items] || []
15
15
  self.tax_rate = options[:tax_rate] || nil
16
16
  self.tax_description = options[:tax_description] || nil
17
- self.due_on = options[:due_on] || nil
17
+ self.due_at = options[:due_at] || nil
18
18
  self.paid_at = options[:paid_at] || nil
19
19
  end
20
20
 
@@ -10,7 +10,7 @@
10
10
  # when generating an invoice. We include a simple tax method that calculates tax, but it's probably wiser
11
11
  # to override this in your class (our calculated tax won't be stored to a database by default, for example).
12
12
  #
13
- # If the +due_on+ and +paid_at+ methods are available, {Payday::Invoiceable} will use them to show due dates and
13
+ # If the +due_at+ and +paid_at+ methods are available, {Payday::Invoiceable} will use them to show due dates and
14
14
  # paid dates, as well as stamps showing if the invoice is paid or due.
15
15
  module Payday::Invoiceable
16
16
 
@@ -41,7 +41,7 @@ module Payday::Invoiceable
41
41
  end
42
42
 
43
43
  def overdue?
44
- defined?(:due_on) && due_on.is_a?(Date) && due_on < Date.today && !paid_at
44
+ defined?(:due_at) && ((due_at.is_a?(Date) && due_at < Date.today) || (due_at.is_a?(Time) < Time.now)) && !paid_at
45
45
  end
46
46
 
47
47
  def paid?
@@ -1,7 +1,7 @@
1
1
  # Include this module into your line item implementation to make sure that Payday stays happy
2
2
  # with it, or just make sure that your line item implements the amount method.
3
3
  module Payday::LineItemable
4
- # Returns the total amount for this {LineItemable}, or {#price} * {#quantity}
4
+ # Returns the total amount for this {LineItemable}, or +price * quantity+
5
5
  def amount
6
6
  price * quantity
7
7
  end
@@ -103,11 +103,11 @@ module Payday
103
103
  end
104
104
 
105
105
  # Due on
106
- if defined?(invoice.due_on) && invoice.due_on
107
- if invoice.due_on.is_a?(Date)
108
- due_date = invoice.due_on.strftime(Payday::Config.default.date_format)
106
+ if defined?(invoice.due_at) && invoice.due_at
107
+ if invoice.due_at.is_a?(Date) || invoice.due_at.is_a?(Time)
108
+ due_date = invoice.due_at.strftime(Payday::Config.default.date_format)
109
109
  else
110
- due_date = invoice.due_on.to_s
110
+ due_date = invoice.due_at.to_s
111
111
  end
112
112
 
113
113
  table_data << [bold_cell(pdf, "Due Date:"), bold_cell(pdf, due_date, :align => :right)]
@@ -1,3 +1,6 @@
1
+ # This is Payday!
1
2
  module Payday
2
- VERSION = "1.0.0beta1"
3
+
4
+ # Current Version
5
+ VERSION = "1.0.0beta2"
3
6
  end
data/test/invoice_test.rb CHANGED
@@ -62,12 +62,12 @@ module Payday
62
62
  end
63
63
 
64
64
  test "overdue? is false when past date and unpaid" do
65
- i = Invoice.new(:due_on => Date.today - 1)
65
+ i = Invoice.new(:due_at => Date.today - 1)
66
66
  assert i.overdue?
67
67
  end
68
68
 
69
69
  test "overdue? is true when past date but paid" do
70
- i = Invoice.new(:due_on => Date.today - 1, :paid_at => Date.today)
70
+ i = Invoice.new(:due_at => Date.today - 1, :paid_at => Date.today)
71
71
  assert !i.overdue?
72
72
  end
73
73
 
@@ -86,7 +86,7 @@ module Payday
86
86
  assert !File.exists?("tmp/testing.pdf")
87
87
 
88
88
  i = Invoice.new(:tax_rate => 0.1, :notes => "These are some crazy awesome notes!", :invoice_number => 12,
89
- :due_on => Date.civil(2011, 1, 22), :paid_at => Date.civil(2012, 2, 22),
89
+ :due_at => Date.civil(2011, 1, 22), :paid_at => Date.civil(2012, 2, 22),
90
90
  :bill_to => "Alan Johnson\n101 This Way\nSomewhere, SC 22222", :ship_to => "Frank Johnson\n101 That Way\nOther, SC 22229")
91
91
 
92
92
  3.times do
@@ -101,7 +101,7 @@ module Payday
101
101
 
102
102
  test "rendering to string" do
103
103
  i = Invoice.new(:tax_rate => 0.1, :notes => "These are some crazy awesome notes!", :invoice_number => 12,
104
- :due_on => Date.civil(2011, 1, 22), :paid_at => Date.civil(2012, 2, 22),
104
+ :due_at => Date.civil(2011, 1, 22), :paid_at => Date.civil(2012, 2, 22),
105
105
  :bill_to => "Alan Johnson\n101 This Way\nSomewhere, SC 22222", :ship_to => "Frank Johnson\n101 That Way\nOther, SC 22229")
106
106
 
107
107
  3.times do
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: payday
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196353
4
+ hash: 62196359
5
5
  prerelease: 5
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
9
  - 0
10
10
  - beta
11
- - 1
12
- version: 1.0.0beta1
11
+ - 2
12
+ version: 1.0.0beta2
13
13
  platform: ruby
14
14
  authors:
15
15
  - Alan Johnson