Sha256: 427ce3a8c170fcb64103fe82102ad16afbba66ad7609fc2d60731643251426b3

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

module SoFarSoGood
  class Clause

    attr_reader :node

    def initialize(node)
      @node = node
      normalize!
    end

    def number
      @number ||= node.css("SECTNO").text.strip
    end

    def subject
      @subject ||= node.css("SUBJECT, RESERVED").text.strip
    end

    def reserved?
      @reserved ||= !node.css("RESERVED").text.empty?
    end
    alias_method :reserved, :reserved?

    def citation
      @citation ||= node.css("CITA").text.strip
    end

    def link
      @link ||= "http://www.law.cornell.edu/cfr/text/48/#{number}"
    end

    def extract(options = {})
      options = {:format => :html}.merge(options)
      @extract ||= node.css("EXTRACT").inner_html
      if options[:format] == :markdown
        ReverseMarkdown.convert @extract
      else
        @extract
      end
    end

    def body(options = {})
      options = {:format => :html}.merge(options)
      @body ||= node.css("> P").to_html
      if options[:format] == :markdown
        ReverseMarkdown.convert @body
      else
        @body
      end
    end

    def to_hash(options={})
      {
        :number    => number,
        :subject   => subject,
        :reserverd => reserved,
        :citation  => citation,
        :extract   => extract(options),
        :body      => body(options),
        :link      => link
      }
    end

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

    def inspect
      "#<SoFarSoGood::Clause @number=\"#{@number}\" @subject=\"#{@subject}\" @reserved=\"#{@reserved}\""
    end

    private

    def normalize!
      node.children.css("E").each { |n| n.name = "em" }
      node.children.css("HD").each { |n| n.name = "h3" }
    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/clause.rb