clevic 0.13.0.b3 → 0.13.0.b5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/History.txt +21 -0
  2. data/Manifest.txt +91 -85
  3. data/README.txt +33 -18
  4. data/Rakefile +2 -3
  5. data/TODO +8 -14
  6. data/bin/clevic +18 -20
  7. data/lib/clevic.rb +7 -1
  8. data/lib/clevic/action_builder.rb +4 -1
  9. data/lib/clevic/ar_methods.rb +72 -57
  10. data/lib/clevic/attribute_list.rb +4 -0
  11. data/lib/clevic/cache_table.rb +43 -69
  12. data/lib/clevic/dataset_roller.rb +22 -0
  13. data/lib/clevic/delegate.rb +11 -5
  14. data/lib/clevic/delegates/combo_delegate.rb +156 -0
  15. data/lib/clevic/delegates/distinct_delegate.rb +48 -0
  16. data/lib/clevic/delegates/relational_delegate.rb +59 -0
  17. data/lib/clevic/delegates/set_delegate.rb +31 -0
  18. data/lib/clevic/field.rb +39 -55
  19. data/lib/clevic/field_valuer.rb +23 -10
  20. data/lib/clevic/filter_command.rb +22 -36
  21. data/lib/clevic/framework.rb +37 -0
  22. data/lib/clevic/generic_format.rb +5 -1
  23. data/lib/clevic/many_field.rb +28 -3
  24. data/lib/clevic/model_builder.rb +27 -32
  25. data/lib/clevic/ordered_dataset.rb +45 -0
  26. data/lib/clevic/qt.rb +4 -1
  27. data/lib/clevic/qt/action_builder.rb +9 -1
  28. data/lib/clevic/qt/browser.rb +1 -1
  29. data/lib/clevic/qt/clipboard.rb +3 -3
  30. data/lib/clevic/qt/combo_delegate.rb +25 -89
  31. data/lib/clevic/qt/delegate.rb +25 -0
  32. data/lib/clevic/qt/distinct_delegate.rb +5 -23
  33. data/lib/clevic/qt/extensions.rb +8 -1
  34. data/lib/clevic/qt/qt_combo_box.rb +58 -0
  35. data/lib/clevic/qt/relational_delegate.rb +18 -58
  36. data/lib/clevic/qt/set_delegate.rb +4 -34
  37. data/lib/clevic/qt/simplest_delegate.rb +19 -0
  38. data/lib/clevic/qt/table_model.rb +10 -10
  39. data/lib/clevic/qt/table_view.rb +7 -23
  40. data/lib/clevic/qt/text_delegate.rb +2 -2
  41. data/lib/clevic/qt/ui/browser_ui.rb +1 -1
  42. data/lib/clevic/qt/ui/search_dialog_ui.rb +1 -1
  43. data/lib/clevic/rails_models_loaders.rb +13 -0
  44. data/lib/clevic/record.rb +2 -2
  45. data/lib/clevic/sampler.rb +85 -39
  46. data/lib/clevic/sequel_ar_adapter.rb +1 -28
  47. data/lib/clevic/sequel_clevic.rb +68 -0
  48. data/lib/clevic/sequel_meta.rb +1 -13
  49. data/lib/clevic/subclasses.rb +18 -0
  50. data/lib/clevic/swing.rb +2 -1
  51. data/lib/clevic/swing/action.rb +27 -3
  52. data/lib/clevic/swing/action_builder.rb +0 -2
  53. data/lib/clevic/swing/browser.rb +1 -10
  54. data/lib/clevic/swing/combo_delegate.rb +45 -133
  55. data/lib/clevic/swing/delegate.rb +2 -0
  56. data/lib/clevic/swing/distinct_delegate.rb +2 -14
  57. data/lib/clevic/swing/relational_delegate.rb +2 -20
  58. data/lib/clevic/swing/set_delegate.rb +13 -28
  59. data/lib/clevic/swing/table_view.rb +1 -1
  60. data/lib/clevic/table_model.rb +3 -4
  61. data/lib/clevic/table_searcher.rb +10 -31
  62. data/lib/clevic/table_view.rb +97 -43
  63. data/lib/clevic/ui/browser_ui.rb +133 -0
  64. data/lib/clevic/ui/search_dialog_ui.rb +106 -0
  65. data/lib/clevic/version.rb +2 -2
  66. data/models/accounts_models.rb +24 -21
  67. data/models/times_models.rb +34 -28
  68. data/models/times_psql_models.rb +9 -3
  69. data/models/times_sqlite_models.rb +24 -1
  70. data/sql/times_sqlite.sql +3 -3
  71. data/tasks/clevic.rake +2 -2
  72. data/test/test_cache_table.rb +9 -19
  73. data/test/test_table_searcher.rb +2 -5
  74. metadata +95 -91
  75. data/lib/clevic/order_attribute.rb +0 -63
  76. data/lib/clevic/qt/boolean_delegate.rb +0 -8
  77. data/lib/clevic/qt/delegates.rb +0 -1
  78. data/lib/clevic/qt/item_delegate.rb +0 -66
  79. data/lib/clevic/sql_dialects.rb +0 -33
  80. data/tasks/website.rake +0 -25
  81. data/test/test_order_attribute.rb +0 -62
  82. data/test/test_sql_dialects.rb +0 -77
@@ -1,63 +0,0 @@
1
- =begin rdoc
2
- Store the SQL order_by attributes with ascending and descending values
3
- =end
4
- # TODO don't use this anymore
5
- class OrderAttribute
6
- attr_reader :direction, :attribute
7
-
8
- def initialize( entity_class, sql_order_fragment )
9
- @entity_class = entity_class
10
- if sql_order_fragment =~ /^(.*?\.)?(.*?) *asc$/i
11
- @direction = :asc
12
- @attribute = $2
13
- elsif sql_order_fragment =~ /^(.*?\.)?(.*?) *desc$/i
14
- @direction = :desc
15
- @attribute = $2
16
- else
17
- @direction = :asc
18
- @attribute = sql_order_fragment
19
- end
20
- end
21
-
22
- # return ORDER BY field name
23
- def to_s
24
- @string ||= attribute
25
- end
26
-
27
- def to_sym
28
- @sym ||= attribute.to_sym
29
- end
30
-
31
- # return 'field ASC' or 'field DESC', depending
32
- def to_sql
33
- "#{@entity_class.table_name}.#{attribute} #{direction.to_s}"
34
- end
35
-
36
- def reverse( direction )
37
- case direction
38
- when :asc; :desc
39
- when :desc; :asc
40
- else; raise "unknown direction #{direction}"
41
- end
42
- end
43
-
44
- # return the opposite ASC or DESC from to_sql
45
- def to_reverse_sql
46
- "#{@entity_class.table_name}.#{attribute} #{reverse(direction).to_s}"
47
- end
48
-
49
- def ==( other )
50
- @entity_class == other.instance_eval( '@entity_class' ) and
51
- self.direction == other.direction and
52
- self.attribute == other.attribute
53
- end
54
-
55
- # return -1 for desc, 1 for asc
56
- def to_i
57
- case direction
58
- when :asc; 1
59
- when :desc; -1
60
- else; raise "unknown direction #{direction}"
61
- end
62
- end
63
- end
@@ -1,8 +0,0 @@
1
- require 'clevic/qt/text_delegate.rb'
2
-
3
- module Clevic
4
-
5
- # TODO alias this for now
6
- BooleanDelegate = TextDelegate
7
-
8
- end
@@ -1 +0,0 @@
1
-
@@ -1,66 +0,0 @@
1
- require 'Qt4'
2
-
3
- module Qt
4
- class KeyEvent
5
- def inspect
6
- "<Qt::KeyEvent text=#{text} key=#{key}"
7
- end
8
- end
9
- end
10
-
11
- module Clevic
12
-
13
- class ItemDelegate < Qt::ItemDelegate
14
- attr_reader :field
15
-
16
- def initialize( field )
17
- raise "field is nil" if field.nil?
18
- # pass nil as Qt object's parent. Will set parent later.
19
- super( nil )
20
- @field = field
21
- end
22
-
23
- def attribute
24
- field.attribute
25
- end
26
-
27
- def entity_class
28
- field.entity_class
29
- end
30
-
31
- def find_options
32
- field.find_options
33
- end
34
-
35
- # Figure out where to put the editor widget, taking into
36
- # account the sizes of the headers
37
- def updateEditorGeometry( editor, style_option_view_item, model_index )
38
- rect = style_option_view_item.rect
39
- rect.set_width( [editor.size_hint.width,rect.width].max )
40
- rect.set_height( editor.size_hint.height )
41
- editor.set_geometry( rect )
42
- end
43
-
44
- # This catches the event that begins the edit process.
45
- def editorEvent ( event, model, style_option_view_item, model_index )
46
- parent.before_edit_index = model_index
47
- super
48
- end
49
-
50
- # This is called when one of the EditTriggers is pressed. So
51
- # it's only good for opening a generic keystroke editor, not
52
- # a specific one, eg a calendar-style date editor.
53
- #~ def createEditor( parent_widget, style_option_view_item, model_index )
54
- #~ end
55
-
56
- # Set the data for the given editor widget
57
- #~ def setEditorData( editor_widget, model_index )
58
- #~ end
59
-
60
- # Set the data for the given model and index from the given
61
- #~ def setModelData( editor_widget, abstract_item_model, model_index )
62
- #~ end
63
-
64
- end
65
-
66
- end
@@ -1,33 +0,0 @@
1
- module Clevic
2
- # Provide some SQL dialect differences that aren't in ActiveRecord. Including
3
- # class must respond to entity_class.
4
- module SqlDialects
5
- def adapter_name
6
- connection.adapter_name
7
- end
8
-
9
- def connection
10
- entity_class.connection
11
- end
12
-
13
- # return a string containing the correct
14
- # boolean value depending on the DB adapter
15
- # because Postgres wants real true and false in complex statements, not 't' and 'f'
16
- def sql_boolean( value )
17
- case adapter_name
18
- when 'PostgreSQL'
19
- value ? 'true' : 'false'
20
- else
21
- value ? connection.quoted_true : connection.quoted_false
22
- end
23
- end
24
-
25
- # return a case-insensitive like operator
26
- def like_operator
27
- case adapter_name
28
- when 'PostgreSQL'; 'ilike'
29
- else; 'like'
30
- end
31
- end
32
- end
33
- end
data/tasks/website.rake DELETED
@@ -1,25 +0,0 @@
1
- task :ruby_env do
2
- RUBY_APP = if RUBY_PLATFORM =~ /java/
3
- "jruby"
4
- else
5
- "ruby"
6
- end unless defined? RUBY_APP
7
- end
8
-
9
- desc 'Generate website files'
10
- task :website_generate => :ruby_env do
11
- (Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
12
- sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
13
- end
14
- end
15
-
16
- desc 'Upload website files to rubyforge'
17
- task :upload_website do
18
- host = "#{rubyforge_username}@rubyforge.org"
19
- remote_dir = "/var/www/gforge-projects/#{PATH}/"
20
- local_dir = 'website'
21
- sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
22
- end
23
-
24
- desc 'Generate and upload website files'
25
- task :website => [:website_generate, :website_upload, :publish_docs]
@@ -1,62 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
- require 'clevic/order_attribute.rb'
3
-
4
- class Dummy < Sequel::Model
5
- end
6
-
7
- # need to set up a test DB, and test data for this
8
- class TestOrderAttribute < Test::Unit::TestCase
9
- def setup
10
- end
11
-
12
- def teardown
13
- end
14
-
15
- def test_reverse
16
- oa = OrderAttribute.new Dummy, 'id'
17
- assert_equal :asc, oa.reverse( :desc )
18
- assert_equal :desc, oa.reverse( :asc )
19
- assert_raise( RuntimeError ) { oa.reverse( :something_wrong ) }
20
- end
21
-
22
- # Test that initialisation was OK
23
- def test_equal
24
- oa1 = OrderAttribute.new Dummy, 'id'
25
- oa2 = OrderAttribute.new Dummy, 'id'
26
- assert_equal oa1, oa2
27
- assert_equal oa1.to_sql, 'dummies.id asc'
28
- assert_equal oa1.to_reverse_sql, 'dummies.id desc'
29
- assert_equal oa1.attribute.to_sym, oa1.to_sym
30
-
31
- assert_equal oa2.to_sql, 'dummies.id asc'
32
- assert_equal oa2.to_reverse_sql, 'dummies.id desc'
33
- end
34
-
35
- def test_parse_default
36
- oa_asc = OrderAttribute.new Dummy, "name"
37
- assert_equal 'name', oa_asc.attribute
38
- assert_equal :asc, oa_asc.direction
39
- end
40
-
41
- def test_parse_desc
42
- oa_desc = OrderAttribute.new Dummy, "name desc"
43
- assert_equal 'name', oa_desc.attribute
44
- assert_equal 'name', oa_desc.to_s
45
- assert_equal :desc, oa_desc.direction
46
- assert_equal oa_desc.to_sql, 'dummies.name desc'
47
- assert_equal 'dummies.name asc', oa_desc.to_reverse_sql
48
-
49
- oa_desc = OrderAttribute.new Dummy, "dummies.name desc"
50
- assert_equal 'name', oa_desc.attribute
51
- assert_equal :desc, oa_desc.direction
52
- assert_equal oa_desc.to_sql, 'dummies.name desc'
53
- end
54
-
55
- def test_parse_table
56
- oa_with_table = OrderAttribute.new Dummy, 'dummies.name asc'
57
- assert_equal 'name', oa_with_table.attribute
58
- assert_equal :asc, oa_with_table.direction
59
- assert_equal oa_with_table.to_sql, 'dummies.name asc'
60
- end
61
-
62
- end
@@ -1,77 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require 'clevic/sql_dialects.rb'
3
-
4
- # TODO should probably connect to real DB drivers to do this
5
-
6
- class MockPostgreSQL
7
- include Clevic::SqlDialects
8
- def adapter_name
9
- 'PostgreSQL'
10
- end
11
-
12
- def connection
13
- self
14
- end
15
-
16
- end
17
-
18
- class MockOther
19
- include Clevic::SqlDialects
20
- def adapter_name
21
- 'Something else entirely'
22
- end
23
-
24
- def connection
25
- self
26
- end
27
-
28
- def quoted_true; "'t'"; end
29
- def quoted_false; "'f'"; end
30
- end
31
-
32
- class TestSqlDialects < Test::Unit::TestCase
33
- def self.startup
34
- end
35
-
36
- def self.shutdown
37
- end
38
-
39
- def setup
40
- end
41
-
42
- context MockPostgreSQL.name do
43
- setup do
44
- @dialect = MockPostgreSQL.new
45
- end
46
-
47
- should 'return ilike' do
48
- assert_equal 'ilike', @dialect.like_operator
49
- end
50
-
51
- should "return true" do
52
- assert_equal "true", @dialect.sql_boolean( true )
53
- end
54
-
55
- should "return false" do
56
- assert_equal "false", @dialect.sql_boolean( false )
57
- end
58
- end
59
-
60
- context MockOther.name do
61
- setup do
62
- @dialect = MockOther.new
63
- end
64
-
65
- should 'return like' do
66
- assert_equal 'like', @dialect.like_operator
67
- end
68
-
69
- should "return 't'" do
70
- assert_equal "'t'", @dialect.sql_boolean( true )
71
- end
72
-
73
- should "return 'f'" do
74
- assert_equal "'f'", @dialect.sql_boolean( false )
75
- end
76
- end
77
- end