culpa-coliseum 2.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f13eb21cdd7d7eabeca4aa7bd91ebf203654dc62
4
+ data.tar.gz: 306cbe6a3491380b628dd7a50f52d9c0c9250934
5
+ SHA512:
6
+ metadata.gz: dfa82862cf1ed2472974d4622b8d158f9a772e7e3a2cdee1bfab67144644c0ed3b783aa02b834d342f164990544ff7b8b3a9ca1cd00034783643cafafc5d5a34
7
+ data.tar.gz: 7f3d68c1b942005e89738bbfe1832904902f815834fdcdb32b7486e514900b74758eeb47e25179dd102920e7f61e835db6b94a895363209949939ae79715e95a
@@ -0,0 +1,18 @@
1
+ require_relative 'culpa-coliseum/coliseum_dsl'
2
+
3
+ if Culpa
4
+ # Registering the Coliseum DSL inside the possible renderers
5
+ Action.add_renderer(File.join(File.dirname(__FILE__), 'culpa-coliseum/coliseum.rb'))
6
+
7
+ # Injecting new keyword inside brickchain executor
8
+ Culpa::BrickchainExecutor.inject_keyword! :render_coliseum do |args|
9
+ file = args[0]
10
+ coliseum = ColiseumDSL.new("./coliseums/#{file}.rb", envelope)
11
+ raise Action::RenderNow, format: :json,
12
+ status: RendererDescriber::RETURN_CODES[coliseum.culpa_status] || 200,
13
+ headers: { 'Content-Type' => 'application/json' }.merge(coliseum.culpa_headers),
14
+ object: coliseum.dsl_attributes
15
+ end
16
+ else
17
+ raise StandardError.new('Culpa is not loaded, can\'t register Coliseum in nothing...')
18
+ end
@@ -0,0 +1,19 @@
1
+ ##
2
+ # This renderer loads the ColiseumDSL to eval the
3
+ # passed file, and renders it as a JSON.
4
+ ##
5
+
6
+ require_relative 'coliseum_dsl'
7
+
8
+ describe_renderer :coliseum do |options, envelope|
9
+ coliseum = ColiseumDSL.new("./coliseums/#{options[:coliseum]}.rb", envelope)
10
+
11
+ sent_headers = { 'Content-Type' => 'application/json' }.merge(options[:headers]).merge(coliseum.culpa_headers)
12
+
13
+ {
14
+ format: :json,
15
+ status: RETURN_CODES[options[:status]] || RETURN_CODES[coliseum.culpa_status] || 200,
16
+ headers: sent_headers,
17
+ object: coliseum.dsl_attributes
18
+ }
19
+ end
@@ -0,0 +1,71 @@
1
+ class ColiseumDSL
2
+ attr_reader :dsl_attributes, :culpa_status, :culpa_headers
3
+
4
+ def initialize(to_eval, envelope, eval_args = nil)
5
+ @dsl_attributes = {}
6
+ @culpa_headers = {}
7
+ @culpa_envelope = envelope
8
+ if to_eval.is_a? String
9
+ instance_eval File.read(to_eval), to_eval
10
+ else
11
+ instance_exec eval_args, &to_eval
12
+ end
13
+ end
14
+
15
+ def e
16
+ @culpa_envelope
17
+ end
18
+
19
+ def set_status_code!(code)
20
+ @culpa_status = code
21
+ end
22
+
23
+ def add_http_headers!(hdrs = {})
24
+ @culpa_headers.merge!(hdrs)
25
+ end
26
+
27
+ def array!(opts, &blk)
28
+ if opts.is_a? Hash
29
+ sym, items = opts.first
30
+ @dsl_attributes[sym] = []
31
+ items.each do |item|
32
+ @dsl_attributes[sym] << ColiseumDSL.new(blk, @culpa_envelope, item).dsl_attributes
33
+ end
34
+ else
35
+ @dsl_attributes = []
36
+ opts.each do |item|
37
+ @dsl_attributes << ColiseumDSL.new(blk, @culpa_envelope, item).dsl_attributes
38
+ end
39
+ end
40
+ end
41
+
42
+ def extract!(target, *attrs)
43
+ attrs.each do |att|
44
+ @dsl_attributes[att] = if target.is_a? Hash
45
+ target[att] if target.key? att
46
+ else
47
+ begin
48
+ target.send(att)
49
+ rescue
50
+ # :nocov:
51
+ nil
52
+ # :nocov:
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ def method_missing(sym, *args, &blk)
59
+ @dsl_attributes[sym] = if ::Kernel.block_given?
60
+ ColiseumDSL.new(blk, @culpa_envelope).dsl_attributes
61
+ else
62
+ if args.count.zero?
63
+ nil
64
+ elsif args.count == 1
65
+ args[0]
66
+ else
67
+ args
68
+ end
69
+ end
70
+ end
71
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: culpa-coliseum
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jérémy SEBAN
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: culpa
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ description: Culpa is a framework following MEA principles. Learn more on http://culpaframework.org/.
28
+ email: jeremy@seban.eu
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/culpa-coliseum.rb
34
+ - lib/culpa-coliseum/coliseum.rb
35
+ - lib/culpa-coliseum/coliseum_dsl.rb
36
+ homepage: http://culpaframework.org/
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '2.0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.5.2
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: 'Coliseum : the Culpa JSON DSL'
60
+ test_files: []