query_builder 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +2 -0
- data/.gitignore +9 -0
- data/.metrics +9 -0
- data/.rspec +2 -0
- data/.rubocop.yml +2 -0
- data/.travis.yml +25 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +7 -0
- data/Guardfile +14 -0
- data/LICENSE +21 -0
- data/README.md +95 -0
- data/Rakefile +34 -0
- data/config/metrics/STYLEGUIDE +230 -0
- data/config/metrics/cane.yml +5 -0
- data/config/metrics/churn.yml +6 -0
- data/config/metrics/flay.yml +2 -0
- data/config/metrics/metric_fu.yml +14 -0
- data/config/metrics/reek.yml +1 -0
- data/config/metrics/roodi.yml +24 -0
- data/config/metrics/rubocop.yml +80 -0
- data/config/metrics/saikuro.yml +3 -0
- data/config/metrics/simplecov.yml +6 -0
- data/config/metrics/yardstick.yml +37 -0
- data/lib/query_builder.rb +9 -0
- data/lib/query_builder/core.rb +19 -0
- data/lib/query_builder/core/attribute.rb +54 -0
- data/lib/query_builder/core/attribute_error.rb +25 -0
- data/lib/query_builder/core/base.rb +102 -0
- data/lib/query_builder/core/clause.rb +46 -0
- data/lib/query_builder/core/statement.rb +55 -0
- data/lib/query_builder/cql.rb +80 -0
- data/lib/query_builder/cql/contexts.rb +21 -0
- data/lib/query_builder/cql/contexts/aggregate.rb +42 -0
- data/lib/query_builder/cql/contexts/column.rb +59 -0
- data/lib/query_builder/cql/contexts/field.rb +48 -0
- data/lib/query_builder/cql/contexts/function.rb +46 -0
- data/lib/query_builder/cql/contexts/index.rb +44 -0
- data/lib/query_builder/cql/contexts/keyspace.rb +107 -0
- data/lib/query_builder/cql/contexts/permission.rb +59 -0
- data/lib/query_builder/cql/contexts/role.rb +51 -0
- data/lib/query_builder/cql/contexts/table.rb +140 -0
- data/lib/query_builder/cql/contexts/trigger.rb +42 -0
- data/lib/query_builder/cql/contexts/type.rb +52 -0
- data/lib/query_builder/cql/contexts/user.rb +53 -0
- data/lib/query_builder/cql/modifiers.rb +61 -0
- data/lib/query_builder/cql/modifiers/add_column.rb +50 -0
- data/lib/query_builder/cql/modifiers/add_field.rb +49 -0
- data/lib/query_builder/cql/modifiers/allow_filtering.rb +45 -0
- data/lib/query_builder/cql/modifiers/alter.rb +44 -0
- data/lib/query_builder/cql/modifiers/called_on_null.rb +47 -0
- data/lib/query_builder/cql/modifiers/clustering_order.rb +51 -0
- data/lib/query_builder/cql/modifiers/column.rb +59 -0
- data/lib/query_builder/cql/modifiers/compact_storage.rb +46 -0
- data/lib/query_builder/cql/modifiers/count.rb +47 -0
- data/lib/query_builder/cql/modifiers/counter.rb +45 -0
- data/lib/query_builder/cql/modifiers/delete.rb +48 -0
- data/lib/query_builder/cql/modifiers/distinct.rb +45 -0
- data/lib/query_builder/cql/modifiers/finalfunc.rb +47 -0
- data/lib/query_builder/cql/modifiers/if.rb +44 -0
- data/lib/query_builder/cql/modifiers/if_exists.rb +46 -0
- data/lib/query_builder/cql/modifiers/if_not_exists.rb +46 -0
- data/lib/query_builder/cql/modifiers/initcond.rb +49 -0
- data/lib/query_builder/cql/modifiers/insert.rb +68 -0
- data/lib/query_builder/cql/modifiers/limit.rb +49 -0
- data/lib/query_builder/cql/modifiers/norecursive.rb +45 -0
- data/lib/query_builder/cql/modifiers/or_replace.rb +44 -0
- data/lib/query_builder/cql/modifiers/order.rb +50 -0
- data/lib/query_builder/cql/modifiers/password.rb +49 -0
- data/lib/query_builder/cql/modifiers/primary_key.rb +51 -0
- data/lib/query_builder/cql/modifiers/returns.rb +49 -0
- data/lib/query_builder/cql/modifiers/selected.rb +54 -0
- data/lib/query_builder/cql/modifiers/sfunc.rb +47 -0
- data/lib/query_builder/cql/modifiers/statement.rb +47 -0
- data/lib/query_builder/cql/modifiers/stype.rb +47 -0
- data/lib/query_builder/cql/modifiers/superuser.rb +54 -0
- data/lib/query_builder/cql/modifiers/timestamp.rb +50 -0
- data/lib/query_builder/cql/modifiers/unlogged.rb +45 -0
- data/lib/query_builder/cql/modifiers/update.rb +44 -0
- data/lib/query_builder/cql/modifiers/using.rb +48 -0
- data/lib/query_builder/cql/modifiers/using_options.rb +51 -0
- data/lib/query_builder/cql/modifiers/where.rb +44 -0
- data/lib/query_builder/cql/modifiers/where_clustered.rb +51 -0
- data/lib/query_builder/cql/modifiers/with.rb +44 -0
- data/lib/query_builder/cql/modifiers/with_options.rb +42 -0
- data/lib/query_builder/cql/operators.rb +29 -0
- data/lib/query_builder/cql/operators/cql.rb +23 -0
- data/lib/query_builder/cql/operators/cql_composite.rb +20 -0
- data/lib/query_builder/cql/operators/cql_dec.rb +21 -0
- data/lib/query_builder/cql/operators/cql_element.rb +23 -0
- data/lib/query_builder/cql/operators/cql_entries.rb +20 -0
- data/lib/query_builder/cql/operators/cql_frozen.rb +20 -0
- data/lib/query_builder/cql/operators/cql_full.rb +20 -0
- data/lib/query_builder/cql/operators/cql_gt.rb +23 -0
- data/lib/query_builder/cql/operators/cql_gte.rb +23 -0
- data/lib/query_builder/cql/operators/cql_in.rb +23 -0
- data/lib/query_builder/cql/operators/cql_inc.rb +21 -0
- data/lib/query_builder/cql/operators/cql_keys.rb +20 -0
- data/lib/query_builder/cql/operators/cql_list.rb +21 -0
- data/lib/query_builder/cql/operators/cql_literal.rb +84 -0
- data/lib/query_builder/cql/operators/cql_lt.rb +23 -0
- data/lib/query_builder/cql/operators/cql_lte.rb +23 -0
- data/lib/query_builder/cql/operators/cql_map.rb +25 -0
- data/lib/query_builder/cql/operators/cql_set.rb +21 -0
- data/lib/query_builder/cql/operators/cql_token.rb +21 -0
- data/lib/query_builder/cql/operators/cql_token_value.rb +23 -0
- data/lib/query_builder/cql/operators/cql_ttl.rb +20 -0
- data/lib/query_builder/cql/operators/cql_tuple.rb +21 -0
- data/lib/query_builder/cql/operators/cql_tuple_value.rb +23 -0
- data/lib/query_builder/cql/operators/cql_writetime.rb +20 -0
- data/lib/query_builder/cql/statements.rb +25 -0
- data/lib/query_builder/cql/statements/alter_column.rb +27 -0
- data/lib/query_builder/cql/statements/alter_field.rb +27 -0
- data/lib/query_builder/cql/statements/alter_keyspace.rb +25 -0
- data/lib/query_builder/cql/statements/alter_role.rb +26 -0
- data/lib/query_builder/cql/statements/alter_table.rb +25 -0
- data/lib/query_builder/cql/statements/alter_user.rb +26 -0
- data/lib/query_builder/cql/statements/batch.rb +31 -0
- data/lib/query_builder/cql/statements/create_aggregate.rb +36 -0
- data/lib/query_builder/cql/statements/create_column.rb +35 -0
- data/lib/query_builder/cql/statements/create_field.rb +25 -0
- data/lib/query_builder/cql/statements/create_function.rb +38 -0
- data/lib/query_builder/cql/statements/create_index.rb +41 -0
- data/lib/query_builder/cql/statements/create_keyspace.rb +26 -0
- data/lib/query_builder/cql/statements/create_role.rb +26 -0
- data/lib/query_builder/cql/statements/create_table.rb +30 -0
- data/lib/query_builder/cql/statements/create_trigger.rb +29 -0
- data/lib/query_builder/cql/statements/create_type.rb +26 -0
- data/lib/query_builder/cql/statements/create_user.rb +27 -0
- data/lib/query_builder/cql/statements/delete.rb +32 -0
- data/lib/query_builder/cql/statements/drop_aggregate.rb +25 -0
- data/lib/query_builder/cql/statements/drop_column.rb +23 -0
- data/lib/query_builder/cql/statements/drop_function.rb +25 -0
- data/lib/query_builder/cql/statements/drop_index.rb +25 -0
- data/lib/query_builder/cql/statements/drop_keyspace.rb +25 -0
- data/lib/query_builder/cql/statements/drop_role.rb +25 -0
- data/lib/query_builder/cql/statements/drop_table.rb +25 -0
- data/lib/query_builder/cql/statements/drop_trigger.rb +25 -0
- data/lib/query_builder/cql/statements/drop_type.rb +25 -0
- data/lib/query_builder/cql/statements/drop_user.rb +25 -0
- data/lib/query_builder/cql/statements/grant.rb +31 -0
- data/lib/query_builder/cql/statements/insert.rb +27 -0
- data/lib/query_builder/cql/statements/list_permissions.rb +35 -0
- data/lib/query_builder/cql/statements/list_roles.rb +23 -0
- data/lib/query_builder/cql/statements/list_users.rb +23 -0
- data/lib/query_builder/cql/statements/rename_column.rb +27 -0
- data/lib/query_builder/cql/statements/rename_field.rb +25 -0
- data/lib/query_builder/cql/statements/revoke.rb +31 -0
- data/lib/query_builder/cql/statements/select.rb +35 -0
- data/lib/query_builder/cql/statements/truncate.rb +23 -0
- data/lib/query_builder/cql/statements/update.rb +31 -0
- data/lib/query_builder/cql/statements/use.rb +23 -0
- data/lib/query_builder/rspec.rb +25 -0
- data/lib/query_builder/version.rb +9 -0
- data/query_builder.gemspec +31 -0
- data/spec/integration/alter_keyspace_spec.rb +17 -0
- data/spec/integration/alter_role_spec.rb +28 -0
- data/spec/integration/alter_table_add_spec.rb +21 -0
- data/spec/integration/alter_table_alter_spec.rb +15 -0
- data/spec/integration/alter_table_drop_spec.rb +15 -0
- data/spec/integration/alter_table_rename_spec.rb +15 -0
- data/spec/integration/alter_table_with_spec.rb +17 -0
- data/spec/integration/alter_type_add_spec.rb +15 -0
- data/spec/integration/alter_type_alter_spec.rb +15 -0
- data/spec/integration/alter_type_rename_spec.rb +15 -0
- data/spec/integration/alter_user_spec.rb +28 -0
- data/spec/integration/batch_spec.rb +32 -0
- data/spec/integration/create_aggregate_spec.rb +31 -0
- data/spec/integration/create_function_spec.rb +29 -0
- data/spec/integration/create_index_spec.rb +35 -0
- data/spec/integration/create_keyspace_spec.rb +24 -0
- data/spec/integration/create_role_spec.rb +26 -0
- data/spec/integration/create_table_spec.rb +34 -0
- data/spec/integration/create_trigger_spec.rb +21 -0
- data/spec/integration/create_type_spec.rb +20 -0
- data/spec/integration/create_user_spec.rb +23 -0
- data/spec/integration/delete_spec.rb +28 -0
- data/spec/integration/drop_aggregate_spec.rb +21 -0
- data/spec/integration/drop_function_spec.rb +21 -0
- data/spec/integration/drop_index_spec.rb +21 -0
- data/spec/integration/drop_keyspace_spec.rb +18 -0
- data/spec/integration/drop_role_spec.rb +18 -0
- data/spec/integration/drop_table_spec.rb +18 -0
- data/spec/integration/drop_trigger_spec.rb +21 -0
- data/spec/integration/drop_type_spec.rb +18 -0
- data/spec/integration/drop_user_spec.rb +18 -0
- data/spec/integration/grant_spec.rb +29 -0
- data/spec/integration/insert_spec.rb +22 -0
- data/spec/integration/list_permissions_spec.rb +34 -0
- data/spec/integration/list_roles_spec.rb +12 -0
- data/spec/integration/list_users_spec.rb +12 -0
- data/spec/integration/revoke_spec.rb +29 -0
- data/spec/integration/select_spec.rb +46 -0
- data/spec/integration/truncate_spec.rb +12 -0
- data/spec/integration/update_spec.rb +23 -0
- data/spec/integration/use_spec.rb +12 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/unit/core/attribute_error_spec.rb +38 -0
- data/spec/unit/core/attribute_spec.rb +70 -0
- data/spec/unit/core/base_spec.rb +110 -0
- data/spec/unit/core/clause_spec.rb +101 -0
- data/spec/unit/core/statement_spec.rb +88 -0
- data/spec/unit/cql/operators/cql_composite_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_dec_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_element_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_entries_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_frozen_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_full_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_gt_spec.rb +19 -0
- data/spec/unit/cql/operators/cql_gte_spec.rb +19 -0
- data/spec/unit/cql/operators/cql_in_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_inc_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_keys_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_list_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_literal_spec.rb +83 -0
- data/spec/unit/cql/operators/cql_lt_spec.rb +19 -0
- data/spec/unit/cql/operators/cql_lte_spec.rb +19 -0
- data/spec/unit/cql/operators/cql_map_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_set_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_token_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_token_value_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_ttl_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_tuple_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_tuple_value_spec.rb +12 -0
- data/spec/unit/cql/operators/cql_writetime_spec.rb +12 -0
- data/spec/unit/cql/operators_spec.rb +66 -0
- metadata +405 -0
@@ -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: 100
|
6
|
+
ClassNameCheck:
|
7
|
+
pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/
|
8
|
+
ClassVariableCheck:
|
9
|
+
CyclomaticComplexityBlockCheck:
|
10
|
+
complexity: 3
|
11
|
+
CyclomaticComplexityMethodCheck:
|
12
|
+
complexity: 5
|
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,80 @@
|
|
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/ModuleLength:
|
19
|
+
Exclude:
|
20
|
+
- '**/*_spec.rb' # allow namespaces in specs
|
21
|
+
|
22
|
+
Style/AccessorMethodName:
|
23
|
+
Exclude:
|
24
|
+
- '**/*_spec.rb'
|
25
|
+
|
26
|
+
Style/AsciiComments:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
Style/ClassAndModuleChildren:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
Style/Documentation:
|
33
|
+
Enabled: false
|
34
|
+
|
35
|
+
Style/EmptyLinesAroundBlockBody:
|
36
|
+
Enabled: false
|
37
|
+
|
38
|
+
Style/EmptyLinesAroundClassBody:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
Style/EmptyLinesAroundMethodBody:
|
42
|
+
Enabled: false
|
43
|
+
|
44
|
+
Style/EmptyLinesAroundModuleBody:
|
45
|
+
Enabled: false
|
46
|
+
|
47
|
+
Style/EmptyLineBetweenDefs:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
Style/FileName:
|
51
|
+
Enabled: false
|
52
|
+
|
53
|
+
Style/LineLength:
|
54
|
+
Exclude:
|
55
|
+
- '**/*_spec.rb' # allow long CQL statements
|
56
|
+
|
57
|
+
Style/RaiseArgs:
|
58
|
+
EnforcedStyle: compact
|
59
|
+
|
60
|
+
Style/SingleLineMethods:
|
61
|
+
Exclude:
|
62
|
+
- '**/*_spec.rb'
|
63
|
+
|
64
|
+
Style/SingleSpaceBeforeFirstArg:
|
65
|
+
Enabled: false
|
66
|
+
|
67
|
+
Style/SpecialGlobalVars:
|
68
|
+
Exclude:
|
69
|
+
- '**/Gemfile'
|
70
|
+
- '**/*.gemspec'
|
71
|
+
|
72
|
+
Style/StringLiterals:
|
73
|
+
EnforcedStyle: double_quotes
|
74
|
+
|
75
|
+
Style/StringLiteralsInInterpolation:
|
76
|
+
EnforcedStyle: double_quotes
|
77
|
+
|
78
|
+
Style/TrivialAccessors:
|
79
|
+
Exclude:
|
80
|
+
- '**/*_spec.rb'
|
@@ -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,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# The builder of CQL (Cassandra Query Language) statements
|
4
|
+
#
|
5
|
+
module QueryBuilder
|
6
|
+
|
7
|
+
# The collection of core classes and modules to provide SQL-specific AST
|
8
|
+
#
|
9
|
+
module Core
|
10
|
+
|
11
|
+
require_relative "core/attribute_error"
|
12
|
+
require_relative "core/attribute"
|
13
|
+
require_relative "core/base"
|
14
|
+
require_relative "core/clause"
|
15
|
+
require_relative "core/statement"
|
16
|
+
|
17
|
+
end # module Core
|
18
|
+
|
19
|
+
end # module QueryBuilder
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module QueryBuilder::Core
|
4
|
+
|
5
|
+
# Describes the attribute of AST node
|
6
|
+
#
|
7
|
+
class Attribute
|
8
|
+
|
9
|
+
include Equalizer.new(:name)
|
10
|
+
|
11
|
+
# @!attribute [r] name
|
12
|
+
#
|
13
|
+
# @return [Symbol] The name of the attribute
|
14
|
+
#
|
15
|
+
attr_reader :name
|
16
|
+
|
17
|
+
# @!attribute [r] default
|
18
|
+
#
|
19
|
+
# @return [Object] The default value for the attribute
|
20
|
+
#
|
21
|
+
attr_reader :default
|
22
|
+
|
23
|
+
# @!attribute [r] required
|
24
|
+
#
|
25
|
+
# @return [Boolean] Whether the attribute is required or not
|
26
|
+
#
|
27
|
+
attr_reader :required
|
28
|
+
|
29
|
+
# Initializes the attribute with name and options
|
30
|
+
#
|
31
|
+
# @param [Symbol] name
|
32
|
+
# @param [Hash] options
|
33
|
+
# @option options [Object] :default The default value for the attribute
|
34
|
+
# @option options [Boolean] :required Whether the attribute is required
|
35
|
+
#
|
36
|
+
def initialize(name, options = {})
|
37
|
+
@name = name
|
38
|
+
@default = options[:default]
|
39
|
+
@required = options.fetch(:required) { false }
|
40
|
+
|
41
|
+
IceNine.deep_freeze(self)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns arguments of the attribute initializer
|
45
|
+
#
|
46
|
+
# @return [Array]
|
47
|
+
#
|
48
|
+
def arguments
|
49
|
+
[name, default: default, required: required]
|
50
|
+
end
|
51
|
+
|
52
|
+
end # class Attribute
|
53
|
+
|
54
|
+
end # module QueryBuilder::Core
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module QueryBuilder::Core
|
4
|
+
|
5
|
+
# The exception to be raised by AST nodes' initializers
|
6
|
+
#
|
7
|
+
class AttributeError < KeyError
|
8
|
+
|
9
|
+
# Initializes the error with problem definition and the list of attributes
|
10
|
+
#
|
11
|
+
# @param [#to_s] problem
|
12
|
+
# @param [Array<#to_s>] list
|
13
|
+
#
|
14
|
+
def initialize(problem, list)
|
15
|
+
super [
|
16
|
+
"#{problem} attribute",
|
17
|
+
(list.one? ? ": " : "s: "),
|
18
|
+
list.map { |item| ":#{item}" }.join(", ")
|
19
|
+
].join
|
20
|
+
IceNine.deep_freeze(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
end # class UndefinedAttributeError
|
24
|
+
|
25
|
+
end # module QueryBuilder::Core
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module QueryBuilder::Core
|
4
|
+
|
5
|
+
# The abstract base class for all nodes of AST: statemens, clauses, operators
|
6
|
+
#
|
7
|
+
# Declares common attributes, `#initializer`, and `#to_s` instance methods.
|
8
|
+
#
|
9
|
+
# @abstract
|
10
|
+
#
|
11
|
+
class Base
|
12
|
+
|
13
|
+
# @!method attributes
|
14
|
+
# The hash of default attributes of class' instances
|
15
|
+
#
|
16
|
+
# @return [Hash]
|
17
|
+
#
|
18
|
+
def self.attributes
|
19
|
+
@attributes ||= Set.new
|
20
|
+
end
|
21
|
+
|
22
|
+
# @!method attribute(name, options)
|
23
|
+
# Declares the attribute with optional default value
|
24
|
+
#
|
25
|
+
# @param [Symbol] name The name of the attribute
|
26
|
+
# @param [Hash] options
|
27
|
+
# @option options [Object] :default
|
28
|
+
#
|
29
|
+
# @return [undefined]
|
30
|
+
#
|
31
|
+
def self.attribute(name, options = {})
|
32
|
+
attributes << Attribute.new(name, options)
|
33
|
+
define_method(name) { attributes.fetch(name) }
|
34
|
+
end
|
35
|
+
|
36
|
+
# Makes default attributes inheritable
|
37
|
+
#
|
38
|
+
# @private
|
39
|
+
#
|
40
|
+
def self.inherited(subclass)
|
41
|
+
attributes.each do |item|
|
42
|
+
subclass.public_send(:attribute, *item.arguments)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# @!attribute [r] attributes
|
47
|
+
#
|
48
|
+
# @return [Hash] The hash of the initialized attributes
|
49
|
+
#
|
50
|
+
attr_reader :attributes
|
51
|
+
|
52
|
+
# @!method initialize(attributes = {})
|
53
|
+
# Initializes the instance
|
54
|
+
#
|
55
|
+
# @param [Hash] attributes The custom attributes of the instance
|
56
|
+
#
|
57
|
+
def initialize(attributes = {})
|
58
|
+
validate_unknown attributes
|
59
|
+
validate_missing attributes
|
60
|
+
|
61
|
+
@attributes = default_attributes.merge(attributes)
|
62
|
+
IceNine.deep_freeze(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
# @!method to_s
|
66
|
+
# Returns the current chunk of CQL statement
|
67
|
+
#
|
68
|
+
# @return [String]
|
69
|
+
#
|
70
|
+
# @abstract
|
71
|
+
#
|
72
|
+
def to_s
|
73
|
+
""
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def known_attributes
|
79
|
+
self.class.attributes
|
80
|
+
end
|
81
|
+
|
82
|
+
def required_attributes
|
83
|
+
known_attributes.select(&:required)
|
84
|
+
end
|
85
|
+
|
86
|
+
def default_attributes
|
87
|
+
known_attributes.each_with_object({}) { |e, a| a[e.name] = e.default }
|
88
|
+
end
|
89
|
+
|
90
|
+
def validate_unknown(hash)
|
91
|
+
unknown = hash.keys - known_attributes.map(&:name)
|
92
|
+
fail AttributeError.new(:unknown, unknown) if unknown.any?
|
93
|
+
end
|
94
|
+
|
95
|
+
def validate_missing(hash)
|
96
|
+
missed = required_attributes.map(&:name) - hash.keys
|
97
|
+
fail AttributeError.new(:missed, missed) if missed.any?
|
98
|
+
end
|
99
|
+
|
100
|
+
end # class Base
|
101
|
+
|
102
|
+
end # module CQLBuiler::Core
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module QueryBuilder::Core
|
4
|
+
|
5
|
+
# The base class for all AST clauses (parts of statement)
|
6
|
+
#
|
7
|
+
# Every clause has a type, allowing to filter clauses of a statement.
|
8
|
+
#
|
9
|
+
# @abstract
|
10
|
+
#
|
11
|
+
class Clause < Base
|
12
|
+
|
13
|
+
include Comparable
|
14
|
+
include Equalizer.new(:class, :attributes)
|
15
|
+
|
16
|
+
# Makes all instances of the class unique
|
17
|
+
#
|
18
|
+
# Only one instance can be added to the statement via `Statement#<<` method
|
19
|
+
#
|
20
|
+
# @return [undefined]
|
21
|
+
#
|
22
|
+
def self.unique
|
23
|
+
include Equalizer.new(:class)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Gets/sets type for the specific clause class
|
27
|
+
#
|
28
|
+
# @param [#to_sym, nil] value
|
29
|
+
#
|
30
|
+
# @return [Symbol, nil]
|
31
|
+
#
|
32
|
+
def self.type(value = nil)
|
33
|
+
value ? (@type = value) : @type
|
34
|
+
end
|
35
|
+
|
36
|
+
# @!method type
|
37
|
+
#
|
38
|
+
# @return [Symbol] The type of the clause
|
39
|
+
#
|
40
|
+
def type
|
41
|
+
self.class.type
|
42
|
+
end
|
43
|
+
|
44
|
+
end # class Clause
|
45
|
+
|
46
|
+
end # module QueryBuilder::Core
|