ydim-html 1.0.1

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 (63) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.travis.yml +29 -0
  4. data/Gemfile +12 -0
  5. data/History.txt +11 -0
  6. data/LICENSE.txt +339 -0
  7. data/Manifest.txt +47 -0
  8. data/Rakefile +21 -0
  9. data/bin/ydim-htmld +38 -0
  10. data/doc/favicon.ico +0 -0
  11. data/doc/index.rbx +16 -0
  12. data/doc/resources/javascript/dojo.js +5940 -0
  13. data/doc/resources/javascript/iframe_history.html +53 -0
  14. data/doc/resources/javascript/ydim.js +67 -0
  15. data/doc/resources/ydim/ydim.css +113 -0
  16. data/lib/ydim/html.rb +10 -0
  17. data/lib/ydim/html/config.rb +37 -0
  18. data/lib/ydim/html/state/ajax_values.rb +17 -0
  19. data/lib/ydim/html/state/autoinvoice.rb +94 -0
  20. data/lib/ydim/html/state/confirm.rb +16 -0
  21. data/lib/ydim/html/state/debitor.rb +82 -0
  22. data/lib/ydim/html/state/debitors.rb +24 -0
  23. data/lib/ydim/html/state/global.rb +100 -0
  24. data/lib/ydim/html/state/global_predefine.rb +14 -0
  25. data/lib/ydim/html/state/init.rb +21 -0
  26. data/lib/ydim/html/state/invoice.rb +180 -0
  27. data/lib/ydim/html/state/invoices.rb +70 -0
  28. data/lib/ydim/html/state/pdf.rb +17 -0
  29. data/lib/ydim/html/util/lookandfeel.rb +133 -0
  30. data/lib/ydim/html/util/server.rb +37 -0
  31. data/lib/ydim/html/util/session.rb +29 -0
  32. data/lib/ydim/html/util/validator.rb +63 -0
  33. data/lib/ydim/html/version.rb +7 -0
  34. data/lib/ydim/html/view/ajax_values.rb +27 -0
  35. data/lib/ydim/html/view/autoinvoice.rb +80 -0
  36. data/lib/ydim/html/view/autoinvoices.rb +42 -0
  37. data/lib/ydim/html/view/confirm.rb +28 -0
  38. data/lib/ydim/html/view/debitor.rb +118 -0
  39. data/lib/ydim/html/view/debitors.rb +45 -0
  40. data/lib/ydim/html/view/htmlgrid.rb +104 -0
  41. data/lib/ydim/html/view/init.rb +30 -0
  42. data/lib/ydim/html/view/invoice.rb +218 -0
  43. data/lib/ydim/html/view/invoices.rb +159 -0
  44. data/lib/ydim/html/view/navigation.rb +29 -0
  45. data/lib/ydim/html/view/pdf.rb +24 -0
  46. data/lib/ydim/html/view/template.rb +71 -0
  47. data/readme.md +28 -0
  48. data/spec/smoketest_spec.rb +234 -0
  49. data/spec/spec_helper.rb +117 -0
  50. data/spec/stub/http_server.rb +157 -0
  51. data/test/selenium.rb +1690 -0
  52. data/test/selenium/selenium-server.jar +0 -0
  53. data/test/selenium/test_autoinvoice.rb +319 -0
  54. data/test/selenium/test_debitor.rb +344 -0
  55. data/test/selenium/test_debitors.rb +47 -0
  56. data/test/selenium/test_init.rb +105 -0
  57. data/test/selenium/test_invoice.rb +296 -0
  58. data/test/selenium/test_invoices.rb +176 -0
  59. data/test/selenium/unit.rb +125 -0
  60. data/test/stub/http_server.rb +141 -0
  61. data/test/suite.rb +15 -0
  62. data/ydim-html.gemspec +36 -0
  63. metadata +302 -0
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Html::State::Debitors -- ydim -- 12.01.2006 -- hwyss@ywesee.com
4
+
5
+ require 'ydim/html/state/global_predefine'
6
+ require 'ydim/html/state/debitor'
7
+ require 'ydim/html/view/debitors'
8
+ require 'ydim/debitor'
9
+
10
+ module YDIM
11
+ module Html
12
+ module State
13
+ class Debitors < Global
14
+ VIEW = Html::View::Debitors
15
+ def init
16
+ lnf = @session.lookandfeel
17
+ @model = @session.debitors.sort_by do |deb|
18
+ [ lnf.lookup(deb.debitor_type) || '', deb.name.to_s.downcase ]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Html::State::Global -- ydim -- 12.01.2006 -- hwyss@ywesee.com
4
+
5
+ require 'sbsm/state'
6
+ require 'ydim/html/state/init'
7
+ require 'ydim/html/state/autoinvoice'
8
+ require 'ydim/html/state/debitor'
9
+ require 'ydim/html/state/debitors'
10
+ require 'ydim/html/state/invoice'
11
+ require 'ydim/html/state/invoices'
12
+ require 'ydim/html/state/pdf'
13
+
14
+ module YDIM
15
+ module Html
16
+ module State
17
+ class Global < SBSM::State
18
+ attr_accessor :sortby, :sort_reverse
19
+ class Stub
20
+ def initialize
21
+ @carry = {}
22
+ end
23
+ def carry(key, val)
24
+ @carry.store(key, val)
25
+ end
26
+ def method_missing(key, *args)
27
+ if(match = /^(.*)=$/.match(key.to_s))
28
+ @carry[match[1].to_sym] = args.first
29
+ else
30
+ @carry[key]
31
+ end
32
+ end
33
+ def respond_to?(key)
34
+ true
35
+ end
36
+ end
37
+ EVENT_MAP = {
38
+ :debitors => Debitors,
39
+ :invoices => Invoices,
40
+ }
41
+ def autoinvoice
42
+ if(id = @session.user_input(:unique_id))
43
+ AutoInvoice.new(@session, @session.autoinvoice(id))
44
+ end
45
+ end
46
+ def create_autoinvoice
47
+ _create_invoice(CreateAutoInvoice, nil)
48
+ end
49
+ def create_debitor
50
+ Debitor.new(@session, YDIM::Debitor.new(nil))
51
+ end
52
+ def create_invoice
53
+ _create_invoice(CreateInvoice)
54
+ end
55
+ def _create_invoice(nextclass, date=Date.today)
56
+ if((id = @session.user_input(:unique_id)) \
57
+ && (debitor = @session.debitor(id.to_i)))
58
+ invoice = Stub.new
59
+ invoice.carry(:debitor, debitor)
60
+ invoice.carry(:date, date)
61
+ invoice.carry(:precision, 2)
62
+ if debitor.foreign?
63
+ invoice.carry(:suppress_vat, true)
64
+ end
65
+ nextclass.new(@session, invoice)
66
+ end
67
+ end
68
+ def debitor
69
+ if(id = @session.user_input(:unique_id))
70
+ Debitor.new(@session, @session.debitor(id.to_i))
71
+ end
72
+ end
73
+ def logout
74
+ @session.logout
75
+ State::Init.new(@session, nil)
76
+ end
77
+ def invoice
78
+ if(id = @session.user_input(:unique_id))
79
+ Invoice.new(@session, @session.invoice(id.to_i))
80
+ end
81
+ end
82
+ def pdf
83
+ if(id = @session.user_input(:unique_id))
84
+ Pdf.new(@session, @session.invoice(id.to_i))
85
+ end
86
+ end
87
+ def send_invoice
88
+ if(id = @session.user_input(:unique_id))
89
+ sort_args = { :sortby => (@sortby || []).first,
90
+ :sort_reverse => @sort_reverse }
91
+ recipients = @session.send_invoice(id.to_i, sort_args)
92
+ message = @session.lookandfeel.lookup(:confirm_send_invoice,
93
+ recipients.join(', '))
94
+ Html::State::Confirm.new(@session, message)
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Html::State::Global -- ydim -- 12.01.2006 -- hwyss@ywesee.com
4
+
5
+ require 'sbsm/state'
6
+
7
+ module YDIM
8
+ module Html
9
+ module State
10
+ class Global < SBSM::State
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Html::State::Init -- ydim -- 12.01.2006 -- hwyss@ywesee.com
4
+
5
+ require 'ydim/html/state/debitors'
6
+ require 'ydim/html/view/init'
7
+
8
+ module YDIM
9
+ module Html
10
+ module State
11
+ class Init < SBSM::State
12
+ VIEW = Html::View::Init
13
+ def login
14
+ if(res = @session.login)
15
+ Debitors.new(@session, nil)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Html::State::Invoice -- ydim -- 16.01.2006 -- hwyss@ywesee.com
4
+
5
+ require 'ydim/html/state/global_predefine'
6
+ require 'ydim/html/state/ajax_values'
7
+ require 'ydim/html/state/confirm'
8
+ require 'ydim/html/view/invoice'
9
+
10
+ module YDIM
11
+ module Html
12
+ module State
13
+ class AjaxItems < SBSM::State
14
+ VOLATILE = true
15
+ VIEW = Html::View::ItemList
16
+ end
17
+ class AjaxInvoice < SBSM::State
18
+ VOLATILE = true
19
+ VIEW = Html::View::InvoiceComposite
20
+ end
21
+ module InvoiceKeys
22
+ def invoice_key
23
+ :invoice
24
+ end
25
+ def invoice_keys
26
+ invoice_mandatory + [:precision, :suppress_vat]
27
+ end
28
+ def invoice_mandatory
29
+ [:description, :date, :currency]
30
+ end
31
+ end
32
+ class CreateInvoice < Global
33
+ include InvoiceKeys
34
+ VIEW = Html::View::Invoice
35
+ attr_reader :model
36
+ def update
37
+ _update(Invoice)
38
+ end
39
+ def _update(nextclass)
40
+ input = user_input(invoice_keys, invoice_mandatory)
41
+ input[:precision] = (input[:precision] || 2).to_i
42
+ unless(error?)
43
+ @model = @session.send("create_#{invoice_key}",
44
+ @model.debitor.unique_id)
45
+ @model.payment_period = 30
46
+ input.each { |key, val|
47
+ @model.send("#{key}=", val)
48
+ }
49
+ @model.odba_store
50
+ nextclass.new(@session, @model)
51
+ end
52
+ end
53
+ end
54
+ class Invoice < Global
55
+ include InvoiceKeys
56
+ class SortableInvoice
57
+ def initialize invoice
58
+ @invoice = invoice
59
+ end
60
+ def items
61
+ @items ||= @invoice.items
62
+ end
63
+ def reverse!
64
+ items.reverse!
65
+ end
66
+ def respond_to? *args
67
+ @invoice.respond_to?(*args) || super
68
+ end
69
+ def sort! &block
70
+ items.sort! &block
71
+ end
72
+ def update!
73
+ @items = nil
74
+ end
75
+ def method_missing name, *args, &block
76
+ @invoice.send name, *args, &block
77
+ end
78
+ end
79
+ VIEW = Html::View::Invoice
80
+ attr_reader :model
81
+ def init
82
+ @model = SortableInvoice.new @model
83
+ super
84
+ end
85
+ def ajax_create_item
86
+ if(id = @session.user_input(:unique_id))
87
+ begin
88
+ @session.add_items(id.to_i, [{:time => Time.now}], invoice_key)
89
+ rescue IndexError
90
+ end
91
+ @model.update! ## @model is a SortableInvoice
92
+ end
93
+ AjaxItems.new(@session, @model.items)
94
+ end
95
+ def ajax_delete_item
96
+ if((id = @session.user_input(:unique_id)) \
97
+ && (idx = @session.user_input(:index)))
98
+ begin
99
+ @session.delete_item(id.to_i, idx.to_i, invoice_key)
100
+ rescue IndexError
101
+ end
102
+ @model.update! ## @model is a SortableInvoice
103
+ end
104
+ AjaxItems.new(@session, @model.items)
105
+ end
106
+ def ajax_item
107
+ data = {}
108
+ if((id = @session.user_input(:unique_id)) \
109
+ && (idx = @session.user_input(:index)))
110
+ begin
111
+ keys = [:text, :quantity, :unit, :price]
112
+ input = user_input(keys).delete_if { |key, val| val.nil? }
113
+ item = @session.update_item(id.to_i, idx.to_i, input,
114
+ invoice_key)
115
+ input.each { |key, val| data.store("#{key}[#{item.index}]", val) }
116
+ data.store("total_netto#{item.index}", item.total_netto)
117
+ rescue IndexError
118
+ end
119
+ end
120
+ [:total_netto, :vat, :total_brutto].each { |key|
121
+ data.store(key, @model.send(key))
122
+ }
123
+ AjaxValues.new(@session, data)
124
+ end
125
+ def ajax_invoice
126
+ _do_update
127
+ AjaxInvoice.new(@session, @model)
128
+ end
129
+ def pdf
130
+ newstate = super
131
+ newstate.sortby, newstate.sort_reverse = @sortby, @sort_reverse
132
+ newstate
133
+ end
134
+ def send_invoice
135
+ _do_update
136
+ super
137
+ end
138
+ def update
139
+ _do_update
140
+ self
141
+ end
142
+ def _do_update
143
+ if((id = @session.user_input(:unique_id)) \
144
+ && @model.unique_id == id.to_i)
145
+ ## update items
146
+ keys = [:text, :quantity, :unit, :price]
147
+ data = {}
148
+ user_input(keys).each { |key, hash|
149
+ hash.each { |idx, value|
150
+ (data[idx] ||= {}).store(key, value)
151
+ } unless hash.nil?
152
+ }
153
+ target = origin = nil
154
+ converter = if((target = @session.user_input(:currency)) \
155
+ && (origin = @model.currency) \
156
+ && origin != target)
157
+ @session.currency_converter
158
+ end
159
+ data.each { |idx, item|
160
+ if(converter)
161
+ item[:price] = converter.convert(item[:price], origin, target)
162
+ end
163
+ @session.update_item(id.to_i, idx.to_i, item, invoice_key)
164
+ }
165
+
166
+ _do_update_invoice(user_input(invoice_keys, invoice_mandatory))
167
+ @model.update! ## @model is a SortableInvoice
168
+ @model.odba_store
169
+ end
170
+ end
171
+ def _do_update_invoice(input)
172
+ input[:precision] = (input[:precision] || 2).to_i
173
+ input.each { |key, val|
174
+ @model.send("#{key}=", val)
175
+ }
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Html::State::Invoices -- ydim -- 13.01.2006 -- hwyss@ywesee.com
4
+
5
+ require 'ydim/html/state/global_predefine'
6
+ require 'ydim/html/view/invoices'
7
+
8
+ module YDIM
9
+ module Html
10
+ module State
11
+ class AjaxInvoices < SBSM::State
12
+ VOLATILE = true
13
+ VIEW = Html::View::InvoiceList
14
+ end
15
+ module AjaxInvoiceMethods
16
+ def ajax_invoices(model=@model)
17
+ keys = [:payment_received, :unique_id, :deleted]
18
+ input = user_input(keys, [:unique_id])
19
+ id = input.delete(:unique_id).to_i
20
+ if(!error? && !input.empty? && (invoice = @session.invoice(id)))
21
+ input.each { |key, val|
22
+ invoice.send("#{key}=", val)
23
+ }
24
+ invoice.odba_store
25
+ model.delete_if { |info| info.unique_id == id }
26
+ end
27
+ AjaxInvoices.new(@session, model)
28
+ end
29
+ def ajax_status
30
+ AjaxInvoices.new(@session, load_invoices)
31
+ end
32
+ def currency_convert(invoices)
33
+ currency = Html.config.currency
34
+ converter = @session.currency_converter
35
+ invoices.each { |inv|
36
+ if(icur = inv.currency)
37
+ inv.total_netto = converter.convert(inv.total_netto, icur, currency)
38
+ inv.total_brutto = converter.convert(inv.total_brutto, icur, currency)
39
+ end
40
+ inv.currency = currency
41
+ }
42
+ end
43
+ def sort_invoices(invoices)
44
+ null_date = Date.new(9999)
45
+ invoices.sort_by { |inv|
46
+ [null_date - (inv.date || null_date), inv.description.to_s]
47
+ }
48
+ end
49
+ end
50
+ class Invoices < Global
51
+ include AjaxInvoiceMethods
52
+ VIEW = Html::View::Invoices
53
+ def init
54
+ super
55
+ invs = @session.invoice_infos('is_open')
56
+ invs.concat @session.invoice_infos('is_due')
57
+ @model = sort_invoices(currency_convert(invs))
58
+ end
59
+ def ajax_collect_garbage
60
+ @session.collect_garbage
61
+ AjaxInvoices.new(@session, [])
62
+ end
63
+ private
64
+ def load_invoices
65
+ @model = sort_invoices(currency_convert(@session.invoices))
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Html::State::Pdf -- ydim -- 17.01.2006 -- hwyss@ywesee.com
4
+
5
+ require 'ydim/html/view/pdf'
6
+
7
+ module YDIM
8
+ module Html
9
+ module State
10
+ class Pdf < SBSM::State
11
+ VOLATILE = true
12
+ VIEW = Html::View::Pdf
13
+ attr_accessor :sortby, :sort_reverse
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ # Html::Custom::Lookandfeel -- ydim -- 12.01.2006 -- hwyss@ywesee.com
4
+
5
+ require 'sbsm/lookandfeel'
6
+
7
+ module YDIM
8
+ module Html
9
+ module Custom
10
+ class Lookandfeel < SBSM::Lookandfeel
11
+ DICTIONARIES = {
12
+ 'de' => {
13
+ :address_lines => 'Strasse/Nr.',
14
+ :autoinvoices => 'Vorlagen',
15
+ :CHF => 'CHF',
16
+ :collect_garbage => 'Papierkorb Leeren',
17
+ :comma => ', ',
18
+ :confirm_send_invoice0 => 'Die Rechnung wurde an folgende Email-Adressen verschickt: ',
19
+ :confirm_send_invoice1 => '.',
20
+ :contact => 'Name',
21
+ :contact_firstname => 'Vorname',
22
+ :contact_title => 'Titel',
23
+ :country => 'Land',
24
+ :cpr_link => ' ywesee GmbH',
25
+ :create_debitor => 'Neuer Kunde',
26
+ :create_autoinvoice => 'Neue Vorlage',
27
+ :create_invoice => 'Neue Rechnung',
28
+ :create_item => 'Neue Position',
29
+ :currency => 'W&auml;hrung',
30
+ :dash => '&nbsp;&ndash;&nbsp;',
31
+ :date => 'Rechnungsdatum',
32
+ :date_format => '%d.%m.%Y',
33
+ :debitors => 'Kunden',
34
+ :debitor_name => 'Kunde',
35
+ :debitor_type => 'Kundenart',
36
+ :delete => 'Löschen',
37
+ :description => 'Beschreibung',
38
+ :dt_consulting => 'Beratung',
39
+ :dt_doctor => 'Arzt',
40
+ :dt_health => 'Gesundheitsdienstleister',
41
+ :dt_hospital => 'Spital',
42
+ :dt_hosting => 'Hosting-Kunde',
43
+ :dt_info => 'ODDB.org-User',
44
+ :dt_insurance => 'Krankenkasse',
45
+ :dt_pharma => 'Pharma-Firma',
46
+ :dt_pharmacy => 'Apotheke',
47
+ :e_domainless_email_address => 'Wir akzeptieren keine lokalen Email-Adressen.',
48
+ :e_invalid_email_address => 'Die angegebene Email-Adresse ist ungültig.',
49
+ :e_invalid_numeric_format => 'Ungültiges Zahlenformat',
50
+ :e_invalid_phone => 'Die angegebene Telefonnummer ist ungültig.',
51
+ :e_too_many_emails => 'Es sind maximal 3 Email-Adressen erlaubt.',
52
+ :email => 'Email',
53
+ :emails => 'Email (max. 3)',
54
+ :e_bygone_date => 'Bitte geben Sie ein Datum an, welches in der Zukuft liegt.',
55
+ :e_missing0 => 'Bitte geben Sie das Feld "',
56
+ :e_missing1 => '" an.',
57
+ :EUR => 'EUR',
58
+ :Frau => 'Frau',
59
+ :generate_invoice => 'Generieren',
60
+ :Herr => 'Herr',
61
+ :html_title => 'YDIM',
62
+ :invoice_interval => 'Rechnungs-Intervall',
63
+ :inv_m => 'Nur Manuell',
64
+ :inv_3 => 'Vierteljährlich',
65
+ :inv_6 => 'Halbjährlich',
66
+ :inv_12 => 'Jährlich',
67
+ :inv_24 => 'Alle zwei Jahre',
68
+ :invoices => 'Rechnungen',
69
+ :is_due => 'F&auml;llige Rechnungen',
70
+ :is_open => 'Offene Rechnungen',
71
+ :is_paid => 'Bezahlte Rechnungen',
72
+ :is_trash => 'Papierkorb',
73
+ :lgpl_license => 'LGPL',
74
+ :location => 'PLZ/Ort',
75
+ :login => 'Login',
76
+ :logout => 'Logout',
77
+ :name => 'Firma',
78
+ :pass => 'Passwort',
79
+ :payment_period0 => ' Zahlbar in ',
80
+ :payment_period1 => ' Tagen',
81
+ :pdf => 'PDF',
82
+ :phone => 'Telefon',
83
+ :precision => 'Kommastellen',
84
+ :reminder_body => 'Erinnerungsmail Text',
85
+ :reminder_date => 'Wird am %d.%m.%Y versendet',
86
+ :reminder_none => 'Es wird kein Erinnerungsmail versendet',
87
+ :reminder_subject => 'Erinnerungsmail Betreff',
88
+ :salutation => 'Anrede',
89
+ :send_invoice => 'Email Senden',
90
+ :suppress_vat => 'OHNE MwSt.',
91
+ :th_currency => 'W&auml;hrung',
92
+ :th_debitor_email => 'Email',
93
+ :th_debitor_name => 'Name',
94
+ :th_debitor_type => 'Kundenart',
95
+ :th_description => 'Beschreibung',
96
+ :th_domain => 'Domain',
97
+ :th_email => 'Email',
98
+ :th_formatted_date => 'Datum',
99
+ :th_name => 'Name',
100
+ :th_next_invoice_date => 'Nächste Rechnung',
101
+ :th_phone => 'Telefon',
102
+ :th_price => 'Preis',
103
+ :th_quantity => 'Anzahl',
104
+ :th_text => 'Positionstext',
105
+ :th_time => 'Zeit',
106
+ :th_toggle_payment_received => 'Status',
107
+ :th_total_brutto => 'Brutto',
108
+ :th_total_netto => 'Netto',
109
+ :th_unique_id => 'ID',
110
+ :th_unit => 'Einheit',
111
+ :time_format => '%d.%m.%Y %H:%M',
112
+ :toggle_deleted => 'löschen',
113
+ :toggle_paid => 'offen',
114
+ :toggle_recovered => 'wiederherstellen',
115
+ :toggle_unpaid => 'bezahlt',
116
+ :total => 'Total',
117
+ :total_brutto => 'Total Brutto',
118
+ :total_netto => 'Total Netto',
119
+ :unique_id => 'ID',
120
+ :update => 'Speichern',
121
+ :vat => 'MwSt. (8.0%)',
122
+ :ydim => 'YDIM',
123
+ :ydim_version => 'Commit-ID',
124
+ },
125
+ }
126
+ RESOURCES = {
127
+ :css => 'ydim.css',
128
+ :javascript => 'javascript',
129
+ }
130
+ end
131
+ end
132
+ end
133
+ end