datastax_rails 1.2.3 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.rdoc +20 -8
- data/config/schema.xml.erb +22 -19
- data/config/solrconfig.xml.erb +1 -1
- data/lib/cql-rb_extensions.rb +27 -0
- data/lib/datastax_rails.rb +13 -17
- data/lib/datastax_rails/associations/association.rb +1 -4
- data/lib/datastax_rails/associations/collection_proxy.rb +0 -13
- data/lib/datastax_rails/attribute_assignment.rb +28 -91
- data/lib/datastax_rails/attribute_methods.rb +109 -44
- data/lib/datastax_rails/attribute_methods/before_type_cast.rb +71 -0
- data/lib/datastax_rails/attribute_methods/dirty.rb +52 -11
- data/lib/datastax_rails/attribute_methods/primary_key.rb +87 -0
- data/lib/datastax_rails/attribute_methods/read.rb +120 -0
- data/lib/datastax_rails/attribute_methods/typecasting.rb +52 -21
- data/lib/datastax_rails/attribute_methods/write.rb +59 -0
- data/lib/datastax_rails/base.rb +227 -236
- data/lib/datastax_rails/cassandra_only_model.rb +25 -19
- data/lib/datastax_rails/column.rb +384 -0
- data/lib/datastax_rails/connection.rb +12 -13
- data/lib/datastax_rails/cql/alter_column_family.rb +0 -1
- data/lib/datastax_rails/cql/base.rb +15 -3
- data/lib/datastax_rails/cql/column_family.rb +2 -2
- data/lib/datastax_rails/cql/create_column_family.rb +7 -18
- data/lib/datastax_rails/cql/delete.rb +4 -9
- data/lib/datastax_rails/cql/insert.rb +2 -8
- data/lib/datastax_rails/cql/select.rb +4 -4
- data/lib/datastax_rails/cql/update.rb +8 -17
- data/lib/datastax_rails/dynamic_model.rb +98 -0
- data/lib/datastax_rails/payload_model.rb +19 -31
- data/lib/datastax_rails/persistence.rb +39 -54
- data/lib/datastax_rails/railtie.rb +1 -0
- data/lib/datastax_rails/reflection.rb +1 -1
- data/lib/datastax_rails/relation.rb +20 -20
- data/lib/datastax_rails/relation/batches.rb +18 -16
- data/lib/datastax_rails/relation/facet_methods.rb +1 -1
- data/lib/datastax_rails/relation/finder_methods.rb +6 -10
- data/lib/datastax_rails/relation/search_methods.rb +62 -48
- data/lib/datastax_rails/rsolr_client_wrapper.rb +1 -1
- data/lib/datastax_rails/schema/cassandra.rb +34 -62
- data/lib/datastax_rails/schema/migrator.rb +9 -24
- data/lib/datastax_rails/schema/solr.rb +13 -30
- data/lib/datastax_rails/schema_cache.rb +67 -0
- data/lib/datastax_rails/timestamps.rb +84 -11
- data/lib/datastax_rails/types/dirty_collection.rb +88 -0
- data/lib/datastax_rails/types/dynamic_list.rb +14 -0
- data/lib/datastax_rails/types/dynamic_map.rb +32 -0
- data/lib/datastax_rails/types/dynamic_set.rb +10 -0
- data/lib/datastax_rails/util/solr_repair.rb +4 -5
- data/lib/datastax_rails/validations.rb +6 -12
- data/lib/datastax_rails/validations/uniqueness.rb +0 -4
- data/lib/datastax_rails/version.rb +1 -1
- data/lib/datastax_rails/wide_storage_model.rb +13 -29
- data/lib/schema_migration.rb +4 -0
- data/spec/datastax_rails/associations_spec.rb +0 -1
- data/spec/datastax_rails/attribute_methods_spec.rb +9 -6
- data/spec/datastax_rails/base_spec.rb +26 -0
- data/spec/datastax_rails/column_spec.rb +238 -0
- data/spec/datastax_rails/cql/select_spec.rb +1 -1
- data/spec/datastax_rails/cql/update_spec.rb +2 -2
- data/spec/datastax_rails/persistence_spec.rb +29 -15
- data/spec/datastax_rails/relation/batches_spec.rb +5 -5
- data/spec/datastax_rails/relation/finder_methods_spec.rb +0 -20
- data/spec/datastax_rails/relation/search_methods_spec.rb +8 -0
- data/spec/datastax_rails/relation_spec.rb +7 -0
- data/spec/datastax_rails/schema/migrator_spec.rb +5 -10
- data/spec/datastax_rails/schema/solr_spec.rb +1 -1
- data/spec/datastax_rails/types/dynamic_list_spec.rb +20 -0
- data/spec/datastax_rails/types/dynamic_map_spec.rb +22 -0
- data/spec/datastax_rails/types/dynamic_set_spec.rb +16 -0
- data/spec/dummy/config/application.rb +2 -1
- data/spec/dummy/config/datastax.yml +6 -3
- data/spec/dummy/config/environments/development.rb +4 -5
- data/spec/dummy/config/environments/test.rb +0 -5
- data/spec/dummy/log/development.log +18 -0
- data/spec/dummy/log/test.log +36 -0
- data/spec/feature/dynamic_fields_spec.rb +9 -0
- data/spec/feature/overloaded_tables_spec.rb +24 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/default_consistency_shared_examples.rb +2 -2
- data/spec/support/models.rb +28 -14
- metadata +212 -188
- data/lib/datastax_rails/identity.rb +0 -64
- data/lib/datastax_rails/identity/abstract_key_factory.rb +0 -29
- data/lib/datastax_rails/identity/custom_key_factory.rb +0 -37
- data/lib/datastax_rails/identity/hashed_natural_key_factory.rb +0 -10
- data/lib/datastax_rails/identity/natural_key_factory.rb +0 -39
- data/lib/datastax_rails/identity/uuid_key_factory.rb +0 -27
- data/lib/datastax_rails/type.rb +0 -16
- data/lib/datastax_rails/types.rb +0 -9
- data/lib/datastax_rails/types/array_type.rb +0 -86
- data/lib/datastax_rails/types/base_type.rb +0 -42
- data/lib/datastax_rails/types/binary_type.rb +0 -19
- data/lib/datastax_rails/types/boolean_type.rb +0 -22
- data/lib/datastax_rails/types/date_type.rb +0 -23
- data/lib/datastax_rails/types/float_type.rb +0 -18
- data/lib/datastax_rails/types/integer_type.rb +0 -18
- data/lib/datastax_rails/types/string_type.rb +0 -16
- data/lib/datastax_rails/types/text_type.rb +0 -15
- data/lib/datastax_rails/types/time_type.rb +0 -23
- data/spec/datastax_rails/types/float_type_spec.rb +0 -31
- data/spec/datastax_rails/types/integer_type_spec.rb +0 -31
- data/spec/datastax_rails/types/time_type_spec.rb +0 -28
@@ -1,18 +0,0 @@
|
|
1
|
-
module DatastaxRails
|
2
|
-
module Types
|
3
|
-
class FloatType < BaseType
|
4
|
-
DEFAULTS = {:solr_type => 'float', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => false, :cassandra_type => 'float'}
|
5
|
-
REGEX = /\A[-+]?(\d+(\.\d+)?|\.\d+)\Z/
|
6
|
-
def encode(float)
|
7
|
-
return "-10191980.0" if float.blank?
|
8
|
-
raise ArgumentError.new("#{self} requires a Float. You passed #{float.to_s}") unless float.kind_of?(Float) || (float.kind_of?(String) && float.match(REGEX)) || float.kind_of?(Fixnum)
|
9
|
-
float.to_f.to_s
|
10
|
-
end
|
11
|
-
|
12
|
-
def decode(float)
|
13
|
-
return nil if float.blank? || float.to_s == '-10191980.0'
|
14
|
-
float.to_f
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module DatastaxRails
|
2
|
-
module Types
|
3
|
-
class IntegerType < BaseType
|
4
|
-
DEFAULTS = {:solr_type => 'int', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => false, :cassandra_type => 'int'}
|
5
|
-
REGEX = /\A[-+]?\d+\Z/
|
6
|
-
def encode(int)
|
7
|
-
return "-10191980" if int.blank?
|
8
|
-
raise ArgumentError.new("#{self} requires an Integer. You passed #{int.to_s}") unless int.kind_of?(Integer) || (int.kind_of?(String) && int.match(REGEX))
|
9
|
-
int.to_i.to_s
|
10
|
-
end
|
11
|
-
|
12
|
-
def decode(int)
|
13
|
-
return nil if int.blank? || int.to_i == -10191980
|
14
|
-
int.to_i
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module DatastaxRails
|
2
|
-
module Types
|
3
|
-
class StringType < BaseType
|
4
|
-
DEFAULTS = {:solr_type => 'string', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => true, :cassandra_type => 'text'}
|
5
|
-
def encode(str)
|
6
|
-
str = "" unless str
|
7
|
-
str.to_s
|
8
|
-
end
|
9
|
-
|
10
|
-
def wrap(record, name, value)
|
11
|
-
txt = (value.frozen? ? value.to_s.dup : value)
|
12
|
-
txt.respond_to?(:force_encoding) ? txt.force_encoding('UTF-8') : txt
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module DatastaxRails
|
2
|
-
module Types
|
3
|
-
class TextType < BaseType
|
4
|
-
DEFAULTS = {:solr_type => 'text', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => false, :tokenized => true, :fulltext => true, :cassandra_type => 'text'}
|
5
|
-
def encode(str)
|
6
|
-
str.to_s.dup
|
7
|
-
end
|
8
|
-
|
9
|
-
def wrap(record, name, value)
|
10
|
-
txt = (value.frozen? ? value.dup : value)
|
11
|
-
txt.respond_to?(:force_encoding) ? txt.force_encoding('UTF-8') : txt
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module DatastaxRails
|
2
|
-
module Types
|
3
|
-
class TimeType < BaseType
|
4
|
-
DEFAULTS = {:solr_type => 'date', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => false, :cassandra_type => 'timestamp'}
|
5
|
-
FORMAT = "%Y-%m-%dT%H:%M:%SZ"
|
6
|
-
|
7
|
-
def encode(time)
|
8
|
-
return unless time
|
9
|
-
raise ArgumentError.new("#{self} requires a Time") unless time.kind_of?(Time)
|
10
|
-
time.utc.strftime(FORMAT)
|
11
|
-
end
|
12
|
-
|
13
|
-
def decode(str)
|
14
|
-
return str if str.kind_of?(Time)
|
15
|
-
Time.zone.parse(str) rescue nil
|
16
|
-
end
|
17
|
-
|
18
|
-
def full_solr_range
|
19
|
-
'[* TO *]'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DatastaxRails::Types::FloatType do
|
4
|
-
before(:each) do
|
5
|
-
@coder = DatastaxRails::Types::FloatType.new
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "#encode" do
|
9
|
-
it "should store decimals as strings" do
|
10
|
-
@coder.encode(12.0).should eq("12.0")
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should raise an exception on improperly formatted strings" do
|
14
|
-
lambda { @coder.encode("foo") }.should raise_exception(ArgumentError)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should store a sentinel value for nils" do
|
18
|
-
@coder.encode(nil).should eq('-10191980.0')
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#decode" do
|
23
|
-
it "should return floats" do
|
24
|
-
@coder.decode("12.0").should be_within(0.1).of(12.0)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should return nil if the sentinel value is found" do
|
28
|
-
@coder.decode("-10191980.0").should be_nil
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DatastaxRails::Types::IntegerType do
|
4
|
-
before(:each) do
|
5
|
-
@coder = DatastaxRails::Types::IntegerType.new
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "#encode" do
|
9
|
-
it "should store integers as strings" do
|
10
|
-
@coder.encode(12).should eq("12")
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should raise an exception on improperly formatted strings" do
|
14
|
-
lambda { @coder.encode("foo") }.should raise_exception(ArgumentError)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should store a sentinel value for nils" do
|
18
|
-
@coder.encode(nil).should eq("-10191980")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#decode" do
|
23
|
-
it "should return integers" do
|
24
|
-
@coder.decode("12").should eq(12)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should return nil if the sentinel value is found" do
|
28
|
-
@coder.decode("-10191980").should be_nil
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe DatastaxRails::Types::TimeType do
|
4
|
-
let(:coder) { DatastaxRails::Types::TimeType.new }
|
5
|
-
let(:utc_time) { Time.utc(2013, 12, 11, 10, 9, 8) }
|
6
|
-
|
7
|
-
describe "#encode" do
|
8
|
-
let(:local_time) { Time.new(2011, 10, 9, 8, 7, 6, "-05:00") }
|
9
|
-
|
10
|
-
it { expect(coder.encode(nil)).to be_nil }
|
11
|
-
it { expect{coder.encode("bad time")}.to raise_error(ArgumentError) }
|
12
|
-
it { expect(coder.encode(utc_time)).to eq "2013-12-11T10:09:08Z" }
|
13
|
-
it { expect(coder.encode(local_time)).to eq "2011-10-09T13:07:06Z" }
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "#decode" do
|
17
|
-
let(:time) { "2013-12-11T10:09:08Z" }
|
18
|
-
|
19
|
-
it { expect(coder.decode(time)).to eq utc_time }
|
20
|
-
it { expect(coder.decode(utc_time)).to eq utc_time }
|
21
|
-
|
22
|
-
context "when timezone is not UTC" do
|
23
|
-
before(:each) { Time.zone = "Eastern Time (US & Canada)" }
|
24
|
-
|
25
|
-
it { expect(coder.decode(time)).to eq Time.new(2013, 12, 11, 5, 9, 8, '-05:00') }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|