believer 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 (43) hide show
  1. data/README.md +2 -0
  2. data/lib/believer.rb +42 -0
  3. data/lib/believer/base.rb +45 -0
  4. data/lib/believer/batch.rb +37 -0
  5. data/lib/believer/batch_delete.rb +27 -0
  6. data/lib/believer/callbacks.rb +276 -0
  7. data/lib/believer/columns.rb +166 -0
  8. data/lib/believer/command.rb +44 -0
  9. data/lib/believer/connection.rb +22 -0
  10. data/lib/believer/ddl.rb +36 -0
  11. data/lib/believer/delete.rb +11 -0
  12. data/lib/believer/empty_result.rb +32 -0
  13. data/lib/believer/environment.rb +51 -0
  14. data/lib/believer/environment/rails_environment.rb +19 -0
  15. data/lib/believer/insert.rb +18 -0
  16. data/lib/believer/limit.rb +20 -0
  17. data/lib/believer/model_schema.rb +176 -0
  18. data/lib/believer/observer.rb +36 -0
  19. data/lib/believer/order_by.rb +22 -0
  20. data/lib/believer/owner.rb +48 -0
  21. data/lib/believer/persistence.rb +31 -0
  22. data/lib/believer/primary_key.rb +5 -0
  23. data/lib/believer/query.rb +140 -0
  24. data/lib/believer/querying.rb +6 -0
  25. data/lib/believer/scoped_command.rb +19 -0
  26. data/lib/believer/scoping.rb +16 -0
  27. data/lib/believer/test/rspec/test_run_life_cycle.rb +51 -0
  28. data/lib/believer/values.rb +40 -0
  29. data/lib/believer/version.rb +5 -0
  30. data/lib/believer/where_clause.rb +40 -0
  31. data/spec/believer/base_spec.rb +6 -0
  32. data/spec/believer/callback_spec.rb +49 -0
  33. data/spec/believer/delete_spec.rb +12 -0
  34. data/spec/believer/insert_spec.rb +9 -0
  35. data/spec/believer/limit_spec.rb +7 -0
  36. data/spec/believer/order_by_spec.rb +14 -0
  37. data/spec/believer/query_spec.rb +31 -0
  38. data/spec/believer/time_series_spec.rb +18 -0
  39. data/spec/believer/where_spec.rb +28 -0
  40. data/spec/spec_helper.rb +37 -0
  41. data/spec/support/setup_database.rb +20 -0
  42. data/spec/support/test_classes.rb +60 -0
  43. metadata +180 -0
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Believer::Callbacks do
4
+
5
+ {:save => [:before, :after, :around],
6
+ :destroy => [:before, :after, :around]
7
+ }.each do |method, hooks|
8
+ hooks.each do |hook|
9
+ it "support #{hook} callback hook on method #{method}" do
10
+ object = Test::Person.new({:id => 1, :name => 'ABC'})
11
+
12
+ callback_method = "#{hook}_#{method}".to_sym
13
+ called = false
14
+ Test::Person.send(callback_method, Proc.new {|obj|
15
+ called = true
16
+ })
17
+ object.send(method)
18
+
19
+ called.should == true
20
+ end
21
+ end
22
+ end
23
+
24
+ #[:before, :after, :around].each do |hook|
25
+ # it "support #{hook} callback hook on method create" do
26
+ #
27
+ # callback_method = "#{hook}_save".to_sym
28
+ # called = false
29
+ # Test::Person.send(callback_method, Proc.new {|obj|
30
+ # called = true
31
+ # })
32
+ # Test::Person.create({:id => 1, :name => 'ABC'})
33
+ #
34
+ # called.should == true
35
+ # end
36
+ #end
37
+
38
+ #it "support after_initialize hook" do
39
+ # called = false
40
+ # Test::Person.after_initialize do
41
+ # called = true
42
+ # end
43
+ # p = Test::Person.create({:id => 1, :name => 'ABC'})
44
+ # p.should_not == nil
45
+ # Test::Person.where(:id => 1).first.should_not == nil
46
+ # called.should == true
47
+ #end
48
+
49
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Believer::Delete do
4
+
5
+ it "create a valid delete statement" do
6
+ del = Believer::Delete.new(:record_class => Test::Computer)
7
+ del = del.where(:id => 1)
8
+ del.to_cql.should == 'DELETE FROM computers WHERE id = 1'
9
+ end
10
+
11
+
12
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Believer::Insert do
4
+
5
+ it "create statement based on hash" do
6
+ insert = Believer::Insert.new(:record_class => Test::Computer, :values => {:id => 1, :brand => 'Apple'})
7
+ insert.to_cql.should == "INSERT INTO computers (id, brand) VALUES (1, 'Apple')"
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Believer::Limit do
4
+ it 'create CQL' do
5
+ Believer::Limit.new(23).to_cql.downcase.should == 'limit 23'
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Believer::OrderBy do
4
+
5
+ it "create a CQL expression" do
6
+ ob = Believer::OrderBy.new(:field)
7
+ ob.to_cql.downcase.should == 'order by field asc'
8
+ end
9
+
10
+ it "reverse order" do
11
+ ob = Believer::OrderBy.new(:field).inverse
12
+ ob.to_cql.downcase.should == 'order by field desc'
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Believer::Query do
4
+ include Believer::Test::RSpec::TestRunLifeCycle
5
+
6
+ it 'create simple statement' do
7
+ q = Believer::Query.new(:record_class => Test::Computer)
8
+ q = q.select(:id).
9
+ select(:brand).
10
+ where(:brand => 'Atari').
11
+ where(:production_date => Time.utc(2013)).
12
+ order(:id, :desc).
13
+ limit(10)
14
+ q.to_cql.should == "SELECT id, brand FROM computers WHERE brand = 'Atari' AND production_date = '2013-01-01 00:00:00+0000' ORDER BY id DESC LIMIT 10"
15
+ end
16
+
17
+ it 'should behave like an Enumerable' do
18
+ puts Test::Computer.environment
19
+ @objects = Test::Computer.create([
20
+ {:id => 1, :brand => 'Dell'},
21
+ {:id => 2, :brand => 'Apple'},
22
+ {:id => 3, :brand => 'HP'}
23
+ ])
24
+ q = Believer::Query.new(:record_class => Test::Computer).where(:id => @objects.map {|o|o.id})
25
+ Enumerable.instance_methods(false).each do |enum_method|
26
+ q.respond_to?(enum_method.to_sym).should == true
27
+ end
28
+ q.first.should == @objects.first
29
+ end
30
+
31
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Time series' do
4
+
5
+ before :each do
6
+ @interval = 1.minute
7
+ @start = Time.utc(2012)
8
+ @count = 1000
9
+ @count.times do |i|
10
+ Test::Event.create(:computer_id => 1, :event_type => 1, :time => @start + (@interval * i))
11
+ end
12
+ end
13
+
14
+ it 'load all' do
15
+ Test::Event.where(:computer_id => 1, :event_type => 1).size.should == @count
16
+ end
17
+
18
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Believer::WhereClause do
4
+
5
+ [
6
+ [:null, nil, "field = null"],
7
+ [:string, 'abc', "field = 'abc'"],
8
+ [:number, 23, "field = 23"],
9
+ [:timestamp, Time.utc(2013), "field = '2013-01-01 00:00:00+0000'"],
10
+ ].each do |scenario|
11
+ it "simple #{scenario[0]} parameter " do
12
+ Believer::WhereClause.new('field = ?', scenario[1]).to_cql.downcase.should == scenario[2]
13
+ end
14
+ end
15
+
16
+ it 'multiple parameters' do
17
+ Believer::WhereClause.new('a = ? AND b = ? AND c = ?', 1, 2, 3).to_cql.downcase.should == 'a = 1 and b = 2 and c = 3'
18
+ end
19
+
20
+ it 'simple hash parameter' do
21
+ Believer::WhereClause.new(:a => 1, :b => 2).to_cql.downcase.should == 'a = 1 and b = 2'
22
+ end
23
+
24
+ it 'enumerable hash parameter' do
25
+ Believer::WhereClause.new(:a => [1, 2, 3]).to_cql.downcase.should == 'a in (1,2,3)'
26
+ end
27
+
28
+ end
@@ -0,0 +1,37 @@
1
+ require 'bundler/setup'
2
+ require 'rspec/autorun'
3
+ require 'simplecov'
4
+
5
+ unless ENV['COVERAGE'] == 'no'
6
+ require 'simplecov'
7
+ SimpleCov.start do
8
+ add_filter "/spec/"
9
+ end
10
+ end
11
+
12
+ require 'believer'
13
+
14
+ require 'believer/test/rspec/test_run_life_cycle'
15
+
16
+
17
+
18
+
19
+ Dir[File.expand_path('../support/*.rb', __FILE__)].each {|f| require f}
20
+
21
+
22
+ setup_database
23
+
24
+ #class Event < Cql::Model
25
+ # primary_key :id
26
+ #
27
+ # column :location
28
+ # column :date
29
+ #end
30
+ #
31
+ #class Person < Cql::Model
32
+ # primary_key :id
33
+ #
34
+ # column :first_name
35
+ # column :last_name
36
+ # column :birth_date, column_name: :dob
37
+ #end
@@ -0,0 +1,20 @@
1
+ require 'believer'
2
+
3
+ def setup_database
4
+ env = Test.test_environment
5
+
6
+ connection = env.create_connection(:connect_to_keyspace => false)
7
+ begin
8
+ connection.use(env.connection_configuration[:keyspace])
9
+ rescue Cql::QueryError
10
+
11
+ env.create_keyspace(connection)
12
+ connection.use(env.connection_configuration[:keyspace])
13
+
14
+ Test.classes.each do |cl|
15
+ puts "Creating table #{cl.table_name}"
16
+ cl.create_table
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,60 @@
1
+
2
+ module Test
3
+
4
+ class Processor < Believer::Base
5
+ column :computer_id, :type => :integer
6
+ column :speed, :type => :integer
7
+ primary_key :computer_id
8
+ end
9
+
10
+ class Computer < Believer::Base
11
+ include Believer::Owner
12
+
13
+
14
+ column :id, :type => :integer
15
+ column :brand, :type => :string
16
+ column :production_date, :type => :timestamp
17
+
18
+ primary_key :id
19
+
20
+ has_some :processors, :class => Processor
21
+
22
+ end
23
+
24
+ class Event < Believer::Base
25
+ column :computer_id, :type => :integer
26
+ column :event_type, :type => :integer
27
+ column :time, :type => :integer, :key => true
28
+ column :description, :type => :string
29
+
30
+ primary_key [:computer_id, :event_type], :time
31
+
32
+ end
33
+
34
+ class Person < Believer::Base
35
+ self.table_name= 'people'
36
+
37
+ column :id, :type => :integer
38
+ column :name, :type => :string
39
+
40
+ primary_key :id
41
+
42
+ end
43
+
44
+ class Environment < Believer::Environment::Base
45
+ def connection_configuration
46
+ {:host => '127.0.0.1', :keyspace => 'believer_test_space'}
47
+ end
48
+ end
49
+
50
+ def self.test_environment
51
+ @env ||= Environment.new
52
+ end
53
+
54
+ CLASSES = [Processor, Computer, Event, Person]
55
+ CLASSES.each {|cl| cl.environment = test_environment}
56
+
57
+ def self.classes
58
+ CLASSES
59
+ end
60
+ end
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: believer
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jerphaes van Blijenburgh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activemodel
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.13
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.13
30
+ - !ruby/object:Gem::Dependency
31
+ name: cql-rb
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.1.0.pre6
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.0.pre6
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: simplecov
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 0.7.1
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 0.7.1
94
+ description: ! 'An Objeect Relational Mapping library for CQL3 '
95
+ email:
96
+ - jerphaes@gmail.com
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - lib/believer/base.rb
102
+ - lib/believer/batch.rb
103
+ - lib/believer/batch_delete.rb
104
+ - lib/believer/callbacks.rb
105
+ - lib/believer/columns.rb
106
+ - lib/believer/command.rb
107
+ - lib/believer/connection.rb
108
+ - lib/believer/ddl.rb
109
+ - lib/believer/delete.rb
110
+ - lib/believer/empty_result.rb
111
+ - lib/believer/environment/rails_environment.rb
112
+ - lib/believer/environment.rb
113
+ - lib/believer/insert.rb
114
+ - lib/believer/limit.rb
115
+ - lib/believer/model_schema.rb
116
+ - lib/believer/observer.rb
117
+ - lib/believer/order_by.rb
118
+ - lib/believer/owner.rb
119
+ - lib/believer/persistence.rb
120
+ - lib/believer/primary_key.rb
121
+ - lib/believer/query.rb
122
+ - lib/believer/querying.rb
123
+ - lib/believer/scoped_command.rb
124
+ - lib/believer/scoping.rb
125
+ - lib/believer/test/rspec/test_run_life_cycle.rb
126
+ - lib/believer/values.rb
127
+ - lib/believer/version.rb
128
+ - lib/believer/where_clause.rb
129
+ - lib/believer.rb
130
+ - README.md
131
+ - spec/believer/base_spec.rb
132
+ - spec/believer/callback_spec.rb
133
+ - spec/believer/delete_spec.rb
134
+ - spec/believer/insert_spec.rb
135
+ - spec/believer/limit_spec.rb
136
+ - spec/believer/order_by_spec.rb
137
+ - spec/believer/query_spec.rb
138
+ - spec/believer/time_series_spec.rb
139
+ - spec/believer/where_spec.rb
140
+ - spec/spec_helper.rb
141
+ - spec/support/setup_database.rb
142
+ - spec/support/test_classes.rb
143
+ homepage: http://github.com/jerphaes/believer
144
+ licenses:
145
+ - Apache License 2.0
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ! '>='
154
+ - !ruby/object:Gem::Version
155
+ version: 1.9.2
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ requirements: []
163
+ rubyforge_project:
164
+ rubygems_version: 1.8.25
165
+ signing_key:
166
+ specification_version: 3
167
+ summary: CQL3 ORM
168
+ test_files:
169
+ - spec/believer/base_spec.rb
170
+ - spec/believer/callback_spec.rb
171
+ - spec/believer/delete_spec.rb
172
+ - spec/believer/insert_spec.rb
173
+ - spec/believer/limit_spec.rb
174
+ - spec/believer/order_by_spec.rb
175
+ - spec/believer/query_spec.rb
176
+ - spec/believer/time_series_spec.rb
177
+ - spec/believer/where_spec.rb
178
+ - spec/spec_helper.rb
179
+ - spec/support/setup_database.rb
180
+ - spec/support/test_classes.rb