clevic 0.13.0.b5 → 0.13.0.b6

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.
@@ -10,6 +10,7 @@
10
10
  are already defined by the time the framework-neutral
11
11
  class definition is executed.
12
12
  =end
13
+
13
14
  class Class
14
15
 
15
16
  # method_name can be a symbol or a string.
@@ -1,5 +1,8 @@
1
- # TODO not needed for 1.9
2
- require 'hashery/orderedhash'
1
+ if RUBY_VERSION > '1.9.0'
2
+ OrderedHash = Hash
3
+ else
4
+ require 'hashery/orderedhash'
5
+ end
3
6
 
4
7
  require 'clevic/table_model.rb'
5
8
  require 'clevic/cache_table.rb'
@@ -29,6 +32,7 @@ To that end, there are 2 ways to define UIs:
29
32
  I've tried to consistently refer to an instance of an Sequel::Model subclass as an 'entity'.
30
33
 
31
34
  ==Embedded View
35
+
32
36
  Minimal embedded definition is
33
37
 
34
38
  class Position < Sequel::Model
@@ -76,8 +80,9 @@ could be defined like this:
76
80
  # The project field
77
81
  relational :project do |field|
78
82
  field.display = 'project'
79
- field.conditions = 'active = true'
80
- field.order = 'lower(project)'
83
+
84
+ # see Sequel::Dataset docs
85
+ field.dataset.filter( :active => true ).order{ lower(project) }
81
86
 
82
87
  # handle data changed events. In this case,
83
88
  # auto-fill-in the invoice field.
@@ -266,10 +271,10 @@ is an ordinary editable field. Boolean values are displayed as checkboxes.
266
271
  is a multiline editable field.
267
272
 
268
273
  relational
269
- displays a set of values pulled from a belongs_to (many-to-one) relationship.
270
- In other words all the possible related entities that this one could belong_to. Some
274
+ displays a set of values pulled from a many-to-one relationship.
275
+ In other words all the possible related entities that this one could be related to. Some
271
276
  concise representation of the related entities are displayed in a combo box.
272
- :display is mandatory. All options applicable to ActiveRecord::Base#find can also be passed.
277
+ :display is mandatory.
273
278
 
274
279
  distinct
275
280
  fetches the set of values already in the field, so you don't have to re-type them.
@@ -292,7 +297,7 @@ to a method already defined in the entity. In other words any of:
292
297
  - a relationship (one_to_many, etc)
293
298
  - a plain method that takes no parameters.
294
299
 
295
- will work. Named scopes might also work, but I haven't tried them yet.
300
+ will work.
296
301
 
297
302
  You can do things like this:
298
303
 
@@ -361,6 +366,7 @@ the order can be accessed in Clevic::View.order, and specified by
361
366
  Clevic::View.order = [Position, Target, Account]
362
367
 
363
368
  =end
369
+
364
370
  class ModelBuilder
365
371
 
366
372
  # Create a definition for entity_view (subclass of Clevic::View).
@@ -4,6 +4,7 @@ Field metadata class. Includes information for type, reflections etc.
4
4
  Also, it eases the migration from AR to Sequel, which returns metadata as
5
5
  a hash instead of a class.
6
6
  =end
7
+
7
8
  class ModelColumn
8
9
  # these are from AR
9
10
  attr_accessor :primary, :scale, :sql_type, :name, :precision, :default, :type, :meta
data/lib/clevic/qt.rb CHANGED
@@ -5,6 +5,10 @@
5
5
  require 'clevic/framework'
6
6
 
7
7
  require 'Qt4'
8
+ require 'qtext'
9
+
10
+ # needed here for tableize, humanize
11
+ require 'sequel'
8
12
 
9
13
  # require these first, so TableModel and TableView get the correct ancestors
10
14
  require 'clevic/qt/table_model.rb'
@@ -129,10 +129,11 @@ class Browser < Qt::Widget
129
129
  views.each do |view_class|
130
130
  begin
131
131
  view = view_class.new
132
- unless view.entity_class.table_exists?
133
- puts "No table for #{view.entity_class.inspect}"
134
- next
135
- end
132
+
133
+ # This will raise an exception if we can't talk to the
134
+ # table. Returns nil if there is an empty table, which is
135
+ # also fine.
136
+ view.entity_class.first
136
137
 
137
138
  # create the the table_view and the table_model for the entity_class
138
139
  tab = Clevic::TableView.new( view )
@@ -151,14 +151,6 @@ module Sequel
151
151
  end
152
152
  end
153
153
 
154
- def has_attribute?( attribute )
155
- column_names.include?( attribute )
156
- end
157
-
158
- def attribute_names
159
- columns
160
- end
161
-
162
154
  def columns_hash
163
155
  db_schema
164
156
  end
@@ -34,6 +34,14 @@ module Sequel
34
34
  association_reflections
35
35
  end
36
36
 
37
+ def attribute_names
38
+ columns + reflections.keys
39
+ end
40
+
41
+ def has_attribute?( attribute )
42
+ attribute_names.include?( attribute )
43
+ end
44
+
37
45
  end
38
46
 
39
47
  module InstanceMethods
@@ -10,6 +10,7 @@ An instance of Clevic::TableModel is constructed by Clevic::ModelBuilder from th
10
10
  UI definition in a Clevic::View, or from the default Clevic::View created by
11
11
  including the Clevic::Record module in a Sequel::Model subclass.
12
12
  =end
13
+
13
14
  class TableModel
14
15
  # the CacheTable of Clevic::Record or Sequel::Model objects
15
16
  attr_reader :collection
@@ -7,6 +7,7 @@ Search for a record in the collection given a set of criteria. One of the
7
7
  criteria will be a starting record, and the search method should return
8
8
  the matching record next after this.
9
9
  =end
10
+
10
11
  class TableSearcher
11
12
  include OrderedDataset
12
13
  attr_reader :search_criteria, :field
@@ -595,6 +595,8 @@ class TableView
595
595
  unless found_row.nil?
596
596
  if column.is_a? Symbol
597
597
  column = model.field_column( column )
598
+ elsif column.nil?
599
+ column = 0
598
600
  else
599
601
  raise "column #{column} does not exist" if column >= model.fields.size
600
602
  end
@@ -3,7 +3,7 @@ module Clevic #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 13
5
5
  TINY = 0
6
- PRE = 'b5'
6
+ PRE = 'b6'
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
9
  end
@@ -0,0 +1,46 @@
1
+ module Clevic
2
+
3
+ =begin rdoc
4
+
5
+ See also Clevic::ModelBuilder and Clevic::Field
6
+
7
+ == Examples:
8
+ * No-frills models
9
+ * Simple Accounting database
10
+ * Read-only based on SQL views
11
+ * Not yet working multi-valued fields
12
+ * Work hours database
13
+ * Work hours database using Sqlite
14
+ * Work hours database using Postgres
15
+ * Work hours database using ActiveRecord style models
16
+
17
+ ==No-frills models
18
+ :include:models/minimal_models.rb
19
+
20
+ ==Simple Accounting database
21
+ :include:models/accounts_models.rb
22
+
23
+ == Read-only based on SQL views
24
+ :include:models/values_models.rb
25
+
26
+ == Not yet working multi-valued fields
27
+ :include:models/contacts.rb
28
+
29
+ == Work hours database
30
+ :include:models/times_models.rb
31
+
32
+ == Work hours database using Sqlite
33
+ :include:models/times_sqlite_models.rb
34
+
35
+ == Work hours database using Postgres
36
+ :include:models/times_psql_models.rb
37
+
38
+ == Work hours database using ActiveRecord style models
39
+ :include:models/times_ar_style_models.rb
40
+
41
+ =end
42
+
43
+ class Examples
44
+ end
45
+
46
+ end
data/tasks/clevic.rake CHANGED
@@ -1,9 +1,5 @@
1
- task :package => :ui
2
-
3
- desc "Update ChangeLog from the SVN log"
4
- task :changelog do |t|
5
- ARGV.shift
6
- exec "svn2cl --break-before-msg -o ChangeLog #{ARGV.join(' ')}"
1
+ namespace :gem do
2
+ task :package => :ui
7
3
  end
8
4
 
9
5
  # generate a _ui.rb filename from a .ui filename
@@ -70,7 +66,7 @@ task :irb do |t|
70
66
  end
71
67
 
72
68
  # generate tasks for all model definition files
73
- MODELS_LIST = FileList.new( '**/*models.rb' )
69
+ MODELS_LIST = FileList.new( 'models/**/*models.rb' )
74
70
 
75
71
  def short_model( model_file )
76
72
  Pathname.new( model_file ).basename.to_s.gsub( /_models.rb/, '' )
data/test/test_helper.rb CHANGED
@@ -1,9 +1,16 @@
1
+ gem "test-unit" unless RUBY_VERSION < '1.9.0'
2
+
1
3
  require 'test/unit'
2
4
  require 'shoulda'
3
5
 
4
6
  require File.dirname(__FILE__) + '/../lib/clevic'
5
7
  require File.dirname(__FILE__) + '/fixtures.rb'
6
8
 
9
+ if RUBY_VERSION < '1.9.0'
10
+ require 'generator'
11
+ Enumerator = Generator
12
+ end
13
+
7
14
  # Allow running of startup and shutdown things before
8
15
  # an entire suite, instead of just one per test
9
16
  class SuiteWrapper < Test::Unit::TestSuite
@@ -1,5 +1,4 @@
1
- require 'generator'
2
- require 'logger'
1
+ #~ require 'logger'
3
2
 
4
3
  require File.dirname(__FILE__) + '/test_helper.rb'
5
4
  require 'clevic/table_searcher.rb'
@@ -63,7 +62,7 @@ class TestTableSearcher < Test::Unit::TestCase
63
62
  context "searching" do
64
63
  setup do
65
64
  @simple_search_criteria.search_text = CreateFakePassengers::NATIONALITIES[0]
66
- @passenger_generator = Generator.new( @all_passengers )
65
+ @passenger_generator = Enumerator.new( @all_passengers )
67
66
  @simple_search_criteria.from_start = true
68
67
  end
69
68
 
@@ -126,10 +125,11 @@ class TestTableSearcher < Test::Unit::TestCase
126
125
 
127
126
  should 'raise an exception for no display value' do
128
127
  @flight_field = Clevic::Field.new( :flight, Passenger, {} )
128
+
129
129
  @flight_field.display = nil
130
-
131
130
  assert_nil @flight_field.display
132
- assert_raise RuntimeError do
131
+
132
+ assert_raise( RuntimeError ) do
133
133
  table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @flight_field )
134
134
  table_searcher.search
135
135
  end
@@ -171,7 +171,7 @@ class TestTableSearcher < Test::Unit::TestCase
171
171
  @simple_search_criteria.whole_words = false
172
172
  @simple_search_criteria.from_start = true
173
173
  table_searcher = Clevic::TableSearcher.new( Passenger.dataset, @simple_search_criteria, @nationality_field )
174
- expecteds = Generator.new @should_find
174
+ expecteds = Enumerator.new @should_find
175
175
  last_entity = nil
176
176
  while next_entity = table_searcher.search( last_entity )
177
177
  assert_equal next_entity, expecteds.next
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clevic
3
3
  version: !ruby/object:Gem::Version
4
- hash: 173
4
+ hash: 171
5
5
  prerelease: 7
6
6
  segments:
7
7
  - 0
8
8
  - 13
9
9
  - 0
10
10
  - b
11
- - 5
12
- version: 0.13.0.b5
11
+ - 6
12
+ version: 0.13.0.b6
13
13
  platform: ruby
14
14
  authors:
15
15
  - John Anderson
@@ -17,196 +17,241 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-02-24 00:00:00 +02:00
20
+ date: 2011-05-27 00:00:00 +02:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
- name: activesupport
24
+ name: fastercsv
25
25
  prerelease: false
26
26
  requirement: &id001 !ruby/object:Gem::Requirement
27
27
  none: false
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- hash: 11
31
+ hash: 25
32
32
  segments:
33
+ - 1
33
34
  - 2
34
- - 0
35
- - 2
36
- version: 2.0.2
35
+ - 3
36
+ version: 1.2.3
37
37
  type: :runtime
38
38
  version_requirements: *id001
39
39
  - !ruby/object:Gem::Dependency
40
- name: fastercsv
40
+ name: gather
41
41
  prerelease: false
42
42
  requirement: &id002 !ruby/object:Gem::Requirement
43
43
  none: false
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- hash: 25
47
+ hash: 19
48
48
  segments:
49
- - 1
50
- - 2
51
- - 3
52
- version: 1.2.3
49
+ - 0
50
+ - 0
51
+ - 6
52
+ version: 0.0.6
53
53
  type: :runtime
54
54
  version_requirements: *id002
55
55
  - !ruby/object:Gem::Dependency
56
- name: gather
56
+ name: andand
57
57
  prerelease: false
58
58
  requirement: &id003 !ruby/object:Gem::Requirement
59
59
  none: false
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- hash: 19
63
+ hash: 27
64
64
  segments:
65
+ - 1
66
+ - 3
65
67
  - 0
66
- - 0
67
- - 6
68
- version: 0.0.6
68
+ version: 1.3.0
69
69
  type: :runtime
70
70
  version_requirements: *id003
71
71
  - !ruby/object:Gem::Dependency
72
- name: qtext
72
+ name: sequel
73
73
  prerelease: false
74
74
  requirement: &id004 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- hash: 11
79
+ hash: 39
80
80
  segments:
81
+ - 3
82
+ - 8
81
83
  - 0
82
- - 6
83
- - 6
84
- version: 0.6.6
84
+ version: 3.8.0
85
85
  type: :runtime
86
86
  version_requirements: *id004
87
87
  - !ruby/object:Gem::Dependency
88
- name: hashery
88
+ name: bsearch
89
89
  prerelease: false
90
90
  requirement: &id005 !ruby/object:Gem::Requirement
91
91
  none: false
92
92
  requirements:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
- hash: 27
95
+ hash: 3
96
96
  segments:
97
97
  - 1
98
- - 3
98
+ - 5
99
99
  - 0
100
- version: 1.3.0
100
+ version: 1.5.0
101
101
  type: :runtime
102
102
  version_requirements: *id005
103
103
  - !ruby/object:Gem::Dependency
104
- name: andand
104
+ name: hpricot
105
105
  prerelease: false
106
106
  requirement: &id006 !ruby/object:Gem::Requirement
107
107
  none: false
108
108
  requirements:
109
109
  - - ">="
110
110
  - !ruby/object:Gem::Version
111
- hash: 27
111
+ hash: 61
112
112
  segments:
113
- - 1
114
- - 3
115
113
  - 0
116
- version: 1.3.0
114
+ - 8
115
+ - 1
116
+ version: 0.8.1
117
117
  type: :runtime
118
118
  version_requirements: *id006
119
119
  - !ruby/object:Gem::Dependency
120
- name: sequel
120
+ name: hashery
121
121
  prerelease: false
122
122
  requirement: &id007 !ruby/object:Gem::Requirement
123
123
  none: false
124
124
  requirements:
125
125
  - - ">="
126
126
  - !ruby/object:Gem::Version
127
- hash: 39
127
+ hash: 27
128
128
  segments:
129
+ - 1
129
130
  - 3
130
- - 8
131
131
  - 0
132
- version: 3.8.0
132
+ version: 1.3.0
133
133
  type: :runtime
134
134
  version_requirements: *id007
135
135
  - !ruby/object:Gem::Dependency
136
- name: hpricot
136
+ name: io-like
137
137
  prerelease: false
138
138
  requirement: &id008 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ">="
142
142
  - !ruby/object:Gem::Version
143
- hash: 61
143
+ hash: 19
144
144
  segments:
145
145
  - 0
146
- - 8
147
- - 1
148
- version: 0.8.1
146
+ - 3
147
+ - 0
148
+ version: 0.3.0
149
149
  type: :runtime
150
150
  version_requirements: *id008
151
151
  - !ruby/object:Gem::Dependency
152
- name: io-like
152
+ name: qtbindings
153
153
  prerelease: false
154
154
  requirement: &id009 !ruby/object:Gem::Requirement
155
155
  none: false
156
156
  requirements:
157
157
  - - ">="
158
158
  - !ruby/object:Gem::Version
159
- hash: 19
159
+ hash: 33
160
160
  segments:
161
- - 0
161
+ - 4
162
+ - 6
162
163
  - 3
163
- - 0
164
- version: 0.3.0
164
+ version: 4.6.3
165
165
  type: :runtime
166
166
  version_requirements: *id009
167
167
  - !ruby/object:Gem::Dependency
168
- name: newgem
168
+ name: qtext
169
169
  prerelease: false
170
170
  requirement: &id010 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ">="
174
174
  - !ruby/object:Gem::Version
175
- hash: 27
175
+ hash: 9
176
176
  segments:
177
- - 1
178
- - 3
179
177
  - 0
180
- version: 1.3.0
181
- type: :development
178
+ - 6
179
+ - 7
180
+ version: 0.6.7
181
+ type: :runtime
182
182
  version_requirements: *id010
183
183
  - !ruby/object:Gem::Dependency
184
- name: hoe
184
+ name: test-unit
185
185
  prerelease: false
186
186
  requirement: &id011 !ruby/object:Gem::Requirement
187
187
  none: false
188
188
  requirements:
189
189
  - - ">="
190
190
  - !ruby/object:Gem::Version
191
- hash: 55
191
+ hash: 3
192
192
  segments:
193
- - 1
194
- - 8
195
193
  - 0
196
- version: 1.8.0
194
+ version: "0"
197
195
  type: :development
198
196
  version_requirements: *id011
197
+ - !ruby/object:Gem::Dependency
198
+ name: shoulda
199
+ prerelease: false
200
+ requirement: &id012 !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ hash: 37
206
+ segments:
207
+ - 2
208
+ - 11
209
+ - 3
210
+ version: 2.11.3
211
+ type: :development
212
+ version_requirements: *id012
213
+ - !ruby/object:Gem::Dependency
214
+ name: faker
215
+ prerelease: false
216
+ requirement: &id013 !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ hash: 17
222
+ segments:
223
+ - 0
224
+ - 3
225
+ - 1
226
+ version: 0.3.1
227
+ type: :development
228
+ version_requirements: *id013
229
+ - !ruby/object:Gem::Dependency
230
+ name: bones
231
+ prerelease: false
232
+ requirement: &id014 !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ hash: 31
238
+ segments:
239
+ - 3
240
+ - 6
241
+ - 0
242
+ version: 3.6.0
243
+ type: :development
244
+ version_requirements: *id014
199
245
  description: SQL table GUI with Qt / Java Swing and Sequel
200
- email:
201
- - panic@semiosix.com
246
+ email: panic@semiosix.com
202
247
  executables:
203
248
  - clevic
204
249
  extensions: []
205
250
 
206
251
  extra_rdoc_files:
207
252
  - History.txt
208
- - Manifest.txt
209
253
  - README.txt
254
+ - TODO
210
255
  files:
211
256
  - History.txt
212
257
  - Manifest.txt
@@ -214,6 +259,7 @@ files:
214
259
  - Rakefile
215
260
  - TODO
216
261
  - bin/clevic
262
+ - models/examples.rb
217
263
  - models/accounts_models.rb
218
264
  - models/minimal_models.rb
219
265
  - models/times_models.rb
@@ -228,7 +274,6 @@ files:
228
274
  - sql/times.sql
229
275
  - sql/times_sqlite.sql
230
276
  - tasks/clevic.rake
231
- - tasks/rdoc.rake
232
277
  - test/test_cache_table.rb
233
278
  - test/test_helper.rb
234
279
  - test/test_model_index_extensions.rb
@@ -288,8 +333,6 @@ files:
288
333
  - lib/clevic/qt/browser.rb
289
334
  - lib/clevic/qt/clipboard.rb
290
335
  - lib/clevic/qt/text_area_delegate.rb
291
- - lib/clevic/ui/browser_ui.rb
292
- - lib/clevic/ui/search_dialog_ui.rb
293
336
  - lib/clevic/qt.rb
294
337
  - lib/clevic/many_field.rb
295
338
  - lib/clevic/attribute_list.rb
@@ -351,6 +394,8 @@ licenses: []
351
394
 
352
395
  post_install_message:
353
396
  rdoc_options:
397
+ - -W
398
+ - http://gitweb.semiosix.com/gitweb.cgi?p=clevic;a=blob;f=%s;hb=HEAD
354
399
  - --main
355
400
  - README.txt
356
401
  require_paths:
@@ -381,7 +426,7 @@ rubyforge_project: clevic
381
426
  rubygems_version: 1.4.2
382
427
  signing_key:
383
428
  specification_version: 3
384
- summary: Database framework and Model/View GUI for data capture and editing of tables in a pre-existing relational DBMS
429
+ summary: SQL table GUI with Qt / Java Swing and Sequel
385
430
  test_files:
386
431
  - test/test_table_searcher.rb
387
432
  - test/test_model_index_extensions.rb