# coding: utf-8

require 'forwardable'
require 'stoplight/data_store'
require 'stoplight/data_store/base'
require 'stoplight/data_store/memory'
require 'stoplight/data_store/redis'
require 'stoplight/error'
require 'stoplight/failure'
require 'stoplight/light'

module Stoplight
  VERSION = Gem::Version.new('0.0.0')

  class << self
    extend Forwardable

    def_delegators :data_store, *%i(
      clear_failures
      failure_threshold
      failures
      names
      record_attempt
      record_failure
      set_failure_threshold
      set_state
      state
    )

    def data_store(data_store = nil)
      @data_store = data_store if data_store
      @data_store = DataStore::Memory.new unless defined?(@data_store)
      @data_store
    end

    def green?(name)
      case data_store.state(name)
      when DataStore::STATE_LOCKED_GREEN
        true
      when DataStore::STATE_LOCKED_RED
        false
      else
        data_store.failures(name).size < threshold(name)
      end
    end

    def red?(name)
      !green?(name)
    end

    def threshold(name)
      data_store.failure_threshold(name) || Light::DEFAULT_FAILURE_THRESHOLD
    end
  end
end

# coding: utf-8

require 'forwardable'
require 'stoplight/data_store'
require 'stoplight/data_store/base'
require 'stoplight/data_store/memory'
require 'stoplight/data_store/redis'
require 'stoplight/error'
require 'stoplight/failure'
require 'stoplight/light'

module Stoplight
  VERSION = Gem::Version.new('0.0.0')

  module_function

  def data_store(data_store = nil)
    @data_store = data_store if data_store
    @data_store = DataStore::Memory.new unless defined?(@data_store)
    @data_store
  end

  def green?(name)
    case data_store.state(name)
    when DataStore::STATE_LOCKED_GREEN
      true
    when DataStore::STATE_LOCKED_RED
      false
    else
      data_store.failures(name).size < threshold(name)
    end
  end

  def red?(name)
    !green?(name)
  end

  def threshold(name)
    data_store.failure_threshold(name) || Light::DEFAULT_FAILURE_THRESHOLD
  end

  class << self
    extend Forwardable

    def_delegators :data_store, *%i(
      clear_failures
      failure_threshold
      failures
      names
      record_attempt
      record_failure
      set_failure_threshold
      set_state
      state
    )
  end
end

--- 
+++ 
@@ -11,33 +11,6 @@
 
 module Stoplight
   VERSION = Gem::Version.new('0.0.0')
-
-  module_function
-
-  def data_store(data_store = nil)
-    @data_store = data_store if data_store
-    @data_store = DataStore::Memory.new unless defined?(@data_store)
-    @data_store
-  end
-
-  def green?(name)
-    case data_store.state(name)
-    when DataStore::STATE_LOCKED_GREEN
-      true
-    when DataStore::STATE_LOCKED_RED
-      false
-    else
-      data_store.failures(name).size < threshold(name)
-    end
-  end
-
-  def red?(name)
-    !green?(name)
-  end
-
-  def threshold(name)
-    data_store.failure_threshold(name) || Light::DEFAULT_FAILURE_THRESHOLD
-  end
 
   class << self
     extend Forwardable
@@ -53,5 +26,30 @@
       set_state
       state
     )
+
+    def data_store(data_store = nil)
+      @data_store = data_store if data_store
+      @data_store = DataStore::Memory.new unless defined?(@data_store)
+      @data_store
+    end
+
+    def green?(name)
+      case data_store.state(name)
+      when DataStore::STATE_LOCKED_GREEN
+        true
+      when DataStore::STATE_LOCKED_RED
+        false
+      else
+        data_store.failures(name).size < threshold(name)
+      end
+    end
+
+    def red?(name)
+      !green?(name)
+    end
+
+    def threshold(name)
+      data_store.failure_threshold(name) || Light::DEFAULT_FAILURE_THRESHOLD
+    end
   end
 end
Define module functions in class block
