Module: Subledger

Defined in:
lib/subledger/domain.rb,
lib/subledger.rb,
lib/subledger.rb,
lib/subledger/path.rb,
lib/subledger/rest.rb,
lib/subledger/uuid.rb,
lib/subledger/actor.rb,
lib/subledger/store.rb,
lib/subledger/version.rb,
lib/subledger/domain/key.rb,
lib/subledger/domain/org.rb,
lib/subledger/supervisor.rb,
lib/subledger/domain/book.rb,
lib/subledger/domain/line.rb,
lib/subledger/domain/value.rb,
lib/subledger/domain/report.rb,
lib/subledger/domain/account.rb,
lib/subledger/domain/balance.rb,
lib/subledger/domain/control.rb,
lib/subledger/collection_name.rb,
lib/subledger/domain/category.rb,
lib/subledger/domain/identity.rb,
lib/subledger/store/api/store.rb,
lib/subledger/interface/client.rb,
lib/subledger/store/api/errors.rb,
lib/subledger/domain/value/zero.rb,
lib/subledger/exception_handler.rb,
lib/subledger/domain/value/debit.rb,
lib/subledger/domain/value/credit.rb,
lib/subledger/domain/journal_entry.rb,
lib/subledger/interface/dispatcher.rb,
lib/subledger/store/api/roles/post.rb,
lib/subledger/store/api/roles/read.rb,
lib/subledger/domain/roles/postable.rb,
lib/subledger/domain/roles/readable.rb,
lib/subledger/domain/roles/restable.rb,
lib/subledger/domain/roles/storable.rb,
lib/subledger/domain/roles/timeable.rb,
lib/subledger/domain/roles/creatable.rb,
lib/subledger/domain/roles/updatable.rb,
lib/subledger/store/api/roles/create.rb,
lib/subledger/store/api/roles/update.rb,
lib/subledger/domain/report_rendering.rb,
lib/subledger/domain/roles/archivable.rb,
lib/subledger/store/api/roles/archive.rb,
lib/subledger/store/api/roles/balance.rb,
lib/subledger/store/api/roles/collect.rb,
lib/subledger/store/api/roles/reports.rb,
lib/subledger/domain/roles/activatable.rb,
lib/subledger/domain/roles/collectable.rb,
lib/subledger/domain/roles/describable.rb,
lib/subledger/domain/roles/versionable.rb,
lib/subledger/store/api/roles/activate.rb,
lib/subledger/store/api/roles/progress.rb,
lib/subledger/domain/roles/attributable.rb,
lib/subledger/domain/roles/identifiable.rb,
lib/subledger/domain/roles/progressable.rb,
lib/subledger/store/api/roles/categories.rb,
lib/subledger/store/api/roles/create_line.rb,
lib/subledger/store/api/roles/create_and_post.rb,
lib/subledger/store/api/roles/create_identity.rb,
lib/subledger/store/api/roles/first_and_last_line.rb,
lib/subledger/domain/roles/describable_report_rendering.rb

Overview

additional requires at bottom

Defined Under Namespace

Modules: CollectionName, Domain, Interface, Path, Rest, Store, UUID Classes: Actor, DateError, Error, ExceptionHandler, Supervisor

Constant Summary collapse

ROOT =
File.expand_path __FILE__ + '../../..'
ROOT_CONFIG =
ROOT + '/config'
ROOT_LIB =
ROOT + '/lib'
ROOT_SPEC =
ROOT + '/spec'
LOG =
::Logger.new '/tmp/subledger.log', 10, 102_400_000
AWS_PATH =
File.expand_path( File.dirname( __FILE__ ) + '/../config/' + AWS_CRED_FILE )
RENDERED_REPORTS_BUCKET =
"subledger_#{ENV}_rendered_reports"
RENDERED_REPORT_CATEGORIES_BUCKET =
"subledger_#{ENV}_rendered_report_categories"
BACKUP_BUCKET =
"subledger_#{ENV}_backups"
ISO8601_REGEXP =

Thanks to Jan Goyvaerts, Steven Levithan, O’Reilly Media, Inc.

/^(?<year>[0-9]{4})-?(?<month>1[0-2]|0[1-9])-?(?<day>3[0-1]|0[1-9]|[1-2][0-9])T(?<hour>2[0-3]|[0-1][0-9]):?(?<minute>[0-5][0-9]):?(?<second>[0-5][0-9])(?<ms>\.[0-9]{1,3})??(?<timezone>Z|[+-](?:2[0-3]|[0-1][0-9]):?[0-5][0-9])$/
EARLIEST_TIME =

my.safaribooksonline.com/book/programming/regular-expressions/9780596802837/4dot-validation-and-formatting/id2983571 Modified to accept optional punctuation and fractional seconds of 1 to 3 digits

Time.utc 1970, 1, 1, 0, 0, 0, 0
LATEST_TIME =
EARLIEST_TIME + 2 ** 32
VERSION =
'0.7.13'
API_VERSION =
'v2'

Class Method Summary collapse

Class Method Details

.log_environmentObject



230
231
232
233
# File 'lib/subledger.rb', line 230

def self.log_environment
  LOG.info "SUBLEDGER_STORE: #{STORE}"
  LOG.info "SUBLEDGER_ENV:   #{ENV}"
end

.new(args = { }) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/subledger.rb', line 129

def self.new args = { }
  args = args.dup

  # auth args

  identity    = args[:identity]
  identity_id = args[:identity_id]

  if identity.nil? and not identity_id.nil?
    args.merge! :identity => Domain::Identity.
                               new( :id => identity_id )

    args.delete :identity_id
  end

  key    = args[:key]
  key_id = args[:key_id]

  if key.nil? and not key_id.nil?
    args.merge! :auth_key => Domain::Key.
                               new( :id       => key_id,
                                    :identity => args[:identity],
                                    :secret   => args[:secret] )

    args.delete :key_id
    args.delete :secret
  end

  # instance args

  org    = args[:org]
  org_id = args[:org_id]

  if org.nil? and not org_id.nil?
    args.merge! :org => Domain::Org.
                          new( :id => org_id )

    args.delete :org_id
  end

  book    = args[:book]
  book_id = args[:book_id]

  if book.nil? and not book_id.nil?
    args.merge! :book => Domain::Book.
                           new( :id  => book_id,
                                :org => args[:org] )

    args.delete :book_id
  end

  args.merge! :store => store( args )

  Interface::Client.new args
end

.parse_time(parameter_name, time_string) ⇒ Object



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# File 'lib/subledger.rb', line 208

def self.parse_time parameter_name, time_string
  if time_string.nil?
    raise DateError, "#{parameter_name} is required"
  end

  unless time_string.match ISO8601_REGEXP
    raise DateError, "#{parameter_name} must be ISO 8601 datetime with timezone, optional punctuation, optional fractional seconds (1-3 digits)"
  end

  time = begin
           Time.parse( time_string ).utc
         rescue ArgumentError => e
           raise DateError, "#{parameter_name}: not a parsable time"
         end

  unless time >= EARLIEST_TIME and time <= LATEST_TIME
    raise DateError, "#{parameter_name} must be between #{EARLIEST_TIME.iso8601(3)} and #{LATEST_TIME.iso8601(3)} inclusive"
  end

  time
end

.store(args = { }) ⇒ Object



185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/subledger.rb', line 185

def self.store args = { }
  store_sym = args[:store] || STORE

  begin
    require "subledger/store/#{store_sym}"
  rescue LoadError => e
    raise Error, "Store: #{store_sym}: #{e}"
  end

  Object.const_get(       'Subledger'          ).
           const_get(     'Store'                ).
             const_get(    store_sym.capitalize    ).
               const_get( 'Store'                    ).new args
end