believer 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -170,6 +170,39 @@ development:
170
170
  size: 10
171
171
  timeout: 5
172
172
  ```
173
+ ### Believer configuration
174
+ The Believer exposes some configuration options. These can added in a 'believer' node of the configuration hash.
175
+ For now only the logging is configurable.
176
+
177
+ Some examples:
178
+
179
+ ``` yaml
180
+ development:
181
+ host: 127.0.0.1
182
+ port: 9042
183
+ keyspace: my_keyspace
184
+ believer:
185
+ logger:
186
+ # Use the application log (f.e. /log/development.log)
187
+ use_environment: true
188
+
189
+ development:
190
+ host: 127.0.0.1
191
+ port: 9042
192
+ keyspace: my_keyspace
193
+ believer:
194
+ logger:
195
+ # Use STDOUT to log messages
196
+ use_environment: false
197
+
198
+ development:
199
+ host: 127.0.0.1
200
+ port: 9042
201
+ keyspace: my_keyspace
202
+ believer:
203
+ # No Believer logging at all
204
+ logger: false
205
+ ```
173
206
 
174
207
  ## Callbacks
175
208
  The Believer::Base supports several callbacks to hook into the lifecycle of the models.
data/lib/believer.rb CHANGED
@@ -14,9 +14,10 @@ require 'cql/client'
14
14
  require 'yaml'
15
15
 
16
16
  require 'believer/cql_helper'
17
- require 'believer/environment'
17
+ require 'believer/environment/base_env'
18
18
  require 'believer/environment/rails_env'
19
19
  require 'believer/environment/merb_env'
20
+ require 'believer/environment'
20
21
  require 'believer/connection'
21
22
  require 'believer/values'
22
23
  require 'believer/column'
@@ -24,21 +25,22 @@ require 'believer/columns'
24
25
  require 'believer/model_schema'
25
26
  require 'believer/persistence'
26
27
  require 'believer/command'
27
- require 'believer/querying'
28
28
  require 'believer/where_clause'
29
- require 'believer/empty_result'
30
29
  require 'believer/limit'
31
30
  require 'believer/order_by'
32
31
  require 'believer/filter_command'
33
32
  require 'believer/query'
33
+ require 'believer/empty_result'
34
34
  require 'believer/delete'
35
35
  require 'believer/insert'
36
+ require 'believer/querying'
36
37
  require 'believer/scoping'
37
38
  require 'believer/batch'
38
39
  require 'believer/batch_delete'
39
40
  require 'believer/callbacks'
40
41
  require 'believer/finder_methods'
41
42
 
43
+ require 'believer/log_subscriber'
42
44
  require 'believer/observer'
43
45
  require 'believer/relation'
44
46
 
data/lib/believer/base.rb CHANGED
@@ -42,6 +42,10 @@ module Believer
42
42
  equal_key_values?(obj)
43
43
  end
44
44
 
45
+ def self.logger
46
+ environment.logger
47
+ end
48
+
45
49
  end
46
50
 
47
51
 
@@ -18,15 +18,22 @@ module Believer
18
18
  {:record_class => @record_class}
19
19
  end
20
20
 
21
- def execute(name = 'cql.cql_record')
21
+ def command_name
22
+ self.class.name.split('::').last.underscore
23
+ end
24
+
25
+ def execute(name = nil)
26
+ name = "#{record_class.name} #{command_name}" if name.nil?
22
27
  @record_class.connection_pool.with do |connection|
23
28
  cql = to_cql
24
29
  begin
25
- start = Time.now
26
- #puts "Executing #{cql}"
27
- res = connection.execute(cql)
28
- puts "#{name} #{sprintf "%.3f", (Time.now - start)*1000.0} ms: #{cql}"
29
- return res
30
+ #start = Time.now
31
+ #res = connection.execute(cql)
32
+ #puts "#{name} #{sprintf "%.3f", (Time.now - start)*1000.0} ms: #{cql}"
33
+ #return res
34
+ return ActiveSupport::Notifications.instrument('cql.believer', :cql => cql, :name => name) do
35
+ return connection.execute(cql)
36
+ end
30
37
  rescue Cql::Protocol::DecodingError => e
31
38
  # Decoding errors tend to #$%# up the connection, resulting in no more activity, so a reconnect is performed here.
32
39
  # This is a known issue in cql-rb, and will be fixed in version 1.10
@@ -27,6 +27,12 @@ module Believer
27
27
  def connection(environment)
28
28
  unless @connection_pool
29
29
  pool_config = environment.connection_pool_configuration
30
+ if pool_config.nil?
31
+ pool_config = {
32
+ :size => 1,
33
+ :timeout => 10
34
+ }
35
+ end
30
36
  @connection_pool ||= ::ConnectionPool.new(pool_config) do
31
37
  environment.create_connection(:connect_to_keyspace => true)
32
38
  end
data/lib/believer/ddl.rb CHANGED
@@ -7,26 +7,23 @@ module Believer
7
7
 
8
8
  def drop_table
9
9
  connection_pool.with do |connection|
10
- cql = "CREATE TABLE #{table_name}"
11
- puts "Dropping table #{table_name} using CQL:\n#{cql}"
12
- connection.execute(cql)
13
- puts "Dropped table #{table_name}"
10
+ cql = "DROP TABLE #{table_name}"
11
+ ActiveSupport::Notifications.instrument('deserialize.believer', :class => self, :cql => cql, :method => :drop) do
12
+ connection.execute(cql)
13
+ end
14
14
  end
15
15
  end
16
16
 
17
17
  def create_table
18
18
  connection_pool.with do |connection|
19
19
  cql = create_table_cql
20
- puts "Creating table #{table_name} using CQL:\n#{cql}"
21
- connection.execute(cql)
22
- puts "Created table #{table_name}"
20
+ ActiveSupport::Notifications.instrument('ddl.believer', :class => self, :cql => cql, :method => :create) do
21
+ connection.execute(cql)
22
+ end
23
23
  end
24
24
  end
25
25
 
26
26
  def create_table_cql
27
- s = "CREATE TABLE #{table_name} (\n"
28
- col_statement_parts = columns.keys.map {|col| "#{col} #{columns[col].cql_type}"}
29
- s << col_statement_parts.join(",\n")
30
27
 
31
28
  keys = []
32
29
  get_primary_key.each do |key_part|
@@ -36,6 +33,10 @@ module Believer
36
33
  keys << key_part
37
34
  end
38
35
  end
36
+
37
+ s = "CREATE TABLE #{table_name} (\n"
38
+ col_statement_parts = columns.keys.map {|col| "#{col} #{columns[col].cql_type}"}
39
+ s << col_statement_parts.join(",\n")
39
40
  s << ",\n"
40
41
  s << "PRIMARY KEY (#{keys.join(',')})"
41
42
  s << "\n)"
@@ -1,34 +1,65 @@
1
1
  module Believer
2
2
 
3
- class EmptyResult
4
- DATA_METHODS = {
5
- :execute => [],
6
- :destroy_all => nil,
7
- :delete_all => 0,
8
- :to_a => [],
9
- :size => 0,
10
- :count => 0,
11
- :each => nil,
12
- :first => nil,
13
- :last => nil,
14
- :any? => false,
15
- :sort_by => nil,
16
- :loaded_objects => []
17
- }
18
- QUERY_METHODS = [:select, :where, :order, :limit]
19
-
20
- DATA_METHODS.each do |method_name, return_val|
21
- define_method(method_name) do |*|
22
- return_val
23
- end
3
+ #class EmptyResult
4
+ # DATA_METHODS = {
5
+ # :execute => [],
6
+ # :destroy_all => nil,
7
+ # :delete_all => 0,
8
+ # :to_a => [],
9
+ # :size => 0,
10
+ # :count => 0,
11
+ # :each => nil,
12
+ # :first => nil,
13
+ # :last => nil,
14
+ # :any? => false,
15
+ # :sort_by => nil,
16
+ # :loaded_objects => []
17
+ # }
18
+ # QUERY_METHODS = [:select, :where, :order, :limit]
19
+ #
20
+ # DATA_METHODS.each do |method_name, return_val|
21
+ # define_method(method_name) do |*|
22
+ # return_val
23
+ # end
24
+ # end
25
+ #
26
+ # QUERY_METHODS.each do |method_name|
27
+ # define_method(method_name) do |*|
28
+ # self
29
+ # end
30
+ # end
31
+ #
32
+ #end
33
+ class EmptyResult < ::Believer::Query
34
+
35
+ def clone
36
+ self
24
37
  end
25
38
 
26
- QUERY_METHODS.each do |method_name|
27
- define_method(method_name) do |*|
28
- self
29
- end
39
+ def to_cql
40
+ nil
30
41
  end
31
42
 
32
- end
43
+ def to_a
44
+ []
45
+ end
46
+
47
+ def exists?(*args)
48
+ false
49
+ end
50
+
51
+ def count
52
+ 0
53
+ end
54
+
55
+ def execute(name = nil)
56
+ []
57
+ end
33
58
 
59
+ protected
60
+ def loaded_objects
61
+ []
62
+ end
63
+
64
+ end
34
65
  end
@@ -1,20 +1,19 @@
1
- #require "believer/environment/rails_env"
2
- #require "believer/environment/merb_env"
3
-
4
1
  module Believer
5
2
  module Environment
6
3
  extend ::ActiveSupport::Concern
4
+ ENVIRONMENTS = [
5
+ ::Believer::Environment::RailsEnv,
6
+ ::Believer::Environment::MerbEnv
7
+ ]
7
8
 
8
9
  module ClassMethods
9
-
10
10
  def environment
11
11
  if @environment.nil?
12
12
  if self.superclass.respond_to?(:environment)
13
13
  @environment = self.superclass.environment
14
- elsif defined?(::Rails)
15
- @environment = ::Believer::Environment::RailsEnv.new
16
- elsif defined?(::Merb)
17
- @environment = ::Believer::Environment::MerbEnv.new
14
+ else
15
+ env_class = ENVIRONMENTS.find { |env| env.respond_to?(:applies?) && env.applies? }
16
+ @environment = env_class.new if env_class
18
17
  end
19
18
  end
20
19
  @environment
@@ -26,81 +25,5 @@ module Believer
26
25
 
27
26
  end
28
27
 
29
- class BaseEnv
30
- # Default pool configuration
31
- DEFAULT_POOL_CONFIG = {
32
- :size => 1,
33
- :timeout => 10
34
- }
35
-
36
- # Creates a new environment using the provided configuration
37
- # @param config [Hash] the configuration
38
- def initialize(config = nil)
39
- @configuration = config.dup unless config.nil?
40
- end
41
-
42
- # Returns the configuration. This configuration hash should contain the cql-rb client connection parameters.
43
- # Optionally the connection_pool configuraton can be included in a :pool node.
44
- def configuration
45
- @configuration ||= load_configuration
46
- end
47
-
48
- # Sets the configuration
49
- def configuration=(config)
50
- @configuration = config
51
- end
52
-
53
- def connection_configuration
54
- configuration.reject {|k, v| k == :pool}
55
- end
56
-
57
- # The connection_pool configuration, which should be a :pool node in the configuration.
58
- def connection_pool_configuration
59
- DEFAULT_POOL_CONFIG.merge(configuration[:pool].is_a?(Hash) ? configuration[:pool].symbolize_keys! : {})
60
- end
61
-
62
- # Creates a new connection
63
- def create_connection(options = {})
64
- cc = connection_configuration
65
- if options[:connect_to_keyspace] && cc[:keyspace]
66
- connection = Cql::Client.connect(cc)
67
- connection.use(cc[:keyspace])
68
- else
69
- connection = Cql::Client.connect(cc.delete_if {|k,v|k == :keyspace})
70
- end
71
- connection
72
- end
73
-
74
- def create_keyspace(properties = {}, connection = nil)
75
- conn = connection || create_connection(:connect_to_keyspace => false)
76
-
77
- default_properties = {:replication => {:class => 'SimpleStrategy', :replication_factor => 1}}
78
- ks_props = default_properties.merge(properties)
79
-
80
- ks_props_s = ks_props.keys.map {|k|
81
- v = ks_props[k]
82
- v_s = nil
83
- if v.is_a?(Hash)
84
- v_s = v.to_json.gsub(/\"/) {|m| "'"}
85
- elsif v.is_a?(String)
86
- v_s = "'#{v}'"
87
- else
88
- v_s = v.to_s
89
- end
90
- "#{k} = #{v_s}"
91
- }.join("\nAND ")
92
-
93
- ks_def = <<-KS_DEF
94
- CREATE KEYSPACE #{connection_configuration[:keyspace]}
95
- WITH #{ks_props_s}
96
- KS_DEF
97
-
98
- puts ks_def
99
-
100
- conn.execute(ks_def)
101
- end
102
-
103
- end
104
-
105
28
  end
106
29
  end
@@ -0,0 +1,113 @@
1
+ module Believer
2
+ module Environment
3
+ class BaseEnv
4
+ DEFAULT_CONFIG = {
5
+ :pool => {
6
+ :size => 1,
7
+ :timeout => 10
8
+ },
9
+ :believer => {
10
+ :logger => {
11
+ :use_environment => true,
12
+ :level => ::Logger::DEBUG
13
+ }
14
+ }
15
+ }
16
+
17
+ # Creates a new environment using the provided configuration
18
+ # @param config [Hash] the configuration
19
+ def initialize(config = nil)
20
+ @configuration = config.dup unless config.nil?
21
+ end
22
+
23
+ def logger
24
+ return nil unless believer_configuration[:logger]
25
+ return environment_logger if believer_configuration[:logger][:use_environment] && respond_to?(:environment_logger)
26
+ unless @std_logger
27
+ puts believer_configuration[:logger]
28
+ @std_logger = ::Logger.new(STDOUT)
29
+ if believer_configuration[:logger][:level] && believer_configuration[:logger][:level].is_a?(Numeric)
30
+ @std_logger.level = believer_configuration[:logger][:level].to_i
31
+ end
32
+
33
+ end
34
+ @std_logger
35
+ end
36
+
37
+ # Returns the configuration. This configuration hash should contain the cql-rb client connection parameters.
38
+ # Optionally the connection_pool configuraton can be included in a :pool node.
39
+ def configuration
40
+ unless @configuration
41
+ loaded = load_configuration
42
+ config = HashWithIndifferentAccess.new(DEFAULT_CONFIG.merge(loaded))
43
+ @configuration = config
44
+ end
45
+ @configuration
46
+ end
47
+
48
+ # Sets the configuration
49
+ def configuration=(config)
50
+ @configuration = config
51
+ end
52
+
53
+ def connection_configuration
54
+ configuration.reject { |k, v| k == :pool || k == :believer }
55
+ end
56
+
57
+ # The connection_pool configuration, which should be a :pool node in the configuration.
58
+ def connection_pool_configuration
59
+ pc = configuration[:pool]
60
+ return DEFAULT_CONFIG[:pool] unless pc
61
+ pc
62
+ end
63
+
64
+ # The connection_pool configuration, which should be a :pool node in the configuration.
65
+ def believer_configuration
66
+ configuration[:believer]
67
+ end
68
+
69
+ # Creates a new connection
70
+ def create_connection(options = {})
71
+ cc = connection_configuration
72
+ if options[:connect_to_keyspace] && cc[:keyspace]
73
+ connection = Cql::Client.connect(cc)
74
+ connection.use(cc[:keyspace])
75
+ else
76
+ connection = Cql::Client.connect(cc.delete_if { |k, v| k == :keyspace })
77
+ end
78
+ connection
79
+ end
80
+
81
+ def create_keyspace(properties = {}, connection = nil)
82
+ conn = connection || create_connection(:connect_to_keyspace => false)
83
+
84
+ default_properties = {:replication => {:class => 'SimpleStrategy', :replication_factor => 1}}
85
+ ks_props = default_properties.merge(properties)
86
+
87
+ ks_props_s = ks_props.keys.map { |k|
88
+ v = ks_props[k]
89
+ v_s = nil
90
+ if v.is_a?(Hash)
91
+ v_s = v.to_json.gsub(/\"/) { |m| "'" }
92
+ elsif v.is_a?(String)
93
+ v_s = "'#{v}'"
94
+ else
95
+ v_s = v.to_s
96
+ end
97
+ "#{k} = #{v_s}"
98
+ }.join("\nAND ")
99
+
100
+ ks_def = <<-KS_DEF
101
+ CREATE KEYSPACE #{connection_configuration[:keyspace]}
102
+ WITH #{ks_props_s}
103
+ KS_DEF
104
+
105
+ puts ks_def
106
+
107
+ conn.execute(ks_def)
108
+ end
109
+
110
+ end
111
+
112
+ end
113
+ end
@@ -3,6 +3,10 @@ module Believer
3
3
  module Environment
4
4
  class MerbEnv < Believer::Environment::BaseEnv
5
5
 
6
+ def self.applies?
7
+ defined?(::Merb)
8
+ end
9
+
6
10
  def load_configuration
7
11
  config_file = File.join(Merb.root, 'config', 'believer.yml')
8
12
  config = HashWithIndifferentAccess.new(YAML::load(File.open(config_file.to_s)))
@@ -1,15 +1,26 @@
1
1
 
2
2
  module Believer
3
3
  module Environment
4
- class RailsEnv < Believer::Environment::BaseEnv
4
+ class RailsEnv < ::Believer::Environment::BaseEnv
5
+
6
+ def self.applies?
7
+ defined?(::Rails) && ::Rails.respond_to?(:env) && ::Rails.respond_to?(:root)
8
+ end
5
9
 
6
10
  def load_configuration
7
11
  config_file = File.join(Rails.root, 'config', 'believer.yml')
8
12
  config = HashWithIndifferentAccess.new(YAML::load(File.open(config_file.to_s)))
9
13
  env_config = config[Rails.env]
10
- env_config[:logger] = Rails.logger unless Rails.logger.nil?
11
14
  env_config
12
15
  end
16
+
17
+ def environment_logger
18
+ if defined?(Rails) && !Rails.nil? && Rails.logger && Rails.logger.respond_to?(:debug)
19
+ return Rails.logger
20
+ end
21
+ super
22
+ end
23
+
13
24
  end
14
25
  end
15
26
  end
@@ -0,0 +1,65 @@
1
+ module Believer
2
+
3
+ class LogSubscriber < ActiveSupport::LogSubscriber
4
+
5
+ def initialize
6
+ super
7
+ @odd_or_even = false
8
+ end
9
+
10
+ def ddl(event)
11
+ return unless logger.debug?
12
+
13
+ payload = event.payload
14
+
15
+ name = '%s (%.1fms) [CQL]' % [payload[:class].to_s, event.duration]
16
+ name = color(name, MAGENTA, true)
17
+ cql = color(payload[:cql].squeeze(' '), BLACK, true)
18
+
19
+ debug " #{name} #{payload[:method]} table:\n#{cql}"
20
+ end
21
+
22
+ def deserialize(event)
23
+ return unless logger.debug?
24
+
25
+ payload = event.payload
26
+
27
+ name = '%s (%.1fms)' % [payload[:class].to_s, event.duration]
28
+ name = color(name, RED, true)
29
+
30
+ debug " #{name} deserialized #{payload[:count]} objects"
31
+ end
32
+
33
+ def cql(event)
34
+ return unless logger.debug?
35
+
36
+ payload = event.payload
37
+
38
+ return if 'SCHEMA' == payload[:name]
39
+
40
+ name = '%s (%.1fms) [CQL]' % [payload[:name], event.duration]
41
+ cql = payload[:cql].squeeze(' ')
42
+
43
+ if odd?
44
+ name = color(name, GREEN, true)
45
+ cql = color(cql, nil, true)
46
+ else
47
+ name = color(name, CYAN, true)
48
+ end
49
+
50
+ debug " #{name} #{cql}"
51
+ end
52
+
53
+ def logger
54
+ Believer::Base.logger
55
+ end
56
+
57
+ private
58
+ def odd?
59
+ @odd_or_even = !@odd_or_even
60
+ end
61
+
62
+ end
63
+ end
64
+
65
+ Believer::LogSubscriber.attach_to :believer
@@ -1,6 +1,5 @@
1
1
  module Believer
2
2
  class Query < FilterCommand
3
-
4
3
  attr_accessor :record_class, :selects, :order_by, :limit_to
5
4
 
6
5
  delegate *(Enumerable.instance_methods(false).map {|enum_method| enum_method.to_sym}), :to => :to_a
@@ -89,12 +88,17 @@ module Believer
89
88
  def to_a
90
89
  if @loaded_objects.nil?
91
90
  result = execute
92
- @loaded_objects = []
93
- start = Time.now
94
- result.each do |row|
95
- @loaded_objects << @record_class.instantiate_from_result_rows(row)
91
+ notify_payload = {:class => @record_class}
92
+ @loaded_objects = ActiveSupport::Notifications.instrument('deserialize.believer', notify_payload) do
93
+ start = Time.now
94
+ objects = []
95
+ result.each do |row|
96
+ objects << record_class.instantiate_from_result_rows(row)
97
+ end
98
+ notify_payload[:count] = objects.count
99
+ objects
96
100
  end
97
- puts "Took #{sprintf "%.3f", (Time.now - start)*1000.0} ms to deserialize #{@loaded_objects.size} object(s)"
101
+ #puts "Took #{sprintf "%.3f", (Time.now - start)*1000.0} ms to deserialize #{@loaded_objects.size} object(s)"
98
102
  end
99
103
  @loaded_objects
100
104
  end
@@ -76,7 +76,7 @@ module Believer
76
76
  if options[:filter]
77
77
  q = self.instance_exec(q, &(options[:filter]))
78
78
  unless q
79
- er = EmptyResult.new
79
+ er = EmptyResult.new(:record_class => relation_class)
80
80
  er.extend(CollectionMethods)
81
81
  er.extend(::Believer::FinderMethods)
82
82
  return er
@@ -18,7 +18,6 @@ module Believer
18
18
 
19
19
  def cleanup
20
20
  unless @saved_models.nil? || @saved_models.empty?
21
- puts "Cleaning up #{@saved_models.size} objects"
22
21
  @saved_models.each do |model|
23
22
  begin
24
23
  model.destroy
@@ -1,5 +1,5 @@
1
1
  module Believer
2
2
  module Version
3
- VERSION = '0.2.3'
3
+ VERSION = '0.2.4'
4
4
  end
5
5
  end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Believer::EmptyResult do
4
+
5
+ let :empty_result do
6
+ Believer::EmptyResult.new(:record_class => Test::Artist)
7
+ end
8
+ let :artist do
9
+ Test::Artist.create(:name => 'Colplay')
10
+ end
11
+
12
+ it "should not return data" do
13
+ expect(empty_result.size).to eq(0)
14
+ expect(empty_result.to_a).to eq([])
15
+ end
16
+
17
+ {
18
+ :select => [:name],
19
+ :where => {:name => 'Colplay'},
20
+ :order => :name,
21
+ :limit => 10
22
+ }.each do |method, args|
23
+ it "should remain empty after #{method} query call" do
24
+ empty_new = empty_result.send(method, args)
25
+ expect(empty_new.size).to eq(0)
26
+ expect(empty_new.to_a).to eq([])
27
+ end
28
+ end
29
+
30
+ it "should return false for exists?" do
31
+ expect(empty_result.exists?).to eq(false)
32
+ end
33
+
34
+ it "should return 0 for count" do
35
+ expect(empty_result.count).to eq(0)
36
+ end
37
+
38
+ end
@@ -11,18 +11,22 @@ describe Believer::Environment do
11
11
  Believer::Base.environment = @original_env
12
12
  end
13
13
 
14
- it 'load the Merb configuration' do
15
- Merb = Struct.new(:root, :environment, :logger).new(File.join(RSpec.configuration.test_files_dir, 'merb'), :development, nil)
16
- env = Believer::Base.environment
17
- env.class.should == Believer::Environment::MerbEnv
18
- env.configuration[:host].should == 'merb.local'
19
- end
20
-
21
14
  it 'load the rails configuration' do
22
- Rails = Struct.new(:root, :env, :logger).new(File.join(RSpec.configuration.test_files_dir, 'rails'), :development, nil)
15
+ Rails = Struct.new(:root, :env, :logger).new(File.join(RSpec.configuration.test_files_dir, 'rails'), :test, nil)
23
16
  env = Believer::Base.environment
24
17
  env.class.should == Believer::Environment::RailsEnv
25
18
  env.configuration[:host].should == '123.456.789.0'
19
+ #remove_const(Rails)
20
+ Rails = nil
21
+ end
22
+
23
+ it 'load the Merb configuration' do
24
+ Merb = Struct.new(:root, :environment, :logger).new(File.join(RSpec.configuration.test_files_dir, 'merb'), :test, nil)
25
+ env = Believer::Base.environment
26
+ env.class.should == Believer::Environment::MerbEnv
27
+ env.configuration[:host].should == 'merb.test.local'
28
+ #remove_const(Merb)
29
+ Merb = nil
26
30
  end
27
31
 
28
32
  end
@@ -8,34 +8,32 @@ describe Believer::Test::TestRunLifeCycle do
8
8
  @destroyed_count = 0
9
9
  @destroy_monitor = lambda do |obj|
10
10
  @destroyed_count += 1
11
- puts "Destroyed"
12
11
  end
13
12
 
14
13
  begin
15
14
  XXX.drop_table
16
- XXX.create_table
15
+
17
16
  rescue
17
+ ensure
18
+ XXX.create_table
18
19
  end
19
-
20
20
  end
21
21
 
22
22
  after :all do
23
- puts "Checking"
23
+ puts "DROP TABLE XXXX"
24
24
  @destroyed_count.should == @created.size
25
25
  XXX.drop_table
26
26
  end
27
27
 
28
28
  before :each do
29
-
30
29
  @created = []
31
30
  10.times do |i|
32
31
  @created << XXX.create(:name => "artist_#{i}", :destroy_monitor => @destroy_monitor)
33
- puts "Created"
34
32
  end
35
33
  end
36
34
 
37
- it "should clean all created objects" do
38
-
35
+ it "should clean all created objects, even after a fail" do
36
+ #fail
39
37
  end
40
38
 
41
39
  class XXX < Believer::Base
@@ -61,7 +61,13 @@ module Test
61
61
 
62
62
  class Environment < Believer::Environment::BaseEnv
63
63
  def configuration
64
- {:host => '127.0.0.1', :keyspace => 'believer_test_space'}
64
+ {
65
+ :host => '127.0.0.1',
66
+ :keyspace => 'believer_test_space',
67
+ :believer => {
68
+ :logger => {:level => ::Logger::DEBUG}
69
+ }
70
+ }
65
71
  end
66
72
  end
67
73
 
metadata CHANGED
@@ -1,124 +1,119 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: believer
3
- version: !ruby/object:Gem::Version
4
- hash: 17
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.4
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 3
10
- version: 0.2.3
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jerphaes van Blijenburgh
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-10-23 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-10-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: activemodel
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 21
29
- segments:
30
- - 3
31
- - 2
32
- - 13
33
- version: 3.2.13
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3'
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: cql-rb
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
40
25
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 1482311429
45
- segments:
46
- - 1
47
- - 1
48
- - 0
49
- - pre
50
- - 6
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3'
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
51
37
  version: 1.1.0.pre6
52
38
  type: :runtime
53
- version_requirements: *id002
54
- - !ruby/object:Gem::Dependency
55
- name: connection_pool
56
39
  prerelease: false
57
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
58
41
  none: false
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- hash: 3
63
- segments:
64
- - 0
65
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.0.pre6
46
+ - !ruby/object:Gem::Dependency
47
+ name: connection_pool
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
66
54
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: rake
70
55
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
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: rake
64
+ requirement: !ruby/object:Gem::Requirement
72
65
  none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 3
77
- segments:
78
- - 0
79
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
80
70
  type: :development
81
- version_requirements: *id004
82
- - !ruby/object:Gem::Dependency
83
- name: rspec
84
71
  prerelease: false
85
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
86
73
  none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- hash: 3
91
- segments:
92
- - 0
93
- version: "0"
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
94
86
  type: :development
95
- version_requirements: *id005
96
- - !ruby/object:Gem::Dependency
97
- name: simplecov
98
87
  prerelease: false
99
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
100
89
  none: false
101
- requirements:
102
- - - "="
103
- - !ruby/object:Gem::Version
104
- hash: 1
105
- segments:
106
- - 0
107
- - 7
108
- - 1
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: simplecov
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
109
101
  version: 0.7.1
110
102
  type: :development
111
- version_requirements: *id006
112
- description: "An Object Relational Mapping library for CQL3 "
113
- email:
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.7.1
110
+ description: ! 'An Object Relational Mapping library for CQL3 '
111
+ email:
114
112
  - jerphaes@gmail.com
115
113
  executables: []
116
-
117
114
  extensions: []
118
-
119
115
  extra_rdoc_files: []
120
-
121
- files:
116
+ files:
122
117
  - lib/believer/base.rb
123
118
  - lib/believer/batch.rb
124
119
  - lib/believer/batch_delete.rb
@@ -131,6 +126,7 @@ files:
131
126
  - lib/believer/ddl.rb
132
127
  - lib/believer/delete.rb
133
128
  - lib/believer/empty_result.rb
129
+ - lib/believer/environment/base_env.rb
134
130
  - lib/believer/environment/merb_env.rb
135
131
  - lib/believer/environment/rails_env.rb
136
132
  - lib/believer/environment.rb
@@ -138,6 +134,7 @@ files:
138
134
  - lib/believer/finder_methods.rb
139
135
  - lib/believer/insert.rb
140
136
  - lib/believer/limit.rb
137
+ - lib/believer/log_subscriber.rb
141
138
  - lib/believer/model_schema.rb
142
139
  - lib/believer/observer.rb
143
140
  - lib/believer/order_by.rb
@@ -155,6 +152,7 @@ files:
155
152
  - spec/believer/base_spec.rb
156
153
  - spec/believer/callback_spec.rb
157
154
  - spec/believer/delete_spec.rb
155
+ - spec/believer/empty_result_spec.rb
158
156
  - spec/believer/environment_spec.rb
159
157
  - spec/believer/finder_methods_spec.rb
160
158
  - spec/believer/insert_spec.rb
@@ -170,44 +168,35 @@ files:
170
168
  - spec/support/setup_database.rb
171
169
  - spec/support/test_classes.rb
172
170
  homepage: http://github.com/jerphaes/believer
173
- licenses:
171
+ licenses:
174
172
  - Apache License 2.0
175
173
  post_install_message:
176
174
  rdoc_options: []
177
-
178
- require_paths:
175
+ require_paths:
179
176
  - lib
180
- required_ruby_version: !ruby/object:Gem::Requirement
177
+ required_ruby_version: !ruby/object:Gem::Requirement
181
178
  none: false
182
- requirements:
183
- - - ">="
184
- - !ruby/object:Gem::Version
185
- hash: 55
186
- segments:
187
- - 1
188
- - 9
189
- - 2
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
190
182
  version: 1.9.2
191
- required_rubygems_version: !ruby/object:Gem::Requirement
183
+ required_rubygems_version: !ruby/object:Gem::Requirement
192
184
  none: false
193
- requirements:
194
- - - ">="
195
- - !ruby/object:Gem::Version
196
- hash: 3
197
- segments:
198
- - 0
199
- version: "0"
185
+ requirements:
186
+ - - ! '>='
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
200
189
  requirements: []
201
-
202
190
  rubyforge_project:
203
191
  rubygems_version: 1.8.25
204
192
  signing_key:
205
193
  specification_version: 3
206
194
  summary: CQL3 ORM
207
- test_files:
195
+ test_files:
208
196
  - spec/believer/base_spec.rb
209
197
  - spec/believer/callback_spec.rb
210
198
  - spec/believer/delete_spec.rb
199
+ - spec/believer/empty_result_spec.rb
211
200
  - spec/believer/environment_spec.rb
212
201
  - spec/believer/finder_methods_spec.rb
213
202
  - spec/believer/insert_spec.rb