query_builder 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.
- 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
|