believer 0.1

Sign up to get free protection for your applications and to get access to all the features.
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