Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

unreal_reaper

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

unreal_reaper

  • 0.1.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

UnrealReaper

A gem help you collect and package your code into a class, Let's use them easily.

Features

Usage some top methods, the method should know current model

User.ur.my_report.state # It will return some state of the User model
Topic.ur.my_report.state # It will return some state of the Topic model

Call some methods of a/many record(s)

user = User.new # <User#xxx id: nil, access_token: nil>
user.ur.token.generate(:access_token) # the generate will know the user record, and write a token to user.access_token

book = Book.first
user.ur.payment.buy(book) # I can put the book to user library and build a bill for user.

Make a easy way to change record pass form

user = User.first
# slim: input type=text name=book[payment][book_id] value=book_id
user.update(ur: {payment: {book_id: book_id}} # It will do the same feature as user.ur.payment.buy(book)

Installation

Add this line to your application's Gemfile:

gem 'unreal_reaper'

And then execute:

$ bundle

Or install it yourself as:

$ gem install unreal_reaper

Usage

Getting Started

New a package

class Publisher
  class Top
    def initialize(model)
      model.class_eval do
        scope :published, -> { where("published_at >= ?", Time.now) }
      end
    end

    def state
      puts {published: model.published.count, total: model.count}
    end
  end

  def publish!(time = Time.now)
    update(published_at: Time.now)
  end

  def published_at=(time_str)
    publish!(Time.zone.parse(time_str))
  end

  UnrealReaper.load(Publisher)
end

Install it into a class

class User
  include UnrealReaper

  ur_package :publisher
end

Usage the package

User.published # defined in initialize method
User.ur.publisher.state
u = User.create
u.ur.publisher.publish!
u.update(ur: {publisher: {published_at: "2018-03-17"}})

Package load

  • top_cls: We can call its methods by User.ur.{package_name}.{method}, its initialize will call when call ur_package package_name
  • helper_cls: We can call its methods by User.new.ur.{package_name}.{method}
  • writer_cls: We can call its methods by User.new.ur = {package_name => {attr_method => 'value'}} or User.new.ur.{package_name} = {attr_method => 'value'}
# Basic load
UnrealReaper.load(:publisher, top_cls: Publisher::Top, helper_cls: Publisher::Helper, attr_cls: Publisher::Writer)

# Auto found classes
UnrealReaper.load(Publisher)
# equal UnrealReaper.load(Publisher.name.underscore, top_cls: Publisher::Top, helper_cls: Publisher, attr_cls: Publisher)
# top_cls: if not found Publisher::Top, it will be nil
# helper_cls: if not found Publisher::Helper, it will be Publisher
# attr_cls: if not found Publisher::Writer, it will be Publisher

# Other
UnrealReaper.load(:other_name, top_cls: Publisher::Top) # it has no helper & writer classes 
UnrealReaper.load(Publisher, top_cls: Publisher) # the top class is itself, and automaticlly find helper & writer classes

Package initalize and install

class Token
  class Top
    def initialize(model, opts = {length: 32})
      # The model and opts will be store as model & options
      # you also can get them in the arguments
    end
  end

  UnrealReaper.load(self)
end
class User
  ur_package :token, length: 62 # the second argument is the opts of initialize
end

Object Structure

Manager, instance_manager, package_objs all is lazy-load objects.

   Class   =>   .manager   =>   .top_objs(package1, package2, package3)
     ||
     \/
  instance(Class) =>  .instance_manager  => .helper_objs(package1, package2, package3)
                                        ||
                                        \/
                                        .writer_objs=(package1, package2, package3)

Development

  • bin/console run a console
  • rspec run a testing

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/xiejiangzhi/unreal_reaper.

License

The gem is available as open source under the terms of the MIT License.

FAQs

Package last updated on 28 Mar 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc