spiderfw 0.6.16 → 0.6.17

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 (61) hide show
  1. data/CHANGELOG +9 -0
  2. data/Rakefile +8 -5
  3. data/VERSION +1 -1
  4. data/apps/core/auth/data/locale/it/LC_MESSAGES/spider_auth.mo +0 -0
  5. data/apps/core/auth/po/it/spider_auth.po +3 -3
  6. data/apps/core/auth/po/spider_auth.pot +3 -3
  7. data/apps/core/components/data/locale/it/LC_MESSAGES/spider_components.mo +0 -0
  8. data/apps/core/components/po/it/spider_components.po +7 -7
  9. data/apps/core/components/po/spider_components.pot +7 -7
  10. data/apps/core/components/public/js/spider.js +4 -2
  11. data/apps/core/forms/data/locale/it/LC_MESSAGES/spider_forms.mo +0 -0
  12. data/apps/core/forms/po/it/spider_forms.po +2 -2
  13. data/apps/core/forms/po/spider_forms.pot +2 -2
  14. data/apps/core/forms/widgets/form/form.rb +20 -6
  15. data/apps/master/_init.rb +0 -1
  16. data/apps/master/data/locale/it/LC_MESSAGES/master.mo +0 -0
  17. data/apps/master/master.rb +4 -0
  18. data/apps/master/po/it/master.po +62 -25
  19. data/apps/master/po/master.pot +45 -20
  20. data/apps/messenger/_init.rb +2 -21
  21. data/apps/messenger/backends/sms/test.rb +25 -0
  22. data/apps/messenger/config/test.config.yml +6 -1
  23. data/apps/messenger/controllers/mixins/messenger_helper.rb +30 -5
  24. data/apps/messenger/data/locale/it/LC_MESSAGES/spider_messenger.mo +0 -0
  25. data/apps/messenger/messenger.rb +40 -2
  26. data/apps/servant/lib/commands_processor.rb +1 -1
  27. data/apps/worker/worker.rb +15 -10
  28. data/data/locale/it/LC_MESSAGES/spider.mo +0 -0
  29. data/lib/spiderfw/app.rb +3 -3
  30. data/lib/spiderfw/cache/template_cache.rb +4 -0
  31. data/lib/spiderfw/cmd/cmd.rb +0 -2
  32. data/lib/spiderfw/cmd/commands/app.rb +89 -6
  33. data/lib/spiderfw/cmd/commands/setup.rb +13 -40
  34. data/lib/spiderfw/config/configuration.rb +1 -0
  35. data/lib/spiderfw/config/options/spider.rb +9 -8
  36. data/lib/spiderfw/controller/mixins/http_mixin.rb +9 -0
  37. data/lib/spiderfw/env.rb +3 -1
  38. data/lib/spiderfw/i18n/cldr.rb +39 -13
  39. data/lib/spiderfw/i18n/i18n.rb +9 -0
  40. data/lib/spiderfw/i18n/javascript_parser.rb +1 -1
  41. data/lib/spiderfw/i18n/shtml_parser.rb +1 -1
  42. data/lib/spiderfw/model/base_model.rb +1 -1
  43. data/lib/spiderfw/model/inline_model.rb +13 -1
  44. data/lib/spiderfw/model/mappers/db_mapper.rb +5 -0
  45. data/lib/spiderfw/model/mappers/mapper.rb +9 -4
  46. data/lib/spiderfw/model/migrations/drop_element.rb +26 -0
  47. data/lib/spiderfw/model/migrations/irreversible_migration.rb +9 -0
  48. data/lib/spiderfw/model/migrations/migration.rb +7 -0
  49. data/lib/spiderfw/model/migrations/replace.rb +32 -0
  50. data/lib/spiderfw/model/migrations.rb +21 -0
  51. data/lib/spiderfw/model/model.rb +4 -1
  52. data/lib/spiderfw/model/storage/db/db_storage.rb +1 -1
  53. data/lib/spiderfw/setup/app_manager.rb +281 -200
  54. data/lib/spiderfw/setup/setup_task.rb +80 -35
  55. data/lib/spiderfw/spider.rb +28 -13
  56. data/lib/spiderfw/templates/layout.rb +40 -8
  57. data/lib/spiderfw/templates/resources/sass.rb +21 -0
  58. data/lib/spiderfw/test.rb +1 -1
  59. data/lib/spiderfw/utils/events/event_source.rb +1 -2
  60. data/lib/spiderfw/utils/gems.rb +5 -1
  61. metadata +11 -4
@@ -125,6 +125,15 @@ module Spider
125
125
  end
126
126
 
127
127
  end
128
+
129
+ def list(enumerable, locale=Spider.locale)
130
+ return enumerable.first.to_s if enumerable.length < 2
131
+ p = provider(locale)
132
+ unless p && p.respond_to?(:list)
133
+ return enumerable.join(', ')
134
+ end
135
+ return p.list(enumerable)
136
+ end
128
137
 
129
138
  # from Rails
130
139
  def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
@@ -49,6 +49,6 @@ module Spider; module I18n
49
49
 
50
50
  end
51
51
 
52
- GetText::RGetText.add_parser(JavascriptParser)
52
+ ::GetText::RGetText.add_parser(JavascriptParser)
53
53
 
54
54
  end; end
@@ -36,6 +36,6 @@ module Spider; module I18n
36
36
 
37
37
  end
38
38
 
39
- GetText::RGetText.add_parser(SHTMLParser)
39
+ ::GetText::RGetText.add_parser(SHTMLParser)
40
40
 
41
41
  end; end
@@ -1592,7 +1592,7 @@ module Spider; module Model
1592
1592
  element = self.class.elements[name]
1593
1593
  element.type.check(val) if (element.type.respond_to?(:check))
1594
1594
  if (checks = element.attributes[:check])
1595
- checks = {(_("'%s' is not in the correct format") % element.label) => checks} unless checks.is_a?(Hash)
1595
+ checks = {("'%s' is not in the correct format") => checks} unless checks.is_a?(Hash)
1596
1596
  checks.each do |msg, check|
1597
1597
  test = case check
1598
1598
  when Regexp
@@ -49,7 +49,19 @@ module Spider; module Model
49
49
  return self.class.mapper
50
50
  end
51
51
 
52
-
52
+ def ==(val)
53
+ return super unless self.class.primary_keys.length == 1
54
+ pk = self.class.primary_keys.first
55
+ if pk.type == String || pk.type == Symbol
56
+ if val.is_a?(String) || val.is_a?(Symbol)
57
+ return val.to_s == self.get(pk).to_s
58
+ end
59
+ elsif val.is_a?(pk.type)
60
+ return val == self.get(pk)
61
+ end
62
+ return super
63
+
64
+ end
53
65
 
54
66
  end
55
67
 
@@ -973,6 +973,11 @@ module Spider; module Model; module Mappers
973
973
  return schema
974
974
  end
975
975
 
976
+ # Resets the schema, so that it is regenerated on the next call
977
+ def reset_schema
978
+ @schema = nil
979
+ end
980
+
976
981
  def storage_column_type(type, attributes)
977
982
  @storage.column_type(type, attributes)
978
983
  end
@@ -281,14 +281,14 @@ module Spider; module Model
281
281
 
282
282
  # Deletes all associations from the given object to the element.
283
283
  def delete_element_associations(obj, element, associated=nil)
284
- if (element.attributes[:junction])
284
+ if element.attributes[:junction]
285
285
  condition = {element.attributes[:reverse] => obj.primary_keys}
286
286
  condition[element.attributes[:junction_their_element]] = associated if associated
287
287
  element.mapper.delete(condition)
288
288
  else
289
- if (element.multiple?)
289
+ if element.multiple?
290
290
  condition = Condition.and
291
- if (associated)
291
+ if associated
292
292
  condition = associated.keys_to_condition
293
293
  else
294
294
  condition[element.reverse] = obj
@@ -298,7 +298,7 @@ module Spider; module Model
298
298
  # element.model.primary_keys.each{ |el| condition_row.set(el.name, '<>', child.get(el))}
299
299
  # condition << condition_row
300
300
  # end
301
- if (element.owned?)
301
+ if element.owned? || (element.reverse && element.model.elements[element.reverse].primary_key?)
302
302
  element.mapper.delete(condition)
303
303
  else
304
304
  element.mapper.bulk_update({element.reverse => nil}, condition)
@@ -1175,6 +1175,7 @@ module Spider; module Model
1175
1175
  obj.define_schema &@schema_define_proc if @schema_define_proc
1176
1176
  obj.with_schema &@schema_proc if @schema_proc
1177
1177
  obj.no_map(*@no_map_elements.keys) if @no_map_elements
1178
+ @model_proc.call(obj.model) if @model_proc
1178
1179
  end
1179
1180
 
1180
1181
  def no_map(*els)
@@ -1190,6 +1191,10 @@ module Spider; module Model
1190
1191
  def with_schema(&proc)
1191
1192
  @schema_proc = proc
1192
1193
  end
1194
+
1195
+ def with_model(&proc)
1196
+ @model_proc = proc
1197
+ end
1193
1198
 
1194
1199
  end
1195
1200
 
@@ -0,0 +1,26 @@
1
+ module Spider; module Migrations
2
+
3
+ class DropElement < IrreversibleMigration
4
+
5
+ def initialize(model, element, options={})
6
+ @model = model
7
+ @element = element
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ field = @options[:field_name]
13
+ if !field
14
+ schema_field = @model.mapper.schema.field(@element)
15
+ field = schema_field.name
16
+ end
17
+ field ||= @model.mapper.storage.column_name(@element)
18
+ desc = @model.mapper.storage.describe_table(@model.mapper.schema.table)
19
+ if desc[:columns][field]
20
+ @model.mapper.storage.drop_field(@model.mapper.schema.table, field)
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end; end
@@ -0,0 +1,9 @@
1
+ module Spider; module Migrations
2
+
3
+ class IrreversibleMigration < Migration
4
+ def undo
5
+ raise "IrreversibleMigration, can't undo"
6
+ end
7
+ end
8
+
9
+ end; end
@@ -0,0 +1,7 @@
1
+ module Spider; module Migrations
2
+
3
+ class Migration
4
+ end
5
+
6
+
7
+ end; end
@@ -0,0 +1,32 @@
1
+ module Spider; module Migrations
2
+
3
+ class Replace < Migration
4
+
5
+ def initialize(model, element, values)
6
+ @model = model
7
+ @element = element
8
+ @values = values
9
+ end
10
+
11
+ def run
12
+ field = @model.mapper.schema.field(@model.get_element(@element).name)
13
+ table = @model.mapper.schema.table
14
+ raise "Table #{table} does not have a field #{field}" unless field
15
+ @values.each do |from, to|
16
+ save = {
17
+ :table => table,
18
+ :values => {field => to},
19
+ :condition => {:values => [[field, '=', from]]}
20
+ }
21
+ sql, bind_vars = @model.storage.sql_update(save)
22
+ return @model.storage.execute(sql, *bind_vars)
23
+ end
24
+ end
25
+
26
+ def undo
27
+ Replace.new(@model, @element, @values.invert).run
28
+ end
29
+
30
+ end
31
+
32
+ end; end
@@ -0,0 +1,21 @@
1
+ require 'spiderfw/model/migrations/migration'
2
+ require 'spiderfw/model/migrations/irreversible_migration'
3
+ require 'spiderfw/model/migrations/replace'
4
+ require 'spiderfw/model/migrations/drop_element'
5
+
6
+ module Spider
7
+
8
+ module Migrations
9
+
10
+ def self.replace(model, element, values)
11
+ Spider::Migrations::Replace.new(model, element, values)
12
+ end
13
+
14
+ def self.drop_element!(model, element, options={})
15
+ Spider::Migrations::DropElement.new(model, element, options={})
16
+ end
17
+
18
+
19
+ end
20
+
21
+ end
@@ -276,7 +276,10 @@ module Spider
276
276
 
277
277
 
278
278
  def to_s
279
- @message % @value
279
+ label = @element.label
280
+ Spider::GetText.in_domain('spider'){
281
+ _(@message) % label
282
+ }
280
283
  end
281
284
 
282
285
  end
@@ -328,7 +328,7 @@ module Spider; module Model; module Storage; module Db
328
328
  sql_condition_value(v[0], v[1], v[2])
329
329
  end
330
330
  end
331
- return mapped.select{ |p| p != nil}.join(' '+condition[:conj]+' '), bind_vars
331
+ return mapped.select{ |p| p != nil}.join(' '+(condition[:conj] || 'and')+' '), bind_vars
332
332
  end
333
333
 
334
334
  # Returns the SQL for a condition comparison.