gotime-cassandra_object 0.9.1 → 2.0.0

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 (49) hide show
  1. data/Gemfile +1 -1
  2. data/Gemfile.lock +70 -25
  3. data/Rakefile +11 -39
  4. data/gotime-cassandra_object.gemspec +6 -6
  5. data/lib/cassandra_object.rb +6 -12
  6. data/lib/cassandra_object/associations.rb +1 -1
  7. data/lib/cassandra_object/attributes.rb +53 -43
  8. data/lib/cassandra_object/base.rb +4 -17
  9. data/lib/cassandra_object/batches.rb +13 -0
  10. data/lib/cassandra_object/connection.rb +15 -0
  11. data/lib/cassandra_object/dirty.rb +19 -14
  12. data/lib/cassandra_object/finder_methods.rb +64 -0
  13. data/lib/cassandra_object/identity.rb +0 -1
  14. data/lib/cassandra_object/migrations.rb +3 -1
  15. data/lib/cassandra_object/persistence.rb +51 -94
  16. data/lib/cassandra_object/railtie.rb +11 -0
  17. data/lib/cassandra_object/tasks/{ks.rb → ks.rake} +0 -2
  18. data/lib/cassandra_object/validation.rb +11 -15
  19. data/{test → test-old}/active_model_test.rb +0 -0
  20. data/test-old/base_test.rb +4 -0
  21. data/{test → test-old}/basic_scenarios_test.rb +0 -0
  22. data/{test → test-old}/callbacks_test.rb +0 -0
  23. data/{test → test-old}/config/cassandra.in.sh +0 -0
  24. data/{test → test-old}/config/log4j.properties +0 -0
  25. data/{test → test-old}/config/storage-conf.xml +0 -0
  26. data/{test → test-old}/connection.rb +0 -0
  27. data/{test → test-old}/cursor_test.rb +0 -0
  28. data/{test → test-old}/dirty_test.rb +0 -0
  29. data/{test → test-old}/fixture_models.rb +0 -0
  30. data/{test → test-old}/identity/natural_key_factory_test.rb +0 -0
  31. data/{test → test-old}/index_test.rb +0 -0
  32. data/{test → test-old}/legacy/test_helper.rb +0 -0
  33. data/{test → test-old}/migration_test.rb +0 -0
  34. data/{test → test-old}/one_to_many_associations_test.rb +0 -0
  35. data/{test → test-old}/test_case.rb +0 -0
  36. data/test-old/test_helper.rb +16 -0
  37. data/{test → test-old}/time_test.rb +0 -0
  38. data/{test → test-old}/types_test.rb +0 -0
  39. data/{test → test-old}/validation_test.rb +0 -0
  40. data/{test → test-old}/z_mock_test.rb +0 -0
  41. data/test/batches_test.rb +15 -0
  42. data/test/connection_test.rb +17 -0
  43. data/test/finder_methods_test.rb +28 -0
  44. data/test/identity_test.rb +15 -0
  45. data/test/persistence_test.rb +17 -0
  46. data/test/test_helper.rb +21 -12
  47. metadata +75 -165
  48. data/lib/cassandra_object/find_each.rb +0 -28
  49. data/lib/cassandra_object/find_with_ids.rb +0 -24
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source :gemcutter
1
+ source "http://rubygems.org"
2
2
  gemspec
data/Gemfile.lock CHANGED
@@ -1,39 +1,87 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gotime-cassandra_object (0.8.1)
5
- activemodel (~> 3)
6
- activesupport (~> 3)
7
- cassandra
4
+ gotime-cassandra_object (0.9.1)
5
+ cassandra (~> 0.11.3)
6
+ rails (~> 3.0)
8
7
 
9
8
  GEM
10
9
  remote: http://rubygems.org/
11
10
  specs:
12
- activemodel (3.0.5)
13
- activesupport (= 3.0.5)
11
+ abstract (1.0.0)
12
+ actionmailer (3.0.9)
13
+ actionpack (= 3.0.9)
14
+ mail (~> 2.2.19)
15
+ actionpack (3.0.9)
16
+ activemodel (= 3.0.9)
17
+ activesupport (= 3.0.9)
14
18
  builder (~> 2.1.2)
15
- i18n (~> 0.4)
16
- activesupport (3.0.5)
19
+ erubis (~> 2.6.6)
20
+ i18n (~> 0.5.0)
21
+ rack (~> 1.2.1)
22
+ rack-mount (~> 0.6.14)
23
+ rack-test (~> 0.5.7)
24
+ tzinfo (~> 0.3.23)
25
+ activemodel (3.0.9)
26
+ activesupport (= 3.0.9)
27
+ builder (~> 2.1.2)
28
+ i18n (~> 0.5.0)
29
+ activerecord (3.0.9)
30
+ activemodel (= 3.0.9)
31
+ activesupport (= 3.0.9)
32
+ arel (~> 2.0.10)
33
+ tzinfo (~> 0.3.23)
34
+ activeresource (3.0.9)
35
+ activemodel (= 3.0.9)
36
+ activesupport (= 3.0.9)
37
+ activesupport (3.0.9)
38
+ arel (2.0.10)
17
39
  builder (2.1.2)
18
- cassandra (0.9.0)
40
+ cassandra (0.11.3)
19
41
  json
20
42
  rake
21
43
  simple_uuid (>= 0.1.0)
22
- thrift_client (>= 0.6.0)
23
- git (1.2.5)
44
+ thrift_client (>= 0.6.3)
45
+ erubis (2.6.6)
46
+ abstract (>= 1.0.0)
24
47
  i18n (0.5.0)
25
- jeweler (1.5.1)
26
- bundler (~> 1.0.0)
27
- git (>= 1.2.5)
28
- rake
29
- json (1.5.1)
30
- rake (0.8.7)
31
- rcov (0.9.9)
32
- shoulda (2.11.3)
48
+ json (1.5.3)
49
+ mail (2.2.19)
50
+ activesupport (>= 2.3.6)
51
+ i18n (>= 0.4.0)
52
+ mime-types (~> 1.16)
53
+ treetop (~> 1.4.8)
54
+ mime-types (1.16)
55
+ polyglot (0.3.1)
56
+ rack (1.2.3)
57
+ rack-mount (0.6.14)
58
+ rack (>= 1.0.0)
59
+ rack-test (0.5.7)
60
+ rack (>= 1.0)
61
+ rails (3.0.9)
62
+ actionmailer (= 3.0.9)
63
+ actionpack (= 3.0.9)
64
+ activerecord (= 3.0.9)
65
+ activeresource (= 3.0.9)
66
+ activesupport (= 3.0.9)
67
+ bundler (~> 1.0)
68
+ railties (= 3.0.9)
69
+ railties (3.0.9)
70
+ actionpack (= 3.0.9)
71
+ activesupport (= 3.0.9)
72
+ rake (>= 0.8.7)
73
+ rdoc (~> 3.4)
74
+ thor (~> 0.14.4)
75
+ rake (0.9.2)
76
+ rdoc (3.8)
33
77
  simple_uuid (0.1.1)
34
- thrift (0.5.0)
35
- thrift_client (0.6.0)
36
- thrift (~> 0.5.0)
78
+ thor (0.14.6)
79
+ thrift (0.6.0)
80
+ thrift_client (0.6.3)
81
+ thrift (~> 0.6.0)
82
+ treetop (1.4.9)
83
+ polyglot (>= 0.3.1)
84
+ tzinfo (0.3.29)
37
85
 
38
86
  PLATFORMS
39
87
  ruby
@@ -41,6 +89,3 @@ PLATFORMS
41
89
  DEPENDENCIES
42
90
  bundler (~> 1.0.0)
43
91
  gotime-cassandra_object!
44
- jeweler (~> 1.5.1)
45
- rcov
46
- shoulda
data/Rakefile CHANGED
@@ -1,43 +1,15 @@
1
- require 'bundler'
2
- Bundler::GemHelper.install_tasks
3
-
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rake'
4
4
  require 'rake/testtask'
5
- Rake::TestTask.new(:test) do |test|
6
- test.libs << 'lib' << 'test'
7
- test.pattern = 'test/**/test_*.rb'
8
- test.verbose = true
9
- end
10
-
11
- require 'rcov/rcovtask'
12
- Rcov::RcovTask.new do |test|
13
- test.libs << 'test'
14
- test.pattern = 'test/**/test_*.rb'
15
- test.verbose = true
16
- end
17
-
18
- task :default => :test
19
-
20
- require 'rake/rdoctask'
21
- Rake::RDocTask.new do |rdoc|
22
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
23
-
24
- rdoc.rdoc_dir = 'rdoc'
25
- rdoc.title = "cassandra_object #{version}"
26
- rdoc.rdoc_files.include('README*')
27
- rdoc.rdoc_files.include('lib/**/*.rb')
28
- end
29
5
 
30
- task :cleanup do
31
- unless defined?(CassandraObject)
32
- $: << 'test'
33
- $: << 'lib'
34
- require 'test_helper'
35
- end
36
- puts "Clearing keyspace! ..."
37
- CassandraObject::Base.connection.clear_keyspace!
38
- puts "Cleared"
39
- end
6
+ # require File.expand_path('../lib/cassandra_object', __FILE__)
40
7
 
41
- task :default=>[:test, :cleanup] do
42
- end
8
+ task default: :test
43
9
 
10
+ Rake::TestTask.new(:test) do |t|
11
+ t.libs << 'lib'
12
+ t.libs << 'test'
13
+ t.pattern = 'test/**/*_test.rb'
14
+ t.verbose = true
15
+ end
@@ -2,25 +2,25 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'gotime-cassandra_object'
5
- s.version = '0.9.1'
5
+ s.version = '2.0.0'
6
6
  s.description = 'Cassandra ActiveModel'
7
7
  s.summary = 'Cassandra ActiveModel'
8
+
9
+ s.required_ruby_version = '>= 1.9.2'
8
10
  s.required_rubygems_version = '>= 1.3.5'
11
+
9
12
  s.authors = ["Michael Koziarski", "gotime"]
10
13
  s.email = 'gems@gotime.com'
11
14
  s.homepage = 'http://github.com/gotime/cassandra_object'
15
+
12
16
  s.extra_rdoc_files = ["README.markdown"]
13
17
  s.files = `git ls-files`.split("\n")
14
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
19
  s.require_paths = ['lib']
16
20
 
17
- s.add_runtime_dependency('activesupport', "~> 3.0")
18
- s.add_runtime_dependency('activemodel', "~> 3.0")
21
+ s.add_runtime_dependency('rails', "~> 3.0")
19
22
  s.add_runtime_dependency('cassandra', "~> 0.11.3")
20
23
 
21
- s.add_development_dependency('shoulda')
22
24
  s.add_development_dependency('bundler', "~> 1.0.0")
23
- s.add_development_dependency('jeweler', "~> 1.5.1")
24
- s.add_development_dependency('rcov')
25
25
  end
26
26
 
@@ -1,12 +1,10 @@
1
- require 'rubygems'
2
- require 'i18n'
3
- require 'active_support'
4
- require 'active_model'
1
+ require 'rails/all'
5
2
 
6
3
  module CassandraObject
7
4
  extend ActiveSupport::Autoload
8
5
 
9
6
  autoload :Base
7
+ autoload :Connection
10
8
  autoload :Attributes
11
9
  autoload :Dirty
12
10
  autoload :Consistency
@@ -22,8 +20,8 @@ module CassandraObject
22
20
  autoload :Collection
23
21
  autoload :Types
24
22
  autoload :Mocking
25
- autoload :FindEach
26
- autoload :FindWithIds
23
+ autoload :Batches
24
+ autoload :FinderMethods
27
25
  autoload :Timestamps
28
26
 
29
27
  autoload :Schema
@@ -32,11 +30,7 @@ module CassandraObject
32
30
  extend ActiveSupport::Autoload
33
31
  autoload :Keyspace
34
32
  autoload :ColumnFamily
35
-
36
- require 'cassandra_object/tasks/ks'
37
- end
38
-
39
- module Generators
40
- require 'cassandra_object/generators/migration_generator'
41
33
  end
42
34
  end
35
+
36
+ require 'cassandra_object/railtie'
@@ -17,7 +17,7 @@ module CassandraObject
17
17
  end
18
18
 
19
19
  def relationships_column_family
20
- @relationships_column_family || "#{column_family.singularize}Relationships"
20
+ @relationships_column_family || "#{name}Relationships"
21
21
  end
22
22
 
23
23
  def column_family_configuration
@@ -1,6 +1,5 @@
1
1
  module CassandraObject
2
2
  class Attribute
3
-
4
3
  attr_reader :name, :converter, :expected_type
5
4
  def initialize(name, owner_class, converter, expected_type, options)
6
5
  @name = name.to_s
@@ -14,10 +13,6 @@ module CassandraObject
14
13
  return value if value.nil?
15
14
  value.kind_of?(expected_type) ? value : converter.decode(value)
16
15
  end
17
-
18
- def define_methods!
19
- @owner_class.define_attribute_methods(true)
20
- end
21
16
  end
22
17
 
23
18
  module Attributes
@@ -26,68 +21,83 @@ module CassandraObject
26
21
 
27
22
  module ClassMethods
28
23
  def attribute(name, options)
29
-
24
+ if model_attributes.empty?
25
+ self.model_attributes = {}.with_indifferent_access
26
+ end
27
+
30
28
  unless type_mapping = attribute_types[options[:type]]
31
- type_mapping = { :expected_type => options[:type],
32
- :converter => options[:converter] }.with_indifferent_access
29
+ type_mapping = {
30
+ expected_type: options[:type],
31
+ converter: options[:converter]
32
+ }.with_indifferent_access
33
33
  end
34
-
35
- new_attr = Attribute.new(name, self, type_mapping[:converter], type_mapping[:expected_type], options)
36
- write_inheritable_hash(:model_attributes, {name => new_attr}.with_indifferent_access)
37
- new_attr.define_methods!
34
+
35
+ model_attributes[name] = Attribute.new(name, self, type_mapping[:converter], type_mapping[:expected_type], options)
38
36
  end
39
37
 
40
- def define_attribute_methods(force = false)
41
- return unless model_attributes
42
- undefine_attribute_methods if force
38
+ def define_attribute_methods
43
39
  super(model_attributes.keys)
44
40
  end
45
-
41
+
46
42
  def register_attribute_type(name, expected_type, converter)
47
- attribute_types[name] = { :expected_type => expected_type, :converter => converter }.with_indifferent_access
43
+ attribute_types[name] = { expected_type: expected_type, converter: converter }.with_indifferent_access
48
44
  end
49
45
  end
50
46
 
51
47
  included do
52
- class_inheritable_hash :model_attributes
48
+ class_attribute :model_attributes
49
+ self.model_attributes = {}.with_indifferent_access
50
+
53
51
  attribute_method_suffix("", "=")
54
52
 
55
53
  cattr_accessor :attribute_types
56
54
  self.attribute_types = {}.with_indifferent_access
57
55
  end
58
56
 
59
- module InstanceMethods
60
- def write_attribute(name, value)
61
- if ma = self.class.model_attributes[name]
62
- @attributes[name.to_s] = ma.check_value!(value)
63
- else
64
- raise NoMethodError, "Unknown attribute #{name.inspect}"
65
- end
57
+ def write_attribute(name, value)
58
+ if ma = self.class.model_attributes[name]
59
+ @attributes[name.to_s] = ma.check_value!(value)
60
+ else
61
+ raise NoMethodError, "Unknown attribute #{name.inspect}"
66
62
  end
63
+ end
64
+
65
+ def read_attribute(name)
66
+ @attributes[name.to_s]
67
+ end
67
68
 
68
- def read_attribute(name)
69
- @attributes[name.to_s]
69
+ def attributes=(attributes)
70
+ attributes.each do |(name, value)|
71
+ send("#{name}=", value)
70
72
  end
73
+ end
71
74
 
72
- def attributes=(attributes)
73
- attributes.each do |(name, value)|
74
- send("#{name}=", value)
75
- end
75
+ def method_missing(method_id, *args, &block)
76
+ if !self.class.attribute_methods_generated?
77
+ self.class.define_attribute_methods
78
+ send(method_id, *args, &block)
79
+ else
80
+ super
76
81
  end
82
+ end
77
83
 
78
- protected
79
- def attribute_method?(name)
80
- !!model_attributes[name.to_sym]
81
- end
84
+ def respond_to?(*args)
85
+ self.class.define_attribute_methods unless self.class.attribute_methods_generated?
86
+ super
87
+ end
82
88
 
83
- private
84
- def attribute(name)
85
- read_attribute(name.to_sym)
86
- end
89
+ protected
90
+ def attribute_method?(name)
91
+ !!model_attributes[name.to_sym]
92
+ end
87
93
 
88
- def attribute=(name, value)
89
- write_attribute(name.to_sym, value)
90
- end
91
- end
94
+ private
95
+ def attribute(name)
96
+ read_attribute(name.to_sym)
97
+ end
98
+
99
+ def attribute=(name, value)
100
+ write_attribute(name.to_sym, value)
101
+ end
92
102
  end
93
103
  end
@@ -1,24 +1,10 @@
1
- require 'cassandra/0.7'
1
+ require 'cassandra/0.8'
2
2
  require 'set'
3
3
 
4
4
  require 'cassandra_object/log_subscriber'
5
5
 
6
6
  module CassandraObject
7
7
  class Base
8
- class_inheritable_accessor :connection
9
- class_inheritable_writer :connection_class
10
-
11
- def self.connection_class
12
- read_inheritable_attribute(:connection_class) || Cassandra
13
- end
14
-
15
- module ConnectionManagement
16
- def establish_connection(*args)
17
- self.connection = connection_class.new(*args)
18
- end
19
- end
20
- extend ConnectionManagement
21
-
22
8
  module Naming
23
9
  def column_family=(column_family)
24
10
  @column_family = column_family
@@ -43,6 +29,7 @@ module CassandraObject
43
29
  extend ActiveModel::Naming
44
30
  extend ActiveSupport::DescendantsTracker
45
31
 
32
+ include Connection
46
33
  include Callbacks
47
34
  include Identity
48
35
  include Attributes
@@ -51,8 +38,8 @@ module CassandraObject
51
38
  include Dirty
52
39
  include Validation
53
40
  include Associations
54
- include FindEach
55
- include FindWithIds
41
+ include Batches
42
+ include FinderMethods
56
43
 
57
44
  attr_reader :attributes
58
45
  attr_accessor :key
@@ -0,0 +1,13 @@
1
+ module CassandraObject
2
+ module Batches
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def find_each
7
+ connection.each(column_family) do |k, v|
8
+ yield instantiate(k, v)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end