layer-ruby 0.3.0 → 0.4.1
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/README.md +18 -7
- data/lib/layer.rb +1 -0
- data/lib/layer/client.rb +4 -2
- data/lib/layer/conversation.rb +1 -0
- data/lib/layer/operations.rb +1 -0
- data/lib/layer/operations/find.rb +1 -1
- data/lib/layer/operations/patch.rb +23 -0
- data/lib/layer/patch.rb +62 -0
- data/lib/layer/patch/array.rb +69 -0
- data/lib/layer/patch/base.rb +25 -0
- data/lib/layer/patch/hash.rb +55 -0
- data/lib/layer/resource.rb +3 -5
- data/lib/layer/version.rb +1 -1
- metadata +8 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6b2e92f9be129ac6265ff24ab73852387a9e438a
         | 
| 4 | 
            +
              data.tar.gz: 1f3911782934d15e49f0feeb3964357acd28873c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 57229aa42c27f78cef0f959c68d24299792cee2803142cfa304bab995a9c1268decd4b055abae6d8ed5c49ce014139de36129c9ba3c21d31a9d375a1266c0d46
         | 
| 7 | 
            +
              data.tar.gz: 9681349bdb101b4ec80219bcc69990454353b8c9b9f72c33896e9673f555c7f932a5128655fe773a2131f7df060775aedc61700999338d35b2e7985ded664203
         | 
    
        data/README.md
    CHANGED
    
    | @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
            [](https://travis-ci.org/benedikt/layer-ruby)
         | 
| 4 4 | 
             
            [](http://badge.fury.io/rb/layer-ruby)
         | 
| 5 5 |  | 
| 6 | 
            -
            Ruby bindings for the [Layer Platform API](https://developer.layer.com/docs/platform). | 
| 6 | 
            +
            Ruby bindings for the [Layer Platform API](https://developer.layer.com/docs/platform).
         | 
| 7 7 |  | 
| 8 8 | 
             
            ## Installation
         | 
| 9 9 |  | 
| @@ -23,7 +23,7 @@ Or install it yourself as: | |
| 23 23 |  | 
| 24 24 | 
             
            ## Usage
         | 
| 25 25 |  | 
| 26 | 
            -
            Please refer to the [Layer Platform API documentation](https://developer.layer.com/docs/platform) for details about the required payloads and responses. | 
| 26 | 
            +
            Please refer to the [Layer Platform API documentation](https://developer.layer.com/docs/platform) for details about the required payloads and responses.
         | 
| 27 27 |  | 
| 28 28 | 
             
            ### Configuration
         | 
| 29 29 |  | 
| @@ -50,13 +50,25 @@ To retrieve a existing conversation, just use `Conversation.find` passing it the | |
| 50 50 | 
             
            conversation = Layer::Conversation.find('CONVERSATION_ID_HERE')
         | 
| 51 51 | 
             
            ```
         | 
| 52 52 |  | 
| 53 | 
            +
            ### Updating Conversations
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            To update a conversation, just update the conversation's attributes and call `save`.
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            ```ruby
         | 
| 58 | 
            +
            conversation = Layer::Conversation.find('CONVERSATION_ID_HERE')
         | 
| 59 | 
            +
            conversation.participants << 3
         | 
| 60 | 
            +
            conversation.metadata[:foo] = 'bar'
         | 
| 61 | 
            +
            conversation.save
         | 
| 62 | 
            +
            ```
         | 
| 63 | 
            +
             | 
| 64 | 
            +
             | 
| 53 65 | 
             
            ### Sending Messages
         | 
| 54 66 |  | 
| 55 67 | 
             
            In order to send messages, you first have to load (or create) a Conversation. Afterwards you can send a message to the conversation like this:
         | 
| 56 68 |  | 
| 57 69 | 
             
            ```ruby
         | 
| 58 70 | 
             
            conversation = Layer::Conversation.find('CONVERSATION_ID_HERE')
         | 
| 59 | 
            -
            conversation.messages.create({ sender: { name: 'Server' }, parts: [{ body: 'Hello!', mime_type: 'text/plain' }])
         | 
| 71 | 
            +
            conversation.messages.create({ sender: { name: 'Server' }, parts: [{ body: 'Hello!', mime_type: 'text/plain' }]})
         | 
| 60 72 | 
             
            ```
         | 
| 61 73 |  | 
| 62 74 | 
             
            ### Sending Announcements
         | 
| @@ -64,7 +76,7 @@ conversation.messages.create({ sender: { name: 'Server' }, parts: [{ body: 'Hell | |
| 64 76 | 
             
            You can send a announcements like this:
         | 
| 65 77 |  | 
| 66 78 | 
             
            ```ruby
         | 
| 67 | 
            -
            Layer::Announcement.create({ recipients: 'everyone', sender: { name: 'Server' }, parts: [{ body: 'Hello!', mime_type: 'text/plain' }])
         | 
| 79 | 
            +
            Layer::Announcement.create({ recipients: 'everyone', sender: { name: 'Server' }, parts: [{ body: 'Hello!', mime_type: 'text/plain' }]})
         | 
| 68 80 | 
             
            ```
         | 
| 69 81 |  | 
| 70 82 | 
             
            ### Managing block lists
         | 
| @@ -87,7 +99,7 @@ It's possible to create a new instance of `Layer::Client` and passing both the a | |
| 87 99 | 
             
            client = Layer::Client.new('YOUR_APP_ID_HERE', 'YOUR_PLATFORM_TOKEN_HERE')
         | 
| 88 100 | 
             
            ```
         | 
| 89 101 |  | 
| 90 | 
            -
            The client will not use any global configuration. You can pass the client as a second parameter to any operations (`create`, `find`) described above. | 
| 102 | 
            +
            The client will not use any global configuration. You can pass the client as a second parameter to any operations (`create`, `find`) described above.
         | 
| 91 103 |  | 
| 92 104 | 
             
            ## Development
         | 
| 93 105 |  | 
| @@ -106,5 +118,4 @@ The gem is available as open source under the terms of the [MIT License](http:// | |
| 106 118 |  | 
| 107 119 | 
             
            ## Related Work
         | 
| 108 120 |  | 
| 109 | 
            -
            Check out the [layer-identity_token](https://github.com/dreimannzelt/layer-identity_token) gem to generate authentication tokens for the Layer SDK. | 
| 110 | 
            -
             | 
| 121 | 
            +
            Check out the [layer-identity_token](https://github.com/dreimannzelt/layer-identity_token) gem to generate authentication tokens for the Layer SDK.
         | 
    
        data/lib/layer.rb
    CHANGED
    
    
    
        data/lib/layer/client.rb
    CHANGED
    
    | @@ -38,8 +38,10 @@ module Layer | |
| 38 38 | 
             
                  request(:post, *args)
         | 
| 39 39 | 
             
                end
         | 
| 40 40 |  | 
| 41 | 
            -
                def patch( | 
| 42 | 
            -
                   | 
| 41 | 
            +
                def patch(url, payload = {}, headers = {})
         | 
| 42 | 
            +
                  headers['Content-Type'] = 'application/vnd.layer-patch+json'
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  request(:patch, url, payload, headers)
         | 
| 43 45 | 
             
                end
         | 
| 44 46 |  | 
| 45 47 | 
             
                def put(*args)
         | 
    
        data/lib/layer/conversation.rb
    CHANGED
    
    
    
        data/lib/layer/operations.rb
    CHANGED
    
    
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            module Layer
         | 
| 2 | 
            +
              module Operations
         | 
| 3 | 
            +
                module Patch
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  def save
         | 
| 6 | 
            +
                    client.patch(url, patch.operations)
         | 
| 7 | 
            +
                    patch.reset
         | 
| 8 | 
            +
                    true
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def attributes=(attributes)
         | 
| 12 | 
            +
                    @attributes = Layer::Patch::Hash.new(patch, attributes)
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                private
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def patch
         | 
| 18 | 
            +
                    @patch ||= Layer::Patch.new
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
    
        data/lib/layer/patch.rb
    ADDED
    
    | @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            require 'layer/patch/base'
         | 
| 2 | 
            +
            require 'layer/patch/array'
         | 
| 3 | 
            +
            require 'layer/patch/hash'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Layer
         | 
| 6 | 
            +
              class Patch
         | 
| 7 | 
            +
                def initialize(property = nil, parent = nil)
         | 
| 8 | 
            +
                  @property = property
         | 
| 9 | 
            +
                  @parent = parent
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def add(property = nil, value)
         | 
| 13 | 
            +
                  operation(:add, property, value: value)
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def add_index(property = nil, index, value)
         | 
| 17 | 
            +
                  operation(:add, property, index: index, value: value)
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def remove(property = nil, value)
         | 
| 21 | 
            +
                  operation(:remove, property, value: value)
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def remove_index(property = nil, index)
         | 
| 25 | 
            +
                  operation(:remove, property, index: index)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def set(property = nil, value)
         | 
| 29 | 
            +
                  operation(:set, property, value: value)
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def replace(property = nil, value)
         | 
| 33 | 
            +
                  operation(:replace, property, value: value)
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def delete(property)
         | 
| 37 | 
            +
                  operation(:delete, property)
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def nested(property)
         | 
| 41 | 
            +
                  self.class.new(property, self)
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                def operations
         | 
| 45 | 
            +
                  @operations ||= @parent ? @parent.operations : []
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                def reset
         | 
| 49 | 
            +
                  @parent ? parent.reset : @operations = []
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              private
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def operation(type, property = nil, options = {})
         | 
| 55 | 
            +
                  operations << options.merge(operation: type.to_s, property: expand_property(property))
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                def expand_property(property)
         | 
| 59 | 
            +
                  [@property, property].compact.join('.')
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
            end
         | 
| @@ -0,0 +1,69 @@ | |
| 1 | 
            +
            module Layer
         | 
| 2 | 
            +
              class Patch
         | 
| 3 | 
            +
                class Array < Base
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  def prepare_base(base)
         | 
| 6 | 
            +
                    base.each_with_index.map do |(value, index)|
         | 
| 7 | 
            +
                      wrap(index, value)
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def []=(index, value)
         | 
| 12 | 
            +
                    patch.add_index(index, value)
         | 
| 13 | 
            +
                    super
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def <<(value)
         | 
| 17 | 
            +
                    patch.add(value)
         | 
| 18 | 
            +
                    super
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                  alias :push :<<
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def unshift(value)
         | 
| 23 | 
            +
                    patch.add_index(0, value)
         | 
| 24 | 
            +
                    super
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def concat(values)
         | 
| 28 | 
            +
                    values.each { |value| patch.add(value) }
         | 
| 29 | 
            +
                    super
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def insert(offset, values)
         | 
| 33 | 
            +
                    values.each_with_index { |value, index| patch.add_index(offset + index, value) }
         | 
| 34 | 
            +
                    super
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def clear
         | 
| 38 | 
            +
                    patch.replace([])
         | 
| 39 | 
            +
                    super
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def delete_at(index)
         | 
| 43 | 
            +
                    patch.remove_index(index)
         | 
| 44 | 
            +
                    super
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  def delete(value)
         | 
| 48 | 
            +
                    patch.remove(value)
         | 
| 49 | 
            +
                    super
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  def pop
         | 
| 53 | 
            +
                    patch.remove_index(length)
         | 
| 54 | 
            +
                    super
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  def shift
         | 
| 58 | 
            +
                    patch.remove_index(0)
         | 
| 59 | 
            +
                    super
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  def replace(values)
         | 
| 63 | 
            +
                    patch.replace(values)
         | 
| 64 | 
            +
                    super
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module Layer
         | 
| 2 | 
            +
              class Patch
         | 
| 3 | 
            +
                class Base < SimpleDelegator
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  attr_reader :patch
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def initialize(patch, object)
         | 
| 8 | 
            +
                    @patch = patch
         | 
| 9 | 
            +
                    super(prepare_base(object))
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def wrap(property, object)
         | 
| 13 | 
            +
                    case object
         | 
| 14 | 
            +
                    when ::Array
         | 
| 15 | 
            +
                      Layer::Patch::Array.new(patch.nested(property), object)
         | 
| 16 | 
            +
                    when ::Hash
         | 
| 17 | 
            +
                      Layer::Patch::Hash.new(patch.nested(property), object)
         | 
| 18 | 
            +
                    else
         | 
| 19 | 
            +
                      object
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            module Layer
         | 
| 2 | 
            +
              class Patch
         | 
| 3 | 
            +
                class Hash < Base
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  def prepare_base(base)
         | 
| 6 | 
            +
                    base.each_pair do |key, value|
         | 
| 7 | 
            +
                      base[key] = wrap(key, value)
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def []=(key, value)
         | 
| 12 | 
            +
                    patch.set(key, value)
         | 
| 13 | 
            +
                    super
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                  alias :store :[]=
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def clear
         | 
| 18 | 
            +
                    patch.replace({})
         | 
| 19 | 
            +
                    super
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def delete(key)
         | 
| 23 | 
            +
                    patch.delete(key)
         | 
| 24 | 
            +
                    super
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def delete_if(&block)
         | 
| 28 | 
            +
                    super do |key, value|
         | 
| 29 | 
            +
                      result = yield(key, value)
         | 
| 30 | 
            +
                      delete(key) if result
         | 
| 31 | 
            +
                      result
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
                  alias :reject! :delete_if
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def shift
         | 
| 37 | 
            +
                    patch.delete(keys.first)
         | 
| 38 | 
            +
                    super
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  def replace(other_hash)
         | 
| 42 | 
            +
                    patch.replace(other_hash)
         | 
| 43 | 
            +
                    super
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def merge!(other_hash)
         | 
| 47 | 
            +
                    other_hash.each_pair do |key, value|
         | 
| 48 | 
            +
                      patch.set(key, value)
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
                    super
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
            end
         | 
    
        data/lib/layer/resource.rb
    CHANGED
    
    | @@ -21,11 +21,11 @@ module Layer | |
| 21 21 | 
             
                  end
         | 
| 22 22 | 
             
                end
         | 
| 23 23 |  | 
| 24 | 
            -
                 | 
| 24 | 
            +
                attr_accessor :client, :attributes
         | 
| 25 25 |  | 
| 26 26 | 
             
                def initialize(attributes = {}, client = self.class.client)
         | 
| 27 | 
            -
                   | 
| 28 | 
            -
                   | 
| 27 | 
            +
                  self.attributes = attributes
         | 
| 28 | 
            +
                  self.client = client
         | 
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| 31 31 | 
             
                def url
         | 
| @@ -42,8 +42,6 @@ module Layer | |
| 42 42 |  | 
| 43 43 | 
             
              private
         | 
| 44 44 |  | 
| 45 | 
            -
                attr_reader :attributes
         | 
| 46 | 
            -
             | 
| 47 45 | 
             
                def method_missing(method, *args, &block)
         | 
| 48 46 | 
             
                  if attributes.has_key?(method.to_s)
         | 
| 49 47 | 
             
                    attributes[method.to_s]
         | 
    
        data/lib/layer/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: layer-ruby
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.4.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Benedikt Deicke
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-07- | 
| 11 | 
            +
            date: 2015-07-29 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rest-client
         | 
| @@ -110,6 +110,11 @@ files: | |
| 110 110 | 
             
            - lib/layer/operations/delete.rb
         | 
| 111 111 | 
             
            - lib/layer/operations/find.rb
         | 
| 112 112 | 
             
            - lib/layer/operations/list.rb
         | 
| 113 | 
            +
            - lib/layer/operations/patch.rb
         | 
| 114 | 
            +
            - lib/layer/patch.rb
         | 
| 115 | 
            +
            - lib/layer/patch/array.rb
         | 
| 116 | 
            +
            - lib/layer/patch/base.rb
         | 
| 117 | 
            +
            - lib/layer/patch/hash.rb
         | 
| 113 118 | 
             
            - lib/layer/relation_proxy.rb
         | 
| 114 119 | 
             
            - lib/layer/resource.rb
         | 
| 115 120 | 
             
            - lib/layer/ruby.rb
         | 
| @@ -140,3 +145,4 @@ signing_key: | |
| 140 145 | 
             
            specification_version: 4
         | 
| 141 146 | 
             
            summary: Ruby bindings for the Layer Platform API
         | 
| 142 147 | 
             
            test_files: []
         | 
| 148 | 
            +
            has_rdoc: 
         |