datastax_rails 1.2.3 → 2.0.3
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.
- 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
|