structured-data 0.1.0 → 0.2.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 +4 -4
- data/.gitignore +1 -0
- data/.hound.yml +2 -0
- data/.rubocop.yml +142 -0
- data/README.md +10 -6
- data/lib/structured_data.rb +16 -52
- data/lib/structured_data/rails_extentions.rb +25 -0
- data/lib/structured_data/rails_extentions/breadcrumb_list.rb +24 -0
- data/lib/structured_data/rails_extentions/site_navigation_element.rb +24 -0
- data/lib/structured_data/version.rb +1 -1
- metadata +7 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2a491959be0ade618bd52abbe1041163259835b8
         | 
| 4 | 
            +
              data.tar.gz: d4f95162ec89f43777ff7267f73025b8835435cd
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b991c3ed54fe25b2313a373c8d1ed092fab8ba8dae7c591302c56113bb79caf09601178aef979308522229d1706f89ea8084d031b49c52793addf400952659d9
         | 
| 7 | 
            +
              data.tar.gz: 974caba471771dbc0cd7d2fc27c3168b2468cf1cd4c8bd8dac20f5e37ebc9e9351a1e7ded7a0faf06dc5a9f3955262649fde327e42a9b4a8aee8689394bda84f
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.hound.yml
    ADDED
    
    
    
        data/.rubocop.yml
    ADDED
    
    | @@ -0,0 +1,142 @@ | |
| 1 | 
            +
            AllCops:
         | 
| 2 | 
            +
              TargetRubyVersion: 2.3
         | 
| 3 | 
            +
              DisplayCopNames: true
         | 
| 4 | 
            +
              DisplayStyleGuide: true
         | 
| 5 | 
            +
              Exclude: # 自動生成されるものや外部ライブラリは除外
         | 
| 6 | 
            +
                - 'vendor/**/*'
         | 
| 7 | 
            +
                - 'db/schema.rb'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
            # Style
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            # 日本人なので日本語で書きたいときもある
         | 
| 14 | 
            +
            Style/AsciiComments:
         | 
| 15 | 
            +
              Enabled: false
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            # case
         | 
| 18 | 
            +
            # when foo?
         | 
| 19 | 
            +
            # when bar?
         | 
| 20 | 
            +
            # end
         | 
| 21 | 
            +
            # のようなものはcaseで書いたほうが見やすい
         | 
| 22 | 
            +
            Style/EmptyCaseCondition:
         | 
| 23 | 
            +
              Enabled: false
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            # 明示的に else で nil を返すのはわかりやすいので許可
         | 
| 26 | 
            +
            Style/EmptyElse:
         | 
| 27 | 
            +
              EnforcedStyle: empty
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            # 複数行でも -> のほうがきれいに見えることが多い
         | 
| 30 | 
            +
            Style/Lambda:
         | 
| 31 | 
            +
              EnforcedStyle: literal
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            # 区切り文字が2個以上必須になる場合のみ_区切りを必須
         | 
| 34 | 
            +
            Style/NumericLiterals:
         | 
| 35 | 
            +
              MinDigits: 7
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            # ローカル変数とメソッド呼び出しの区別をつけたほうがわかりやすいことが多い
         | 
| 38 | 
            +
            Style/RedundantSelf:
         | 
| 39 | 
            +
             Enabled: false
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            # クォートはお好みで
         | 
| 42 | 
            +
            Style/StringLiterals:
         | 
| 43 | 
            +
              Enabled: false
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            # 意味的に先に否定のロジックを書いた方がわかりやすいケースもある
         | 
| 46 | 
            +
            Style/UnlessElse:
         | 
| 47 | 
            +
              Enabled: false
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            # 3.0で文字列がデフォルトでfrozenなのを信じてない
         | 
| 50 | 
            +
            Style/FrozenStringLiteralComment:
         | 
| 51 | 
            +
              Enabled: false
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            Style/BlockDelimiters:
         | 
| 54 | 
            +
              # メソッドチェインしている場合は複数行でも{}を使いたいので
         | 
| 55 | 
            +
              # rubocop -a で変換されないよう除外
         | 
| 56 | 
            +
              AutoCorrect: false
         | 
| 57 | 
            +
              # expect { }.to で複数行xメソッドチェインが多発するので
         | 
| 58 | 
            +
              # specを対象から除外する
         | 
| 59 | 
            +
              Exclude:
         | 
| 60 | 
            +
                - "spec/**/*.rb"
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            # 公開ライブラリでもない限り、ドキュメントを書くことはほぼないと考える
         | 
| 63 | 
            +
            Style/Documentation:
         | 
| 64 | 
            +
              Enabled: false
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            # 代入の後改行したほうが横に長くなりづらく見やすい
         | 
| 67 | 
            +
            Style/MultilineAssignmentLayout:
         | 
| 68 | 
            +
              Enabled: true
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            # メソッドチェインで複数行になったときにインデントが長く横にのびるため
         | 
| 71 | 
            +
            # 出来る限り短くなるようにする
         | 
| 72 | 
            +
            Style/AlignParameters:
         | 
| 73 | 
            +
              EnforcedStyle: with_fixed_indentation
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            # メソッドチェインで複数行になったときにインデントが長く横にのびるため
         | 
| 76 | 
            +
            # 出来る限り短くなるようにする
         | 
| 77 | 
            +
            Style/MultilineMethodCallIndentation:
         | 
| 78 | 
            +
              EnforcedStyle: indented
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            #
         | 
| 81 | 
            +
            # Lint
         | 
| 82 | 
            +
            #
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            # 使っていない変数を見つけたい
         | 
| 85 | 
            +
            Lint/UselessAssignment:
         | 
| 86 | 
            +
              Enabled: true
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            #
         | 
| 89 | 
            +
            # Metrics
         | 
| 90 | 
            +
            #
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            Metrics/AbcSize:
         | 
| 93 | 
            +
              Max: 30
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            Metrics/BlockNesting:
         | 
| 96 | 
            +
              Max: 3
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            Metrics/ClassLength:
         | 
| 99 | 
            +
              CountComments: false
         | 
| 100 | 
            +
              Max: 100
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            Metrics/ModuleLength:
         | 
| 103 | 
            +
              CountComments: false
         | 
| 104 | 
            +
              Max: 100
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            Metrics/CyclomaticComplexity:
         | 
| 107 | 
            +
              Max: 10
         | 
| 108 | 
            +
             | 
| 109 | 
            +
            Metrics/LineLength:
         | 
| 110 | 
            +
              Max: 120
         | 
| 111 | 
            +
              AllowHeredoc: true
         | 
| 112 | 
            +
              AllowURI: true
         | 
| 113 | 
            +
              URISchemes:
         | 
| 114 | 
            +
                - http
         | 
| 115 | 
            +
                - https
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            Metrics/MethodLength:
         | 
| 118 | 
            +
              CountComments: false
         | 
| 119 | 
            +
              Max: 30
         | 
| 120 | 
            +
             | 
| 121 | 
            +
            Metrics/BlockLength:
         | 
| 122 | 
            +
              # rspec, routesは巨大なブロック不可避なので除外
         | 
| 123 | 
            +
              Exclude:
         | 
| 124 | 
            +
                - "spec/**/*.rb"
         | 
| 125 | 
            +
                - "config/routes.rb"
         | 
| 126 | 
            +
             | 
| 127 | 
            +
             | 
| 128 | 
            +
            Metrics/ParameterLists:
         | 
| 129 | 
            +
              Max: 5
         | 
| 130 | 
            +
              CountKeywordArgs: true
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            Metrics/PerceivedComplexity:
         | 
| 133 | 
            +
              Max: 7
         | 
| 134 | 
            +
             | 
| 135 | 
            +
            #
         | 
| 136 | 
            +
            # Performance
         | 
| 137 | 
            +
            #
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            # パフォーマンスのメリットよりcasecmpを使った時のわかりづらさのデメリットのほうが大きい
         | 
| 140 | 
            +
            Performance/Casecmp:
         | 
| 141 | 
            +
              Enabled: false
         | 
| 142 | 
            +
             | 
    
        data/README.md
    CHANGED
    
    | @@ -1,13 +1,11 @@ | |
| 1 1 | 
             
            # StructuredData
         | 
| 2 2 |  | 
| 3 | 
            -
            [](https://circleci.com/gh/ukstudio/structured_data/tree/master)
         | 
| 4 | 
            -
             | 
| 5 3 | 
             
            ## Installation
         | 
| 6 4 |  | 
| 7 5 | 
             
            Add this line to your application's Gemfile:
         | 
| 8 6 |  | 
| 9 7 | 
             
            ```ruby
         | 
| 10 | 
            -
            gem ' | 
| 8 | 
            +
            gem 'structured-data'
         | 
| 11 9 | 
             
            ```
         | 
| 12 10 |  | 
| 13 11 | 
             
            And then execute:
         | 
| @@ -16,7 +14,7 @@ And then execute: | |
| 16 14 |  | 
| 17 15 | 
             
            Or install it yourself as:
         | 
| 18 16 |  | 
| 19 | 
            -
                $ gem install  | 
| 17 | 
            +
                $ gem install structured-data
         | 
| 20 18 |  | 
| 21 19 | 
             
            ## Usage
         | 
| 22 20 |  | 
| @@ -58,10 +56,16 @@ repo.dump | |
| 58 56 |  | 
| 59 57 | 
             
            ### Rails support
         | 
| 60 58 |  | 
| 61 | 
            -
             | 
| 59 | 
            +
            ```ruby
         | 
| 60 | 
            +
            # in controller or view
         | 
| 61 | 
            +
            breadcrumb_list do
         | 
| 62 | 
            +
              add url: '/products', name: 'Product'
         | 
| 63 | 
            +
              add url: '/products/tshirts, name: 'Tshirt'
         | 
| 64 | 
            +
            end
         | 
| 65 | 
            +
            ```
         | 
| 62 66 |  | 
| 63 67 | 
             
            ```slim
         | 
| 64 | 
            -
            =  | 
| 68 | 
            +
            = display_structured_data
         | 
| 65 69 | 
             
            ```
         | 
| 66 70 |  | 
| 67 71 | 
             
            ## Contributing
         | 
    
        data/lib/structured_data.rb
    CHANGED
    
    | @@ -1,55 +1,6 @@ | |
| 1 | 
            -
            require 'action_controller'
         | 
| 2 | 
            -
            require 'action_view'
         | 
| 3 1 | 
             
            require 'json'
         | 
| 4 2 |  | 
| 5 3 | 
             
            module StructuredData
         | 
| 6 | 
            -
              module ViewHelper
         | 
| 7 | 
            -
                def repository
         | 
| 8 | 
            -
                  @structured_data_repository ||= StructuredData::Repository.new
         | 
| 9 | 
            -
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                def breadcrumb_list
         | 
| 12 | 
            -
                  @breadcrumb_list ||= StructuredData::BreadcrumbList.new
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                def set_breadcrumb_item(url:, name:)
         | 
| 16 | 
            -
                  breadcrumb_list << { url: url, name: name }
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                def site_navigation_element
         | 
| 20 | 
            -
                  @site_navigation_element ||= StructuredData::SiteNavigationElement.new
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                def set_site_navigation_element(url:, name:)
         | 
| 24 | 
            -
                  site_navigation_element << { url: url, name: name }
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                def display_strctured_data
         | 
| 28 | 
            -
                  repository << breadcrumb_list unless breadcrumb_list.empty?
         | 
| 29 | 
            -
                  repository << site_navigation_element unless site_navigation_element.empty?
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  self.content_tag(:script, repository.dump.html_safe, type: 'application/ld+json')
         | 
| 32 | 
            -
                end
         | 
| 33 | 
            -
              end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
              module ControllerHelper
         | 
| 36 | 
            -
                def breadcrumb_list
         | 
| 37 | 
            -
                  @breadcrumb_list ||= StructuredData::BreadcrumbList.new
         | 
| 38 | 
            -
                end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                def set_breadcrumb_item(url:, name:)
         | 
| 41 | 
            -
                  breadcrumb_list << { url: url, name: name }
         | 
| 42 | 
            -
                end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                def site_navigation_element
         | 
| 45 | 
            -
                  @site_navigation_element ||= StructuredData::SiteNavigationElement.new
         | 
| 46 | 
            -
                end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                def set_site_navigation_element(url:, name:)
         | 
| 49 | 
            -
                  site_navigation_element << { url: url, name: name }
         | 
| 50 | 
            -
                end
         | 
| 51 | 
            -
              end
         | 
| 52 | 
            -
             | 
| 53 4 | 
             
              class Repository
         | 
| 54 5 | 
             
                def initialize
         | 
| 55 6 | 
             
                  @items = []
         | 
| @@ -65,14 +16,20 @@ module StructuredData | |
| 65 16 | 
             
              end
         | 
| 66 17 |  | 
| 67 18 | 
             
              class BreadcrumbList
         | 
| 19 | 
            +
                Item = Struct.new('Item', :url, :name)
         | 
| 20 | 
            +
             | 
| 68 21 | 
             
                def initialize
         | 
| 69 22 | 
             
                  @items = []
         | 
| 70 23 | 
             
                end
         | 
| 71 24 |  | 
| 72 | 
            -
                def  | 
| 25 | 
            +
                def add(item)
         | 
| 73 26 | 
             
                  @items << item
         | 
| 74 27 | 
             
                end
         | 
| 75 28 |  | 
| 29 | 
            +
                def <<(item)
         | 
| 30 | 
            +
                  add(item)
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 76 33 | 
             
                def empty?
         | 
| 77 34 | 
             
                  @items.empty?
         | 
| 78 35 | 
             
                end
         | 
| @@ -87,6 +44,14 @@ module StructuredData | |
| 87 44 | 
             
                  JSON.pretty_generate(hash)
         | 
| 88 45 | 
             
                end
         | 
| 89 46 |  | 
| 47 | 
            +
                def each(&block)
         | 
| 48 | 
            +
                  @items.map { |i| Item.new(i[:url], i[:name]) }.each(&block)
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                def size
         | 
| 52 | 
            +
                  @items.size
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 90 55 | 
             
                private
         | 
| 91 56 |  | 
| 92 57 | 
             
                def items_to_hash
         | 
| @@ -134,5 +99,4 @@ module StructuredData | |
| 134 99 | 
             
              end
         | 
| 135 100 | 
             
            end
         | 
| 136 101 |  | 
| 137 | 
            -
             | 
| 138 | 
            -
            ActionController::Base.send :include, StructuredData::ControllerHelper
         | 
| 102 | 
            +
            require 'structured_data/rails_extentions'
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module StructuredData
         | 
| 2 | 
            +
              module RailsExtentions
         | 
| 3 | 
            +
                def self.included(controller)
         | 
| 4 | 
            +
                  controller.helper_method :repository
         | 
| 5 | 
            +
                  controller.helper_method :display_structured_data
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  controller.include StructuredData::RailsExtentions::BreadclumbList
         | 
| 8 | 
            +
                  controller.include StructuredData::RailsExtentions::SiteNavigationElement
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def repository
         | 
| 12 | 
            +
                  @structured_data_repository ||= StructuredData::Repository.new
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def display_structured_data
         | 
| 16 | 
            +
                  repository << breadcrumb_list unless breadcrumb_list.empty?
         | 
| 17 | 
            +
                  repository << site_navigation_element unless site_navigation_element.empty?
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  view_context.content_tag(:script, repository.dump.html_safe, type: 'application/ld+json')
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            require 'structured_data/rails_extentions/breadcrumb_list'
         | 
| 25 | 
            +
            require 'structured_data/rails_extentions/site_navigation_element'
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            module StructuredData
         | 
| 2 | 
            +
              module RailsExtentions
         | 
| 3 | 
            +
                module BreadclumbList
         | 
| 4 | 
            +
                  def self.included(controller)
         | 
| 5 | 
            +
                    controller.helper_method :breadcrumb_list
         | 
| 6 | 
            +
                    controller.helper_method :set_breadcrumb_list_item
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def breadcrumb_list(&block)
         | 
| 10 | 
            +
                    @breadcrumb_list ||= StructuredData::BreadcrumbList.new
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    if block_given?
         | 
| 13 | 
            +
                      @breadcrumb_list.instance_eval(&block)
         | 
| 14 | 
            +
                    else
         | 
| 15 | 
            +
                      @breadcrumb_list
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def set_breadcrumb_list_item(url:, name:)
         | 
| 20 | 
            +
                    breadcrumb_list << { url: url, name: name }
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            module StructuredData
         | 
| 2 | 
            +
              module RailsExtentions
         | 
| 3 | 
            +
                module SiteNavigationElement
         | 
| 4 | 
            +
                  def self.included(controller)
         | 
| 5 | 
            +
                    controller.helper_method :site_navigation_element
         | 
| 6 | 
            +
                    controller.helper_method :set_site_navigation_element_item
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def site_navigation_element
         | 
| 10 | 
            +
                    @site_navigation_element ||= StructuredData::SiteNavigationElement.new
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    if block_given?
         | 
| 13 | 
            +
                      yield @@site_navigation_element
         | 
| 14 | 
            +
                    else
         | 
| 15 | 
            +
                      @site_navigation_element
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def set_site_navigation_element_item(url:, name:)
         | 
| 20 | 
            +
                    site_navigation_element << { url: url, name: name }
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: structured-data
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - AKAMATSU Yuki
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2017-02-14 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: actionpack
         | 
| @@ -74,6 +74,8 @@ extensions: [] | |
| 74 74 | 
             
            extra_rdoc_files: []
         | 
| 75 75 | 
             
            files:
         | 
| 76 76 | 
             
            - ".gitignore"
         | 
| 77 | 
            +
            - ".hound.yml"
         | 
| 78 | 
            +
            - ".rubocop.yml"
         | 
| 77 79 | 
             
            - Gemfile
         | 
| 78 80 | 
             
            - LICENSE
         | 
| 79 81 | 
             
            - README.md
         | 
| @@ -82,6 +84,9 @@ files: | |
| 82 84 | 
             
            - bin/setup
         | 
| 83 85 | 
             
            - lib/structured-data.rb
         | 
| 84 86 | 
             
            - lib/structured_data.rb
         | 
| 87 | 
            +
            - lib/structured_data/rails_extentions.rb
         | 
| 88 | 
            +
            - lib/structured_data/rails_extentions/breadcrumb_list.rb
         | 
| 89 | 
            +
            - lib/structured_data/rails_extentions/site_navigation_element.rb
         | 
| 85 90 | 
             
            - lib/structured_data/version.rb
         | 
| 86 91 | 
             
            - structured_data.gemspec
         | 
| 87 92 | 
             
            homepage: https://github.com/ukstudio/structured-data
         |