fossil 0.2.1 → 0.2.2

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.
data/Rakefile CHANGED
@@ -8,8 +8,11 @@
8
8
  gemspec.summary = "Sequel orm wrapper to FOS"
9
9
  gemspec.description = "Access FOS/betrieve db with this Sequel based orm wrapper"
10
10
  gemspec.email = "plardin@xojet.com"
11
- gemspec.homepage = ""
12
- gemspec.authors = ["Patrick Lardin, Daniel Sudol"]
11
+ gemspec.homepage = ""
12
+ gemspec.add_dependency('sequel', '= 3.5.0')
13
+ gemspec.add_dependency('active_support', '= 2.3.5')
14
+ gemspec.add_development_dependency('rspec')
15
+ gemspec.authors = ["Patrick Lardin, Daniel Sudol"]
13
16
  end
14
17
  Jeweler::GemcutterTasks.new
15
18
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
data/fossil.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{fossil}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Patrick Lardin, Daniel Sudol"]
12
- s.date = %q{2010-01-11}
12
+ s.date = %q{2010-01-12}
13
13
  s.description = %q{Access FOS/betrieve db with this Sequel based orm wrapper}
14
14
  s.email = %q{plardin@xojet.com}
15
15
  s.files = [
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  "VERSION",
18
18
  "fossil.gemspec",
19
19
  "lib/fossil.rb",
20
+ "lib/hash_extentions.rb",
20
21
  "lib/models/ac_qualification.rb",
21
22
  "lib/models/aircraft.rb",
22
23
  "lib/models/aircraft_cost.rb",
@@ -117,22 +118,60 @@ Gem::Specification.new do |s|
117
118
  "lib/sequel/pervasive_adapter.rb",
118
119
  "lib/sequel/serializer/json_serializer.rb",
119
120
  "lib/sequel/serializer/serializer.rb",
120
- "lib/sequel/serializer/xml_serializer.rb"
121
+ "lib/sequel/serializer/xml_serializer.rb",
122
+ "spec/be_model_with_values_matcher.rb",
123
+ "spec/be_model_with_values_matcher_spec.rb",
124
+ "spec/hash_extentions_spec.rb",
125
+ "spec/helper_classes.rb",
126
+ "spec/helper_methods.rb",
127
+ "spec/sequel/fos_dates_spec.rb",
128
+ "spec/sequel/model_patch_spec.rb",
129
+ "spec/sequel/pervasive_adapter_spec.rb",
130
+ "spec/sequel/serializer/json_serializer_spec.rb",
131
+ "spec/sequel/serializer/xml_serializer_spec.rb",
132
+ "spec/sequel/spec_helper_fos_tables.rb",
133
+ "spec/sequel/spec_helper_tables.rb",
134
+ "spec/spec.opts",
135
+ "spec/spec_helper.rb"
121
136
  ]
122
137
  s.homepage = %q{}
123
138
  s.rdoc_options = ["--charset=UTF-8"]
124
139
  s.require_paths = ["lib"]
125
140
  s.rubygems_version = %q{1.3.5}
126
141
  s.summary = %q{Sequel orm wrapper to FOS}
142
+ s.test_files = [
143
+ "spec/be_model_with_values_matcher.rb",
144
+ "spec/be_model_with_values_matcher_spec.rb",
145
+ "spec/hash_extentions_spec.rb",
146
+ "spec/helper_classes.rb",
147
+ "spec/helper_methods.rb",
148
+ "spec/sequel/fos_dates_spec.rb",
149
+ "spec/sequel/model_patch_spec.rb",
150
+ "spec/sequel/pervasive_adapter_spec.rb",
151
+ "spec/sequel/serializer/json_serializer_spec.rb",
152
+ "spec/sequel/serializer/xml_serializer_spec.rb",
153
+ "spec/sequel/spec_helper_fos_tables.rb",
154
+ "spec/sequel/spec_helper_tables.rb",
155
+ "spec/spec_helper.rb"
156
+ ]
127
157
 
128
158
  if s.respond_to? :specification_version then
129
159
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
130
160
  s.specification_version = 3
131
161
 
132
162
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
163
+ s.add_runtime_dependency(%q<sequel>, ["= 3.5.0"])
164
+ s.add_runtime_dependency(%q<active_support>, ["= 2.3.5"])
165
+ s.add_development_dependency(%q<rspec>, [">= 0"])
133
166
  else
167
+ s.add_dependency(%q<sequel>, ["= 3.5.0"])
168
+ s.add_dependency(%q<active_support>, ["= 2.3.5"])
169
+ s.add_dependency(%q<rspec>, [">= 0"])
134
170
  end
135
171
  else
172
+ s.add_dependency(%q<sequel>, ["= 3.5.0"])
173
+ s.add_dependency(%q<active_support>, ["= 2.3.5"])
174
+ s.add_dependency(%q<rspec>, [">= 0"])
136
175
  end
137
176
  end
138
177
 
data/lib/fossil.rb CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  begin
4
4
  gem 'sequel', '=3.5.0'
5
- p require 'sequel'
5
+ require('sequel')
6
6
  rescue LoadError => e
7
7
  warn 'To use Fossil you need the sequel gem:'
8
8
  warn '$ sudo gem install sequel -v=3.5.0'
@@ -11,7 +11,7 @@ end
11
11
 
12
12
  begin
13
13
  gem 'activesupport', '=2.3.5'
14
- p require 'active_support'
14
+ require('active_support')
15
15
  rescue LoadError => e
16
16
  p e
17
17
  warn 'To use Fossil you need the active_support gem:'
@@ -21,6 +21,7 @@ end
21
21
 
22
22
  dir = File.dirname(__FILE__)
23
23
  files = [File.join(dir,'number_helper.rb')] +
24
+ [File.join(dir,'hash_extentions.rb')] +
24
25
  [File.join(dir,'sequel','serializer','serializer.rb')] +
25
26
  Dir.glob(File.join(dir,'sequel','*.rb')) +
26
27
  Dir.glob(File.join(dir,'models','*.rb'))
@@ -0,0 +1,20 @@
1
+ class Hash
2
+ def limit_to_keys(limit_keys)
3
+ dup.limit_to_keys!(limit_keys)
4
+ end
5
+
6
+ def limit_to_keys!(limit_keys)
7
+ keys.each { |key| delete(key) unless limit_keys.include? key }
8
+ self
9
+ end
10
+
11
+ def soft_delete(key)
12
+ cloned_hash = deep_clone
13
+ cloned_hash.delete(key)
14
+ cloned_hash
15
+ end
16
+
17
+ def deep_clone
18
+ Marshal::load(Marshal.dump(self))
19
+ end
20
+ end
@@ -11,12 +11,12 @@ module Sequel
11
11
  ds.extend(DatasetMethods)
12
12
  ds
13
13
  end
14
-
15
- def connect(server)
16
- conn = super(server)
17
- conn.autocommit = false if RAILS_ENV == 'test'
18
- conn
19
- end
14
+
15
+ # def connect(server)
16
+ # conn = super(server)
17
+ # conn.autocommit = false if RAILS_ENV == 'test'
18
+ # conn
19
+ # end
20
20
 
21
21
  def select_fields(table, *fields)
22
22
  dataset.select_fields(table, *fields)
@@ -0,0 +1,44 @@
1
+ module BeModelWithValuesMatcher
2
+
3
+ class BeModelWithValues
4
+ def initialize(expected_hash, compare_as_strings=false)
5
+ @compare_as_strings = compare_as_strings
6
+ @expected_hash = expected_hash
7
+ end
8
+
9
+ def matches?(model)
10
+ @model_hash = model.fill_hash(@expected_hash.keys)
11
+ @diff_keys = @expected_hash.keys - @model_hash.keys
12
+ @diff_act_values = {}
13
+ @diff_exp_values = {}
14
+ return false unless @diff_keys.empty?
15
+ @model_hash.each do |k,v|
16
+ model_value = @compare_as_strings ? @model_hash[k].to_s : @model_hash[k]
17
+ expected_value = @compare_as_strings ? @expected_hash[k].to_s : @expected_hash[k]
18
+ unless model_value == expected_value
19
+ @diff_act_values[k] = v
20
+ @diff_exp_values[k] = @expected_hash[k]
21
+ end
22
+ end
23
+ return @diff_act_values.empty?
24
+ end
25
+
26
+ def failure_message
27
+ str = "expected:\n#{@expected_hash.inspect}\n but got:\n#{@model_hash.inspect}"
28
+ str += "\n\nmissing keys: #{@diff_keys.inspect}" unless @diff_keys.empty?
29
+ unless @diff_act_values.empty?
30
+ str += "\n\nunequal values: \nexpected: #{@diff_exp_values.inspect} \n but got:\n#{@diff_act_values.inspect}"
31
+ end
32
+ str
33
+ end
34
+ end
35
+
36
+ def be_model_with_values(expected)
37
+ BeModelWithValues.new(expected)
38
+ end
39
+
40
+ def be_model_with_values_as_strings(expected)
41
+ BeModelWithValues.new(expected,true)
42
+ end
43
+
44
+ end
@@ -0,0 +1,46 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "spec matchers" do
4
+
5
+ describe "be_model_with_values matcher" do
6
+
7
+ it "should match a models values if they are all in the expected hash" do
8
+ dude = MockModel.new({:kid_date=>1, :kid_time=>2})
9
+ dude.should be_model_with_values( {:kid_date=>1, :kid_time=>2} )
10
+ end
11
+
12
+ it "should match (as strings) a models values if they are all in the expected hash" do
13
+ dude = MockModel.new({:kid_date=>"1", :kid_time=>"2"})
14
+ dude.should be_model_with_values_as_strings( {:kid_date=>1, :kid_time=>2} )
15
+ end
16
+
17
+ it "should fail match for models values if they are in the expected hash but of wrong type" do
18
+ dude = MockModel.new({:kid_date=>1, :kid_time=>"2"})
19
+ begin
20
+ dude.should be_model_with_values( {:kid_date=>1, :kid_time=>2} )
21
+ rescue => e
22
+ e.message.should match("unequal values: \nexpected: \\{:kid_time=>2\\} \n but got:\n\\{:kid_time=>\"2\"\\}")
23
+ end
24
+ end
25
+
26
+ it "should fail if model does not have all the keys as expected hash" do
27
+ dude = MockModel.new({:kid_date=>1})
28
+ begin
29
+ dude.should be_model_with_values( {:kid_date=>1, :kid_time=>2} )
30
+ rescue => e
31
+ e.message.should match("missing keys: \\[:kid_time\\]")
32
+ end
33
+ end
34
+
35
+ it "should fail if one of the values does not match" do
36
+ dude = MockModel.new( {:kid_date=>1, :kid_time=>3} )
37
+ begin
38
+ dude.should be_model_with_values( {:kid_date=>1, :kid_time=>2} )
39
+ rescue => e
40
+ e.message.should match("unequal values: \nexpected: \\{:kid_time=>2\\} \n but got:\n\\{:kid_time=>3\\}")
41
+ end
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "hash extentions" do
4
+ it "limit_to_keys should limit keys in hash" do
5
+ h = {:bro1=>'me',:bro2=>'rob',:bro3=>'eric'}
6
+ h.limit_to_keys([:bro1,:bro2]).should == {:bro1=>'me',:bro2=>'rob'}
7
+ h.should == {:bro1=>'me',:bro2=>'rob',:bro3=>'eric'}
8
+ end
9
+
10
+ it "limit_to_keys! should destructively limit keys in hash" do
11
+ h = {:bro1=>'me',:bro2=>'rob',:bro3=>'eric'}
12
+ h.limit_to_keys!([:bro1,:bro2]).should == {:bro1=>'me',:bro2=>'rob'}
13
+ h.should == {:bro1=>'me',:bro2=>'rob'}
14
+ end
15
+
16
+ it "soft deletes" do
17
+ h = {:dan=>1,:eric=>2}
18
+ h.soft_delete(:dan).should == {:eric=>2}
19
+ end
20
+ end
@@ -0,0 +1,30 @@
1
+ class MockDataset < Sequel::Dataset
2
+ def insert(*args); end
3
+ def insert_select(*args); end
4
+ def update(*args); end
5
+ def fetch_rows(sql); end
6
+ def quoted_identifier(c); end
7
+ end
8
+
9
+ class MockDatabase < Sequel::Database
10
+ def execute(sql, opts={}); end
11
+ def reset; end
12
+ def transaction(opts={}); end
13
+ def dataset; MockDataset.new(self); end
14
+ end
15
+
16
+ MOCK_DB = MockDatabase.new unless defined?(MOCK_DB)
17
+
18
+ class MockModel < Sequel::Model(MOCK_DB)
19
+ def initialize(values)
20
+ @values = values
21
+ end
22
+ def respond_to?(m)
23
+ @values.has_key?(m)
24
+ end
25
+ def method_missing(m, *args, &block)
26
+ return @values[m] if @values.has_key?(m)
27
+ super(m, *args, &block)
28
+ end
29
+ end
30
+
@@ -0,0 +1,49 @@
1
+ module HelperMethods
2
+
3
+ def set_fos_db(models)
4
+ set_db(models,DB_FOS)
5
+ end
6
+
7
+ def set_demo_db(models)
8
+ set_db(models,DB_DEMO)
9
+ end
10
+
11
+ def set_db(models,db)
12
+ models.each{ |model| model.db=db }
13
+ end
14
+
15
+ # delete other rows, and create new one
16
+ def add_test_table_data(hash)
17
+ DB_DEMO[:test_table].delete
18
+ DB_DEMO[:test_table] << hash
19
+ end
20
+
21
+ def get_fos_fixture(file_name)
22
+ YAML.load_file(File.join(RAILS_ROOT,'spec','fos_fixtures',"#{file_name}.yml"))
23
+ end
24
+
25
+ def get_ipc_fixture(file_name)
26
+ YAML.load_file(File.join(RAILS_ROOT,'spec','ipc_fixtures',"#{file_name}.yml"))
27
+ end
28
+
29
+ # controller helpers
30
+ def should_render_json_for(obj,path)
31
+ mock(obj).to_fos_json(is_a(Hash)) {"json"}
32
+ call_controller path
33
+ response.body.should == "json"
34
+ end
35
+
36
+ def should_render_xml_for(obj,path)
37
+ request.env["HTTP_ACCEPT"] = "application/xml"
38
+ mock(obj).to_fos_xml(is_a(Hash)) {"xml"}
39
+ call_controller path
40
+ response.body.should == "xml"
41
+ end
42
+
43
+ def equal_xml(other)
44
+ simple_matcher("xml #{other} not equal") do |actual|
45
+ actual.gsub(/\s/,'').should == other.gsub(/\s/,'')
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "fos_dates" do
4
+
5
+ it "converts fos date number to a Ruby Date" do
6
+ Date.from_fos_days(10).should == Date.new(1900,1,10)
7
+ end
8
+
9
+ it "converts fos time number to a Ruby Time" do
10
+ Time.from_fos_time(100).should == Time.utc(2000,"jan",1,1,40,0)
11
+ end
12
+
13
+ it "converts a Ruby Time to hundredths" do
14
+ Time.from_fos_time(100).in_hundredths.should == "1.7"
15
+ end
16
+
17
+ it "Date view defaults to y-m-d" do
18
+ Date.parse('Sept 9, 2009').to_s.should == "2009-09-09"
19
+ end
20
+
21
+ it "Time view defaults to M:H" do
22
+ Time.parse('Sept 9, 2009 07:10').to_s.should == "07:10"
23
+ end
24
+
25
+ end
@@ -0,0 +1,281 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require File.dirname(__FILE__) + '/spec_helper_tables' unless metaclass.class_variable_defined? :@@set_up_demo_tables
3
+
4
+ describe "Sequel::Model extentions" do
5
+
6
+ it "has fill_hash method" do
7
+ Dude.first.should respond_to(:fill_hash)
8
+ Dude.first.fill_hash([:'kid - date']).should == {:'kid - date'=>1}
9
+ end
10
+
11
+ it "can update and save" do
12
+ add_test_table_data({:date_col => 123, :time_col=>60})
13
+ record = TestTable.first
14
+ record[:'goofy name col'] = 124
15
+ record.save_changes
16
+ TestTable.first[:'goofy name col'].should ==124
17
+ end
18
+
19
+ describe "select_fields method" do
20
+
21
+ it "works on model" do
22
+ dude = Dude.select_fields(:self => ['kid - date']).first
23
+ dude[:'kid - date'].should == 1
24
+ end
25
+
26
+ it "works on dataset" do
27
+ dude = Dude.filter(:'kid - date'=>1).select_fields(:self => ['kid - time']).first
28
+ dude[:'kid - time'].should == 1
29
+ end
30
+
31
+ it "selects column alias" do
32
+ Dude.column_alias :kid_date, :'kid - date'
33
+ Dude.select_fields(:self => [:kid_date]).first.kid_date.should == 1
34
+ end
35
+
36
+ it "can select more than one table with columns of the same name" do
37
+ # dude = Dude.eager_graph(:horses).select(*(Dude.pk_for_select + Horse.pk_for_select(:table=>:horses,:alias=>true) + [:'dudes__name', :'horses__name___horses_name'])).all.first
38
+ dude = Dude.eager_graph(:horses).select_fields(:self => [:name], :horses => [:name]).all.first
39
+ dude.name.should == "dano"
40
+ dude.horses.first.name.should == 'pinto'
41
+ end
42
+
43
+ it "selects column alias from correct table" do
44
+ Dude.column_alias :doo, :'kid - date'
45
+ Horse.column_alias :hoo, :'kid - time'
46
+ dude = Dude.eager_graph(:horses).select_fields(:self => [:doo], :horses => [:hoo]).all.first
47
+ dude.doo.should == 1
48
+ dude.horses.first.hoo.should == 1
49
+ end
50
+
51
+ it "selects particular columns from joined tables" do
52
+ dude = Dude.eager_graph(:ranch_code, :my_friend, :horses).select_fields(:self => [:name], :ranch_code => [:code], :my_friend => [:name], :horses => [:name]).all.first
53
+ dude.ranch_code_code.should == "men"
54
+ dude.name.should == "dano"
55
+ dude.horses.first.name.should == 'pinto'
56
+ dude.my_friend.name.should == 'dans buddy'
57
+ end
58
+
59
+ end
60
+
61
+
62
+ describe "column_view" do
63
+
64
+ after :each do
65
+ TestTable.clear_schema
66
+ end
67
+
68
+ before do
69
+ add_test_table_data({:date_col => 123, :time_col=>60, :price=>1215, :paid=>1})
70
+ TestTable.column_view :date_col, :date
71
+ TestTable.column_view :time_col, :time
72
+ TestTable.column_view :time_col, :time, :my_special_name
73
+ TestTable.column_view :price, :currency
74
+ TestTable.column_view :price, :precision
75
+ TestTable.column_view :paid, :boolean
76
+ @record = TestTable.first
77
+ end
78
+
79
+ it "creates method to display value" do
80
+ @record.should respond_to(:date_col_date)
81
+ @record.should respond_to(:date_col_date_view)
82
+ @record.should respond_to(:date_col_date_view_mdy)
83
+ @record.should respond_to(:date_col_date_view_mdy_ipc)
84
+ @record.should respond_to(:time_col_time)
85
+ @record.should respond_to(:time_col_time_view)
86
+ @record.should respond_to(:price_currency)
87
+ @record.should respond_to(:price_precision)
88
+ @record.should respond_to(:paid_boolean)
89
+ @record.should respond_to(:my_special_name)
90
+ end
91
+
92
+ it "shows correct date view" do
93
+ @record.date_col_date_view.should == "1900-05-03"
94
+ @record.date_col_date_view_mdy.should == "05/03/1900"
95
+ @record.date_col_date_view_mdy_ipc.should == "5/3/1900"
96
+ end
97
+
98
+ it "shows correct time view" do
99
+ @record.time_col_time_view.should == "01:00"
100
+ @record.my_special_name_view.should == "01:00"
101
+ end
102
+
103
+ it "shows correct currency view" do
104
+ @record.price_currency.should == "12.15"
105
+ @record.price_precision.should == "12.15"
106
+ end
107
+
108
+ it "shows correct currency view" do
109
+ @record.paid_boolean.should == "True"
110
+ end
111
+
112
+ end
113
+
114
+ describe "column_alias" do
115
+
116
+ before :each do
117
+ add_test_table_data({:id=>1, :'goofy name col' => 123})
118
+ end
119
+
120
+ after :each do
121
+ TestTable.clear_schema
122
+ end
123
+
124
+ it "makes alias" do
125
+ TestTable.column_alias :'nice_name', :'goofy name col'
126
+
127
+ TestTable.first.should respond_to(:nice_name)
128
+ TestTable.first.nice_name.should == 123
129
+ end
130
+
131
+ it "alias name also had entry in datatypes" do
132
+ TestTable.column_alias :'nice_name', :'goofy name col'
133
+
134
+ TestTable.db_schema[:nice_name].should_not be_nil
135
+ end
136
+
137
+ it "sets column type if param exists" do
138
+ TestTable.column_alias :'new_date_col', :'goofy name col', :type => :date
139
+
140
+ TestTable.first.new_date_col.should be_a_kind_of(Date)
141
+ TestTable.first.new_date_col.should == Date.from_fos_days(123)
142
+ end
143
+
144
+ it "column alias expands to real column name in filtered search" do
145
+ TestTable.column_alias :'goofy_col', :'goofy name col'
146
+ TestTable.filter(:goofy_col=>123).first.goofy_col.should == 123
147
+ end
148
+
149
+ it "column alias creates setter to real column name" do
150
+ TestTable.column_alias :'goofy_col', :'goofy name col'
151
+ testrow = TestTable.first
152
+ testrow.goofy_col = 124
153
+ testrow.goofy_col.should == 124
154
+ end
155
+
156
+ # seems like ridiculous case, but it is a case in use
157
+ it "can makes an alias with same name and then an alias to that still works with existing record" do
158
+ add_test_table_data({:id=>2, :'date_col' => 10})
159
+ TestTable.column_alias :date_col, :'date_col' # our autogenerate script sometimes makes same name alias
160
+ TestTable.column_alias :save_date_col, :date_col, :type => :integer
161
+ testrow = TestTable.first
162
+ testrow.save_date_col = 11
163
+ testrow.date_col.should == 11
164
+ end
165
+
166
+ it "can makes an alias with same name and then an alias to that still works with new record" do
167
+ TestTable.column_alias :date_col, :'date_col' # our autogenerate script sometimes makes same name alias
168
+ TestTable.column_alias :save_date_col, :date_col, :type => :integer
169
+ testrow = TestTable.new({:save_date_col=>10})
170
+ testrow.save_date_col = 10
171
+ testrow.date_col.should == 10
172
+ end
173
+
174
+ end
175
+
176
+ describe "column_type" do
177
+
178
+ before :each do
179
+ add_test_table_data({:date_col => 123, :time_col=>60})
180
+ end
181
+
182
+ after :each do
183
+ TestTable.clear_schema
184
+ end
185
+
186
+ it "sets a date type" do
187
+ TestTable.column_type :date_col, :date
188
+
189
+ TestTable.first[:date_col].should be_a_kind_of(Date)
190
+ TestTable.first[:date_col].should == Date.from_fos_days(123)
191
+ end
192
+
193
+ it "sets a time type" do
194
+ TestTable.column_type :time_col, :time
195
+
196
+ TestTable.first[:time_col].should be_a_kind_of(DateTime)
197
+ TestTable.first[:time_col].should == Date.from_fos_days(0).to_time.utc + 60.minutes
198
+ end
199
+
200
+ it "should find rows" do
201
+ TestTable.filter('date_col < ?', Date.today).all.size.should == 1
202
+ end
203
+
204
+ end
205
+
206
+ describe "column_def" do
207
+
208
+ before do
209
+ add_test_table_data({:date_col => 39992, :time_col=>60})
210
+ end
211
+
212
+ it "datetime" do
213
+ TestTable.column_def_datetime :datetime_col, :date_col, :time_col
214
+
215
+ TestTable.first.should respond_to(:datetime_col)
216
+ TestTable.first.datetime_col.should == Time.parse("2009-06-29 01:00 UTC")
217
+ end
218
+
219
+ end
220
+
221
+ describe "association methods" do
222
+
223
+ describe "code association" do
224
+
225
+ before(:each) do
226
+ set_demo_db([Code,Dude])
227
+ end
228
+
229
+ it "finds the associated code" do
230
+ Dude.first.ranch_code.description.should == 'manly ranch'
231
+ end
232
+
233
+ it "finds two associated codes" do
234
+ Dude.first.ranch_code.description.should == 'manly ranch'
235
+ Dude.first.pool_type.description.should == 'big round pool'
236
+ end
237
+
238
+ it "creates delegators for code and description" do
239
+ Dude.first.ranch_code_code.should == "men"
240
+ Dude.first.ranch_code_description.should == "manly ranch"
241
+ end
242
+
243
+ it "should create a class method to get all codes for that type" do
244
+ Dude.should respond_to(:get_all_ranch_codes)
245
+ Dude.get_all_ranch_codes.should have(1).things
246
+ Dude.get_all_ranch_codes.first.should == 'manly ranch'
247
+ end
248
+
249
+ end
250
+
251
+ describe "o_to_n" do
252
+
253
+ it "retrieves the association" do
254
+ Dude.first.horses.first.name.should == 'pinto'
255
+ end
256
+
257
+ it "retrieves association eagerly with eager graph" do
258
+ ds = Dude.eager_graph(:horses)
259
+ mock.proxy(ds).fetch_rows(is_a(String)).times(1)
260
+ ds.all.first.horses.first
261
+ end
262
+
263
+ end
264
+
265
+ describe "n_to_o" do
266
+
267
+ it "retrieves the association" do
268
+ Horse.first.dude.name.should == 'dano'
269
+ end
270
+
271
+ it "retrieves association eagerly" do
272
+ ds = Horse.eager_graph(:dude).select()
273
+ mock.proxy(ds).fetch_rows(is_a(String)).times(1)
274
+ ds.all.first.dude
275
+ end
276
+
277
+ end
278
+
279
+ end
280
+
281
+ end
File without changes
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require File.dirname(__FILE__) + '/../spec_helper_tables' unless metaclass.class_variable_defined? :@@set_up_demo_tables
3
+
4
+ describe "Sequel::Serializer" do
5
+ describe "to_fos_json method adds options to only for" do
6
+ it "single sequel model" do
7
+ add_test_table_data({:id=>1,:'goofy name col' => 123})
8
+ data = TestTable.first
9
+ mock(data).to_json({:only=>[]})
10
+ data.to_fos_json
11
+ end
12
+
13
+ it "an array of sequel models" do
14
+ add_test_table_data({:id=>1,:'goofy name col' => 123})
15
+ data = [TestTable.first]
16
+ mock(data).to_json({:only=>[]})
17
+ data.to_fos_json
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,105 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require File.dirname(__FILE__) + '/../spec_helper_tables' unless metaclass.class_variable_defined? :@@set_up_demo_tables
3
+ require 'active_resource'
4
+
5
+ describe "Sequel::Serializer" do
6
+
7
+ describe "to_fos_xml method adds options to skip instructions, dasherize, and only for" do
8
+ it "single sequel model" do
9
+ add_test_table_data({:id=>1,:'goofy name col' => 123})
10
+ data = TestTable.first
11
+ mock(data).to_xml({:dasherize=>false, :skip_instruct=>true, :only=>[]})
12
+ data.to_fos_xml
13
+ end
14
+
15
+ it "an array of sequel models" do
16
+ add_test_table_data({:id=>1,:'goofy name col' => 123})
17
+ data = [TestTable.first]
18
+ mock(data).to_xml({:dasherize=>false, :skip_instruct=>true, :only=>[]})
19
+ data.to_fos_xml
20
+ end
21
+ end
22
+
23
+ it "to_xml works with references to aliased columns" do
24
+ add_test_table_data({:id=>1,:'goofy name col' => 123})
25
+ TestTable.column_alias :'nice_name', :'goofy name col'
26
+
27
+ TestTable.first.to_fos_xml(:only => :nice_name).should equal_xml(
28
+ %{
29
+ <test_table>
30
+ <nice_name>123</nice_name>
31
+ </test_table>
32
+ } )
33
+ end
34
+
35
+ it "to_fos_xml with many to one assoc" do
36
+ Dude.o_to_n :horses, :class=>:Horse, :prefix => 'dude'
37
+
38
+ Dude.first.to_fos_xml(:only=> :name, :include=> :horses).should equal_xml(
39
+ %{ <dude>
40
+ <name>dano</name>
41
+ <horses type="array">
42
+ <horse> <name>pinto</name> </horse>
43
+ <horse> <name>silver</name> </horse>
44
+ </horses>
45
+ </dude>
46
+ })
47
+ end
48
+
49
+
50
+ it "to_xml with many to one assoc" do
51
+ Horse.n_to_o :dude, :class=>:Dude, :prefix=>'dude'
52
+
53
+ Horse.first.to_fos_xml(:only=> [:name], :include=> :dude).should equal_xml(
54
+ %{ <horse>
55
+ <name>pinto</name>
56
+ <dude> <name>dano</name> </dude>
57
+ </horse>
58
+ })
59
+ end
60
+
61
+ it "to_xml with array of horses" do
62
+ Horse.n_to_o :dude, :class=>:Dude, :prefix=>'dude'
63
+
64
+ Horse.all.to_fos_xml(:only=> [:name], :include=> :dude).should equal_xml(
65
+ %{ <horses type="array">
66
+ <horse> <name>pinto</name>
67
+ <dude> <name>dano</name> </dude>
68
+ </horse>
69
+ <horse> <name>silver</name>
70
+ <dude> <name>dano</name> </dude>
71
+ </horse>
72
+ </horses>
73
+ } )
74
+ end
75
+
76
+ it "converts to ActiveResource::Base from xml" do
77
+ class Dudeman < ActiveResource::Base; self.site = ""; end
78
+ hash = Hash.from_xml( Dude.first.to_xml(:only=> :name, :include=> :horses) )
79
+ dudeman = Dudeman.new( hash.values.first )
80
+ dudeman.name.should == 'dano'
81
+ dudeman.horses.size.should == 2
82
+ dudeman.horses.first.name == 'pinto'
83
+ end
84
+
85
+ end
86
+
87
+
88
+ # it "creates sql model from xml" do
89
+ # hash = Hash.from_xml( Dude.first.to_xml(:only=> :name, :include=> :horses) )
90
+ # d = Dude.new(hash.values.first)
91
+ # end
92
+
93
+ # it "can take the flatten option to flatten associations" do
94
+ # Horse.n_to_o :dude, :class=>:Dude, :prefix=>'dude'
95
+ #
96
+ # Horse.all.to_xml(:flatten=>true, :only=> [:name], :include=> :dude).should equal_xml(
97
+ # %{ <?xml version="1.0" encoding="UTF-8"?>
98
+ # <horses type="array">
99
+ # <horse>
100
+ # <name>pinto</name>
101
+ # <name>dano</name>
102
+ # </horse>
103
+ # </horses>
104
+ # } )
105
+ # end
@@ -0,0 +1,94 @@
1
+ DB_DEMO.create_table! :ztrip_legs do
2
+ Integer :'kid - date'
3
+ Integer :'kid - time'
4
+ Integer :'kid - user'
5
+ Integer :'kid - mult'
6
+ Integer :'kid - comm'
7
+ String :'name'
8
+ Integer :'ranch code'
9
+ Integer :'my friend kid - date'
10
+ Integer :'my friend kid - time'
11
+ Integer :'my friend kid - user'
12
+ Integer :'my friend kid - mult'
13
+ Integer :'my friend kid - comm'
14
+ end
15
+
16
+ DB_DEMO.create_table! :'my friends' do
17
+ Integer :'kid - date'
18
+ Integer :'kid - time'
19
+ Integer :'kid - user'
20
+ Integer :'kid - mult'
21
+ Integer :'kid - comm'
22
+ String :name
23
+ end
24
+
25
+ DB_DEMO.create_table! :'zcrew legs' do
26
+ String :'name'
27
+ Integer :'kid - date'
28
+ Integer :'kid - time'
29
+ Integer :'kid - user'
30
+ Integer :'kid - mult'
31
+ Integer :'kid - comm'
32
+ Integer :'dude kid - date'
33
+ Integer :'dude kid - time'
34
+ Integer :'dude kid - user'
35
+ Integer :'dude kid - mult'
36
+ Integer :'dude kid - comm'
37
+ end
38
+
39
+ DB_DEMO.create_table! :codes do
40
+ Integer :'kid - date'
41
+ Integer :'kid - time'
42
+ Integer :'kid - user'
43
+ Integer :'kid - mult'
44
+ Integer :'kid - comm'
45
+ String :'description'
46
+ String :'code'
47
+ Integer :'value'
48
+ String :'name'
49
+ end
50
+
51
+
52
+ DB_DEMO[:dudes] << { :name=>'dano',:'ranch code'=>1,
53
+ :'kid - date'=>1,:'kid - time'=>1,:'kid - user'=>1,:'kid - mult'=>1,:'kid - comm'=>1,
54
+ :'my friend kid - date'=>1,:'my friend kid - time'=>1,:'my friend kid - user'=>1,:'my friend kid - mult'=>1,:'my friend kid - comm'=>1}
55
+
56
+ DB_DEMO[:'my friends'] << {:name=>'good buddy',
57
+ :'kid - date'=>1,:'kid - time'=>1,:'kid - user'=>1,:'kid - mult'=>1,:'kid - comm'=>1}
58
+
59
+ DB_DEMO[:'the horses'] << {:name=>'pinto',
60
+ :'kid - date'=>1,:'kid - time'=>1,:'kid - user'=>1,:'kid - mult'=>1,:'kid - comm'=>1,
61
+ :'dude kid - date'=>1,:'dude kid - time'=>1,:'dude kid - user'=>1,:'dude kid - mult'=>1,:'dude kid - comm'=>1}
62
+
63
+ DB_DEMO[:codes] << {:value=>1, :name=>'ranch_id__', :description=>'manly ranch', :code=>'men',
64
+ :'kid - date'=>1,:'kid - time'=>1,:'kid - user'=>1,:'kid - mult'=>1,:'kid - comm'=>1}
65
+
66
+
67
+ class TestTable < Sequel::Model(:test_table)
68
+ set_primary_key [:id]
69
+ end
70
+
71
+ class Dude < Sequel::Model(:dudes)
72
+ set_primary_key [:'kid - date',:'kid - time',:'kid - user',:'kid - mult',:'kid - comm']
73
+ end
74
+
75
+ class MyFriend < Sequel::Model(:'my friends')
76
+ set_primary_key [:'kid - date',:'kid - time',:'kid - user',:'kid - mult',:'kid - comm']
77
+ end
78
+
79
+ class Horse < Sequel::Model(:'the horses')
80
+ set_primary_key [:'kid - date',:'kid - time',:'kid - user',:'kid - mult',:'kid - comm']
81
+ end
82
+
83
+ class Code < Sequel::Model(:codes)
84
+ set_primary_key [:'kid - date',:'kid - time',:'kid - user',:'kid - mult',:'kid - comm']
85
+ def Code.get_codes(code_name)
86
+ self.filter(:name=>code_name).collect(&:description)
87
+ end
88
+ end
89
+
90
+
91
+ module CodeGroup
92
+ def CodeGroup.ranch_id; 'ranch_id__'; end
93
+ end
94
+
@@ -0,0 +1,169 @@
1
+ DB_DEMO.create_table!(:test_table) do
2
+ Integer :id
3
+ Integer :'goofy name col'
4
+ Integer :'date_col'
5
+ Integer :'time_col'
6
+ Integer :'price'
7
+ Integer :'paid'
8
+ end
9
+
10
+ DB_DEMO.create_table! :dudes do
11
+ Integer :'kid - date'
12
+ Integer :'kid - time'
13
+ Integer :'kid - user'
14
+ Integer :'kid - mult'
15
+ Integer :'kid - comm'
16
+ String :'name'
17
+ Integer :'ranch code'
18
+ Integer :'pool type'
19
+ Integer :'my friend kid - date'
20
+ Integer :'my friend kid - time'
21
+ Integer :'my friend kid - user'
22
+ Integer :'my friend kid - mult'
23
+ Integer :'my friend kid - comm'
24
+ end
25
+
26
+ DB_DEMO.create_table! :'my friends' do
27
+ Integer :'kid - date'
28
+ Integer :'kid - time'
29
+ Integer :'kid - user'
30
+ Integer :'kid - mult'
31
+ Integer :'kid - comm'
32
+ String :name
33
+ end
34
+
35
+ DB_DEMO.create_table! :'the horses' do
36
+ String :'name'
37
+ String :'goofy name'
38
+ Integer :'kid - date'
39
+ Integer :'kid - time'
40
+ Integer :'kid - user'
41
+ Integer :'kid - mult'
42
+ Integer :'kid - comm'
43
+ Integer :'dude kid - date'
44
+ Integer :'dude kid - time'
45
+ Integer :'dude kid - user'
46
+ Integer :'dude kid - mult'
47
+ Integer :'dude kid - comm'
48
+ end
49
+
50
+ DB_DEMO.create_table! :codes do
51
+ Integer :'kid - date'
52
+ Integer :'kid - time'
53
+ Integer :'kid - user'
54
+ Integer :'kid - mult'
55
+ Integer :'kid - comm'
56
+ String :'description'
57
+ String :'code'
58
+ Integer :'value'
59
+ String :'name'
60
+ end
61
+
62
+ module CodeGroup
63
+ def CodeGroup.ranch_id; 'ranch_id__'; end
64
+ def CodeGroup.pool_type; 'pool_id___'; end
65
+ end
66
+
67
+ Sequel::Model.db = DB_DEMO
68
+
69
+ class TestTable < Sequel::Model(:test_table)
70
+ set_primary_key [:id]
71
+ end
72
+
73
+ class Dude < Sequel::Model(:dudes)
74
+ set_primary_key [:'kid - date',:'kid - time',:'kid - user',:'kid - mult',:'kid - comm']
75
+
76
+ code_association :ranch_code, :'ranch code', :ranch_id
77
+ code_association :pool_type, :'pool type', :pool_type
78
+ column_alias :kid_date, :'kid - date'
79
+ o_to_n :horses, :class=>:Horse, :prefix => 'dude'
80
+ n_to_o :one_horse, :class=>:Horse, :prefix => 'dude'
81
+ # many_to_one :one_horse, :class => :Horse, :key=>nil,
82
+ # :eager_loader=>(proc do |key_hash, parents, associations|
83
+ # id_map = {}
84
+ # parents.each do |p|
85
+ # key_arr = primary_key.map{|k| p[k]}
86
+ # id_map[key_arr] = p
87
+ # end
88
+ # prefix = 'dude'
89
+ # parent_to_child_keys = primary_key.collect{|k| (prefix + " " + k.to_s).to_sym }
90
+ # Horse.filter(parent_to_child_keys=>id_map.keys).all do |h|
91
+ # parent_key_values = parent_to_child_keys.collect{|k| h[k]}
92
+ # id_map[parent_key_values].associations[:one_horse] = h
93
+ # end
94
+ # end)
95
+ #
96
+ # one_to_many :my_horses, :class => :Horse, :key=>nil,
97
+ # :eager_loader=>(proc do |key_hash, parents, associations|
98
+ # id_map = {}
99
+ # parents.each do |p|
100
+ # key_arr = key_hash.keys[0].map{|k| p[k]}
101
+ # id_map[key_arr] = p
102
+ # end
103
+ # prefix = 'dude'
104
+ # parent_keys = key_hash.keys[0].collect{|j| (prefix + " " + j.to_s).to_sym }
105
+ # Horse.filter(parent_keys => id_map.keys).all do |h|
106
+ # parent_key_values = parent_keys.collect{|k| h[k]}
107
+ # if d = id_map[parent_key_values]
108
+ # d.associations[:my_horses] = [] unless d.associations[:my_horses]
109
+ # d.associations[:my_horses] << h
110
+ # end
111
+ # end
112
+ # end
113
+ # )
114
+
115
+ #:graph_only_conditions => { :'dude kid - date'=>:"kid - date", :'dude kid - time'=>:"kid - time", :'dude kid - user'=>:"kid - user", :'dude kid - mult'=>:"kid - mult", :'dude kid - comm'=>:"kid - comm", :pinto_horse__name=>'pinto'}
116
+ n_to_o :my_friend, :class=>:MyFriend, :prefix=>'my friend'
117
+ end
118
+
119
+ class MyFriend < Sequel::Model(:'my friends')
120
+ set_primary_key [:'kid - date',:'kid - time',:'kid - user',:'kid - mult',:'kid - comm']
121
+ end
122
+
123
+
124
+ class Horse < Sequel::Model(:'the horses')
125
+ set_primary_key [:'kid - date',:'kid - time',:'kid - user',:'kid - mult',:'kid - comm']
126
+
127
+ # validations do
128
+ # presence_of :name
129
+ # end
130
+ n_to_o :dude, :class=>:Dude, :prefix=>'dude'
131
+ end
132
+
133
+ #require 'memcache'
134
+ #CACHE = MemCache.new 'localhost:11211', :namespace => 'cachetest'
135
+ #Horse.plugin :caching, CACHE
136
+
137
+ class Code < Sequel::Model(:codes)
138
+ set_primary_key [:'kid - date',:'kid - time',:'kid - user',:'kid - mult',:'kid - comm']
139
+
140
+ def Code.get_codes(code_name)
141
+ self.filter(:name=>code_name).collect(&:description)
142
+ end
143
+ end
144
+
145
+ DB_DEMO[:dudes] << { :name=>'dano',:'ranch code'=>1,:'pool type'=>2,
146
+ :'kid - date'=>1,:'kid - time'=>1,:'kid - user'=>1,:'kid - mult'=>1,:'kid - comm'=>1,
147
+ :'my friend kid - date'=>1,:'my friend kid - time'=>1,:'my friend kid - user'=>1,:'my friend kid - mult'=>1,:'my friend kid - comm'=>1}
148
+ DB_DEMO[:dudes] << { :name=>'eric',
149
+ :'kid - date'=>2,:'kid - time'=>2,:'kid - user'=>2,:'kid - mult'=>2,:'kid - comm'=>2,
150
+ :'my friend kid - date'=>2,:'my friend kid - time'=>2,:'my friend kid - user'=>2,:'my friend kid - mult'=>2,:'my friend kid - comm'=>2}
151
+
152
+ DB_DEMO[:'my friends'] << {:name=>'dans buddy',
153
+ :'kid - date'=>1,:'kid - time'=>1,:'kid - user'=>1,:'kid - mult'=>1,:'kid - comm'=>1}
154
+ DB_DEMO[:'my friends'] << {:name=>'erics buddy',
155
+ :'kid - date'=>2,:'kid - time'=>2,:'kid - user'=>2,:'kid - mult'=>2,:'kid - comm'=>2}
156
+
157
+ DB_DEMO[:'the horses'] << {:name=>'pinto', :'goofy name'=>'pinto-meister',
158
+ :'kid - date'=>1,:'kid - time'=>1,:'kid - user'=>1,:'kid - mult'=>1,:'kid - comm'=>1,
159
+ :'dude kid - date'=>1,:'dude kid - time'=>1,:'dude kid - user'=>1,:'dude kid - mult'=>1,:'dude kid - comm'=>1}
160
+ DB_DEMO[:'the horses'] << {:name=>'silver', :'goofy name'=>'heio silver',
161
+ :'kid - date'=>2,:'kid - time'=>2,:'kid - user'=>2,:'kid - mult'=>2,:'kid - comm'=>2,
162
+ :'dude kid - date'=>1,:'dude kid - time'=>1,:'dude kid - user'=>1,:'dude kid - mult'=>1,:'dude kid - comm'=>1}
163
+
164
+ DB_DEMO[:codes] << {:value=>1, :name=>'ranch_id__', :description=>'manly ranch', :code=>'men',
165
+ :'kid - date'=>1,:'kid - time'=>1,:'kid - user'=>1,:'kid - mult'=>1,:'kid - comm'=>1}
166
+ DB_DEMO[:codes] << {:value=>2, :name=>'pool_id___', :description=>'big round pool', :code=>'splash',
167
+ :'kid - date'=>2,:'kid - time'=>2,:'kid - user'=>2,:'kid - mult'=>2,:'kid - comm'=>2}
168
+
169
+ @@set_up_demo_tables = true
data/spec/spec.opts ADDED
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,55 @@
1
+ RAILS_ENV = "test"
2
+
3
+ require 'rubygems'
4
+
5
+ require 'lib/fossil'
6
+ require 'spec'
7
+ require 'rr'
8
+
9
+ unless defined?(DB_DEMO) #and defined?(DB_FOS)
10
+ DB_DEMO = Sequel.odbc('demodata')#, :loggers=>[Logger.new($stdout)])
11
+ DB_DEMO.extend(Sequel::Pervasive::DatabaseMethods)
12
+
13
+ DB_FOS = Sequel.odbc('fos')#, :loggers=>[Logger.new($stdout)])
14
+ DB_FOS.extend(Sequel::Pervasive::DatabaseMethods)
15
+ end
16
+
17
+ require File.dirname(__FILE__) + "/helper_methods"
18
+ require File.dirname(__FILE__) + "/helper_classes"
19
+ ##### custom matchers #####
20
+ require File.dirname(__FILE__) + "/be_model_with_values_matcher"
21
+
22
+
23
+ Spec::Runner.configure do |config|
24
+ config.include(HelperMethods)
25
+ config.mock_with :rr
26
+ config.include(BeModelWithValuesMatcher)
27
+ end
28
+
29
+ ################ these are special modifictations for testing with mysql db on non win platform ###################
30
+ unless RUBY_PLATFORM =~ /mswin32|linux/
31
+ # if its not windows ( pervasive db ) .. modify the pervasive adapter to act more like mysql for certain things
32
+
33
+ module Sequel::Pervasive::DatabaseMethods
34
+ def auto_increment_sql; "AUTO_INCREMENT" end
35
+ def begin_transaction_sql; "BEGIN" end
36
+ def commit_transaction_sql; "COMMIT" end
37
+ def rollback_transaction_sql; "ROLLBACK" end
38
+ end
39
+
40
+ module Sequel::Pervasive::DatasetMethods
41
+ def quoted_identifier(name, convert=true)
42
+ convert ? "`#{convert_aliased_col_to_real_col(name)}`" : "`#{name}`"
43
+ end
44
+
45
+ def select_clause_methods
46
+ super
47
+ end
48
+
49
+ def select_limit_sql(sql)
50
+ super(sql)
51
+ end
52
+ end
53
+
54
+ end
55
+ ################ end of special section ###################
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fossil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Lardin, Daniel Sudol
@@ -9,10 +9,39 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-11 00:00:00 -08:00
12
+ date: 2010-01-12 00:00:00 -08:00
13
13
  default_executable:
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sequel
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 3.5.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: active_support
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.3.5
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
16
45
  description: Access FOS/betrieve db with this Sequel based orm wrapper
17
46
  email: plardin@xojet.com
18
47
  executables: []
@@ -26,6 +55,7 @@ files:
26
55
  - VERSION
27
56
  - fossil.gemspec
28
57
  - lib/fossil.rb
58
+ - lib/hash_extentions.rb
29
59
  - lib/models/ac_qualification.rb
30
60
  - lib/models/aircraft.rb
31
61
  - lib/models/aircraft_cost.rb
@@ -127,6 +157,20 @@ files:
127
157
  - lib/sequel/serializer/json_serializer.rb
128
158
  - lib/sequel/serializer/serializer.rb
129
159
  - lib/sequel/serializer/xml_serializer.rb
160
+ - spec/be_model_with_values_matcher.rb
161
+ - spec/be_model_with_values_matcher_spec.rb
162
+ - spec/hash_extentions_spec.rb
163
+ - spec/helper_classes.rb
164
+ - spec/helper_methods.rb
165
+ - spec/sequel/fos_dates_spec.rb
166
+ - spec/sequel/model_patch_spec.rb
167
+ - spec/sequel/pervasive_adapter_spec.rb
168
+ - spec/sequel/serializer/json_serializer_spec.rb
169
+ - spec/sequel/serializer/xml_serializer_spec.rb
170
+ - spec/sequel/spec_helper_fos_tables.rb
171
+ - spec/sequel/spec_helper_tables.rb
172
+ - spec/spec.opts
173
+ - spec/spec_helper.rb
130
174
  has_rdoc: true
131
175
  homepage: ""
132
176
  licenses: []
@@ -155,5 +199,17 @@ rubygems_version: 1.3.5
155
199
  signing_key:
156
200
  specification_version: 3
157
201
  summary: Sequel orm wrapper to FOS
158
- test_files: []
159
-
202
+ test_files:
203
+ - spec/be_model_with_values_matcher.rb
204
+ - spec/be_model_with_values_matcher_spec.rb
205
+ - spec/hash_extentions_spec.rb
206
+ - spec/helper_classes.rb
207
+ - spec/helper_methods.rb
208
+ - spec/sequel/fos_dates_spec.rb
209
+ - spec/sequel/model_patch_spec.rb
210
+ - spec/sequel/pervasive_adapter_spec.rb
211
+ - spec/sequel/serializer/json_serializer_spec.rb
212
+ - spec/sequel/serializer/xml_serializer_spec.rb
213
+ - spec/sequel/spec_helper_fos_tables.rb
214
+ - spec/sequel/spec_helper_tables.rb
215
+ - spec/spec_helper.rb