rom-cassandra 0.0.1

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 (82) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +2 -0
  3. data/.gitignore +9 -0
  4. data/.metrics +9 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +2 -0
  7. data/.travis.yml +26 -0
  8. data/.yardopts +3 -0
  9. data/CHANGELOG.md +3 -0
  10. data/Gemfile +7 -0
  11. data/Guardfile +14 -0
  12. data/LICENSE +21 -0
  13. data/README.md +83 -0
  14. data/Rakefile +34 -0
  15. data/config/metrics/STYLEGUIDE +230 -0
  16. data/config/metrics/cane.yml +5 -0
  17. data/config/metrics/churn.yml +6 -0
  18. data/config/metrics/flay.yml +2 -0
  19. data/config/metrics/metric_fu.yml +14 -0
  20. data/config/metrics/reek.yml +1 -0
  21. data/config/metrics/roodi.yml +24 -0
  22. data/config/metrics/rubocop.yml +84 -0
  23. data/config/metrics/saikuro.yml +3 -0
  24. data/config/metrics/simplecov.yml +6 -0
  25. data/config/metrics/yardstick.yml +37 -0
  26. data/lib/rom-cassandra.rb +3 -0
  27. data/lib/rom/cassandra.rb +33 -0
  28. data/lib/rom/cassandra/commands.rb +53 -0
  29. data/lib/rom/cassandra/commands/batch.rb +54 -0
  30. data/lib/rom/cassandra/commands/create.rb +38 -0
  31. data/lib/rom/cassandra/commands/delete.rb +38 -0
  32. data/lib/rom/cassandra/commands/update.rb +38 -0
  33. data/lib/rom/cassandra/dataset.rb +102 -0
  34. data/lib/rom/cassandra/gateway.rb +115 -0
  35. data/lib/rom/cassandra/migrations.rb +30 -0
  36. data/lib/rom/cassandra/migrations/generator.rb +68 -0
  37. data/lib/rom/cassandra/migrations/generator/migration.erb +32 -0
  38. data/lib/rom/cassandra/migrations/logger.rb +28 -0
  39. data/lib/rom/cassandra/migrations/migration.rb +107 -0
  40. data/lib/rom/cassandra/migrations/migrator.rb +103 -0
  41. data/lib/rom/cassandra/migrations/runner.rb +119 -0
  42. data/lib/rom/cassandra/migrations/runner_down.rb +49 -0
  43. data/lib/rom/cassandra/migrations/runner_up.rb +50 -0
  44. data/lib/rom/cassandra/query.rb +43 -0
  45. data/lib/rom/cassandra/relation.rb +88 -0
  46. data/lib/rom/cassandra/session.rb +50 -0
  47. data/lib/rom/cassandra/tasks.rb +6 -0
  48. data/lib/rom/cassandra/version.rb +15 -0
  49. data/lib/tasks/db.rake +16 -0
  50. data/rom-cassandra.gemspec +33 -0
  51. data/spec/config/reset_cluster.rb +28 -0
  52. data/spec/config/rom.rb +3 -0
  53. data/spec/config/test_module.rb +7 -0
  54. data/spec/integration/batch_spec.rb +36 -0
  55. data/spec/integration/create_spec.rb +33 -0
  56. data/spec/integration/delete_spec.rb +33 -0
  57. data/spec/integration/migrate/20150825142003_create_users.rb +24 -0
  58. data/spec/integration/migrate/20150825142024_create_logs.rb +17 -0
  59. data/spec/integration/migrate_spec.rb +47 -0
  60. data/spec/integration/relation_spec.rb +27 -0
  61. data/spec/integration/update_spec.rb +33 -0
  62. data/spec/shared/fake_migrate_folder.rb +21 -0
  63. data/spec/shared/users.rb +20 -0
  64. data/spec/spec_helper.rb +17 -0
  65. data/spec/unit/commands/batch_spec.rb +86 -0
  66. data/spec/unit/commands/create_spec.rb +77 -0
  67. data/spec/unit/commands/delete_spec.rb +77 -0
  68. data/spec/unit/commands/update_spec.rb +77 -0
  69. data/spec/unit/dataset_spec.rb +130 -0
  70. data/spec/unit/gateway_spec.rb +140 -0
  71. data/spec/unit/migrations/generator_spec.rb +31 -0
  72. data/spec/unit/migrations/logger_spec.rb +21 -0
  73. data/spec/unit/migrations/migration_spec.rb +59 -0
  74. data/spec/unit/migrations/migrator_spec.rb +120 -0
  75. data/spec/unit/migrations/runner_down_spec.rb +65 -0
  76. data/spec/unit/migrations/runner_spec.rb +142 -0
  77. data/spec/unit/migrations/runner_up_spec.rb +67 -0
  78. data/spec/unit/query_spec.rb +21 -0
  79. data/spec/unit/relation_spec.rb +142 -0
  80. data/spec/unit/session_spec.rb +55 -0
  81. data/spec/unit/tasks/create_migration_spec.rb +41 -0
  82. metadata +242 -0
@@ -0,0 +1,5 @@
1
+ ---
2
+ abc_max: "10"
3
+ line_length: "80"
4
+ no_doc: "y"
5
+ no_readme: "y"
@@ -0,0 +1,6 @@
1
+ ---
2
+ ignore_files:
3
+ - spec
4
+ - config
5
+ minimum_churn_count: 0
6
+ start_date: "1 year ago"
@@ -0,0 +1,2 @@
1
+ ---
2
+ minimum_score: 8
@@ -0,0 +1,14 @@
1
+ ---
2
+ folders: # The list of folders to be used by any metric.
3
+ - lib
4
+ metrics: # The list of allowed metrics. The other metrics are disabled.
5
+ - cane
6
+ - churn
7
+ - flay
8
+ - flog
9
+ - reek
10
+ - roodi
11
+ - saikuro
12
+ format: html
13
+ output: tmp/metric_fu
14
+ verbose: false
@@ -0,0 +1 @@
1
+ ---
@@ -0,0 +1,24 @@
1
+ ---
2
+ AssignmentInConditionalCheck:
3
+ CaseMissingElseCheck:
4
+ ClassLineCountCheck:
5
+ line_count: 200
6
+ ClassNameCheck:
7
+ pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/
8
+ ClassVariableCheck:
9
+ CyclomaticComplexityBlockCheck:
10
+ complexity: 3
11
+ CyclomaticComplexityMethodCheck:
12
+ complexity: 4
13
+ EmptyRescueBodyCheck:
14
+ ForLoopCheck:
15
+ MethodLineCountCheck:
16
+ line_count: 6
17
+ MethodNameCheck:
18
+ pattern: !ruby/regexp /^[\||\^|\&|\!]$|^[_a-z<>=\[|+-\/\*`]+[_a-z0-9_<>=~@\[\]]*[=!\?]?$/
19
+ ModuleLineCountCheck:
20
+ line_count: 200
21
+ ModuleNameCheck:
22
+ pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/
23
+ ParameterNumberCheck:
24
+ parameter_count: 4
@@ -0,0 +1,84 @@
1
+ ---
2
+ # settings added by the 'hexx-suit' module
3
+ # output: "tmp/rubocop"
4
+ # format: "html"
5
+
6
+ AllCops:
7
+ Exclude:
8
+ - '**/db/schema.rb'
9
+
10
+ Lint/HandleExceptions:
11
+ Exclude:
12
+ - '**/*_spec.rb'
13
+
14
+ Lint/RescueException:
15
+ Exclude:
16
+ - '**/*_spec.rb'
17
+
18
+ Metrics/LineLength:
19
+ Exclude:
20
+ - '**/spec/config/*.rb' # allow long CQL statements
21
+ - '**/*_spec.rb'
22
+
23
+ Metrics/MethodLength:
24
+ Exclude:
25
+ - '**/integration/migrate/*.rb' # allow long migrations
26
+
27
+ Style/AccessorMethodName:
28
+ Exclude:
29
+ - '**/*_spec.rb'
30
+
31
+ Style/AsciiComments:
32
+ Enabled: false
33
+
34
+ Style/ClassAndModuleChildren:
35
+ Enabled: false
36
+
37
+ Style/Documentation:
38
+ Enabled: false
39
+
40
+ Style/EmptyLinesAroundBlockBody:
41
+ Enabled: false
42
+
43
+ Style/EmptyLinesAroundClassBody:
44
+ Enabled: false
45
+
46
+ Style/EmptyLinesAroundMethodBody:
47
+ Enabled: false
48
+
49
+ Style/EmptyLinesAroundModuleBody:
50
+ Enabled: false
51
+
52
+ Style/EmptyLineBetweenDefs:
53
+ Enabled: false
54
+
55
+ Style/FileName:
56
+ Enabled: false
57
+
58
+ Style/NumericLiterals:
59
+ Enabled: false
60
+
61
+ Style/RaiseArgs:
62
+ EnforcedStyle: compact
63
+
64
+ Style/SingleLineMethods:
65
+ Exclude:
66
+ - '**/*_spec.rb'
67
+
68
+ Style/SingleSpaceBeforeFirstArg:
69
+ Enabled: false
70
+
71
+ Style/SpecialGlobalVars:
72
+ Exclude:
73
+ - '**/Gemfile'
74
+ - '**/*.gemspec'
75
+
76
+ Style/StringLiterals:
77
+ EnforcedStyle: double_quotes
78
+
79
+ Style/StringLiteralsInInterpolation:
80
+ EnforcedStyle: double_quotes
81
+
82
+ Style/TrivialAccessors:
83
+ Exclude:
84
+ - '**/*_spec.rb'
@@ -0,0 +1,3 @@
1
+ ---
2
+ warn_cyclo: 3
3
+ error_cyclo: 4
@@ -0,0 +1,6 @@
1
+ ---
2
+ output: tmp/coverage
3
+ filters: # The list of paths to be excluded from coverage checkup
4
+ - "spec/"
5
+ - "config/"
6
+ groups: []
@@ -0,0 +1,37 @@
1
+ ---
2
+ # Settings added by the 'hexx-suit' gem
3
+ output: "tmp/yardstick/output.log"
4
+ path: "lib/**/*.rb"
5
+ rules:
6
+ ApiTag::Presence:
7
+ enabled: true
8
+ exclude: []
9
+ ApiTag::Inclusion:
10
+ enabled: true
11
+ exclude: []
12
+ ApiTag::ProtectedMethod:
13
+ enabled: true
14
+ exclude: []
15
+ ApiTag::PrivateMethod:
16
+ enabled: false
17
+ exclude: []
18
+ ExampleTag:
19
+ enabled: true
20
+ exclude: []
21
+ ReturnTag:
22
+ enabled: true
23
+ exclude: []
24
+ Summary::Presence:
25
+ enabled: true
26
+ exclude: []
27
+ Summary::Length:
28
+ enabled: true
29
+ exclude: []
30
+ Summary::Delimiter:
31
+ enabled: true
32
+ exclude: []
33
+ Summary::SingleLine:
34
+ enabled: true
35
+ exclude: []
36
+ threshold: 100
37
+ verbose: false
@@ -0,0 +1,3 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "rom/cassandra"
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ require "rom"
4
+
5
+ # Ruby Object Mapper
6
+ #
7
+ # @see http://rom-rb.org ROM homepage
8
+ #
9
+ module ROM
10
+
11
+ # Apache Cassandra support for ROM
12
+ #
13
+ # @see http://cassandra.apache.org/ Apache Cassandra project
14
+ # @see http://datastax.github.io/ruby-driver/ Ruby driver for Cassandra
15
+ # @see http://github.com/nepalez/query_builder CQL query builder
16
+ #
17
+ module Cassandra
18
+
19
+ require_relative "cassandra/session"
20
+ require_relative "cassandra/query"
21
+
22
+ require_relative "cassandra/dataset"
23
+ require_relative "cassandra/gateway"
24
+ require_relative "cassandra/relation"
25
+ require_relative "cassandra/commands"
26
+
27
+ require_relative "cassandra/migrations"
28
+
29
+ end # module Cassandra
30
+
31
+ register_adapter(:cassandra, Cassandra)
32
+
33
+ end # module ROM
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ module ROM::Cassandra
4
+
5
+ # The collection of Cassandra-specific ROM commands
6
+ #
7
+ # @api public
8
+ #
9
+ module Commands
10
+
11
+ # @private
12
+ def self.included(klass)
13
+ klass.__send__ :adapter, :cassandra
14
+ klass.__send__ :option, :initial, default: true
15
+ end
16
+
17
+ # Restricts the relation by a corresponding request
18
+ #
19
+ def initialize(*)
20
+ super
21
+ @relation = relation.public_send(restriction) if options.fetch(:initial)
22
+ end
23
+
24
+ # Implements the execute method of the `ROM::Command` abstract class
25
+ #
26
+ # @yield the block to specify the statement.
27
+ #
28
+ # @return [Array]
29
+ # The empty array (Cassandra doesn't select rows when writes data).
30
+ #
31
+ def execute(*, &block)
32
+ (block_given? ? instance_eval(&block) : self).to_a
33
+ end
34
+
35
+ private
36
+
37
+ def method_missing(name, *args)
38
+ updated_relation = relation.public_send(name, *args)
39
+ self.class.new updated_relation, initial: nil
40
+ end
41
+
42
+ def respond_to_missing?(name, *)
43
+ relation.respond_to? name
44
+ end
45
+
46
+ end # module Commands
47
+
48
+ require_relative "commands/create"
49
+ require_relative "commands/update"
50
+ require_relative "commands/delete"
51
+ require_relative "commands/batch"
52
+
53
+ end # module ROM::Cassandra
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ module ROM::Cassandra
4
+
5
+ module Commands
6
+
7
+ # Implements the cassandra-specific Batch command
8
+ #
9
+ # @example
10
+ # class Batch < ROM::Cassandra::Batch
11
+ # relation :items
12
+ # register_as :batch
13
+ #
14
+ # def execute
15
+ # super {
16
+ # self
17
+ # .add(keyspace(:domain).table(:items).delete.where(id: 1))
18
+ # .add("INSERT INTO logs.items (id, text) VALUES (1, 'deleted');")
19
+ # }
20
+ # end
21
+ # end
22
+ #
23
+ # rom.command(:users).batch.call
24
+ #
25
+ # @api public
26
+ #
27
+ class Batch < ROM::Command
28
+
29
+ include Commands
30
+
31
+ # Returns the keyspace context for lazy queries.
32
+ #
33
+ # The method can be used within a block of [#execute] to prepare
34
+ # commands for adding to the batch.
35
+ #
36
+ # @param [#to_s] name The name of the keyspace
37
+ #
38
+ # @return [ROM::Cassandra::Query]
39
+ #
40
+ def keyspace(name)
41
+ Query.new.keyspace(name)
42
+ end
43
+
44
+ private
45
+
46
+ def restriction
47
+ :batch_query
48
+ end
49
+
50
+ end # class Create
51
+
52
+ end # module Commands
53
+
54
+ end # module ROM::Cassandra
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ module ROM::Cassandra
4
+
5
+ module Commands
6
+
7
+ # Implements the cassandra-specific Create command
8
+ #
9
+ # @example
10
+ # class CreateName < ROM::Commands::Create[:cassandra]
11
+ # relation :items
12
+ # register_as :create
13
+ #
14
+ # def execute(id, name)
15
+ # super { insert(id: id, name: name).using(consistency: :quorum) }
16
+ # end
17
+ # end
18
+ #
19
+ # create = rom.command(:users).create
20
+ # create.call(1, "Andrew")
21
+ #
22
+ # @api public
23
+ #
24
+ class Create < ROM::Commands::Create
25
+
26
+ include Commands
27
+
28
+ private
29
+
30
+ def restriction
31
+ :insert_query
32
+ end
33
+
34
+ end # class Create
35
+
36
+ end # module Commands
37
+
38
+ end # module ROM::Cassandra
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ module ROM::Cassandra
4
+
5
+ module Commands
6
+
7
+ # Implements the cassandra-specific Delete command
8
+ #
9
+ # @example
10
+ # class DeleteColumns < ROM::Commands::Delete[:cassandra]
11
+ # dataset(:users)
12
+ # register_as(:delete_columns)
13
+ #
14
+ # def execute(id, *cols)
15
+ # super { delete(*cols).where(id: id).using(consistency: :quorum) }
16
+ # end
17
+ # end
18
+ #
19
+ # delete_columns = rom.command(:users).delete_columns
20
+ # delete_columns.call(1, :text)
21
+ #
22
+ # @api public
23
+ #
24
+ class Delete < ROM::Commands::Delete
25
+
26
+ include Commands
27
+
28
+ private
29
+
30
+ def restriction
31
+ :delete_query
32
+ end
33
+
34
+ end # class Delete
35
+
36
+ end # module Commands
37
+
38
+ end # module ROM::Cassandra
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ module ROM::Cassandra
4
+
5
+ module Commands
6
+
7
+ # Implements the cassandra-specific Update command
8
+ #
9
+ # @example
10
+ # class UpdateName < ROM::Commands::Update[:cassandra]
11
+ # relation :items
12
+ # register_as :update_name
13
+ #
14
+ # def execture(id, name)
15
+ # super { set(name: name).where(id: id).using(consistency: :quorum) }
16
+ # end
17
+ # end
18
+ #
19
+ # update_name = rom.command(:users).update_name
20
+ # update_name.call(1, "Andrew")
21
+ #
22
+ # @api public
23
+ #
24
+ class Update < ROM::Commands::Update
25
+
26
+ include Commands
27
+
28
+ private
29
+
30
+ def restriction
31
+ :update_query
32
+ end
33
+
34
+ end # class Create
35
+
36
+ end # module Commands
37
+
38
+ end # module ROM::Cassandra