Class: JsonapiCompliable::DSL
- Inherits:
-
Object
- Object
- JsonapiCompliable::DSL
- Defined in:
- lib/jsonapi_compliable/dsl.rb
Instance Attribute Summary collapse
-
#default_filters ⇒ Object
Returns the value of attribute default_filters.
-
#extra_fields ⇒ Object
Returns the value of attribute extra_fields.
-
#filters ⇒ Object
Returns the value of attribute filters.
-
#pagination ⇒ Object
Returns the value of attribute pagination.
-
#sideloads ⇒ Object
Returns the value of attribute sideloads.
-
#sorting ⇒ Object
Returns the value of attribute sorting.
-
#stats ⇒ Object
Returns the value of attribute stats.
Instance Method Summary collapse
- #allow_filter(name, *args, &blk) ⇒ Object
- #allow_stat(symbol_or_hash, &blk) ⇒ Object
- #clear! ⇒ Object
- #copy ⇒ Object
- #default_filter(name, &blk) ⇒ Object
- #extra_field(field, &blk) ⇒ Object
- #includes(whitelist: nil, &blk) ⇒ Object
-
#initialize ⇒ DSL
constructor
A new instance of DSL.
- #paginate(&blk) ⇒ Object
- #sort(&blk) ⇒ Object
- #stat(attribute, calculation) ⇒ Object
Constructor Details
#initialize ⇒ DSL
Returns a new instance of DSL.
11 12 13 |
# File 'lib/jsonapi_compliable/dsl.rb', line 11 def initialize clear! end |
Instance Attribute Details
#default_filters ⇒ Object
Returns the value of attribute default_filters.
3 4 5 |
# File 'lib/jsonapi_compliable/dsl.rb', line 3 def default_filters @default_filters end |
#extra_fields ⇒ Object
Returns the value of attribute extra_fields.
3 4 5 |
# File 'lib/jsonapi_compliable/dsl.rb', line 3 def extra_fields @extra_fields end |
#filters ⇒ Object
Returns the value of attribute filters.
3 4 5 |
# File 'lib/jsonapi_compliable/dsl.rb', line 3 def filters @filters end |
#pagination ⇒ Object
Returns the value of attribute pagination.
3 4 5 |
# File 'lib/jsonapi_compliable/dsl.rb', line 3 def pagination @pagination end |
#sideloads ⇒ Object
Returns the value of attribute sideloads.
3 4 5 |
# File 'lib/jsonapi_compliable/dsl.rb', line 3 def sideloads @sideloads end |
#sorting ⇒ Object
Returns the value of attribute sorting.
3 4 5 |
# File 'lib/jsonapi_compliable/dsl.rb', line 3 def sorting @sorting end |
#stats ⇒ Object
Returns the value of attribute stats.
3 4 5 |
# File 'lib/jsonapi_compliable/dsl.rb', line 3 def stats @stats end |
Instance Method Details
#allow_filter(name, *args, &blk) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/jsonapi_compliable/dsl.rb', line 46 def allow_filter(name, *args, &blk) opts = args. aliases = [name, opts[:aliases]].flatten.compact @filters[name.to_sym] = { aliases: aliases, if: opts[:if], filter: blk } end |
#allow_stat(symbol_or_hash, &blk) ⇒ Object
56 57 58 59 60 |
# File 'lib/jsonapi_compliable/dsl.rb', line 56 def allow_stat(symbol_or_hash, &blk) dsl = Stats::DSL.new(symbol_or_hash) dsl.instance_eval(&blk) if blk @stats[dsl.name] = dsl end |
#clear! ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/jsonapi_compliable/dsl.rb', line 27 def clear! @sideloads = {} @filters = {} @default_filters = {} @extra_fields = {} @stats = {} @sorting = nil @pagination = nil end |
#copy ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/jsonapi_compliable/dsl.rb', line 15 def copy instance = self.class.new instance.sideloads = sideloads.deep_dup instance.filters = filters.deep_dup instance.default_filters = default_filters.deep_dup instance.extra_fields = extra_fields.deep_dup instance.sorting = sorting.deep_dup instance.pagination = pagination.deep_dup instance.stats = stats.deep_dup instance end |
#default_filter(name, &blk) ⇒ Object
62 63 64 65 66 |
# File 'lib/jsonapi_compliable/dsl.rb', line 62 def default_filter(name, &blk) @default_filters[name.to_sym] = { filter: blk } end |
#extra_field(field, &blk) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/jsonapi_compliable/dsl.rb', line 76 def extra_field(field, &blk) @extra_fields[field.keys.first] ||= [] @extra_fields[field.keys.first] << { name: field.values.first, proc: blk } end |
#includes(whitelist: nil, &blk) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/jsonapi_compliable/dsl.rb', line 37 def includes(whitelist: nil, &blk) whitelist = JSONAPI::IncludeDirective.new(whitelist) if whitelist @sideloads = { whitelist: whitelist, custom_scope: blk } end |
#paginate(&blk) ⇒ Object
72 73 74 |
# File 'lib/jsonapi_compliable/dsl.rb', line 72 def paginate(&blk) @pagination = blk end |
#sort(&blk) ⇒ Object
68 69 70 |
# File 'lib/jsonapi_compliable/dsl.rb', line 68 def sort(&blk) @sorting = blk end |
#stat(attribute, calculation) ⇒ Object
84 85 86 87 88 |
# File 'lib/jsonapi_compliable/dsl.rb', line 84 def stat(attribute, calculation) stats_dsl = @stats[attribute] || @stats[attribute.to_sym] raise Errors::StatNotFound.new(attribute, calculation) unless stats_dsl stats_dsl.calculation(calculation) end |