Sha256: ac5c995917aa346906f5b5875746eef316e28a53e9ba1854f8b8a6fa8299e77d

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

module SoFarSoGood
  class Clauses
    class << self

      HEADINGS = ["Clause", "Description"]

      def numbers(options = {})
        @numbers ||= clauses(options).map { |c| c.number }
      end

      def subjects(options = {})
        @subjects ||= clauses(options).map { |c| c.subject }
      end
      alias_method :descriptions, :subjects

      def clauses(options = {})
        options = {:exclude_reserved => false}.merge(options)
        @clauses ||= sections.map { |node| SoFarSoGood::Clause.new(node) }
        if options[:exclude_reserved]
          @clauses.reject { |c| c.reserved }
        else
          @clauses
        end
      end
      alias_method :list, :clauses

      def to_md(options = {})
        options = {:exclude_reserved => false, :links => false}.merge(options)
        rows = clauses(options).map { |c| [ options[:links] ? "[#{c.number}](#{c.link})" : c.number , c.subject] }
        Terminal::Table.new(:rows => rows, :style => { :border_i => "|" }, :headings => HEADINGS).to_s
      end

      def to_json(options = {})
        clauses(options).to_json(options)
      end

      def [](number)
        clauses.find { |c| c.number == number }
      end

      private

      def source_path
        @source_path ||= File.expand_path "CFR-2010-title48-vol2-chap1-subchapH.xml", SoFarSoGood.vendor_directory
      end

      def doc
        @doc ||= Nokogiri::XML(File.open(source_path)) do |config|
          config.noblanks.nonet
        end
      end

      def sections
        @subpart ||= doc.css("PART SUBPART")[4].children.css("SECTION")
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
so_far_so_good-0.0.3 lib/so_far_so_good/clauses.rb