trellohub 0.0.1 → 0.1.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/.rspec +2 -0
 - data/.travis.yml +14 -0
 - data/Gemfile +9 -0
 - data/README.md +33 -7
 - data/bin/trellohub +7 -0
 - data/lib/trellohub.rb +10 -3
 - data/lib/trellohub/card.rb +8 -79
 - data/lib/trellohub/configurable.rb +75 -36
 - data/lib/trellohub/core_ext/array.rb +10 -0
 - data/lib/trellohub/core_ext/hash.rb +9 -1
 - data/lib/trellohub/core_ext/string.rb +22 -0
 - data/lib/trellohub/form.rb +142 -0
 - data/lib/trellohub/form/card.rb +163 -0
 - data/lib/trellohub/form/issue.rb +191 -0
 - data/lib/trellohub/list.rb +18 -2
 - data/lib/trellohub/member.rb +14 -2
 - data/lib/trellohub/mocking.rb +87 -0
 - data/lib/trellohub/repository.rb +47 -0
 - data/lib/trellohub/synchronal.rb +22 -41
 - data/lib/trellohub/version.rb +1 -1
 - data/spec/helper.rb +59 -0
 - data/spec/trellohub_spec.rb +51 -0
 - metadata +20 -7
 - data/lib/trellohub/cards.rb +0 -58
 - data/lib/trellohub/lists.rb +0 -17
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c3e0c1cd2aeef9e9fed641f72a69f7af0c079322
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: cc7b3945d5f13f745d7667d41416d7cf975dec7a
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9bcd7fa80eef654f76073370b126dfd410560529bfea907c84c65d039e0b7b62f6343b373f1f495e994726eaf3db849070d29991f7a94e7fd84b7b8e5fc7ccc5
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: c32fecbcb9e4648e6afb75a1825374fe95329617ad7792fa27d44f7baa06b53bd02d30b55ea25a167e957153a8c68a0bf1a7f5681eb336340ff75286160b36d3
         
     | 
    
        data/.rspec
    ADDED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -46,18 +46,44 @@ $ cp boards/example.yml boards/your_board_name.yml 
     | 
|
| 
       46 
46 
     | 
    
         
             
            edit `boards/your_board_name.yml`:
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
            ```yml
         
     | 
| 
      
 49 
     | 
    
         
            +
            board_id: 531c1a3524127e**********
         
     | 
| 
      
 50 
     | 
    
         
            +
            repositories:
         
     | 
| 
      
 51 
     | 
    
         
            +
              - full_name: organization/project_one
         
     | 
| 
      
 52 
     | 
    
         
            +
                milestone: Stable Version
         
     | 
| 
      
 53 
     | 
    
         
            +
              - full_name: organization/project_two
         
     | 
| 
      
 54 
     | 
    
         
            +
                milestone: Ver2
         
     | 
| 
      
 55 
     | 
    
         
            +
              - full_name: organization/project_three
         
     | 
| 
      
 56 
     | 
    
         
            +
                milestone: New Feature
         
     | 
| 
      
 57 
     | 
    
         
            +
            lists:
         
     | 
| 
      
 58 
     | 
    
         
            +
              - name: Backlog
         
     | 
| 
      
 59 
     | 
    
         
            +
                default: true
         
     | 
| 
      
 60 
     | 
    
         
            +
              - name: To Do
         
     | 
| 
      
 61 
     | 
    
         
            +
                issue_label: to do
         
     | 
| 
      
 62 
     | 
    
         
            +
              - name: Doing
         
     | 
| 
      
 63 
     | 
    
         
            +
                issue_label: doing
         
     | 
| 
      
 64 
     | 
    
         
            +
              - name: Done
         
     | 
| 
      
 65 
     | 
    
         
            +
                issue_label: done
         
     | 
| 
      
 66 
     | 
    
         
            +
              - name: Recent Closed
         
     | 
| 
      
 67 
     | 
    
         
            +
                issue_closed_at: '>= Time.now.utc -60*60*24*7'
         
     | 
| 
      
 68 
     | 
    
         
            +
            trello_application_key: 429452e37b7e********************
         
     | 
| 
      
 69 
     | 
    
         
            +
            trello_application_token: dc71944d87340616f03a7647****************************************
         
     | 
| 
      
 70 
     | 
    
         
            +
            github_access_token: e17e1c6caa******************************
         
     | 
| 
      
 71 
     | 
    
         
            +
            ```
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 74 
     | 
    
         
            +
            $ env DEBUG=true env CONFIG_PATH=~/trellohub/boards/your_board_name.yml trellohub
         
     | 
| 
       49 
75 
     | 
    
         
             
            ```
         
     | 
| 
       50 
76 
     | 
    
         | 
| 
       51 
77 
     | 
    
         
             
            Synchronizing
         
     | 
| 
       52 
78 
     | 
    
         
             
            -------------
         
     | 
| 
       53 
79 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
            GitHub Issues 
     | 
| 
       55 
     | 
    
         
            -
            ------------- 
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
      
 80 
     | 
    
         
            +
            GitHub Issues                | Trello Cards               | Description
         
     | 
| 
      
 81 
     | 
    
         
            +
            -------------                | ------------               | -----------
         
     | 
| 
      
 82 
     | 
    
         
            +
            Status(open, closed) changes | Closed(true false) changes | All created by a token user When trellohub creates the issue.
         
     | 
| 
      
 83 
     | 
    
         
            +
            Milestone changes            | Status changes             | If setted milestones
         
     | 
| 
      
 84 
     | 
    
         
            +
            Labels change                | List changes               | e.g. The "todo" label => The "To Do" list
         
     | 
| 
      
 85 
     | 
    
         
            +
            Title changes                | Title changes              | Card title format is 'repo_name#issue_number title'
         
     | 
| 
      
 86 
     | 
    
         
            +
            Asignee changes              | Member changes             | First member is issue assignee.
         
     | 
| 
       61 
87 
     | 
    
         | 
| 
       62 
88 
     | 
    
         
             
            Contributing
         
     | 
| 
       63 
89 
     | 
    
         
             
            ------------
         
     | 
    
        data/bin/trellohub
    ADDED
    
    
    
        data/lib/trellohub.rb
    CHANGED
    
    | 
         @@ -1,15 +1,22 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'octokit'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'trell'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            require 'trellohub/version'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'trellohub/ 
     | 
| 
      
 6 
     | 
    
         
            +
            require 'trellohub/repository'
         
     | 
| 
       5 
7 
     | 
    
         
             
            require 'trellohub/board'
         
     | 
| 
       6 
8 
     | 
    
         
             
            require 'trellohub/list'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'trellohub/lists'
         
     | 
| 
       8 
9 
     | 
    
         
             
            require 'trellohub/card'
         
     | 
| 
       9 
     | 
    
         
            -
            require 'trellohub/cards'
         
     | 
| 
       10 
10 
     | 
    
         
             
            require 'trellohub/member'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'trellohub/form'
         
     | 
| 
      
 12 
     | 
    
         
            +
            require 'trellohub/configurable'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require 'trellohub/mocking'
         
     | 
| 
       11 
14 
     | 
    
         
             
            require 'trellohub/synchronal'
         
     | 
| 
       12 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
            require 'trellohub/core_ext/string'
         
     | 
| 
      
 17 
     | 
    
         
            +
            require 'trellohub/core_ext/array'
         
     | 
| 
      
 18 
     | 
    
         
            +
            require 'trellohub/core_ext/hash'
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       13 
20 
     | 
    
         
             
            module Trellohub
         
     | 
| 
       14 
21 
     | 
    
         
             
              class << self
         
     | 
| 
       15 
22 
     | 
    
         
             
                include Trellohub::Configurable
         
     | 
    
        data/lib/trellohub/card.rb
    CHANGED
    
    | 
         @@ -1,90 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'trellohub/board'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'trellohub/cards'
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         
             
            module Trellohub
         
     | 
| 
       5 
     | 
    
         
            -
               
     | 
| 
      
 4 
     | 
    
         
            +
              module Card
         
     | 
| 
       6 
5 
     | 
    
         
             
                class << self
         
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                attr_accessor(*self.all_attributes)
         
     | 
| 
       11 
     | 
    
         
            -
                alias_method :repo, :repository
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                def repository_name
         
     | 
| 
       14 
     | 
    
         
            -
                  repo.split('/').last
         
     | 
| 
       15 
     | 
    
         
            -
                end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                def import(card)
         
     | 
| 
       18 
     | 
    
         
            -
                  card.attrs.keys.each do |attr|
         
     | 
| 
       19 
     | 
    
         
            -
                    instance_variable_set(:"@#{attr}", card.send(attr))
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def all
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @all || self.all!
         
     | 
| 
       20 
8 
     | 
    
         
             
                  end
         
     | 
| 
       21 
     | 
    
         
            -
                end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                def import_from_issue(repository, issue)
         
     | 
| 
       24 
     | 
    
         
            -
                  @idBoard = Trellohub::Board.id
         
     | 
| 
       25 
     | 
    
         
            -
                  @repository = repository
         
     | 
| 
       26 
     | 
    
         
            -
                  @issue = issue.dup
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                  build_key
         
     | 
| 
       29 
     | 
    
         
            -
                  build_name
         
     | 
| 
       30 
     | 
    
         
            -
                  build_desc
         
     | 
| 
       31 
     | 
    
         
            -
                  build_milestone
         
     | 
| 
       32 
9 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                   
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                def build_key
         
     | 
| 
       38 
     | 
    
         
            -
                  @key = "#{repository_name}##{@issue.number}"
         
     | 
| 
       39 
     | 
    
         
            -
                end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                def build_name
         
     | 
| 
       42 
     | 
    
         
            -
                  @name = "#{repository_name}##{@issue.number} #{@issue.title}"
         
     | 
| 
       43 
     | 
    
         
            -
                end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                def build_desc
         
     | 
| 
       46 
     | 
    
         
            -
                  @desc = "#{Octokit.web_endpoint}#{repo}/issues/#{@issue.number}"
         
     | 
| 
       47 
     | 
    
         
            -
                end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                def build_milestone
         
     | 
| 
       50 
     | 
    
         
            -
                  return unless @issue.milestone
         
     | 
| 
       51 
     | 
    
         
            -
                  @milestone = @issue.milestone.title
         
     | 
| 
       52 
     | 
    
         
            -
                end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                def assign_members
         
     | 
| 
       55 
     | 
    
         
            -
                  return unless @issue.assignee
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                  member = Trellohub::Member.find_by_github_user(@issue.assignee.login)
         
     | 
| 
       58 
     | 
    
         
            -
                  unless member.nil?
         
     | 
| 
       59 
     | 
    
         
            -
                    @idMembers = [member.id]
         
     | 
| 
       60 
     | 
    
         
            -
                    @members = [member.username]
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def all!
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @all = Trell.cards(Trellohub::Board.id, filter: 'all')
         
     | 
| 
       61 
12 
     | 
    
         
             
                  end
         
     | 
| 
       62 
     | 
    
         
            -
                end
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                def assign_list
         
     | 
| 
       65 
     | 
    
         
            -
                  labels = @issue.labels.map(&:name).uniq
         
     | 
| 
       66 
     | 
    
         
            -
                  list = Trellohub.list_by(labels: labels)
         
     | 
| 
       67 
     | 
    
         
            -
                  return unless list
         
     | 
| 
       68 
     | 
    
         
            -
                  @idList = list.id
         
     | 
| 
       69 
     | 
    
         
            -
                  @list_name = list.name
         
     | 
| 
       70 
     | 
    
         
            -
                end
         
     | 
| 
       71 
13 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                def save_to_github
         
     | 
| 
       76 
     | 
    
         
            -
                end
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                def export
         
     | 
| 
       79 
     | 
    
         
            -
                  Hash[self.class.valid_attributes.map { |key|
         
     | 
| 
       80 
     | 
    
         
            -
                    [key, instance_variable_get(:"@#{key}")]
         
     | 
| 
       81 
     | 
    
         
            -
                  }]
         
     | 
| 
       82 
     | 
    
         
            -
                end
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                def to_hash
         
     | 
| 
       85 
     | 
    
         
            -
                  Hash[self.class.all_attributes.map { |key|
         
     | 
| 
       86 
     | 
    
         
            -
                    [key, instance_variable_get(:"@#{key}")]
         
     | 
| 
       87 
     | 
    
         
            -
                  }]
         
     | 
| 
      
 14 
     | 
    
         
            +
                  def all_clear
         
     | 
| 
      
 15 
     | 
    
         
            +
                    self.all.each { |card| Trell.delete_card(card.id) }
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
       88 
17 
     | 
    
         
             
                end
         
     | 
| 
       89 
18 
     | 
    
         
             
              end
         
     | 
| 
       90 
19 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,39 +1,52 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'yaml'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'trellohub/core_ext/hash'
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
1 
     | 
    
         
             
            module Trellohub
         
     | 
| 
       5 
2 
     | 
    
         
             
              module Configurable
         
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def keys
         
     | 
| 
      
 5 
     | 
    
         
            +
                    %i(
         
     | 
| 
      
 6 
     | 
    
         
            +
                      config_file
         
     | 
| 
      
 7 
     | 
    
         
            +
                      board_id
         
     | 
| 
      
 8 
     | 
    
         
            +
                      repositories
         
     | 
| 
      
 9 
     | 
    
         
            +
                      lists
         
     | 
| 
      
 10 
     | 
    
         
            +
                      options
         
     | 
| 
      
 11 
     | 
    
         
            +
                      trello_application_key
         
     | 
| 
      
 12 
     | 
    
         
            +
                      trello_application_token
         
     | 
| 
      
 13 
     | 
    
         
            +
                      github_access_token
         
     | 
| 
      
 14 
     | 
    
         
            +
                      github_api_endpoint
         
     | 
| 
      
 15 
     | 
    
         
            +
                      github_web_endpoint
         
     | 
| 
      
 16 
     | 
    
         
            +
                      dry_run
         
     | 
| 
      
 17 
     | 
    
         
            +
                      debug
         
     | 
| 
      
 18 
     | 
    
         
            +
                    )
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def overrideable_keys
         
     | 
| 
      
 22 
     | 
    
         
            +
                    %i(
         
     | 
| 
      
 23 
     | 
    
         
            +
                      board_id
         
     | 
| 
      
 24 
     | 
    
         
            +
                      trello_application_key
         
     | 
| 
      
 25 
     | 
    
         
            +
                      trello_application_token
         
     | 
| 
      
 26 
     | 
    
         
            +
                      github_access_token
         
     | 
| 
      
 27 
     | 
    
         
            +
                      github_api_endpoint
         
     | 
| 
      
 28 
     | 
    
         
            +
                      github_web_endpoint
         
     | 
| 
      
 29 
     | 
    
         
            +
                      dry_run
         
     | 
| 
      
 30 
     | 
    
         
            +
                      debug
         
     | 
| 
      
 31 
     | 
    
         
            +
                    )
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                attr_accessor(*self.keys)
         
     | 
| 
       21 
36 
     | 
    
         | 
| 
       22 
37 
     | 
    
         
             
                def configure
         
     | 
| 
       23 
38 
     | 
    
         
             
                  yield self
         
     | 
| 
       24 
39 
     | 
    
         
             
                end
         
     | 
| 
       25 
40 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                def  
     | 
| 
      
 41 
     | 
    
         
            +
                def default!
         
     | 
| 
       27 
42 
     | 
    
         
             
                  @config_file              = ENV['CONFIG_FILE']
         
     | 
| 
       28 
     | 
    
         
            -
                  @board_id                 = ENV['BOARD_ID']
         
     | 
| 
       29 
43 
     | 
    
         
             
                  @repositories             = []
         
     | 
| 
       30 
     | 
    
         
            -
                  @milestones               = []
         
     | 
| 
       31 
44 
     | 
    
         
             
                  @lists                    = []
         
     | 
| 
       32 
     | 
    
         
            -
                  @ 
     | 
| 
       33 
     | 
    
         
            -
                  @trello_application_token = ENV['TRELLO_APPLICATION_TOKEN']
         
     | 
| 
       34 
     | 
    
         
            -
                  @github_access_token      = ENV['GITHUB_ACCESS_TOKEN']
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @options                  = { default_assignee: true, default_member: true }
         
     | 
| 
       35 
46 
     | 
    
         
             
                  @github_api_endpoint      = Octokit.api_endpoint
         
     | 
| 
       36 
47 
     | 
    
         
             
                  @github_web_endpoint      = Octokit.web_endpoint
         
     | 
| 
      
 48 
     | 
    
         
            +
                  @dry_run                  = false
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @debug                    = true
         
     | 
| 
       37 
50 
     | 
    
         
             
                end
         
     | 
| 
       38 
51 
     | 
    
         | 
| 
       39 
52 
     | 
    
         
             
                def load!(config_file = nil)
         
     | 
| 
         @@ -43,34 +56,44 @@ module Trellohub 
     | 
|
| 
       43 
56 
     | 
    
         
             
                    symbolize_keys.
         
     | 
| 
       44 
57 
     | 
    
         
             
                    slice(*Trellohub::Configurable.keys).
         
     | 
| 
       45 
58 
     | 
    
         
             
                    each do |key, value|
         
     | 
| 
       46 
     | 
    
         
            -
                       
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
      
 59 
     | 
    
         
            +
                      case key
         
     | 
| 
      
 60 
     | 
    
         
            +
                      when :repositories
         
     | 
| 
      
 61 
     | 
    
         
            +
                        value = value.map { |v| Trellohub::Repository.new(v) }
         
     | 
| 
      
 62 
     | 
    
         
            +
                      when :lists
         
     | 
| 
      
 63 
     | 
    
         
            +
                        value = value.map { |v| Trellohub::List.new(v) }
         
     | 
| 
       48 
64 
     | 
    
         
             
                      end
         
     | 
| 
       49 
65 
     | 
    
         
             
                      instance_variable_set(:"@#{key}", value)
         
     | 
| 
       50 
66 
     | 
    
         
             
                  end
         
     | 
| 
       51 
67 
     | 
    
         
             
                end
         
     | 
| 
       52 
68 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
                def  
     | 
| 
      
 69 
     | 
    
         
            +
                def override!
         
     | 
| 
      
 70 
     | 
    
         
            +
                  Trellohub::Configurable.overrideable_keys.each do |key|
         
     | 
| 
      
 71 
     | 
    
         
            +
                    env_name = key.to_s.upcase
         
     | 
| 
      
 72 
     | 
    
         
            +
                    instance_variable_set(:"@#{key}", ENV[env_name]) if ENV[env_name]
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                def init!
         
     | 
| 
       54 
77 
     | 
    
         
             
                  Trell.configure do |c|
         
     | 
| 
       55 
78 
     | 
    
         
             
                    c.application_key = @trello_application_key
         
     | 
| 
       56 
79 
     | 
    
         
             
                    c.application_token = @trello_application_token
         
     | 
| 
       57 
80 
     | 
    
         
             
                  end
         
     | 
| 
       58 
     | 
    
         
            -
                end
         
     | 
| 
       59 
81 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                def init_octokit
         
     | 
| 
       61 
82 
     | 
    
         
             
                  Octokit.configure do |c|
         
     | 
| 
       62 
83 
     | 
    
         
             
                    c.access_token = @github_access_token
         
     | 
| 
       63 
84 
     | 
    
         
             
                    c.api_endpoint = @github_api_endpoint
         
     | 
| 
       64 
85 
     | 
    
         
             
                    c.web_endpoint = @github_web_endpoint
         
     | 
| 
       65 
86 
     | 
    
         
             
                    c.auto_paginate = true
         
     | 
| 
       66 
87 
     | 
    
         
             
                  end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                  self.dry_run = true if @dry_run
         
     | 
| 
       67 
90 
     | 
    
         
             
                end
         
     | 
| 
       68 
91 
     | 
    
         | 
| 
       69 
92 
     | 
    
         
             
                def setup(config_file = nil)
         
     | 
| 
       70 
     | 
    
         
            -
                   
     | 
| 
      
 93 
     | 
    
         
            +
                  default!
         
     | 
| 
       71 
94 
     | 
    
         
             
                  load!(config_file)
         
     | 
| 
       72 
     | 
    
         
            -
                   
     | 
| 
       73 
     | 
    
         
            -
                   
     | 
| 
      
 95 
     | 
    
         
            +
                  override!
         
     | 
| 
      
 96 
     | 
    
         
            +
                  init!
         
     | 
| 
       74 
97 
     | 
    
         
             
                  self
         
     | 
| 
       75 
98 
     | 
    
         
             
                end
         
     | 
| 
       76 
99 
     | 
    
         | 
| 
         @@ -111,6 +134,23 @@ module Trellohub 
     | 
|
| 
       111 
134 
     | 
    
         
             
                  @lists.map(&:issue_label).compact
         
     | 
| 
       112 
135 
     | 
    
         
             
                end
         
     | 
| 
       113 
136 
     | 
    
         | 
| 
      
 137 
     | 
    
         
            +
                def repository_by(full_name: nil, milestone: nil)
         
     | 
| 
      
 138 
     | 
    
         
            +
                  case
         
     | 
| 
      
 139 
     | 
    
         
            +
                  when full_name
         
     | 
| 
      
 140 
     | 
    
         
            +
                    @repositories.find { |repo| repo.full_name == full_name }
         
     | 
| 
      
 141 
     | 
    
         
            +
                  when milestone
         
     | 
| 
      
 142 
     | 
    
         
            +
                    @repositories.find { |repo| repo.milestone == milestone }
         
     | 
| 
      
 143 
     | 
    
         
            +
                  end
         
     | 
| 
      
 144 
     | 
    
         
            +
                end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                def repository_full_names
         
     | 
| 
      
 147 
     | 
    
         
            +
                  @repositories.map(&:full_names).compact
         
     | 
| 
      
 148 
     | 
    
         
            +
                end
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                def repository_milestones
         
     | 
| 
      
 151 
     | 
    
         
            +
                  @repositories.map(&:milestone).uniq
         
     | 
| 
      
 152 
     | 
    
         
            +
                end
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
       114 
154 
     | 
    
         
             
                def github_api_endpoint
         
     | 
| 
       115 
155 
     | 
    
         
             
                  File.join(@github_api_endpoint, '')
         
     | 
| 
       116 
156 
     | 
    
         
             
                end
         
     | 
| 
         @@ -119,10 +159,9 @@ module Trellohub 
     | 
|
| 
       119 
159 
     | 
    
         
             
                  File.join(@github_web_endpoint, '')
         
     | 
| 
       120 
160 
     | 
    
         
             
                end
         
     | 
| 
       121 
161 
     | 
    
         | 
| 
       122 
     | 
    
         
            -
                 
     | 
| 
       123 
     | 
    
         
            -
                   
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
                  end
         
     | 
| 
      
 162 
     | 
    
         
            +
                def dry_run=(bool)
         
     | 
| 
      
 163 
     | 
    
         
            +
                  @dry_run = bool
         
     | 
| 
      
 164 
     | 
    
         
            +
                  Mocking.send(@dry_run ? :start : :stop)
         
     | 
| 
       126 
165 
     | 
    
         
             
                end
         
     | 
| 
       127 
166 
     | 
    
         
             
              end
         
     | 
| 
       128 
167 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,6 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Hash
         
     | 
| 
       2 
2 
     | 
    
         
             
              def slice(*keys)
         
     | 
| 
       3 
     | 
    
         
            -
                keys.each_with_object(self.class.new) { |k, hash| 
     | 
| 
      
 3 
     | 
    
         
            +
                keys.each_with_object(self.class.new) { |k, hash|
         
     | 
| 
      
 4 
     | 
    
         
            +
                  hash[k] = self[k] if has_key?(k)
         
     | 
| 
      
 5 
     | 
    
         
            +
                }
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def extract(*keys)
         
     | 
| 
      
 9 
     | 
    
         
            +
                self.each_with_object(self.class.new) { |(k, v), hash|
         
     | 
| 
      
 10 
     | 
    
         
            +
                  hash[k] = v unless keys.include?(k)
         
     | 
| 
      
 11 
     | 
    
         
            +
                }
         
     | 
| 
       4 
12 
     | 
    
         
             
              end
         
     | 
| 
       5 
13 
     | 
    
         | 
| 
       6 
14 
     | 
    
         
             
              def symbolize_keys
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rainbow/ext/string'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class String
         
     | 
| 
      
 4 
     | 
    
         
            +
              def width
         
     | 
| 
      
 5 
     | 
    
         
            +
                self.no_coloring.each_char.map { |one_letter|
         
     | 
| 
      
 6 
     | 
    
         
            +
                  one_letter.ascii_only? ? 1 : 2
         
     | 
| 
      
 7 
     | 
    
         
            +
                }.inject(:+) || 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def no_coloring
         
     | 
| 
      
 11 
     | 
    
         
            +
                self.gsub(/\e\[\d?\d?;?\d\d?m/, '').gsub(/\e\[0m/, '')
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def constantize
         
     | 
| 
      
 15 
     | 
    
         
            +
                Object.const_get(self)
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def ljust_with_multibyte(length, padstr = ' ')
         
     | 
| 
      
 19 
     | 
    
         
            +
                length > self.width ? "#{self}#{padstr * (length - self.width)}" : self
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
              alias_method :ljust, :ljust_with_multibyte
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     |