Commit 5bcdfa0

mo <mo.khan@gmail.com>
2018-12-26 19:08:15
extract templatable module.
1 parent 81746da
lib/scim/kit/v2/attribute_type.rb
@@ -5,6 +5,7 @@ module Scim
     module V2
       # Represents a scim Attribute type
       class AttributeType
+        include Templatable
         DATATYPES = {
           string: 'string',
           boolean: 'boolean',
@@ -35,7 +36,6 @@ module Scim
           @mutability = Mutability::READ_WRITE
           @returned = Returned::DEFAULT
           @uniqueness = Uniqueness::NONE
-          @attributes = []
           raise ArgumentError, :type unless DATATYPES[type.to_sym]
         end
 
@@ -55,19 +55,15 @@ module Scim
           @type = :complex
           attribute = AttributeType.new(name: name, type: type)
           yield attribute if block_given?
-          @attributes << attribute
+          attributes << attribute
         end
 
-        def to_json
-          Template.new(self).to_json
-        end
+        private
 
-        def to_h
-          JSON.parse(to_json, symbolize_names: true)
+        def attributes
+          @attributes ||= []
         end
 
-        private
-
         def complex?
           type_is?(:complex)
         end
lib/scim/kit/v2/schema.rb
@@ -5,6 +5,7 @@ module Scim
     module V2
       # Represents a SCIM Schema
       class Schema
+        include Templatable
         ERROR = 'urn:ietf:params:scim:api:messages:2.0:Error'
         GROUP = 'urn:ietf:params:scim:schemas:core:2.0:Group'
         RESOURCE_TYPE = 'urn:ietf:params:scim:schemas:core:2.0:ResourceType'
@@ -25,10 +26,6 @@ module Scim
           yield attribute if block_given?
           @attributes << attribute
         end
-
-        def to_json
-          Template.new(self).to_json
-        end
       end
     end
   end
lib/scim/kit/templatable.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+module Scim
+  module Kit
+    # Implement methods necessary to generate json from jbuilder templates.
+    module Templatable
+      def to_json
+        Template.new(self).to_json
+      end
+
+      def to_h
+        JSON.parse(to_json, symbolize_names: true)
+      end
+    end
+  end
+end
lib/scim/kit.rb
@@ -3,14 +3,16 @@
 require 'tilt'
 require 'tilt/jbuilder'
 
+require 'scim/kit/templatable'
+require 'scim/kit/template'
 require 'scim/kit/version'
+
 require 'scim/kit/v2/attribute_type'
-require 'scim/kit/v2/returned'
-require 'scim/kit/v2/uniqueness'
 require 'scim/kit/v2/mutability'
-require 'scim/kit/v2/schema'
 require 'scim/kit/v2/resource_type'
-require 'scim/kit/template'
+require 'scim/kit/v2/returned'
+require 'scim/kit/v2/schema'
+require 'scim/kit/v2/uniqueness'
 
 module Scim
   module Kit